1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-11 05:11:59 +08:00

fix: #370 Lookup with NaN values in advanced query. (#371)

This commit is contained in:
Edwin Betancourt 2020-02-27 15:54:43 -04:00 committed by GitHub
parent c589cc1a20
commit 5bed6a5f45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 71 additions and 78 deletions

View File

@ -141,9 +141,10 @@ export default {
}
if (this.metadata.displayed) {
if (!this.options.some(option => option.key === value)) {
const label = this.findLabel(value)
this.options.push({
key: value,
label: this.isEmptyValue(this.findLabel(value)) ? ' ' : this.findLabel(value)
label: this.isEmptyValue(label) ? ' ' : label
})
this.value = value
}
@ -170,7 +171,7 @@ export default {
beforeMount() {
if (this.metadata.displayed) {
this.options = this.getterLookupAll
if (!this.isEmptyValue(this.value)) {
if (!this.isEmptyValue(this.value) && !this.metadata.isAdvancedQuery) {
if (!this.findLabel(this.value)) {
if (!this.isEmptyValue(this.metadata.displayColumn)) {
// verify if exists to add
@ -243,7 +244,7 @@ export default {
}
}
},
remoteMethod() {
async remoteMethod() {
if (this.isEmptyValue(this.metadata.reference.query)) {
return
}

View File

@ -1,5 +1,5 @@
<template>
<span v-if="isContextInfo">
<span>
<el-popover
ref="contextInfoField"
placement="top"
@ -16,7 +16,7 @@
</span>
{{ fieldAttributes.help }}
</div>
<template v-for="(zoomItem, index) in fieldAttributes.reference.zoomWindowList">
<template v-for="(zoomItem, index) in fieldAttributes.reference.windowsList">
<el-button
:key="index"
type="text"
@ -55,9 +55,6 @@ export default {
}
},
computed: {
isContextInfo() {
return (this.fieldAttributes.contextInfo && this.fieldAttributes.contextInfo.isActive) || this.fieldAttributes.reference.zoomWindowList.length
},
permissionRoutes() {
return this.$store.getters.permission_routes
}

View File

@ -259,7 +259,7 @@ export default {
},
isContextInfo() {
if (!this.isAdvancedQuery) {
return (this.field.contextInfo && this.field.contextInfo.isActive) || this.field.reference.zoomWindowList.length
return (this.field.contextInfo && this.field.contextInfo.isActive) || this.field.reference.windowsList.length
}
return false
}

View File

@ -45,18 +45,18 @@ const lookup = {
return getLookup({
tableName,
directQuery: parsedDirectQuery,
value: value
value
})
.then(response => {
const label = response.values.DisplayColumn
.then(lookupItemResponse => {
const label = lookupItemResponse.values.DisplayColumn
const option = {
label: isEmptyValue(label) ? ' ' : label,
key: value // response.values.KeyColumn
key: value // lookupItemResponse.values.KeyColumn
}
commit('addLoockupItem', {
option: option,
value: value, // isNaN(objectParams.value) ? objectParams.value : parseInt(objectParams.value, 10),
option,
value, // isNaN(objectParams.value) ? objectParams.value : parseInt(objectParams.value, 10),
parsedDirectQuery: directQuery,
tableName,
roleUuid: getCurrentRole(),
@ -65,7 +65,7 @@ const lookup = {
return option
})
.catch(error => {
console.warn(`Get Lookup, Select Base - Error ${error.code}: ${error.message}`)
console.warn(`Get Lookup, Select Base - Error ${error.code}: ${error.message}.`)
})
},
/**
@ -94,8 +94,8 @@ const lookup = {
tableName,
query: parsedQuery
})
.then(response => {
const options = response.recordsList.map(itemLookup => {
.then(lookupListResponse => {
const options = lookupListResponse.recordsList.map(itemLookup => {
return {
label: itemLookup.values.DisplayColumn,
key: itemLookup.values.KeyColumn
@ -112,7 +112,7 @@ const lookup = {
return options
})
.catch(error => {
console.warn(`Get Lookup List, Select Base - Error ${error.code}: ${error.message}`)
console.warn(`Get Lookup List, Select Base - Error ${error.code}: ${error.message}.`)
})
},
deleteLookupList({ commit, state }, {

View File

@ -447,7 +447,7 @@ const panel = {
})
// show fields in query
if (isShowedField && Object.keys(newValues).length) {
if (isShowedField && !isEmptyValue(newValues)) {
// join column names without duplicating it
fieldsShowed = Array.from(new Set([
...fieldsShowed,
@ -617,6 +617,13 @@ const panel = {
}
})
}
commit('changeField', {
field,
newField: {
...field,
oldOperator: field.operator
}
})
dispatch('getObjectListFromCriteria', {
parentUuid,
containerUuid,
@ -630,13 +637,6 @@ const panel = {
})
})
.then(response => {
commit('changeField', {
field,
newField: {
...field,
oldOperator: field.operator
}
})
if (response && response.length) {
dispatch('notifyPanelChange', {
parentUuid,

View File

@ -29,15 +29,6 @@ const windowControl = {
addReferencesList(state, payload) {
state.references.push(payload)
},
deleteReference(state, payload) {
state.references = state.references.filter(itemReference => {
if (itemReference.parentUuid === payload.windowUuid &&
itemReference.recordUuid === payload.recordUuid) {
return false
}
return true
})
},
setDataLog(state, payload) {
state.dataLog = payload
},

View File

@ -27,7 +27,16 @@ export function generateField({
const referenceType = componentReference.alias[0]
let parsedDefaultValue = fieldToGenerate.defaultValue
if (!moreAttributes.isAdvancedQuery) {
let parsedDefaultValueTo = fieldToGenerate.defaultValueTo
let operator = 'EQUAL'
if (moreAttributes.isAdvancedQuery) {
parsedDefaultValue = undefined
parsedDefaultValueTo = undefined
if (['FieldText', 'FieldTextLong'].includes(componentReference.type)) {
operator = 'LIKE'
}
} else {
if (String(parsedDefaultValue).includes('@')) {
parsedDefaultValue = parseContext({
...moreAttributes,
@ -58,16 +67,15 @@ export function generateField({
})
}
}
}
parsedDefaultValue = parsedValueComponent({
fieldType: componentReference.type,
value: parsedDefaultValue,
referenceType,
isMandatory: fieldToGenerate.isMandatory
})
let parsedDefaultValueTo = fieldToGenerate.defaultValueTo
if (!moreAttributes.isAdvancedQuery) {
parsedDefaultValue = parsedValueComponent({
fieldType: componentReference.type,
value: parsedDefaultValue,
referenceType,
isMandatory: fieldToGenerate.isMandatory
})
// VALUE TO
// if (String(parsedDefaultValueTo).includes('@SQL=')) {
// parsedDefaultValueTo.replace('@SQL=', '')
if (String(parsedDefaultValueTo).includes('@')) {
@ -99,15 +107,15 @@ export function generateField({
})
}
}
}
parsedDefaultValueTo = parsedValueComponent({
fieldType: componentReference.type,
value: parsedDefaultValueTo,
referenceType,
isMandatory: fieldToGenerate.isMandatory
})
fieldToGenerate.reference.zoomWindowList = fieldToGenerate.reference.windowsList
parsedDefaultValueTo = parsedValueComponent({
fieldType: componentReference.type,
value: parsedDefaultValueTo,
referenceType,
isMandatory: fieldToGenerate.isMandatory
})
}
const field = {
...fieldToGenerate,
...moreAttributes,
@ -135,14 +143,9 @@ export function generateField({
isShowedTableFromUser: fieldToGenerate.isDisplayed,
isFixedTableColumn: false,
// Advanced query
operator: 'EQUAL', // current operator
operator, // current operator
oldOperator: undefined, // old operator
defaultOperator: 'EQUAL'
}
if (moreAttributes.isAdvancedQuery && ['FieldText', 'FieldTextLong'].includes(field.componentPath)) {
field.operator = 'LIKE'
field.defaultOperator = 'LIKE'
defaultOperator: operator
}
// evaluate simple logics without context
@ -260,8 +263,8 @@ export function generateProcess({ processToGenerate, containerUuidAssociated = u
.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
const parentField = list.find(itemParentField => {
return itemParentField.columnName === parentColumnName && parentColumnName !== field.columnName
})
if (parentField) {
parentField.dependentFieldsList.push(field.columnName)
@ -380,7 +383,7 @@ export function generateProcess({ processToGenerate, containerUuidAssociated = u
* @return string type, assigned value to folder after evaluating the parameter
*/
export function evalutateTypeField(displayTypeId, isAllInfo = false) {
var component = REFERENCES.find(reference => displayTypeId === reference.id)
const component = REFERENCES.find(reference => displayTypeId === reference.id)
if (isAllInfo) {
return component
}
@ -398,8 +401,7 @@ export function getFieldTemplate(attributesOverwrite) {
directQuery: '',
parsedDirectQuery: '',
validationCode: '',
windowsList: [],
zoomWindowList: []
windowsList: []
}
const newField = {
id: 0,

View File

@ -16,8 +16,8 @@ export function isEmptyValue(value) {
return Boolean(!value.trim().length)
} else if (typeof value === 'function' || typeof value === 'number' || typeof value === 'boolean' || Object.prototype.toString.call(value) === '[object Date]') {
return false
} else if (Object.prototype.toString.call(value) === '[object Map]' && value.size === 0) {
return true
} else if (Object.prototype.toString.call(value) === '[object Map]' || Object.prototype.toString.call(value) === '[object Set]') {
return Boolean(!value.size)
} else if (Array.isArray(value)) {
return Boolean(!value.length)
} else if (typeof value === 'object') {
@ -37,9 +37,8 @@ export function typeValue(value) {
} else if (typeof value === 'number') {
if (value.isInteger()) {
return 'INTEGER'
} else {
return 'NUMBER'
}
return 'DOUBLE'
} else if (typeof value === 'boolean') {
return 'BOOLEAN'
} else if (Object.prototype.toString.call(value) === '[object Date]') {
@ -278,8 +277,11 @@ export const recursiveTreeSearch = ({
}
/**
*
* @param {*} param0
* Parsed value to component type
* @param {mixed} value, value to parsed
* @param {string} fieldType, or componentPath
* @param {string} referenceType, reference in ADempiere
* @param {boolean} isMandatory, field is mandatory
*/
export function parsedValueComponent({ fieldType, value, referenceType, isMandatory = false }) {
if ((value === undefined || value === null) && !isMandatory) {

View File

@ -119,7 +119,7 @@
</el-card>
</div>
<div style="right: 0%; top: 40%; position: absolute;">
<el-button v-show="!show && !isMobile" type="info" icon="el-icon-info" circle style="float: right;" class="el-button-window" @click="conteInfo" />
<el-button v-show="!showContainerInfo && !isMobile" type="info" icon="el-icon-info" circle style="float: right;" class="el-button-window" @click="conteInfo" />
</div>
<div class="small-4 columns">
<div class="wrapper">
@ -343,13 +343,13 @@ export default {
return 'container-info'
},
isSize() {
if (this.isMobile && (this.showContainerInfo)) {
if (this.isMobile && this.showContainerInfo) {
return 98
}
return 50
},
isSizePanel() {
if (this.isMobile && (this.showContainerInfo)) {
if (this.isMobile && this.showContainerInfo) {
return 2
}
return 50
@ -385,13 +385,13 @@ export default {
}
},
styleTableNavigation() {
if (this.isShowedRecordNavigation && (this.isMobile)) {
if (this.isShowedRecordNavigation && this.isMobile) {
return 'open-datatable-aside-mobile'
}
return 'open-datatable-aside'
},
splitAreaStyle() {
if (this.isShowedTabsChildren || (this.isMobile)) {
if (this.isShowedTabsChildren || this.isMobile) {
return {
overflow: 'auto'
}
@ -465,7 +465,7 @@ export default {
return this.getterDataRecordsAndSelection.record
},
getTableName() {
return this.$store.getters.getPanel(this.windowMetadata.firstTabUuid, false).tableName
return this.$store.getters.getTableNameFromTab(this.windowUuid, this.windowMetadata.firstTabUuid)
},
// current record
getRecord() {