From feb53a39cb88c7f807c287b18d8008bb149b5200 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 13 六月 2025 17:40:08 +0800
Subject: [PATCH] 小数点
---
src/views/salesManagement/invoiceRegistration/index.vue | 301 ++++++++++++++++++--------------------------------
1 files changed, 109 insertions(+), 192 deletions(-)
diff --git a/src/views/salesManagement/invoiceRegistration/index.vue b/src/views/salesManagement/invoiceRegistration/index.vue
index 08336e5..77596d7 100644
--- a/src/views/salesManagement/invoiceRegistration/index.vue
+++ b/src/views/salesManagement/invoiceRegistration/index.vue
@@ -14,9 +14,7 @@
<el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button>
</div>
<div>
- <el-button type="primary" @click="openForm('add')">鏂板鐧昏</el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+ <el-button type="primary" @click="openForm">鏂板鐧昏</el-button>
</div>
</div>
<div class="table_list">
@@ -37,16 +35,16 @@
<el-table-column align="center" label="搴忓彿" type="index" width="60" />
<el-table-column label="浜у搧澶х被" prop="productCategory" />
<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
- <el-table-column label="鍗曚綅" prop="unit" />
- <el-table-column label="鏁伴噺" prop="quantity" />
- <el-table-column label="绋庣巼" prop="taxRate" />
- <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" />
- <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" />
- <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" />
- <el-table-column label="鏈寮�绁ㄦ暟" prop="invoiceNum" />
- <el-table-column label="鏈寮�绁ㄩ噾棰�(鍏�)" prop="invoiceAmount" />
- <el-table-column label="鏈紑绁ㄦ暟(鍏�)" prop="noInvoiceNum" />
- <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmount" />
+ <el-table-column label="鍗曚綅" prop="unit" width="70"/>
+ <el-table-column label="鏁伴噺" prop="quantity" width="70"/>
+ <el-table-column label="绋庣巼" prop="taxRate" width="70" />
+ <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
+ <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
+ <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
+ <el-table-column label="寮�绁ㄦ暟" prop="invoiceNum" :formatter="formattedNumber" />
+ <el-table-column label="寮�绁ㄩ噾棰�(鍏�)" prop="invoiceAmount" :formatter="formattedNumber" />
+ <el-table-column label="鏈紑绁ㄦ暟" prop="noInvoiceNum" :formatter="formattedNumber" />
+ <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmount" :formatter="formattedNumber"/>
</el-table>
</template>
</el-table-column>
@@ -56,24 +54,19 @@
<el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" show-overflow-tooltip/>
<el-table-column label="涓氬姟鍛�" prop="salesman" show-overflow-tooltip/>
<el-table-column label="椤圭洰鍚嶇О" prop="projectName" show-overflow-tooltip/>
- <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" show-overflow-tooltip/>
- <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">缂栬緫</el-button>
- </template>
- </el-table-column>
+ <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" show-overflow-tooltip :formatter="formattedNumber"/>
+ <el-table-column label="宸插紑绁ㄩ噾棰�(鍏�)" prop="invoiceTotal" show-overflow-tooltip :formatter="formattedNumber"/>
+ <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmountTotal" show-overflow-tooltip :formatter="formattedNumber"/>
</el-table>
<pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" :page="page.current"
:limit="page.size" @pagination="paginationChange" />
</div>
- <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '鏂板寮�绁ㄧ櫥璁伴〉闈�' : '缂栬緫寮�绁ㄧ櫥璁伴〉闈�'" width="70%" @close="closeDia">
+ <el-dialog v-model="dialogFormVisible" title="鏂板寮�绁ㄧ櫥璁伴〉闈�" width="85%" @close="closeDia">
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesLedgerId">
- <el-select v-model="form.salesLedgerId" placeholder="璇烽�夋嫨" clearable @change="ledgerChange" :disabled="operationType === 'edit'">
- <el-option v-for="item in ledgerList" :key="item.id" :label="item.salesContractNo" :value="item.id"/>
- </el-select>
+ <el-form-item label="閿�鍞悎鍚屽彿锛�" prop="salesContractNo">
+ <el-input v-model="form.salesContractNo" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -98,39 +91,34 @@
<el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
</el-form-item>
</el-row>
- <el-table :data="productData" border>
+ <el-table :data="productData" border show-summary :summary-method="summarizeChildrenTable">
<el-table-column align="center" label="搴忓彿" type="index" width="60" />
<el-table-column label="浜у搧澶х被" prop="productCategory" />
<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
<el-table-column label="鍗曚綅" prop="unit" />
- <el-table-column label="鏁伴噺" prop="quantity" />
- <el-table-column label="绋庣巼" prop="taxRate" />
- <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" />
- <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" />
- <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" />
- <el-table-column label="鏈寮�绁ㄦ暟" prop="invoiceNum">
+ <el-table-column label="鏁伴噺" prop="quantity" width="70" />
+ <el-table-column label="绋庣巼" prop="taxRate" width="70" />
+ <el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
+ <el-table-column label="鍚◣鎬讳环(鍏�)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
+ <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" width="150" />
+ <el-table-column label="鏈寮�绁ㄦ暟" prop="currentInvoiceNum">
<template #default="scope">
- <el-input :disabled="!scope.row.editFlag" v-model="scope.row.invoiceNum"></el-input>
+ <el-input type="number" :step="0.1" min="0" v-model="scope.row.currentInvoiceNum" @blur="invoiceNumBlur(scope.row)"></el-input>
</template>
</el-table-column>
- <el-table-column label="鏈寮�绁ㄩ噾棰�(鍏�)" prop="invoiceAmount" >
+ <el-table-column label="鏈寮�绁ㄩ噾棰�(鍏�)" prop="currentInvoiceAmount" width="150">
<template #default="scope">
- <el-input :disabled="!scope.row.editFlag" v-model="scope.row.invoiceAmount"></el-input>
+ <el-input type="number" :step="0.01" min="0" v-model="scope.row.currentInvoiceAmount" @blur="invoiceAmountBlur(scope.row)" ></el-input>
</template>
</el-table-column>
- <el-table-column label="鏈紑绁ㄦ暟(鍏�)" prop="noInvoiceNum" >
+ <el-table-column label="鏈紑绁ㄦ暟" prop="noInvoiceNum" >
<template #default="scope">
- <el-input :disabled="!scope.row.editFlag" v-model="scope.row.noInvoiceNum"></el-input>
+ <el-input type="number" min="0" disabled v-model="scope.row.noInvoiceNum"></el-input>
</template>
</el-table-column>
- <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmount" >
+ <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" prop="noInvoiceAmount" width="150" >
<template #default="scope">
- <el-input :disabled="!scope.row.editFlag" v-model="scope.row.noInvoiceAmount"></el-input>
- </template>
- </el-table-column>
- <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center">
- <template #default="scope">
- <el-button link type="primary" size="small" @click="openProductEdit('edit', scope.row);">缂栬緫</el-button>
+ <el-input type="number" min="0" disabled v-model="scope.row.noInvoiceAmount" :precision="2" :step="0.01"></el-input>
</template>
</el-table-column>
</el-table>
@@ -152,15 +140,12 @@
import {ElMessageBox } from "element-plus";
// import {userListNoPage} from "@/api/system/user.js";
import {
- ledgerListNoPage,
getSalesLedgerWithProducts,
+ ledgerListPage,
+ productList,
} from "@/api/salesManagement/salesLedger.js";
import {
- invoiceRegistrationList,
- invoiceRegistrationSaveOrUpdate,
- invoiceRegistrationDel,
- productList,
- invoiceRegistrationDetail,
+ invoiceRegistrationSave,
} from "@/api/salesManagement/invoiceRegistration.js";
const { proxy } = getCurrentInstance()
const tableData = ref([])
@@ -169,10 +154,9 @@
const tableLoading = ref(false)
const page = reactive({
current: 1,
- size: 10,
+ size: 100,
})
const total = ref(0)
-const ledgerList = ref([])
// 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁
const operationType = ref('')
const dialogFormVisible = ref(false)
@@ -192,47 +176,41 @@
}
})
const { searchForm, form, rules } = toRefs(data)
-// 浜у搧琛ㄥ崟寮规鏁版嵁
-const productFormData = reactive({
- productForm: {
- productCategory: '',
- specificationModel: '',
- unit: '',
- quantity: '',
- taxInclusiveUnitPrice: '',
- taxRate: '',
- taxInclusiveTotalPrice: '',
- taxExclusiveTotalPrice: '',
- invoiceType: '',
- },
-})
-const { productForm } = toRefs(productFormData)
+const formattedNumber = (row, column, cellValue) => {
+ if (cellValue == 0) {
+ return parseFloat(cellValue).toFixed(2);
+ }
+ if (cellValue) {
+ return parseFloat(cellValue).toFixed(2);
+ } else {
+ return cellValue;
+ }
+};
// 鏌ヨ鍒楄〃
/** 鎼滅储鎸夐挳鎿嶄綔 */
const handleQuery = () => {
page.current = 1
getList()
}
-const paginationChange = ({ current, limit }) => {
- page.current = current;
- page.size = limit;
+const paginationChange = (obj) => {
+ page.current = obj.page;
+ page.size = obj.limit;
getList()
}
const getList = () => {
tableLoading.value = true
- invoiceRegistrationList({...searchForm.value, ...page}).then(res => {
+ ledgerListPage({...searchForm.value, ...page}).then(res => {
tableLoading.value = false
- tableData.value = res.data.records;
- tableData.value.map(item => {
- item.children = []
- })
- total.value = res.data.total
+ tableData.value = res.records;
+ total.value = res.total
+ expandedRowKeys.value = []
})
}
// 琛ㄦ牸閫夋嫨鏁版嵁
const handleSelectionChange = (selection) => {
- selectedRows.value = selection
+ console.log('selection', selection)
+ selectedRows.value = selection.filter(item => item.salesContractNo !== undefined);
}
const expandedRowKeys = ref([])
// 灞曞紑琛�
@@ -240,10 +218,11 @@
if (expandedRows.length > 0) {
expandedRowKeys.value = []
try {
- productList({invoiceRegistrationId: row.id}).then(res => {
+ productList({salesLedgerId: row.id,
+ type: 1 }).then(res => {
const index = tableData.value.findIndex(item => item.id === row.id);
if (index > -1) {
- tableData.value[index].children = res.data;
+ tableData.value[index].children = res;
}
expandedRowKeys.value.push(row.id)
})
@@ -256,80 +235,37 @@
}
// 涓昏〃鍚堣鏂规硶
const summarizeMainTable = (param) => {
- const { columns, data } = param;
- const sums = [];
- columns.forEach((column, index) => {
- if (index === 0) {
- sums[index] = '鍚堣';
- return;
- }
- const prop = column.property;
- if (['contractAmount'].includes(prop)) {
- const values = data.map(item => Number(item[prop]));
- if (!values.every(value => isNaN(value))) {
- sums[index] = values.reduce((acc, val) => (!isNaN(val) ? acc + val : acc), 0);
- } else {
- sums[index] = '';
- }
- } else {
- sums[index] = '';
- }
- })
- return sums;
+ return proxy.summarizeTable(param, ['contractAmount','noInvoiceAmountTotal','invoiceTotal']);
};
// 瀛愯〃鍚堣鏂规硶
const summarizeChildrenTable = (param) => {
- const { columns, data } = param;
- const sums = [];
- columns.forEach((column, index) => {
- if (index === 0) {
- sums[index] = '鍚堣';
- return;
- }
- const prop = column.property;
- if (['taxInclusiveUnitPrice', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice','invoiceNum','invoiceAmount','noInvoiceNum','noInvoiceAmount'].includes(prop)) {
- const values = data.map(item => Number(item[prop]));
- if (!values.every(value => isNaN(value))) {
- sums[index] = values.reduce((acc, val) => (!isNaN(val) ? acc + val : acc), 0);
- } else {
- sums[index] = '';
- }
- } else {
- sums[index] = '';
- }
- });
- return sums;
+ return proxy.summarizeTable(param, ['taxInclusiveUnitPrice', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice','invoiceNum','invoiceAmount','noInvoiceNum','noInvoiceAmount']);
}
// 鎵撳紑寮规
-const openForm = (type, row) => {
- operationType.value = type
+const openForm = () => {
+ // 鍒ゆ柇鏄惁澶氶��
+ if(selectedRows.value.length != 1) {
+ proxy.$modal.msgError("璇烽�夋嫨涓�鏉″悎鍚�")
+ return;
+ }
form.value = {}
productData.value = []
- // 鏌ヨ閿�鍞悎鍚�
- ledgerListNoPage({}).then(res => {
- ledgerList.value = res.data;
- })
- if (type === 'edit') {
- invoiceRegistrationDetail({id: row.id}).then(res => {
- form.value = {...res.data}
- form.value.productDtoList = res.data.productDtoList
- productData.value = form.value.productDtoList
+ getSalesLedgerWithProducts({id: selectedRows.value[0].id}).then(res => {
+ form.value = {...res}
+ productData.value = form.value.productData.map(item => {
+ return item
})
- }
- // currentId.value = row.id;
- // getSalesLedgerWithProducts({id: row.id}).then(res => {
- // form.value = {...res}
- // productData.value = form.value.productData
- // })
- // }
- dialogFormVisible.value = true
+ dialogFormVisible.value = true
+ console.log('productData.value ',productData.value )
+ })
+
}
// 鎻愪氦琛ㄥ崟
const submitForm = () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
- form.value.productDtoList = productData;
- invoiceRegistrationSaveOrUpdate(form.value).then(res => {
+ form.value.productData = proxy.HaveJson(productData.value)
+ invoiceRegistrationSave(form.value).then(res => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛")
closeDia()
getList()
@@ -341,13 +277,6 @@
const closeDia = () => {
proxy.resetForm("formRef")
dialogFormVisible.value = false
-}
-// 鎵撳紑浜у搧寮规
-const openProductEdit = (type, row) => {
- const index = productData.value.findIndex(item => item.id === row.id);
- if (index > -1) {
- productData.value[index].editFlag = !productData.value[index].editFlag
- }
}
// 瀵煎嚭
const handleOut = () => {
@@ -364,55 +293,43 @@
proxy.$modal.msg("宸插彇娑�")
})
}
-// 鍒犻櫎
-const handleDelete = () => {
- let ids = []
- if (selectedRows.value.length > 0) {
- ids = selectedRows.value.map(item => item.id);
- } else {
- proxy.$modal.msgWarning('璇烽�夋嫨鏁版嵁')
- return
+
+//鏈寮�绁ㄥけ鐒︽搷浣�
+const invoiceNumBlur = (row) => {
+ if(!row.currentInvoiceNum){
+ row.currentInvoiceNum = 0
}
- ElMessageBox.confirm(
- '閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�',
- '瀵煎嚭', {
- confirmButtonText: '纭',
- cancelButtonText: '鍙栨秷',
- type: 'warning',
- }
- ).then(() => {
- invoiceRegistrationDel(ids).then(res => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛")
- getList()
- })
- }).catch(() => {
- proxy.$modal.msg("宸插彇娑�")
- })
-}
-// 閿�鍞彴璐︾瓫閫�
-const ledgerChange = (val) => {
- if(val){
- getSalesLedgerWithProducts({id: val}).then(res => {
- form.value = {
- salesLedgerId: res.id,
- customerName: res.customerName,
- salesman: res.salesman,
- projectName: res.projectName,
- productData: res.productData,
- salesContractNo: res.salesContractNo,
- customerId: res.customerId,
- }
- productData.value = form.value.productData.map(item => {
- item.id = ""
- item.editFlag = false
- return item
- })
- })
- }else {
- proxy.resetForm("formRef")
- productData.value = []
+ if(row.currentInvoiceNum > row.tempNoInvoiceNum){
+ proxy.$modal.msgWarning('鏈寮�绁ㄦ暟涓嶅緱澶т簬鏈紑绁ㄦ暟')
+ row.currentInvoiceNum = 0
}
+ // 璁$畻鏈寮�绁ㄩ噾棰�
+ row.currentInvoiceAmount = (row.currentInvoiceNum * row.taxInclusiveUnitPrice).toFixed(2)
+ // 璁$畻鏈紑绁ㄦ暟
+ row.noInvoiceNum = (row.originalNoInvoiceNum - row.currentInvoiceNum).toFixed(2)
+ // 璁$畻鏈紑绁ㄩ噾棰�
+ row.noInvoiceAmount = (row.tempnoInvoiceAmount - row.currentInvoiceAmount).toFixed(2)
}
+// 鏈寮�绁ㄩ噾棰濆け鐒︽搷浣�
+const invoiceAmountBlur = (row) => {
+ if(!row.currentInvoiceAmount){
+ row.currentInvoiceAmount = 0
+ }
+ // 璁$畻鏄惁瓒呰繃寮�绁ㄦ�婚噾棰�
+ if(row.currentInvoiceAmount > row.tempnoInvoiceAmount){
+ proxy.$modal.msgWarning('鏈寮�绁ㄩ噾棰濅笉寰楀ぇ浜庢湭寮�绁ㄩ噾棰�')
+ row.currentInvoiceAmount = 0
+ }
+ // 璁$畻鏈寮�绁ㄦ暟
+ row.currentInvoiceNum = (row.currentInvoiceAmount / row.taxInclusiveUnitPrice).toFixed(2)
+ console.log('row.currentInvoiceNum ',row.currentInvoiceNum )
+ console.log(' row.originalNoInvoiceNum ', row.originalNoInvoiceNum )
+ // 璁$畻鏈紑绁ㄦ暟
+ row.noInvoiceNum = (row.originalNoInvoiceNum - row.currentInvoiceNum).toFixed(2)
+ // 璁$畻鏈紑绁ㄩ噾棰�
+ row.noInvoiceAmount = (row.tempnoInvoiceAmount - row.currentInvoiceAmount).toFixed(2)
+}
+
getList()
</script>
--
Gitblit v1.9.3