mirror of
https://github.com/PanJiaChen/vue-element-admin.git
synced 2025-08-13 07:04:21 +08:00
203 lines
6.6 KiB
JavaScript
203 lines
6.6 KiB
JavaScript
import { getBrowser as getBrowserMetadata } from '@/api/ADempiere/dictionary'
|
|
import { showMessage } from '@/utils/ADempiere/notification'
|
|
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
|
|
import { generateField } from '@/utils/ADempiere/dictionaryUtils'
|
|
import router from '@/router'
|
|
import language from '@/lang'
|
|
|
|
const browser = {
|
|
state: {
|
|
browser: []
|
|
},
|
|
mutations: {
|
|
addBrowser(state, payload) {
|
|
state.browser.push(payload)
|
|
},
|
|
dictionaryResetCacheBrowser(state) {
|
|
state.browser = []
|
|
},
|
|
changeBrowserAttribute(state, payload) {
|
|
let value = payload.attributeValue
|
|
if (payload.attributeNameControl) {
|
|
value = payload.browser[payload.attributeNameControl]
|
|
}
|
|
payload.browser[payload.attributeName] = value
|
|
}
|
|
},
|
|
actions: {
|
|
getBrowserFromServer({ commit, dispatch }, {
|
|
containerUuid,
|
|
routeToDelete
|
|
}) {
|
|
return new Promise(resolve => {
|
|
getBrowserMetadata(containerUuid)
|
|
.then(browserResponse => {
|
|
const panelType = 'browser'
|
|
const additionalAttributes = {
|
|
containerUuid,
|
|
panelType
|
|
}
|
|
const {
|
|
query,
|
|
whereClause,
|
|
process
|
|
} = browserResponse
|
|
|
|
// Convert from gRPC
|
|
const fieldsRangeList = []
|
|
let isShowedCriteria = false
|
|
let awaitForValues = 0
|
|
let fieldsList = browserResponse.fieldsList.map((fieldItem, index) => {
|
|
const someAttributes = {
|
|
...additionalAttributes,
|
|
fieldListIndex: index
|
|
}
|
|
const field = generateField({
|
|
fieldToGenerate: fieldItem,
|
|
moreAttributes: someAttributes,
|
|
isSOTrxMenu: routeToDelete.meta.isSOTrx
|
|
})
|
|
// Add new field if is range number
|
|
if (field.isRange && field.componentPath === 'FieldNumber') {
|
|
const fieldRange = generateField({
|
|
fieldToGenerate: fieldItem,
|
|
moreAttributes: someAttributes,
|
|
typeRange: true
|
|
})
|
|
if (!isEmptyValue(fieldRange.value)) {
|
|
fieldRange.isShowedFromUser = true
|
|
}
|
|
fieldsRangeList.push(fieldRange)
|
|
}
|
|
|
|
// Only isQueryCriteria fields with values, displayed in main panel
|
|
if (field.isQueryCriteria) {
|
|
if (field.isSQLValue) {
|
|
isShowedCriteria = true
|
|
field.isShowedFromUser = true
|
|
awaitForValues++
|
|
}
|
|
if (query.includes(`@${field.columnName}@`) ||
|
|
query.includes(`@${field.columnName}_To@`) ||
|
|
whereClause.includes(`@${field.columnName}@`) ||
|
|
whereClause.includes(`@${field.columnName}_To@`)) {
|
|
field.isMandatory = true
|
|
field.isMandatoryFromLogic = true
|
|
field.isShowedFromUser = true
|
|
}
|
|
|
|
if (isEmptyValue(field.value)) {
|
|
// isMandatory params to showed search criteria
|
|
if (field.isMandatory || field.isMandatoryFromLogic) {
|
|
isShowedCriteria = true
|
|
}
|
|
} else {
|
|
// with value
|
|
field.isShowedFromUser = true
|
|
}
|
|
}
|
|
|
|
return field
|
|
})
|
|
fieldsList = fieldsList.concat(fieldsRangeList)
|
|
|
|
// Get dependent fields
|
|
fieldsList
|
|
.forEach((field, index, list) => {
|
|
if (field.isActive && field.parentFieldsList.length) {
|
|
field.parentFieldsList.forEach(parentColumnName => {
|
|
const parentField = list.find(parentField => {
|
|
return parentField.columnName === parentColumnName && parentColumnName !== field.columnName
|
|
})
|
|
if (parentField) {
|
|
parentField.dependentFieldsList.push(field.columnName)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
// Panel for save on store
|
|
const newBrowser = {
|
|
...browserResponse,
|
|
containerUuid,
|
|
fieldList: fieldsList,
|
|
panelType,
|
|
// app attributes
|
|
awaitForValues, // control to values
|
|
awaitForValuesToQuery: awaitForValues, // get values from request search
|
|
isShowedCriteria,
|
|
isShowedTotals: true
|
|
}
|
|
|
|
commit('addBrowser', newBrowser)
|
|
dispatch('addPanel', newBrowser)
|
|
|
|
resolve(newBrowser)
|
|
|
|
// Convert from gRPC process list
|
|
const actions = []
|
|
if (process) {
|
|
actions.push({
|
|
type: 'process',
|
|
panelType: 'process',
|
|
uuid: process.uuid,
|
|
name: process.name,
|
|
description: process.description,
|
|
isReport: process.isReport,
|
|
isDirectPrint: process.isDirectPrint,
|
|
containerUuidAssociated: containerUuid,
|
|
panelTypeAssociated: panelType
|
|
})
|
|
// TODO: No list of parameters
|
|
// // add process associated in vuex store
|
|
// dispatch('addProcessAssociated', {
|
|
// processToGenerate: process,
|
|
// containerUuidAssociated: containerUuid
|
|
// })
|
|
}
|
|
// Add process menu
|
|
dispatch('setContextMenu', {
|
|
containerUuid,
|
|
actions
|
|
})
|
|
})
|
|
.catch(error => {
|
|
router.push({ path: '/dashboard' })
|
|
dispatch('tagsView/delView', routeToDelete)
|
|
showMessage({
|
|
message: language.t('login.unexpectedError'),
|
|
type: 'error'
|
|
})
|
|
console.warn(`Dictionary Browser - Error ${error.code}: ${error.message}.`)
|
|
})
|
|
})
|
|
},
|
|
changeBrowserAttribute({ commit, getters }, {
|
|
containerUuid,
|
|
browser,
|
|
attributeName,
|
|
attributeNameControl,
|
|
attributeValue
|
|
}) {
|
|
if (isEmptyValue(browser)) {
|
|
browser = getters.getBrowser(containerUuid)
|
|
}
|
|
commit('changeBrowserAttribute', {
|
|
browser,
|
|
attributeName,
|
|
attributeValue,
|
|
attributeNameControl
|
|
})
|
|
}
|
|
},
|
|
getters: {
|
|
getBrowser: (state) => (browserUuid) => {
|
|
return state.browser.find(
|
|
item => item.uuid === browserUuid
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default browser
|