1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-12 14:24:34 +08:00

169 lines
5.8 KiB
JavaScript

import { getBrowser as getBrowserMetadata } from '@/api/ADempiere/dictionary'
import { isEmptyValue, showMessage } from '@/utils/ADempiere'
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 = []
},
changeShowedCriteriaBrowser(state, payload) {
payload.browser.isShowedCriteria = payload.isShowedCriteria
}
},
actions: {
getBrowserFromServer({ commit, dispatch }, {
containerUuid,
routeToDelete
}) {
return new Promise(resolve => {
getBrowserMetadata(containerUuid)
.then(browserResponse => {
const panelType = 'browser'
const additionalAttributes = {
containerUuid: browserResponse.uuid,
panelType: panelType
}
const {
query,
whereClause,
process
} = browserResponse
// Convert from gRPC
const fieldsRangeList = []
let isMandatoryParams = false
let fieldsList = browserResponse.fieldsList.map((fieldItem, index) => {
const someAttributes = {
...additionalAttributes,
fieldListIndex: index
}
const field = generateField(fieldItem, someAttributes)
// Add new field if is range number
if (field.isRange && field.componentPath === 'FieldNumber') {
const fieldRange = generateField(fieldItem, someAttributes, true)
if (!isEmptyValue(fieldRange.value)) {
fieldRange.isShowedFromUser = true
}
fieldsRangeList.push(fieldRange)
}
if ((query.includes(`@${field.columnName}@`) ||
query.includes(`@${field.columnName}_To@`) ||
whereClause.includes(`@${field.columnName}@`) ||
whereClause.includes(`@${field.columnName}_To@`)) &&
field.isQueryCriteria) {
field.isMandatory = true
field.isMandatoryFromLogic = true
field.isShowedFromUser = true
}
// Only isQueryCriteria fields, displayed in main panel
if (field.isQueryCriteria && !isEmptyValue(field.value) && String(field.value) !== '-1') {
field.isShowedFromUser = true
}
// TODO: Evaluate if not change when iterate
isMandatoryParams = field.isMandatory
return field
})
fieldsList = fieldsList.concat(fieldsRangeList)
// Get dependent fields
fieldsList
.filter(field => field.parentFieldsList && field.isActive)
.forEach((field, index, list) => {
field.parentFieldsList.forEach(parentColumnName => {
var 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: browserResponse.uuid,
fieldList: fieldsList,
panelType: panelType,
// app attributes
isMandatoryParams: isMandatoryParams,
isShowedCriteria: Boolean(fieldsList.length && isMandatoryParams),
isShowedTotals: true
}
// 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: newBrowser.uuid,
panelTypeAssociated: panelType
})
// TODO: No list of parameters
// // add process associated in vuex store
// dispatch('addProcessAssociated', {
// processToGenerate: process,
// containerUuidAssociated: newBrowser.uuid
// })
}
dispatch('addPanel', newBrowser)
commit('addBrowser', newBrowser)
// Add process menu
dispatch('setContextMenu', {
containerUuid: browserResponse.uuid,
relations: [],
actions: actions,
references: []
})
resolve(newBrowser)
})
.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}.`)
})
})
},
changeShowedCriteriaBrowser({ commit, getters }, {
containerUuid,
isShowedCriteria
}) {
commit('changeShowedCriteriaBrowser', {
browser: getters.getBrowser(containerUuid),
isShowedCriteria: isShowedCriteria
})
}
},
getters: {
getBrowser: (state) => (browserUuid) => {
return state.browser.find(
item => item.uuid === browserUuid
)
}
}
}
export default browser