From eb1bbfb7e6f3a1895b606d1a9a261928ac841f33 Mon Sep 17 00:00:00 2001 From: 曹睿 <360930172@qq.com> Date: 星期三, 18 六月 2025 17:06:43 +0800 Subject: [PATCH] feat: 添加设备台账页面 --- src/views/salesManagement/invoiceRegistration/index.vue | 784 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 488 insertions(+), 296 deletions(-) diff --git a/src/views/salesManagement/invoiceRegistration/index.vue b/src/views/salesManagement/invoiceRegistration/index.vue index 08336e5..917eb47 100644 --- a/src/views/salesManagement/invoiceRegistration/index.vue +++ b/src/views/salesManagement/invoiceRegistration/index.vue @@ -1,136 +1,350 @@ <template> <div class="app-container"> <div class="search_form"> - <div> - <span class="search_title">寮�绁ㄧ櫥璁帮細</span> - <el-input + <el-form :inline="true" :model="searchForm"> + <el-form-item label="寮�绁ㄧ櫥璁�"> + <el-input v-model="searchForm.customerName" style="width: 240px" placeholder="璇疯緭鍏ュ悕绉版悳绱�" - @change="handleQuery" clearable :prefix-icon="Search" - /> - <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> - </div> + @change="handleQuery" + /> + </el-form-item> + <el-form-item label="瀹㈡埛鍚堝悓鍙�"> + <el-input + v-model="searchForm.customerContractNo" + placeholder="璇疯緭鍏ュ鎴峰悎鍚屽彿" + clearable + /> + </el-form-item> + <el-form-item label="椤圭洰鍚嶇О"> + <el-input + v-model="searchForm.projectName" + placeholder="璇疯緭鍏ラ」鐩悕绉�" + clearable + /> + </el-form-item> + <el-form-item> + <el-checkbox + v-model="searchForm.status" + label="涓嶆樉绀烘湭寮�绁ㄩ噾棰濅负0" + @change="handleQuery" + /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="handleQuery"> 鎼滅储 </el-button> + <el-button @click="resetForm"> 閲嶇疆 </el-button> + </el-form-item> + </el-form> </div> <div class="table_list"> - <el-table :data="tableData" border v-loading="tableLoading" - @selection-change="handleSelectionChange" - :expand-row-keys="expandedRowKeys" - :row-key="row => row.id" - show-summary - :summary-method="summarizeMainTable" - @expand-change="expandChange" - height="calc(100vh - 18.5em)"> + <div class="flex justify-between"> + <div></div> + <el-button type="primary" @click="openForm" style="margin-bottom: 8px"> + 鏂板鐧昏 + </el-button> + </div> + <el-table + :data="tableData" + :border="true" + height="calc(100vh - 21em)" + v-loading="tableLoading" + :expand-row-keys="expandedRowKeys" + :row-key="(row) => row.id" + show-summary + :summary-method="summarizeMainTable" + @expand-change="expandChange" + @selection-change="handleSelectionChange" + > <el-table-column align="center" type="selection" width="55" /> <el-table-column type="expand"> <template #default="props"> - <el-table :data="props.row.children" border - show-summary - :summary-method="summarizeChildrenTable"> - <el-table-column align="center" label="搴忓彿" type="index" width="60" /> + <el-table + :data="props.row.children" + 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="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> <el-table-column align="center" label="搴忓彿" type="index" width="60" /> - <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" show-overflow-tooltip/> - <el-table-column label="瀹㈡埛鍚堝悓鍙�" prop="customerContractNo" show-overflow-tooltip/> - <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> + <el-table-column + label="閿�鍞悎鍚屽彿" + prop="salesContractNo" + show-overflow-tooltip + /> + <el-table-column + label="瀹㈡埛鍚堝悓鍙�" + prop="customerContractNo" + show-overflow-tooltip + /> + <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 + :formatter="formattedNumber" + /> + <el-table-column + label="宸插紑绁ㄩ噾棰�(鍏�)" + prop="invoiceTotal" + show-overflow-tooltip + :formatter="formattedNumber" + /> + <el-table-column label="鏈紑绁ㄩ噾棰�(鍏�)" show-overflow-tooltip> + <template #default="{ row, column }"> + <el-text type="danger"> + {{ formattedNumber(row, column, row.noInvoiceAmountTotal) }} + </el-text> </template> </el-table-column> </el-table> - <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" :page="page.current" - :limit="page.size" @pagination="paginationChange" /> + <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-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> + <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"> <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerName"> - <el-input v-model="form.customerName" placeholder="鑷姩濉厖" disabled></el-input> + <el-input + v-model="form.customerName" + placeholder="鑷姩濉厖" + disabled + ></el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="涓氬姟鍛橈細" prop="salesman"> - <el-input v-model="form.salesman" placeholder="鑷姩濉厖" disabled/> + <el-input + v-model="form.salesman" + placeholder="鑷姩濉厖" + disabled + /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName"> - <el-input v-model="form.projectName" placeholder="鑷姩濉厖" disabled/> + <el-input + v-model="form.projectName" + placeholder="鑷姩濉厖" + disabled + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item label="褰曞叆浜�"> + <el-input v-model="form.createUer" placeholder="璇疯緭鍏ュ綍鍏ヤ汉" /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="寮�绁ㄦ棩鏈�" prop="issueDate"> + <el-date-picker + style="width: 100%" + v-model="form.issueDate" + type="date" + placeholder="璇烽�夋嫨" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item label="褰曞叆鏃ユ湡锛�" prop="createTime"> + <el-date-picker + style="width: 100%" + v-model="form.createTime" + type="date" + placeholder="璇烽�夋嫨" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item label="鍙戠エ鍙风爜锛�" prop="invoiceNo"> + <el-input + v-model="form.invoiceNo" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> </el-row> <el-row> - <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate"> - </el-form-item> + <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate"> </el-form-item> </el-row> - <el-table :data="productData" border> - <el-table-column align="center" label="搴忓彿" type="index" width="60" /> + <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" + :formatter="formattedInputNumber" + :precision="2" + :step="0.01" + ></el-input> </template> </el-table-column> </el-table> @@ -146,276 +360,254 @@ </template> <script setup> -import pagination from '@/components/PIMTable/Pagination.vue' -import { ref } from 'vue' -import {Search} from "@element-plus/icons-vue"; -import {ElMessageBox } from "element-plus"; +import pagination from "@/components/PIMTable/Pagination.vue"; +import { onMounted, ref } from "vue"; +import { Search } from "@element-plus/icons-vue"; +import { ElMessageBox } from "element-plus"; // import {userListNoPage} from "@/api/system/user.js"; import { - ledgerListNoPage, getSalesLedgerWithProducts, -} from "@/api/salesManagement/salesLedger.js"; -import { - invoiceRegistrationList, - invoiceRegistrationSaveOrUpdate, - invoiceRegistrationDel, + ledgerListPage, productList, - invoiceRegistrationDetail, -} from "@/api/salesManagement/invoiceRegistration.js"; -const { proxy } = getCurrentInstance() -const tableData = ref([]) -const productData = ref([]) -const selectedRows = ref([]) -const tableLoading = ref(false) +} from "@/api/salesManagement/salesLedger.js"; +import { invoiceRegistrationSave } from "@/api/salesManagement/invoiceRegistration.js"; +import useFormData from "@/hooks/useFormData"; + +const { proxy } = getCurrentInstance(); +const tableData = ref([]); +const productData = ref([]); +const selectedRows = ref([]); +const tableLoading = ref(false); const page = reactive({ current: 1, - size: 10, -}) -const total = ref(0) -const ledgerList = ref([]) + size: 100, +}); +const total = ref(0); // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁 -const operationType = ref('') -const dialogFormVisible = ref(false) +const operationType = ref(""); +const dialogFormVisible = ref(false); const data = reactive({ searchForm: { - customerName: '', + customerName: "", + status: false, + customerContractNo: undefined, // 瀹㈡埛鍚堝悓鍙� + projectName: undefined, // 椤圭洰鍚嶇О + createUer: undefined, // 褰曞叆浜� + issueDate: undefined, // 寮�绁ㄦ棩鏈� + createTime: undefined, // 褰曞叆鏃ユ湡锛� }, form: { - salesLedgerId: '', - customerName: '', - salesman: '', - projectName: '', - productData: [] + salesLedgerId: "", + customerName: "", + salesman: "", + projectName: "", + productData: [], }, rules: { - salesLedgerId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }] - } -}) -const { searchForm, form, rules } = toRefs(data) -// 浜у搧琛ㄥ崟寮规鏁版嵁 -const productFormData = reactive({ - productForm: { - productCategory: '', - specificationModel: '', - unit: '', - quantity: '', - taxInclusiveUnitPrice: '', - taxRate: '', - taxInclusiveTotalPrice: '', - taxExclusiveTotalPrice: '', - invoiceType: '', + salesLedgerId: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], }, -}) -const { productForm } = toRefs(productFormData) +}); +const { form, rules } = toRefs(data); +const { form: searchForm, resetForm } = useFormData(data.searchForm); + +const formattedNumber = (row, column, cellValue) => { + if (cellValue == 0) { + return parseFloat(cellValue).toFixed(2); + } + if (cellValue) { + return parseFloat(cellValue).toFixed(2); + } else { + return cellValue; + } +}; + +const formattedInputNumber = (value) => { + return parseFloat(value).toFixed(2); +}; // 鏌ヨ鍒楄〃 /** 鎼滅储鎸夐挳鎿嶄綔 */ const handleQuery = () => { - page.current = 1 - getList() -} -const paginationChange = ({ current, limit }) => { - page.current = current; - page.size = limit; - getList() -} + page.current = 1; + getList(); +}; +const paginationChange = (obj) => { + page.current = obj.page; + page.size = obj.limit; + getList(); +}; const getList = () => { - tableLoading.value = true - invoiceRegistrationList({...searchForm.value, ...page}).then(res => { - tableLoading.value = false - tableData.value = res.data.records; - tableData.value.map(item => { - item.children = [] - }) - total.value = res.data.total - }) -} + tableLoading.value = true; + ledgerListPage({ ...searchForm, ...page }).then((res) => { + tableLoading.value = false; + tableData.value = res.records; + total.value = res.total; + expandedRowKeys.value = []; + }); +}; // 琛ㄦ牸閫夋嫨鏁版嵁 const handleSelectionChange = (selection) => { - selectedRows.value = selection -} -const expandedRowKeys = ref([]) + console.log("selection", selection); + selectedRows.value = selection.filter( + (item) => item.salesContractNo !== undefined + ); +}; +const expandedRowKeys = ref([]); // 灞曞紑琛� const expandChange = (row, expandedRows) => { if (expandedRows.length > 0) { - expandedRowKeys.value = [] + expandedRowKeys.value = []; try { - productList({invoiceRegistrationId: row.id}).then(res => { - const index = tableData.value.findIndex(item => item.id === row.id); + 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) - }) + expandedRowKeys.value.push(row.id); + }); } catch (error) { - console.log(error) + console.log(error); } } else { - expandedRowKeys.value = [] + expandedRowKeys.value = []; } -} +}; // 涓昏〃鍚堣鏂规硶 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", + "currentInvoiceAmount", + "noInvoiceNum", + "noInvoiceAmount", + ]); +}; // 鎵撳紑寮规 -const openForm = (type, row) => { - operationType.value = type - 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 - }) +const openForm = () => { + // 鍒ゆ柇鏄惁澶氶�� + if (selectedRows.value.length != 1) { + proxy.$modal.msgError("璇烽�夋嫨涓�鏉″悎鍚�"); + return; } - // currentId.value = row.id; - // getSalesLedgerWithProducts({id: row.id}).then(res => { - // form.value = {...res} - // productData.value = form.value.productData - // }) - // } - dialogFormVisible.value = true -} + form.value = {}; + productData.value = []; + getSalesLedgerWithProducts({ id: selectedRows.value[0].id }).then((res) => { + form.value = { ...res }; + productData.value = form.value.productData.map((item) => { + return item; + }); + dialogFormVisible.value = true; + console.log("productData.value ", productData.value); + }); +}; // 鎻愪氦琛ㄥ崟 const submitForm = () => { - proxy.$refs["formRef"].validate(valid => { + proxy.$refs["formRef"].validate((valid) => { if (valid) { - form.value.productDtoList = productData; - invoiceRegistrationSaveOrUpdate(form.value).then(res => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛") - closeDia() - getList() - }) + form.value.productData = proxy.HaveJson(productData.value); + invoiceRegistrationSave(form.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + getList(); + }); } - }) -} + }); +}; // 鍏抽棴寮规 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 - } -} + proxy.resetForm("formRef"); + dialogFormVisible.value = false; +}; // 瀵煎嚭 const handleOut = () => { - ElMessageBox.confirm( - '閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�', - '瀵煎嚭', { - confirmButtonText: '纭', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ).then(() => { - proxy.download("/invoiceRegistration/export", {}, '寮�绁ㄧ櫥璁颁俊鎭�.xlsx') - }).catch(() => { - proxy.$modal.msg("宸插彇娑�") + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", }) -} -// 鍒犻櫎 -const handleDelete = () => { - let ids = [] - if (selectedRows.value.length > 0) { - ids = selectedRows.value.map(item => item.id); - } else { - proxy.$modal.msgWarning('璇烽�夋嫨鏁版嵁') - return - } - ElMessageBox.confirm( - '閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�', - '瀵煎嚭', { - confirmButtonText: '纭', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ).then(() => { - invoiceRegistrationDel(ids).then(res => { - proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛") - getList() + .then(() => { + proxy.download("/invoiceRegistration/export", {}, "寮�绁ㄧ櫥璁颁俊鎭�.xlsx"); }) - }).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 = [] + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; + +//鏈寮�绁ㄥけ鐒︽搷浣� +const invoiceNumBlur = (row) => { + if (!row.currentInvoiceNum) { + row.currentInvoiceNum = 0; } -} -getList() + 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); +}; + +onMounted(() => { + getList(); +}); </script> <style scoped lang="scss"> - +.table_list { + margin-top: unset; +} +.flex { + display: flex; +} +.justify-between { + justify-content: space-between; +} +::v-deep(.el-checkbox__label) { + font-weight: bold; +} </style> -- Gitblit v1.9.3