From f936f4a3b32a0bf2b99399ced63944f218e582b9 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期六, 12 七月 2025 15:32:40 +0800 Subject: [PATCH] 1.供应商档案缺少纳税人识别号字段展示 --- src/views/salesManagement/salesLedger/index.vue | 782 +++++++++++++++++++++++++------------------------------ 1 files changed, 351 insertions(+), 431 deletions(-) diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue index 87ff92e..fe21088 100644 --- a/src/views/salesManagement/salesLedger/index.vue +++ b/src/views/salesManagement/salesLedger/index.vue @@ -1,224 +1,99 @@ <template> <div class="app-container"> <div class="search_form"> - <div> - <span class="search_title">瀹㈡埛鍚嶇О锛�</span> - <el-input - v-model="searchForm.customerName" - style="width: 150px" - placeholder="璇疯緭鍏�" - @change="handleQuery" - clearable - prefix-icon="Search" - /> - <span class="search_title ml-10">瀹㈡埛鍚堝悓鍙凤細</span> - <el-input - v-model="searchForm.customerContractNo" - style="width: 150px" - placeholder="璇疯緭鍏�" - @change="handleQuery" - clearable - prefix-icon="Search" - /> - <span class="search_title ml-10">閿�鍞悎鍚屽彿锛�</span> - <el-input - v-model="searchForm.salesContractNo" - style="width: 150px" - placeholder="璇疯緭鍏�" - @change="handleQuery" - clearable - prefix-icon="Search" - /> - <span class="search_title ml-10">椤圭洰鍚嶇О锛�</span> - <el-input - v-model="searchForm.projectName" - style="width: 150px" - 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> + <el-form :model="searchForm" :inline="true"> + <el-form-item label="瀹㈡埛鍚嶇О锛�"> + <el-input v-model="searchForm.customerName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + @change="handleQuery" /> + </el-form-item> + <el-form-item label="瀹㈡埛鍚堝悓鍙凤細"> + <el-input v-model="searchForm.customerContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + @change="handleQuery" /> + </el-form-item> + <el-form-item label="閿�鍞悎鍚屽彿锛�"> + <el-input v-model="searchForm.salesContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + @change="handleQuery" /> + </el-form-item> + <el-form-item label="椤圭洰鍚嶇О锛�"> + <el-input v-model="searchForm.projectName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + @change="handleQuery" /> + </el-form-item> + <el-form-item label="褰曞叆鏃ユ湡锛�"> + <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" + placeholder="璇烽�夋嫨" clearable @change="changeDaterange" /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="handleQuery"> 鎼滅储 </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 - style="width: 100%" - :summary-method="summarizeMainTable" - @expand-change="expandChange" - height="calc(100vh - 18.5em)" - > + <div class="actions"> + <div></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> + </div> + <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange" + :expand-row-keys="expandedRowKeys" :row-key="(row) => row.id" show-summary style="width: 100%" + :summary-method="summarizeMainTable" @expand-change="expandChange" height="calc(100vh - 18.5em)"> <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" - :formatter="formattedNumber" - /> - <el-table-column - label="鍚◣鎬讳环(鍏�)" - prop="taxInclusiveTotalPrice" - :formatter="formattedNumber" - /> - <el-table-column - label="涓嶅惈绋庢�讳环(鍏�)" - prop="taxExclusiveTotalPrice" - :formatter="formattedNumber" - /> + <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> </template> </el-table-column> <el-table-column align="center" label="搴忓彿" type="index" width="60" /> - <el-table-column - label="閿�鍞悎鍚屽彿" - prop="salesContractNo" - width="180" - show-overflow-tooltip - /> - <el-table-column - label="瀹㈡埛鍚堝悓鍙�" - prop="customerContractNo" - width="180" - show-overflow-tooltip - /> - <el-table-column - label="瀹㈡埛鍚嶇О" - prop="customerName" - width="300" - show-overflow-tooltip - /> - <el-table-column - label="涓氬姟鍛�" - prop="salesman" - width="100" - show-overflow-tooltip - /> - <el-table-column - label="椤圭洰鍚嶇О" - prop="projectName" - width="180" - show-overflow-tooltip - /> - <el-table-column - label="鍚堝悓閲戦(鍏�)" - prop="contractAmount" - width="180" - show-overflow-tooltip - :formatter="formattedNumber" - /> - <el-table-column - label="褰曞叆浜�" - prop="entryPersonName" - width="100" - show-overflow-tooltip - /> - <el-table-column - label="褰曞叆鏃ユ湡" - prop="entryDate" - width="120" - show-overflow-tooltip - /> - <el-table-column - label="绛捐鏃ユ湡" - prop="executionDate" - width="120" - show-overflow-tooltip - /> - <el-table-column - fixed="right" - label="鎿嶄綔" - min-width="60" - align="center" - > + <el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" width="180" show-overflow-tooltip /> + <el-table-column label="瀹㈡埛鍚堝悓鍙�" prop="customerContractNo" width="180" show-overflow-tooltip /> + <el-table-column label="瀹㈡埛鍚嶇О" prop="customerName" width="300" show-overflow-tooltip /> + <el-table-column label="涓氬姟鍛�" prop="salesman" width="100" show-overflow-tooltip /> + <el-table-column label="椤圭洰鍚嶇О" prop="projectName" width="180" show-overflow-tooltip /> + <el-table-column label="浠樻鏂瑰紡" prop="paymentMethod" show-overflow-tooltip /> + <el-table-column label="鍚堝悓閲戦(鍏�)" prop="contractAmount" width="220" show-overflow-tooltip + :formatter="formattedNumber" /> + <el-table-column label="褰曞叆浜�" prop="entryPersonName" width="100" show-overflow-tooltip /> + <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" width="120" show-overflow-tooltip /> + <el-table-column label="绛捐鏃ユ湡" prop="executionDate" width="120" show-overflow-tooltip /> + <el-table-column fixed="right" label="鎿嶄綔" min-width="140" align="center"> <template #default="scope"> - <el-button - link - type="primary" - size="small" - @click="openForm('edit', scope.row)" - >缂栬緫</el-button - > + <el-button link type="primary" size="small" :disabled="scope.row.invoiceTotal>0 || scope.row.entryPersonName !== userStore.nickName" @click="openForm('edit', scope.row)">缂栬緫</el-button> +<!-- <el-button link type="primary" size="small" @click="openForm('view', scope.row)">璇︽儏</el-button>--> + <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">闄勪欢</el-button> </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="operationType === 'add' ? '鏂板閿�鍞彴璐﹂〉闈�' : '缂栬緫閿�鍞彴璐﹂〉闈�'" width="70%" + @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="salesContractNo"> - <el-input - v-model="form.salesContractNo" - placeholder="鑷姩鐢熸垚" - clearable - disabled - /> + <el-input v-model="form.salesContractNo" placeholder="鑷姩鐢熸垚" clearable disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="涓氬姟鍛橈細" prop="salesman"> - <el-select v-model="form.salesman" placeholder="璇烽�夋嫨" clearable> - <el-option - v-for="item in userList" - :key="item.nickName" - :label="item.nickName" - :value="item.nickName" - /> + <el-select v-model="form.salesman" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'"> + <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" + :value="item.nickName" /> </el-select> </el-form-item> </el-col> @@ -226,26 +101,13 @@ <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="瀹㈡埛鍚堝悓鍙凤細" prop="customerContractNo"> - <el-input - v-model="form.customerContractNo" - placeholder="璇疯緭鍏�" - clearable - /> + <el-input v-model="form.customerContractNo" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'"/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="瀹㈡埛鍚嶇О锛�" prop="customerId"> - <el-select - v-model="form.customerId" - placeholder="璇烽�夋嫨" - clearable - > - <el-option - v-for="item in customerOption" - :key="item.id" - :label="item.customerName" - :value="item.id" - > + <el-select v-model="form.customerId" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'"> + <el-option v-for="item in customerOption" :key="item.id" :label="item.customerName" :value="item.id"> {{ item.customerName + "鈥斺��" + item.taxpayerIdentificationNumber }} @@ -257,152 +119,77 @@ <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName"> - <el-input - v-model="form.projectName" - placeholder="璇疯緭鍏�" - clearable - /> + <el-input v-model="form.projectName" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> + <el-col :span="12"> + <el-form-item label="绛捐鏃ユ湡锛�" prop="executionDate"> + <el-date-picker style="width: 100%" v-model="form.executionDate" value-format="YYYY-MM-DD" + format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable :disabled="operationType === 'view'" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <el-form-item label="褰曞叆浜猴細" prop="entryPerson"> + <el-select v-model="form.entryPerson" placeholder="璇烽�夋嫨" clearable @change="changs" disabled> + <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" /> + </el-select> + </el-form-item> + </el-col> <el-col :span="12"> - <el-form-item label="褰曞叆浜猴細" prop="entryPerson"> - <el-select - v-model="form.entryPerson" - placeholder="璇烽�夋嫨" - clearable - @change="changs" - disabled - > - <el-option - v-for="item in userList" - :key="item.userId" - :label="item.nickName" - :value="item.userId" - /> - </el-select> + <el-form-item label="褰曞叆鏃ユ湡锛�" prop="entryDate"> + <el-date-picker style="width: 100%" v-model="form.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" + type="date" placeholder="璇烽�夋嫨" clearable disabled /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> - <el-form-item label="褰曞叆鏃ユ湡锛�" prop="entryDate"> - <el-date-picker - style="width: 100%" - v-model="form.entryDate" - value-format="YYYY-MM-DD" - format="YYYY-MM-DD" - type="date" - placeholder="璇烽�夋嫨" - clearable - disabled - /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="绛捐鏃ユ湡锛�" prop="executionDate"> - <el-date-picker - style="width: 100%" - v-model="form.executionDate" - value-format="YYYY-MM-DD" - format="YYYY-MM-DD" - type="date" - placeholder="璇烽�夋嫨" - clearable - /> + <el-form-item label="浠樻鏂瑰紡"> + <el-input v-model="form.paymentMethod" placeholder="璇疯緭鍏�" clearable :disabled="operationType === 'view'" /> </el-form-item> </el-col> </el-row> <el-row> <el-form-item label="浜у搧淇℃伅锛�" prop="entryDate"> - <el-button type="primary" @click="openProductForm('add')" - >娣诲姞</el-button - > - <el-button plain type="danger" @click="deleteProduct" - >鍒犻櫎</el-button - > + <el-button v-if="operationType !== 'view'" type="primary" @click="openProductForm('add')">娣诲姞</el-button> + <el-button v-if="operationType !== 'view'" plain type="danger" @click="deleteProduct" >鍒犻櫎</el-button> </el-form-item> </el-row> - <el-table - :data="productData" - border - @selection-change="productSelected" - show-summary - :summary-method="summarizeMainTable" - > - <el-table-column align="center" type="selection" width="55" /> - <el-table-column - align="center" - label="搴忓彿" - type="index" - width="60" - /> + <el-table :data="productData" border @selection-change="productSelected" show-summary + :summary-method="summarizeMainTable"> + <el-table-column align="center" type="selection" width="55" v-if="operationType !== 'view'" /> + <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" - :formatter="formattedNumber" - /> - <el-table-column - label="鍚◣鎬讳环(鍏�)" - prop="taxInclusiveTotalPrice" - :formatter="formattedNumber" - /> - <el-table-column - label="涓嶅惈绋庢�讳环(鍏�)" - prop="taxExclusiveTotalPrice" - :formatter="formattedNumber" - /> - <el-table-column - fixed="right" - label="鎿嶄綔" - min-width="60" - align="center" - > + <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 fixed="right" label="鎿嶄綔" min-width="60" align="center" v-if="operationType !== 'view'"> <template #default="scope"> - <el-button - link - type="primary" - size="small" - @click="openProductForm('edit', scope.row)" - >缂栬緫</el-button - > + <el-button link type="primary" size="small" @click="openProductForm('edit', scope.row)">缂栬緫</el-button> </template> </el-table-column> </el-table> <el-row :gutter="30"> <el-col :span="24"> <el-form-item label="澶囨敞路锛�" prop="remark"> - <el-input - v-model="form.remark" - placeholder="璇疯緭鍏�" - clearable - type="textarea" - :rows="2" - /> + <el-input v-model="form.remark" placeholder="璇疯緭鍏�" clearable type="textarea" :rows="2" :disabled="operationType === 'view'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"> <el-form-item label="闄勪欢鏉愭枡锛�" prop="remark"> - <el-upload - v-model:file-list="fileList" - :action="upload.url" - multiple - ref="fileUpload" - auto-upload - :headers="upload.headers" - :before-upload="handleBeforeUpload" - :on-error="handleUploadError" - :on-success="handleUploadSuccess" - :on-remove="handleRemove" - > - <el-button type="primary">涓婁紶</el-button> - <template #tip> + <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload + :headers="upload.headers" :before-upload="handleBeforeUpload" :on-error="handleUploadError" + :on-success="handleUploadSuccess" :on-remove="handleRemove"> + <el-button type="primary" v-if="operationType !== 'view'">涓婁紶</el-button> + <template #tip v-if="operationType !== 'view'"> <div class="el-upload__tip"> 鏂囦欢鏍煎紡鏀寔 doc锛宒ocx锛寈ls锛寈lsx锛宲pt锛宲ptx锛宲df锛宼xt锛寈ml锛宩pg锛宩peg锛宲ng锛実if锛宐mp锛宺ar锛寊ip锛�7z @@ -420,53 +207,25 @@ </div> </template> </el-dialog> - <el-dialog - v-model="productFormVisible" - :title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'" - width="40%" - @close="closeProductDia" - > - <el-form - :model="productForm" - label-width="140px" - label-position="top" - :rules="productRules" - ref="productFormRef" - > + <el-dialog v-model="productFormVisible" :title="productOperationType === 'add' ? '鏂板浜у搧' : '缂栬緫浜у搧'" width="40%" + @close="closeProductDia"> + <el-form :model="productForm" label-width="140px" label-position="top" :rules="productRules" ref="productFormRef"> <el-row :gutter="30"> <el-col :span="24"> <el-form-item label="浜у搧澶х被锛�" prop="productCategory"> <!-- <el-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable> <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/> </el-select> --> - <el-tree-select - v-model="productForm.productCategory" - placeholder="璇烽�夋嫨" - clearable - check-strictly - @change="getModels" - :data="productOptions" - :render-after-expand="false" - style="width: 100%" - /> + <el-tree-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable check-strictly + @change="getModels" :data="productOptions" :render-after-expand="false" style="width: 100%" /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"> <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId"> - <el-select - v-model="productForm.productModelId" - placeholder="璇烽�夋嫨" - clearable - @change="getProductModel" - > - <el-option - v-for="item in modelOptions" - :key="item.id" - :label="item.model" - :value="item.id" - /> + <el-select v-model="productForm.productModelId" placeholder="璇烽�夋嫨" clearable @change="getProductModel"> + <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id" /> </el-select> </el-form-item> </el-col> @@ -474,86 +233,49 @@ <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍗曚綅锛�" prop="unit"> - <el-input - v-model="productForm.unit" - placeholder="璇疯緭鍏�" - clearable - /> + <el-input v-model="productForm.unit" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="鏁伴噺锛�" prop="quantity"> - <el-input - type="number" - :step="0.1" - :min="0" - v-model="productForm.quantity" - placeholder="璇疯緭鍏�" - clearable - @change="mathNum" - /> - </el-form-item> - </el-col> + <el-col :span="12"> + <el-form-item label="绋庣巼(%)锛�" prop="taxRate"> + <el-select v-model="productForm.taxRate" placeholder="璇烽�夋嫨" clearable @change="calculateFromTaxRate"> + <el-option label="1" value="1" /> + <el-option label="6" value="6" /> + <el-option label="13" value="13" /> + </el-select> + </el-form-item> + </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍚◣鍗曚环(鍏�)锛�" prop="taxInclusiveUnitPrice"> - <el-input - v-model="productForm.taxInclusiveUnitPrice" - placeholder="璇疯緭鍏�" - clearable - @change="mathNum" - /> + <el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%" + placeholder="璇疯緭鍏�" clearable @change="calculateFromUnitPrice" /> </el-form-item> </el-col> - <el-col :span="12"> - <el-form-item label="绋庣巼(%)锛�" prop="taxRate"> - <el-select - v-model="productForm.taxRate" - placeholder="璇烽�夋嫨" - clearable - @change="mathNum" - > - <el-option label="1" value="1" /> - <el-option label="6" value="6" /> - <el-option label="13" value="13" /> - </el-select> - </el-form-item> - </el-col> + <el-col :span="12"> + <el-form-item label="鏁伴噺锛�" prop="quantity"> + <el-input-number :step="0.1" :min="0" v-model="productForm.quantity" placeholder="璇疯緭鍏�" clearable + @change="calculateFromQuantity" style="width: 100%" /> + </el-form-item> + </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍚◣鎬讳环(鍏�)锛�" prop="taxInclusiveTotalPrice"> - <el-input - v-model="productForm.taxInclusiveTotalPrice" - placeholder="璇疯緭鍏�" - clearable - disabled - /> + <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromTotalPrice" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item - label="涓嶅惈绋庢�讳环(鍏�)锛�" - prop="taxExclusiveTotalPrice" - > - <el-input - v-model="productForm.taxExclusiveTotalPrice" - placeholder="璇疯緭鍏�" - clearable - disabled - /> + <el-form-item label="涓嶅惈绋庢�讳环(鍏�)锛�" prop="taxExclusiveTotalPrice"> + <el-input v-model="productForm.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable @change="calculateFromExclusiveTotalPrice" /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍙戠エ绫诲瀷锛�" prop="invoiceType"> - <el-select - v-model="productForm.invoiceType" - placeholder="璇烽�夋嫨" - clearable - > + <el-select v-model="productForm.invoiceType" placeholder="璇烽�夋嫨" clearable> <el-option label="澧炴櫘绁�" value="澧炴櫘绁�" /> <el-option label="澧炰笓绁�" value="澧炰笓绁�" /> </el-select> @@ -568,6 +290,7 @@ </div> </template> </el-dialog> + <FileList ref="fileListRef" /> </div> </template> @@ -578,6 +301,7 @@ import { ElMessageBox } from "element-plus"; import useUserStore from "@/store/modules/user"; import { userListNoPage } from "@/api/system/user.js"; +import FileList from "./fileList.vue"; import { ledgerListPage, productList, @@ -590,6 +314,9 @@ delLedgerFile, } from "@/api/salesManagement/salesLedger.js"; import { modelList, productTreeList } from "@/api/basicData/product.js"; +import useFormData from "@/hooks/useFormData.js"; +import dayjs from "dayjs"; + const userStore = useUserStore(); const { proxy } = getCurrentInstance(); const tableData = ref([]); @@ -613,10 +340,16 @@ const dialogFormVisible = ref(false); const data = reactive({ searchForm: { - customerName: "", - customerContractNo: "", - salesContractNo: "", - projectName: "", + customerName: "", // 瀹㈡埛鍚嶇О + customerContractNo: "", // 瀹㈡埛鍚堝悓缂栧彿 + salesContractNo: "", // 閿�鍞悎鍚岀紪鍙� + projectName: "", // 椤圭洰鍚嶇О + entryDate: [ + dayjs().format("YYYY-MM-DD"), + dayjs().add(1, "day").format("YYYY-MM-DD"), + ], // 褰曞叆鏃ユ湡 + entryDateStart: dayjs().format("YYYY-MM-DD"), + entryDateEnd: dayjs().add(1, "day").format("YYYY-MM-DD"), }, form: { salesContractNo: "", @@ -629,6 +362,7 @@ maintenanceTime: "", productData: [], executionDate: "", + paymentMethod: "", }, rules: { salesman: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], @@ -642,7 +376,8 @@ executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }], }, }); -const { searchForm, form, rules } = toRefs(data); +const { form, rules } = toRefs(data); +const { form: searchForm } = useFormData(data.searchForm); // 浜у搧琛ㄥ崟寮规鏁版嵁 const productFormVisible = ref(false); const productOperationType = ref(""); @@ -680,12 +415,25 @@ }, }); const { productForm, productRules } = toRefs(productFormData); +// 闃叉寰幆璁$畻鐨勬爣蹇� +const isCalculating = ref(false); const upload = reactive({ // 涓婁紶鐨勫湴鍧� url: import.meta.env.VITE_APP_BASE_API + "/file/upload", // 璁剧疆涓婁紶鐨勮姹傚ご閮� headers: { Authorization: "Bearer " + getToken() }, }); + +const changeDaterange = (value) => { + if (value) { + searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD"); + searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD"); + } else { + searchForm.entryDateStart = undefined; + searchForm.entryDateEnd = undefined; + } + handleQuery(); +}; // 鏌ヨ鍒楄〃 /** 鎼滅储鎸夐挳鎿嶄綔 */ @@ -700,7 +448,8 @@ }; const getList = () => { tableLoading.value = true; - ledgerListPage({ ...searchForm.value, ...page }) + const { entryDate, ...rest } = searchForm; + ledgerListPage({ ...rest, ...page }) .then((res) => { tableLoading.value = false; tableData.value = res.records; @@ -748,7 +497,7 @@ if (nodes[i].children && nodes[i].children.length > 0) { const foundNode = findNodeById(nodes[i].children, productId); if (foundNode) { - return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐� + return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐� } } } @@ -786,7 +535,7 @@ 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; + tableData.value[index].children = res.data; } expandedRowKeys.value.push(row.id); }); @@ -823,9 +572,8 @@ customerList().then((res) => { customerOption.value = res; }); - console.log("userStore.id", userStore.id); form.value.entryPerson = userStore.id; - if (type === "edit") { + if (type !== "add") { currentId.value = row.id; getSalesLedgerWithProducts({ id: row.id, type: 1 }).then((res) => { form.value = { ...res }; @@ -849,10 +597,10 @@ // 涓婁紶鍓嶆牎妫� function handleBeforeUpload(file) { // 鏍℃鏂囦欢澶у皬 - if (file.size > 1024 * 1024 * 10) { - proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB!"); - return false; - } + // if (file.size > 1024 * 1024 * 10) { + // proxy.$modal.msgError("涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃10MB!"); + // return false; + // } proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��..."); return true; } @@ -886,14 +634,15 @@ const submitForm = () => { proxy.$refs["formRef"].validate((valid) => { if (valid) { - if (productData.value.length > 0) { + console.log('productData.value--', productData.value) + if (productData.value !== null && productData.value.length > 0) { form.value.productData = proxy.HaveJson(productData.value); } else { proxy.$modal.msgWarning("璇锋坊鍔犱骇鍝佷俊鎭�"); return; } let tempFileIds = []; - if (fileList.value.length > 0) { + if (fileList.value !== null && fileList.value.length > 0) { tempFileIds = fileList.value.map((item) => item.tempId); } form.value.tempFileIds = tempFileIds; @@ -937,6 +686,7 @@ }; const submitProductEdit = () => { productForm.value.salesLedgerId = currentId.value; + productForm.value.type = 1 addOrUpdateSalesLedgerProduct(productForm.value).then((res) => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeProductDia(); @@ -1061,6 +811,166 @@ ); } }; + +// 鏍规嵁鍚◣鎬讳环璁$畻鍚◣鍗曚环鍜屾暟閲� +const calculateFromTotalPrice = () => { + if (isCalculating.value) return; + + const totalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice); + const quantity = parseFloat(productForm.value.quantity); + + if (!totalPrice || !quantity || quantity <= 0) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺 + productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + totalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁涓嶅惈绋庢�讳环璁$畻鍚◣鍗曚环鍜屾暟閲� +const calculateFromExclusiveTotalPrice = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const exclusiveTotalPrice = parseFloat(productForm.value.taxExclusiveTotalPrice); + const quantity = parseFloat(productForm.value.quantity); + const taxRate = parseFloat(productForm.value.taxRate); + + if (!exclusiveTotalPrice || !quantity || quantity <= 0 || !taxRate) { + return; + } + + isCalculating.value = true; + + // 鍏堣绠楀惈绋庢�讳环 = 涓嶅惈绋庢�讳环 / (1 - 绋庣巼/100) + const taxRateDecimal = taxRate / 100; + const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal); + productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2); + + // 璁$畻鍚◣鍗曚环 = 鍚◣鎬讳环 / 鏁伴噺 + productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2); + + isCalculating.value = false; +}; + +// 鏍规嵁鏁伴噺鍙樺寲璁$畻鎬讳环 +const calculateFromQuantity = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const quantity = parseFloat(productForm.value.quantity); + const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice); + + if (!quantity || quantity <= 0 || !unitPrice) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鎬讳环 + productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + productForm.value.taxInclusiveTotalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁鍚◣鍗曚环鍙樺寲璁$畻鎬讳环 +const calculateFromUnitPrice = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const quantity = parseFloat(productForm.value.quantity); + const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice); + + if (!quantity || quantity <= 0 || !unitPrice) { + return; + } + + isCalculating.value = true; + + // 璁$畻鍚◣鎬讳环 + productForm.value.taxInclusiveTotalPrice = (unitPrice * quantity).toFixed(2); + + // 濡傛灉鏈夌◣鐜囷紝璁$畻涓嶅惈绋庢�讳环 + if (productForm.value.taxRate) { + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + productForm.value.taxInclusiveTotalPrice, + productForm.value.taxRate + ); + } + + isCalculating.value = false; +}; + +// 鏍规嵁绋庣巼鍙樺寲璁$畻涓嶅惈绋庢�讳环 +const calculateFromTaxRate = () => { + if (!productForm.value.taxRate) { + proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼"); + return; + } + if (isCalculating.value) return; + + const inclusiveTotalPrice = parseFloat(productForm.value.taxInclusiveTotalPrice); + const taxRate = parseFloat(productForm.value.taxRate); + + if (!inclusiveTotalPrice || !taxRate) { + return; + } + + isCalculating.value = true; + + // 璁$畻涓嶅惈绋庢�讳环 + productForm.value.taxExclusiveTotalPrice = + proxy.calculateTaxExclusiveTotalPrice( + inclusiveTotalPrice, + taxRate + ); + + isCalculating.value = false; +}; +/** + * 涓嬭浇鏂囦欢 + * + * @param row 涓嬭浇鏂囦欢鐨勭浉鍏充俊鎭璞� + */ +const fileListRef = ref(null) +const downLoadFile = (row) => { + getSalesLedgerWithProducts({ id: row.id, type: 1 }).then((res) => { + fileListRef.value.open(res.salesLedgerFiles) + }); + +} getList(); </script> @@ -1068,4 +978,14 @@ .ml-10 { margin-left: 10px; } + +.table_list { + margin-top: unset; +} + +.actions { + display: flex; + justify-content: space-between; + margin-bottom: 10px; +} </style> -- Gitblit v1.9.3