mirror of
https://github.com/PanJiaChen/vue-element-admin.git
synced 2025-08-15 00:15:57 +08:00
173 lines
5.5 KiB
JavaScript
173 lines
5.5 KiB
JavaScript
import { requestBrowserSearch } from '@/api/ADempiere/browser'
|
|
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
|
|
import { parseContext } from '@/utils/ADempiere/contextUtils'
|
|
import { showMessage } from '@/utils/ADempiere/notification'
|
|
import { fieldIsDisplayed } from '@/utils/ADempiere/dictionaryUtils'
|
|
import language from '@/lang'
|
|
|
|
const browserControl = {
|
|
actions: {
|
|
browserActionPerformed({ dispatch, getters }, {
|
|
containerUuid,
|
|
field,
|
|
value
|
|
}) {
|
|
const fieldsEmpty = getters.getFieldsListEmptyMandatory({
|
|
containerUuid,
|
|
fieldsList: getters.getFieldsListFromPanel(containerUuid)
|
|
})
|
|
if (!isEmptyValue(fieldsEmpty)) {
|
|
showMessage({
|
|
message: language.t('notifications.mandatoryFieldMissing') + fieldsEmpty,
|
|
type: 'info'
|
|
})
|
|
return
|
|
}
|
|
|
|
// Validate if a field is called and visible
|
|
if (fieldIsDisplayed(field)) {
|
|
let isReadyForQuery = true
|
|
if (field.isSQLValue) {
|
|
const panel = getters.getPanel(containerUuid)
|
|
let awaitForValuesToQuery = panel.awaitForValuesToQuery
|
|
awaitForValuesToQuery--
|
|
dispatch('changeBrowserAttribute', {
|
|
containerUuid,
|
|
attributeName: 'awaitForValuesToQuery',
|
|
attributeValue: awaitForValuesToQuery
|
|
})
|
|
if (awaitForValuesToQuery === 0) {
|
|
if (panel.isShowedCriteria) {
|
|
dispatch('changeBrowserAttribute', {
|
|
containerUuid,
|
|
attributeName: 'isShowedCriteria',
|
|
attributeValue: false
|
|
})
|
|
}
|
|
} else if (awaitForValuesToQuery > 0) {
|
|
isReadyForQuery = false
|
|
}
|
|
}
|
|
if (isReadyForQuery && !field.dependentFieldsList.length) {
|
|
dispatch('getBrowserSearch', {
|
|
containerUuid,
|
|
isClearSelection: true
|
|
})
|
|
}
|
|
}
|
|
},
|
|
// Search with query criteria
|
|
getBrowserSearch({ dispatch, rootGetters }, {
|
|
containerUuid,
|
|
isClearSelection = false
|
|
}) {
|
|
showMessage({
|
|
title: language.t('notifications.loading'),
|
|
message: language.t('notifications.searching'),
|
|
type: 'info'
|
|
})
|
|
const allData = rootGetters.getDataRecordAndSelection(containerUuid)
|
|
// deletes the data from the container to replace it and to report the searches in the table
|
|
dispatch('deleteRecordContainer', {
|
|
viewUuid: containerUuid
|
|
})
|
|
|
|
const browser = rootGetters.getBrowser(containerUuid)
|
|
// parameters isQueryCriteria
|
|
const parametersList = rootGetters.getParametersToServer({
|
|
containerUuid,
|
|
fieldsList: browser.fieldsList
|
|
})
|
|
|
|
let parsedQuery = browser.query
|
|
if (!isEmptyValue(parsedQuery) && parsedQuery.includes('@')) {
|
|
parsedQuery = parseContext({
|
|
containerUuid,
|
|
value: parsedQuery,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
|
|
let parsedWhereClause = browser.whereClause
|
|
if (!isEmptyValue(parsedWhereClause) && parsedWhereClause.includes('@')) {
|
|
parsedWhereClause = parseContext({
|
|
containerUuid,
|
|
value: parsedWhereClause,
|
|
isBooleanToString: true
|
|
}).value
|
|
}
|
|
|
|
let nextPageToken
|
|
if (!isEmptyValue(allData.nextPageToken)) {
|
|
nextPageToken = allData.nextPageToken + '-' + allData.pageNumber
|
|
}
|
|
|
|
// TODO: Add validation compare browserSearchQueryParameters
|
|
return requestBrowserSearch({
|
|
uuid: containerUuid,
|
|
query: parsedQuery,
|
|
whereClause: parsedWhereClause,
|
|
orderByClause: browser.orderByClause,
|
|
parametersList,
|
|
nextPageToken: nextPageToken
|
|
})
|
|
.then(browserSearchResponse => {
|
|
const recordsList = browserSearchResponse.recordsList.map(itemRecord => {
|
|
const values = itemRecord.attributes
|
|
|
|
return {
|
|
...values,
|
|
// datatables attributes
|
|
isNew: false,
|
|
isEdit: false,
|
|
isReadOnlyFromRow: false
|
|
}
|
|
})
|
|
|
|
let selection = allData.selection
|
|
if (isClearSelection) {
|
|
selection = []
|
|
}
|
|
|
|
let token = browserSearchResponse.nextPageToken
|
|
if (token !== undefined) {
|
|
token = token.slice(0, -2)
|
|
}
|
|
|
|
dispatch('setRecordSelection', {
|
|
containerUuid,
|
|
record: recordsList,
|
|
pageNumber: rootGetters.getPageNumber(containerUuid),
|
|
selection: selection,
|
|
recordCount: browserSearchResponse.recordCount,
|
|
nextPageToken: token
|
|
})
|
|
showMessage({
|
|
title: language.t('notifications.succesful'),
|
|
message: language.t('notifications.succcessSearch'),
|
|
type: 'success'
|
|
})
|
|
return recordsList
|
|
})
|
|
.catch(error => {
|
|
// Set default registry values so that the table does not say loading,
|
|
// there was already a response from the server
|
|
dispatch('setRecordSelection', {
|
|
containerUuid,
|
|
panelType: 'browser'
|
|
})
|
|
|
|
showMessage({
|
|
title: language.t('notifications.error'),
|
|
message: language.t('notifications.errorSearch'),
|
|
summary: error.message,
|
|
type: 'error'
|
|
})
|
|
console.warn(`Error getting browser search: ${error.message}. Code: ${error.code}.`)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
export default browserControl
|