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
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
|