1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-13 23:20:12 +08:00

fix: Empty mandatory and read only fields. (#486)

This commit is contained in:
Edwin Betancourt 2020-05-06 14:46:20 -04:00 committed by GitHub
parent 50bac60614
commit 91f0e9805e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 163 additions and 158 deletions

View File

@ -45,7 +45,7 @@
}, },
"dependencies": { "dependencies": {
"@adempiere/grpc-access-client": "^1.2.0", "@adempiere/grpc-access-client": "^1.2.0",
"@adempiere/grpc-data-client": "^2.2.9", "@adempiere/grpc-data-client": "^2.3.2",
"@adempiere/grpc-dictionary-client": "^1.4.1", "@adempiere/grpc-dictionary-client": "^1.4.1",
"@adempiere/grpc-enrollment-client": "^1.1.0", "@adempiere/grpc-enrollment-client": "^1.1.0",
"@adempiere/grpc-pos-client": "^1.1.0", "@adempiere/grpc-pos-client": "^1.1.0",
@ -104,7 +104,7 @@
"eslint": "^6.8.0", "eslint": "^6.8.0",
"eslint-plugin-vue": "6.2.2", "eslint-plugin-vue": "6.2.2",
"html-webpack-plugin": "4.2.1", "html-webpack-plugin": "4.2.1",
"husky": "4.2.5", "husky": "^4.2.5",
"lint-staged": "10.2.0", "lint-staged": "10.2.0",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"node-sass": "^4.14.0", "node-sass": "^4.14.0",

View File

@ -16,6 +16,7 @@ const callOutControl = {
* @param {Object} row, if callout is activate in table * @param {Object} row, if callout is activate in table
* @param {Mixed} value * @param {Mixed} value
* @param {Mixed} oldValue * @param {Mixed} oldValue
* @param {String} valueType
* @return {Promise} values * @return {Promise} values
*/ */
getCallout({ rootGetters, dispatch }, { getCallout({ rootGetters, dispatch }, {
@ -40,11 +41,12 @@ const callOutControl = {
runCallOutRequest({ runCallOutRequest({
windowUuid: parentUuid, windowUuid: parentUuid,
tabUuid: containerUuid, tabUuid: containerUuid,
callout,
tableName, tableName,
columnName, columnName,
value, value,
oldValue, oldValue,
callout, valueType,
attributesList, attributesList,
windowNo: window.windowIndex windowNo: window.windowIndex
}) })

View File

@ -249,16 +249,15 @@ const panel = {
containerUuid, containerUuid,
fieldsList = [] fieldsList = []
}) { }) {
if (fieldsList.length <= 0) { if (isEmptyValue(fieldsList)) {
fieldsList = getters.getFieldsListFromPanel(containerUuid) fieldsList = getters.getFieldsListFromPanel(containerUuid)
} }
const fieldsIncludes = fieldsList.filter(fieldItem => { const fieldsIncludes = []
fieldsList.array.forEach(fieldItem => {
const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic
if (isMandatory) { if (isMandatory) {
return true fieldsIncludes.push(fieldItem.columnName)
} }
}).map(fieldItem => {
return fieldItem.columnName
}) })
dispatch('changeFieldAttributesBoolean', { dispatch('changeFieldAttributesBoolean', {
@ -276,15 +275,16 @@ const panel = {
containerUuid, containerUuid,
fieldsList = [] fieldsList = []
}) { }) {
if (fieldsList.length <= 0) { if (isEmptyValue(fieldsList)) {
fieldsList = getters.getFieldsListFromPanel(containerUuid) fieldsList = getters.getFieldsListFromPanel(containerUuid)
} }
const fieldsIncludes = fieldsList.filter(fieldItem => { const fieldsIncludes = []
fieldsList.foreach(fieldItem => {
const isDisplayed = fieldItem.isDisplayed && fieldItem.isDisplayedFromLogic && !fieldItem.isKey const isDisplayed = fieldItem.isDisplayed && fieldItem.isDisplayedFromLogic && !fieldItem.isKey
// Verify for displayed and is active // Verify for displayed and is active
return fieldItem.isActive && isDisplayed if (fieldItem.isActive && isDisplayed) {
}).map(fieldItem => { fieldsIncludes.push(fieldItem.columnName)
return fieldItem.columnName }
}) })
dispatch('changeFieldAttributesBoolean', { dispatch('changeFieldAttributesBoolean', {
@ -311,6 +311,10 @@ const panel = {
}) { }) {
return new Promise(resolve => { return new Promise(resolve => {
const panel = getters.getPanel(containerUuid) const panel = getters.getPanel(containerUuid)
if (isEmptyValue(panel)) {
resolve()
return
}
const defaultAttributes = getters.getParsedDefaultValues({ const defaultAttributes = getters.getParsedDefaultValues({
parentUuid, parentUuid,
containerUuid, containerUuid,
@ -409,7 +413,7 @@ const panel = {
isChangedAllValues = false isChangedAllValues = false
}) { }) {
return new Promise(resolve => { return new Promise(resolve => {
if (!fieldList.length) { if (isEmptyValue(fieldList)) {
fieldList = getters.getFieldsListFromPanel(containerUuid, isAdvancedQuery) fieldList = getters.getFieldsListFromPanel(containerUuid, isAdvancedQuery)
} }
let fieldsShowed = [] let fieldsShowed = []
@ -682,10 +686,6 @@ const panel = {
} }
if (isSendToServer) { if (isSendToServer) {
const fieldsEmpty = getters.getFieldListEmptyMandatory({
containerUuid,
fieldsList
})
if (panelType === 'table' || isAdvancedQuery) { if (panelType === 'table' || isAdvancedQuery) {
if (field.isShowedFromUser && (field.oldValue !== field.value || if (field.isShowedFromUser && (field.oldValue !== field.value ||
['NULL', 'NOT_NULL'].includes(field.operator) || ['NULL', 'NOT_NULL'].includes(field.operator) ||
@ -735,7 +735,13 @@ const panel = {
console.warn(`Error getting Advanced Query (notifyFieldChange): ${error.message}. Code: ${error.code}.`) console.warn(`Error getting Advanced Query (notifyFieldChange): ${error.message}. Code: ${error.code}.`)
}) })
} }
} else if (isEmptyValue(fieldsEmpty)) { } else {
const fieldsEmpty = getters.getFieldListEmptyMandatory({
containerUuid,
fieldsList
})
if (isEmptyValue(fieldsEmpty)) {
// TODO: refactory for it and change for a standard method // TODO: refactory for it and change for a standard method
if (field.panelType === 'browser' && fieldIsDisplayed(field)) { if (field.panelType === 'browser' && fieldIsDisplayed(field)) {
let isReadyForQuery = true let isReadyForQuery = true
@ -765,8 +771,7 @@ const panel = {
isClearSelection: true isClearSelection: true
}) })
} }
} } else if (field.panelType === 'window' && fieldIsDisplayed(field)) {
if (field.panelType === 'window' && fieldIsDisplayed(field)) {
const uuid = getters.getUuid(containerUuid) const uuid = getters.getUuid(containerUuid)
if (isEmptyValue(uuid)) { if (isEmptyValue(uuid)) {
dispatch('createNewEntity', { dispatch('createNewEntity', {
@ -826,6 +831,7 @@ const panel = {
}) })
} }
} }
}
}) })
}, },
changeDependentFieldsList({ commit, dispatch, getters }, { changeDependentFieldsList({ commit, dispatch, getters }, {
@ -1066,35 +1072,28 @@ const panel = {
getFieldListEmptyMandatory: (state, getters) => ({ getFieldListEmptyMandatory: (state, getters) => ({
containerUuid, containerUuid,
fieldsList = [], fieldsList = [],
isEvaluateShowed = true,
row row
}) => { }) => {
if (fieldsList.length <= 0) { if (fieldsList.length <= 0) {
fieldsList = getters.getFieldsListFromPanel(containerUuid) fieldsList = getters.getFieldsListFromPanel(containerUuid)
} }
const fieldsEmpty = []
// all optionals (not mandatory) fields // all optionals (not mandatory) fields
fieldsList = fieldsList.filter(fieldItem => { fieldsList.forEach(fieldItem => {
const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic
if (isMandatory) {
if (isEvaluateShowed) {
return fieldIsDisplayed(fieldItem)
}
return isMandatory
}
})
fieldsList = fieldsList.filter(fieldItem => {
let value = fieldItem.value let value = fieldItem.value
// used when evaluate data in table // used when evaluate data in table
if (row) { if (row) {
value = row[fieldItem.columnName] value = row[fieldItem.columnName]
} }
return isEmptyValue(value) if (isEmptyValue(value)) {
const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic
if (fieldIsDisplayed(fieldItem) && isMandatory) {
fieldsEmpty.push(fieldItem.name)
}
}
}) })
return fieldsList.map(fieldItem => { return fieldsEmpty
return fieldItem.name
})
}, },
/** /**
* Show all available fields not mandatory to show, used in components panel/filterFields.vue * Show all available fields not mandatory to show, used in components panel/filterFields.vue
@ -1264,7 +1263,7 @@ const panel = {
return { return {
columnName: fieldItem.columnName, columnName: fieldItem.columnName,
value: valueToReturn, value: valueToReturn,
isSQL: isSQL isSQL
} }
}) })
return attributesObject return attributesObject

View File

@ -101,6 +101,7 @@ export function generateField({
} }
// VALUE TO // VALUE TO
if (fieldToGenerate.isRange) {
if (String(parsedDefaultValueTo).includes('@') && if (String(parsedDefaultValueTo).includes('@') &&
String(parsedDefaultValueTo).trim() !== '-1') { String(parsedDefaultValueTo).trim() !== '-1') {
parsedDefaultValueTo = parseContext({ parsedDefaultValueTo = parseContext({
@ -137,7 +138,7 @@ export function generateField({
isMandatory: fieldToGenerate.isMandatory, isMandatory: fieldToGenerate.isMandatory,
isIdentifier: fieldToGenerate.columnName.includes('_ID') isIdentifier: fieldToGenerate.columnName.includes('_ID')
}) })
}
parentFieldsList = getParentFields(fieldToGenerate) parentFieldsList = getParentFields(fieldToGenerate)
// evaluate logics // evaluate logics

View File

@ -28,7 +28,7 @@ export const NUMBER = {
id: 12, id: 12,
isSupported: true, isSupported: true,
valueType: 'DECIMAL', valueType: 'DECIMAL',
componentPath: 'FieldText', componentPath: 'FieldNumber',
size: { size: {
xs: 24, xs: 24,
sm: 12, sm: 12,
@ -104,7 +104,7 @@ export const COLOR = {
id: 27, id: 27,
isSupported: false, isSupported: false,
valueType: 'INTEGER', valueType: 'INTEGER',
componentPath: 'FieldText', componentPath: 'FieldColor',
size: { size: {
xs: 24, xs: 24,
sm: 12, sm: 12,

View File

@ -169,6 +169,7 @@ export function convertFieldListToShareLink(fieldList) {
return attributesListLink.slice(0, -1) return attributesListLink.slice(0, -1)
} }
/** /**
* Find element in an array recursively * Find element in an array recursively
* @param {object|array} treeData * @param {object|array} treeData
@ -256,7 +257,8 @@ export function parsedValueComponent({
isMandatory = false, isMandatory = false,
isIdentifier = false isIdentifier = false
}) { }) {
if ((value === undefined || value === null) && !isMandatory) { const isEmpty = isEmptyValue(value)
if (isEmpty && !isMandatory) {
if (fieldType === 'FieldYesNo') { if (fieldType === 'FieldYesNo') {
return Boolean(value) return Boolean(value)
} }
@ -267,7 +269,7 @@ export function parsedValueComponent({
switch (fieldType) { switch (fieldType) {
// data type Number // data type Number
case 'FieldNumber': case 'FieldNumber':
if (String(value).trim() === '' || value === undefined || value === null) { if (isEmpty) {
returnValue = undefined returnValue = undefined
if (isMandatory) { if (isMandatory) {
returnValue = 0 returnValue = 0
@ -305,7 +307,7 @@ export function parsedValueComponent({
// data type Date // data type Date
case 'FieldDate': case 'FieldDate':
case 'FieldTime ': case 'FieldTime ':
if (String(value).trim() === '') { if (isEmpty) {
value = undefined value = undefined
} }
if (!isNaN(value)) { if (!isNaN(value)) {
@ -321,7 +323,7 @@ export function parsedValueComponent({
break break
case 'FieldSelect': case 'FieldSelect':
if (String(value).trim() === '') { if (isEmpty) {
value = undefined value = undefined
} }
if (typeof value === 'boolean') { if (typeof value === 'boolean') {
@ -329,7 +331,7 @@ export function parsedValueComponent({
} }
// Table (18) or Table Direct (19) // Table (18) or Table Direct (19)
if (displayType === TABLE.id || (displayType === TABLE_DIRECT.id && isIdentifier)) { if (displayType === TABLE.id || (displayType === TABLE_DIRECT.id && isIdentifier)) {
if (value !== '' && value !== null && value !== undefined) { if (!isEmptyValue(value)) {
value = Number(value) value = Number(value)
} }
} // Search or List } // Search or List
@ -342,6 +344,7 @@ export function parsedValueComponent({
} }
return returnValue return returnValue
} }
/** /**
* add a tab depending on the status of the document * add a tab depending on the status of the document
* @param {string} tag, document status key * @param {string} tag, document status key