1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-10 20:39:48 +08:00

Bugfix/unnecessary field calls (#628)

* add complete order from collection

* call the edit line fields only when they are displayed

* unnecessary calling of customer fields

* minimal changes

Co-authored-by: Elsio Sanchez <elsiosanche@gmail.com>
This commit is contained in:
Elsio Sanchez 2021-03-04 21:33:42 -04:00 committed by GitHub
parent 383cd42a70
commit 472ffc523a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 483 additions and 208 deletions

View File

@ -9,8 +9,8 @@
class="create-bp"
>
<el-row :gutter="24">
<field-definition
v-for="(field) in fieldsList"
<field
v-for="(field) in metadataList"
:key="field.columnName"
:metadata-field="field"
/>
@ -39,14 +39,21 @@
<script>
import { requestCreateBusinessPartner } from '@/api/ADempiere/system-core.js'
import formMixin from '@/components/ADempiere/Form/formMixin.js'
import fieldsList from './fieldsListCreate.js'
import BParterMixin from './mixinBusinessPartner.js'
import {
// createFieldFromDefinition,
createFieldFromDictionary
} from '@/utils/ADempiere/lookupFactory'
import Field from '@/components/ADempiere/Field'
export default {
name: 'BusinessPartnerCreate',
components: {
Field
},
mixins: [
formMixin,
// formMixin,
BParterMixin
],
props: {
@ -59,6 +66,11 @@ export default {
fieldsList
}
}
},
showField: {
type: Boolean,
default: true
}
},
data() {
@ -67,6 +79,7 @@ export default {
isLoadingRecord: false,
fieldsList,
isCustomForm: true,
metadataList: [],
unsubscribe: () => {}
}
},
@ -79,10 +92,19 @@ export default {
return field
}
},
watch: {
showField(value) {
if (value && this.isEmptyValue(this.metadataList)) {
this.setFieldsList()
}
}
},
beforeDestroy() {
this.unsubscribe()
},
// created()
methods: {
createFieldFromDictionary,
// TODO: Get locations values.
createBusinessParter() {
let values = this.$store.getters.getValuesView({
@ -188,6 +210,23 @@ export default {
value: undefined
}]
})
},
setFieldsList() {
const list = []
// Product Code
this.fieldsList.forEach(element => {
this.createFieldFromDictionary(element)
.then(response => {
const data = response
list.push({
...data,
containerUuid: 'Business-Partner-Create'
})
}).catch(error => {
console.warn(`LookupFactory: Get Field From Server (State) - Error ${error.code}: ${error.message}.`)
})
})
this.metadataList = list
}
}
}

View File

@ -17,8 +17,8 @@
size="small"
>
<el-row>
<field-definition
v-for="(field) in fieldsList"
<field
v-for="(field) in metadataList"
:key="field.columnName"
:metadata-field="field"
/>
@ -72,17 +72,22 @@
<script>
import CustomPagination from '@/components/ADempiere/Pagination'
import formMixin from '@/components/ADempiere/Form/formMixin.js'
import {
// createFieldFromDefinition,
createFieldFromDictionary
} from '@/utils/ADempiere/lookupFactory'
import fieldsList from './fieldsListSearch.js'
import BParterMixin from './mixinBusinessPartner.js'
import Field from '@/components/ADempiere/Field'
export default {
name: 'BusinessPartnersList',
components: {
CustomPagination
CustomPagination,
Field
},
mixins: [
formMixin,
// formMixin,
BParterMixin
],
props: {
@ -103,6 +108,10 @@ export default {
isShowList: false
}
}
},
showField: {
type: Boolean,
default: true
}
},
data() {
@ -110,6 +119,7 @@ export default {
isLoadedRecords: false,
activeAccordion: 'query-criteria',
fieldsList,
metadataList: [],
unsubscribe: () => {}
}
},
@ -130,6 +140,11 @@ export default {
if (isToLoad) {
this.searchBPartnerList({})
}
},
showField(value) {
if (value && this.isEmptyValue(this.metadataList)) {
this.setFieldsList()
}
}
},
created() {
@ -143,6 +158,7 @@ export default {
this.unsubscribe()
},
methods: {
createFieldFromDictionary,
keyAction(event) {
switch (event.srcKey) {
case 'refreshList': {
@ -192,6 +208,23 @@ export default {
.finally(() => {
this.isLoadedRecords = true
})
},
setFieldsList() {
const list = []
// Product Code
this.fieldsList.forEach(element => {
this.createFieldFromDictionary(element)
.then(response => {
const data = response
list.push({
...data,
containerUuid: 'Business-Partner-List'
})
}).catch(error => {
console.warn(`LookupFactory: Get Field From Server (State) - Error ${error.code}: ${error.message}.`)
})
})
this.metadataList = list
}
}
}

View File

@ -3,14 +3,47 @@
<el-form-item>
<template slot="label">
{{ $t('form.pos.order.BusinessPartnerCreate.businessPartner') }}
<i
v-popover:businessPartnerCreate
class="el-icon-circle-plus"
/>
<i
v-popover:businessPartnersList
class="el-icon-search"
/>
<el-popover
placement="right"
width="400"
trigger="click"
@hide="showFieldCreate = !showFieldCreate"
>
<business-partner-create
:parent-metadata="parentMetadata"
:show-field="showFieldCreate"
/>
<el-button
slot="reference"
type="text"
@click="showFieldCreate = !showFieldCreate"
>
<i
class="el-icon-circle-plus"
/>
</el-button>
</el-popover>
<el-popover
placement="right"
width="800"
trigger="click"
@hide="showFieldList = !showFieldList"
>
<business-partners-list
:parent-metadata="parentMetadata"
:shows-popovers="showsPopovers"
:show-field="showFieldList"
/>
<el-button
slot="reference"
type="text"
@click="showFieldList = !showFieldList"
>
<i
class="el-icon-search"
/>
</el-button>
</el-popover>
</template>
<el-autocomplete
@ -45,32 +78,7 @@
</template>
</el-autocomplete>
</el-form-item>
<el-popover
ref="businessPartnerCreate"
v-model="showsPopovers.isShowCreate"
placement="right"
width="400"
trigger="click"
>
<business-partner-create
v-if="showsPopovers.isShowCreate"
:parent-metadata="parentMetadata"
:shows-popovers="showsPopovers"
/>
</el-popover>
<el-popover
ref="businessPartnersList"
v-model="showsPopovers.isShowList"
placement="right"
width="800"
trigger="click"
>
<business-partners-list
:parent-metadata="parentMetadata"
:shows-popovers="showsPopovers"
/>
</el-popover>
</div>
</template>
@ -81,6 +89,7 @@
*/
import { requestGetBusinessPartner } from '@/api/ADempiere/system-core.js'
import BusinessPartnerCreate from './businessPartnerCreate'
// import FieldListBusinessPartner from './fieldBusinessPartners/index'
import BusinessPartnersList from './businessPartnersList'
import BParterMixin from './mixinBusinessPartner.js'
const { setBusinessPartner } = BParterMixin.methods
@ -92,6 +101,7 @@ export default {
components: {
BusinessPartnerCreate,
BusinessPartnersList
// FieldListBusinessPartner
},
props: {
parentMetadata: {
@ -111,7 +121,9 @@ export default {
data() {
return {
controlDisplayed: this.displayedValue,
timeOut: null
timeOut: null,
showFieldCreate: false,
showFieldList: false
}
},
computed: {

View File

@ -33,18 +33,33 @@
width="800"
trigger="click"
@show="seeOrderList"
@hide="showFieldListOrder = !showFieldListOrder"
>
<orders-list
:parent-metadata="metadata"
:show-field="showFieldListOrder"
/>
<p
slot="reference"
:style="blockOption"
>
<el-button
type="text"
@click="showFieldListOrder = !showFieldListOrder"
>
<svg-icon icon-class="list" />
<br>
{{ $t('form.pos.optionsPoinSales.salesOrder.ordersHistory') }}
</el-button>
</p>
<!-- <p
slot="reference"
:style="blockOption"
>
<svg-icon icon-class="list" />
<br>
{{ $t('form.pos.optionsPoinSales.salesOrder.ordersHistory') }}
</p>
</p> -->
</el-popover>
</el-card>
</el-col>
@ -286,7 +301,8 @@ export default {
data() {
return {
activeName: '',
processPos: ''
processPos: '',
showFieldListOrder: false
}
},
computed: {

View File

@ -12,75 +12,75 @@ export default [
handleActionPerformed: true,
handleActionKeyPerformed: true
}
},
{
elementColumnName: 'QtyEntered',
columnName: 'QtyEntered',
tabindex: '2',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 8,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
},
{
elementColumnName: 'PriceEntered',
columnName: 'PriceEntered',
tabindex: '3',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 9,
isReadOnly: true,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
},
{
elementColumnName: 'Discount',
columnName: 'Discount',
tabindex: '4',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 10,
isReadOnly: true,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
},
{
tableName: 'C_Order',
columnName: 'C_Currency_ID',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
handleActionKeyPerformed: true,
handleActionPerformed: true,
validationCode: 'C_Currency.C_Currency_ID = 100',
isActiveLogics: false,
isMandatory: true
}
},
// TenderType
{
tableName: 'C_Payment',
elementColumnName: 'TenderType',
columnName: 'TenderType',
isFromDictionary: true,
overwriteDefinition: {
defaultValue: 'X',
handleActionKeyPerformed: true,
handleContentSelection: true,
handleActionPerformed: true,
size: 24,
isActiveLogics: false,
isMandatory: true
}
}
// {
// elementColumnName: 'QtyEntered',
// columnName: 'QtyEntered',
// tabindex: '2',
// isFromDictionary: true,
// overwriteDefinition: {
// size: 24,
// sequence: 8,
// handleActionPerformed: true,
// handleContentSelection: true,
// handleActionKeyPerformed: true
// }
// },
// {
// elementColumnName: 'PriceEntered',
// columnName: 'PriceEntered',
// tabindex: '3',
// isFromDictionary: true,
// overwriteDefinition: {
// size: 24,
// sequence: 9,
// isReadOnly: true,
// handleActionPerformed: true,
// handleContentSelection: true,
// handleActionKeyPerformed: true
// }
// },
// {
// elementColumnName: 'Discount',
// columnName: 'Discount',
// tabindex: '4',
// isFromDictionary: true,
// overwriteDefinition: {
// size: 24,
// sequence: 10,
// isReadOnly: true,
// handleActionPerformed: true,
// handleContentSelection: true,
// handleActionKeyPerformed: true
// }
// },
// {
// tableName: 'C_Order',
// columnName: 'C_Currency_ID',
// isFromDictionary: true,
// overwriteDefinition: {
// size: 24,
// handleActionKeyPerformed: true,
// handleActionPerformed: true,
// validationCode: 'C_Currency.C_Currency_ID = 100',
// isActiveLogics: false,
// isMandatory: true
// }
// },
// // TenderType
// {
// tableName: 'C_Payment',
// elementColumnName: 'TenderType',
// columnName: 'TenderType',
// isFromDictionary: true,
// overwriteDefinition: {
// defaultValue: 'X',
// handleActionKeyPerformed: true,
// handleContentSelection: true,
// handleActionPerformed: true,
// size: 24,
// isActiveLogics: false,
// isMandatory: true
// }
// }
]

View File

@ -137,49 +137,18 @@
placement="right"
trigger="click"
:title="$t('form.pos.tableProduct.editQuantities')"
width="600"
@hide="showFieldLine = !showFieldLine"
>
<el-row>
<el-col :span="8">
<el-form label-position="top" label-width="10px" @submit.native.prevent="notSubmitForm">
<template
v-for="(field) in fieldsList"
>
<field-definition
v-if="field.columnName === 'PriceEntered'"
:key="field.columnName"
:metadata-field="field"
/>
</template>
</el-form>
</el-col>
<el-col :span="8">
<el-form label-position="top" label-width="10px" @submit.native.prevent="notSubmitForm">
<template
v-for="(field) in fieldsList"
>
<field-definition
v-if="field.columnName === 'QtyEntered'"
:key="field.columnName"
:metadata-field="field"
/>
</template>
</el-form>
</el-col>
<el-col :span="8">
<el-form label-position="top" label-width="10px" @submit.native.prevent="notSubmitForm">
<template
v-for="(field) in fieldsList"
>
<field-definition
v-if="field.columnName === 'Discount'"
:key="field.columnName"
:metadata-field="field"
/>
</template>
</el-form>
</el-col>
</el-row>
<el-button slot="reference" type="text">
<field-line
:data-line="scope.row"
:show-field="showFieldLine"
/>
<el-button
slot="reference"
type="text"
@click="showFieldLine = !showFieldLine"
>
<i class="el-icon-edit" /> {{ $t('form.pos.tableProduct.editQuantities') }}
</el-button>
</el-popover>
@ -310,6 +279,7 @@ import orderLineMixin from './orderLineMixin.js'
import fieldsListOrder from './fieldsListOrder.js'
import posMixin from '@/components/ADempiere/Form/VPOS/posMixin.js'
import BusinessPartner from '@/components/ADempiere/Form/VPOS/BusinessPartner'
import fieldLine from '@/components/ADempiere/Form/VPOS/Order/line/index'
import ProductInfo from '@/components/ADempiere/Form/VPOS/ProductInfo'
import convertAmount from '@/components/ADempiere/Form/VPOS/Collection/convertAmount/index'
@ -318,7 +288,8 @@ export default {
components: {
BusinessPartner,
ProductInfo,
convertAmount
convertAmount,
fieldLine
},
mixins: [
formMixin,
@ -328,7 +299,8 @@ export default {
data() {
return {
fieldsList: fieldsListOrder,
seeConversion: false
seeConversion: false,
showFieldLine: false
}
},
computed: {
@ -461,9 +433,9 @@ export default {
if (!this.isEmptyValue(this.$route.query.action)) {
this.$store.dispatch('reloadOrder', { orderUuid: this.$route.query.action })
}
setTimeout(() => {
this.currencyDisplaye()
}, 1500)
// setTimeout(() => {
// this.currencyDisplaye()
// }, 1500)
},
methods: {
changePos(posElement) {
@ -532,34 +504,34 @@ export default {
if (!this.seeConversion) {
this.seeConversion = true
}
},
tenderTypeDisplaye() {
if (!this.isEmptyValue(this.fieldsList)) {
const tenderType = this.fieldsList[5].reference
if (!this.isEmptyValue(tenderType)) {
this.$store.dispatch('getLookupListFromServer', {
tableName: tenderType.tableName,
query: tenderType.query
})
.then(response => {
this.$store.dispatch('tenderTypeDisplaye', response)
})
}
}
},
currencyDisplaye() {
if (!this.isEmptyValue(this.fieldsList)) {
const currency = this.fieldsList[4].reference
if (!this.isEmptyValue(currency)) {
this.$store.dispatch('getLookupListFromServer', {
tableName: currency.tableName,
query: currency.query
})
.then(response => {
this.$store.dispatch('currencyDisplaye', response)
})
}
}
// },
// tenderTypeDisplaye() {
// if (!this.isEmptyValue(this.fieldsList)) {
// const tenderType = this.fieldsList[5].reference
// if (!this.isEmptyValue(tenderType)) {
// this.$store.dispatch('getLookupListFromServer', {
// tableName: tenderType.tableName,
// query: tenderType.query
// })
// .then(response => {
// this.$store.dispatch('tenderTypeDisplaye', response)
// })
// }
// }
// },
// currencyDisplaye() {
// if (!this.isEmptyValue(this.fieldsList)) {
// const currency = this.fieldsList[4].reference
// if (!this.isEmptyValue(currency)) {
// this.$store.dispatch('getLookupListFromServer', {
// tableName: currency.tableName,
// query: currency.query
// })
// .then(response => {
// this.$store.dispatch('currencyDisplaye', response)
// })
// }
// }
}
}
}

View File

@ -0,0 +1,40 @@
export default [
{
elementColumnName: 'PriceEntered',
columnName: 'PriceEntered',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 8,
isReadOnly: true,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
},
{
elementColumnName: 'QtyEntered',
columnName: 'QtyEntered',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 9,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
},
{
elementColumnName: 'Discount',
columnName: 'Discount',
isFromDictionary: true,
overwriteDefinition: {
size: 24,
sequence: 10,
isReadOnly: true,
handleActionPerformed: true,
handleContentSelection: true,
handleActionKeyPerformed: true
}
}
]

View File

@ -0,0 +1,132 @@
<template>
<div class="wrapper">
<el-row
v-if="!isEmptyValue(metadataList)"
>
<template
v-for="(field, index) in metadataList"
>
<el-col :key="index" :span="8">
<el-form label-position="top" label-width="10px" @submit.native.prevent="notSubmitForm">
<field
:key="field.columnName"
:metadata-field="field"
/>
</el-form>
</el-col>
</template>
</el-row>
<div
v-else
key="form-loading"
v-loading="isEmptyValue(metadataList)"
:element-loading-text="$t('notifications.loading')"
:element-loading-spinner="'el-icon-loading'"
element-loading-background="rgba(255, 255, 255, 0.8)"
class="view-loading"
/>
</div>
</template>
<script>
import {
// createFieldFromDefinition,
createFieldFromDictionary
} from '@/utils/ADempiere/lookupFactory'
import fieldsListLine from './fieldsListLine.js'
import Field from '@/components/ADempiere/Field'
export default {
name: 'FieldLine',
components: {
Field
},
props: {
dataLine: {
type: Object,
default: () => {}
},
showField: {
type: Boolean,
default: true
}
},
data() {
return {
metadataList: [],
panelMetadata: {},
isLoaded: false,
panelType: 'custom',
fieldsListLine
}
},
watch: {
showField(value) {
if (value && this.isEmptyValue(this.metadataList)) {
this.setFieldsList()
}
if (value) {
this.fillOrderLineQuantities({
currentPrice: this.dataLine.price,
quantityOrdered: this.dataLine.quantity,
discount: this.dataLine.discountRate
})
}
}
},
methods: {
createFieldFromDictionary,
notSubmitForm(event) {
event.preventDefault()
return false
},
setFieldsList() {
const fieldsList = []
// Product Code
this.fieldsListLine.forEach(element => {
this.createFieldFromDictionary(element)
.then(metadata => {
const data = metadata
fieldsList.push({
...data,
containerUuid: 'line'
})
}).catch(error => {
console.warn(`LookupFactory: Get Field From Server (State) - Error ${error.code}: ${error.message}.`)
})
})
this.metadataList = fieldsList
},
fillOrderLineQuantities({
currentPrice,
quantityOrdered,
discount
}) {
const containerUuid = 'line'
// Editable fields
if (!this.isEmptyValue(quantityOrdered)) {
this.$store.commit('updateValueOfField', {
containerUuid: 'line',
columnName: 'QtyEntered',
value: quantityOrdered
})
}
if (!this.isEmptyValue(currentPrice)) {
this.$store.commit('updateValueOfField', {
containerUuid,
columnName: 'PriceEntered',
value: currentPrice
})
}
if (!this.isEmptyValue(discount)) {
this.$store.commit('updateValueOfField', {
containerUuid,
columnName: 'Discount',
value: discount
})
}
}
}
}
</script>

View File

@ -9,15 +9,15 @@
Ver Histórico de Órdenes
</template>
<el-form
v-if="isLoaded"
v-if="!isEmptyValue(metadataList)"
label-position="top"
label-width="10px"
@submit.native.prevent="notSubmitForm"
>
<template
v-for="(field) in fieldsList"
v-for="(field) in metadataList"
>
<field-definition
<field
:key="field.columnName"
:metadata-field="field"
/>
@ -26,7 +26,7 @@
<div
v-else
key="form-loading"
v-loading="!isLoaded"
v-loading="isEmptyValue(metadataList)"
:element-loading-text="$t('notifications.loading')"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(255, 255, 255, 0.8)"
@ -109,22 +109,23 @@
</template>
<script>
import formMixin from '@/components/ADempiere/Form/formMixin.js'
import CustomPagination from '@/components/ADempiere/Pagination'
import fieldsListOrders from './fieldsListOrders.js'
import {
createFieldFromDictionary
} from '@/utils/ADempiere/lookupFactory'
import {
formatDate,
formatQuantity
} from '@/utils/ADempiere/valueFormat.js'
import Field from '@/components/ADempiere/Field'
export default {
name: 'OrdersList',
components: {
CustomPagination
CustomPagination,
Field
},
mixins: [
formMixin
],
props: {
metadata: {
type: Object,
@ -134,12 +135,17 @@ export default {
containerUuid: 'Orders-List'
}
}
},
showField: {
type: Boolean,
default: false
}
},
data() {
return {
defaultMaxPagination: 50,
fieldsList: fieldsListOrders,
metadataList: [],
isCustomForm: true,
activeAccordion: 'query-criteria',
timeOut: null
@ -177,8 +183,8 @@ export default {
return null
},
isReadyFromGetData() {
const { isLoaded, isReload } = this.tableOrder
return !isLoaded || isReload
const { isReload } = this.tableOrder
return isReload
},
shortsKey() {
return {
@ -187,13 +193,13 @@ export default {
}
}
},
// watch: {
// isReadyFromGetData(isToLoad) {
// if (isToLoad) {
// this.loadOrdersList()
// }
// }
// },
watch: {
showField(value) {
if (value && this.isEmptyValue(this.metadataList)) {
this.setFieldsList()
}
}
},
created() {
this.unsubscribe = this.subscribeChanges()
if (this.isReadyFromGetData) {
@ -206,6 +212,7 @@ export default {
methods: {
formatDate,
formatQuantity,
createFieldFromDictionary,
keyAction(event) {
switch (event.srcKey) {
case 'refreshList':
@ -319,6 +326,23 @@ export default {
value: row.id
}]
this.$store.dispatch('addParametersProcessPos', parametersList)
},
setFieldsList() {
const list = []
// Product Code
this.fieldsList.forEach(element => {
this.createFieldFromDictionary(element)
.then(response => {
const data = response
list.push({
...data,
containerUuid: 'Orders-List'
})
}).catch(error => {
console.warn(`LookupFactory: Get Field From Server (State) - Error ${error.code}: ${error.message}.`)
})
})
this.metadataList = list
}
}
}

View File

@ -140,6 +140,13 @@ export default {
if (this.isReadyFromGetData) {
this.loadProductsPricesList()
}
if (this.isEmptyValue(this.listWithPrice)) {
this.$store.dispatch('listProductPriceFromServer', {
containerUuid: 'Products-Price-List',
pageNumber: 1,
searchValue: ''
})
}
},
beforeDestroy() {
this.unsubscribe()