From fd0e3fd03817d6610c52b09fe27cccf0d3f96438 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期二, 12 八月 2025 16:26:11 +0800
Subject: [PATCH] Merge branch 'dev_ai' of http://114.132.189.42:9002/r/product-inventory-management into ywx
---
src/views/procurementManagement/procurementLedger/index.vue | 231 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 182 insertions(+), 49 deletions(-)
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index d360763..b403fd1 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -2,26 +2,46 @@
<div class="app-container">
<div class="search_form">
<div>
- <span class="search_title">閲囪喘鍚堝悓鍙凤細</span>
- <el-input
- v-model="searchForm.purchaseContractNumber"
- style="width: 240px"
- placeholder="璇疯緭鍏�"
- @change="handleQuery"
- clearable
- prefix-icon="Search"
- />
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
- >鎼滅储</el-button
- >
+ <el-form :model="searchForm" :inline="true">
+ <el-form-item label="渚涘簲鍟嗗悕绉帮細">
+ <el-input v-model="searchForm.supplierName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search"
+ @change="handleQuery" />
+ </el-form-item>
+ <el-form-item label="閲囪喘鍚堝悓鍙凤細">
+ <el-input
+ v-model="searchForm.purchaseContractNumber"
+ style="width: 240px"
+ placeholder="璇疯緭鍏�"
+ @change="handleQuery"
+ clearable
+ :prefix-icon="Search"
+ />
+ </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>
+
+ </div>
+ <div class="table_list">
+ <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;">
<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>
- <div class="table_list">
<el-table
:data="tableData"
border
@@ -76,37 +96,50 @@
<el-table-column
label="閲囪喘鍚堝悓鍙�"
prop="purchaseContractNumber"
+ width="200"
show-overflow-tooltip
/>
<el-table-column
label="閿�鍞悎鍚屽彿"
prop="salesContractNo"
+ width="200"
show-overflow-tooltip
/>
<el-table-column
label="渚涘簲鍟嗗悕绉�"
+ width="240"
prop="supplierName"
show-overflow-tooltip
/>
<el-table-column
label="椤圭洰鍚嶇О"
prop="projectName"
+ width="420"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="浠樻鏂瑰紡"
+ width="100"
+ prop="paymentMethod"
show-overflow-tooltip
/>
<el-table-column
label="鍚堝悓閲戦(鍏�)"
prop="contractAmount"
+ width="200"
show-overflow-tooltip
:formatter="formattedNumber"
/>
<el-table-column
label="褰曞叆浜�"
prop="recorderName"
+ width="100"
show-overflow-tooltip
/>
<el-table-column
label="褰曞叆鏃ユ湡"
prop="entryDate"
+ width="100"
show-overflow-tooltip
/>
<el-table-column
@@ -121,6 +154,7 @@
type="primary"
size="small"
@click="openForm('edit', scope.row)"
+ :disabled="scope.row.receiptPaymentAmount>0 || scope.row.recorderName !== userStore.nickName"
>缂栬緫</el-button
>
</template>
@@ -236,6 +270,17 @@
</el-form-item>
</el-col>
</el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="浠樻鏂瑰紡">
+ <el-input
+ v-model="form.paymentMethod"
+ placeholder="璇疯緭鍏�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
<el-row>
<el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
<el-button type="primary" @click="openProductForm('add')"
@@ -264,7 +309,7 @@
<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" />
<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="taxRate" width="80" />
<el-table-column
label="鍚◣鍗曚环(鍏�)"
prop="taxInclusiveUnitPrice"
@@ -405,16 +450,20 @@
/>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="鏁伴噺锛�" prop="quantity">
- <el-input
- 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="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-row>
<el-row :gutter="30">
<el-col :span="12">
@@ -429,20 +478,19 @@
/>
</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"
+ clearable
+ :precision="2"
+ style="width: 100%"
+ v-model="productForm.quantity"
+ placeholder="璇疯緭鍏�"
+ @change="mathNum"
+ />
+ </el-form-item>
+ </el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="12">
@@ -453,7 +501,7 @@
:step="0.1"
clearable
style="width: 100%"
- disabled
+ @change="reverseMathNum('taxInclusiveTotalPrice')"
/>
</el-form-item>
</el-col>
@@ -462,7 +510,10 @@
label="涓嶅惈绋庢�讳环(鍏�)锛�"
prop="taxExclusiveTotalPrice"
>
- <el-input v-model="productForm.taxExclusiveTotalPrice" disabled />
+ <el-input
+ v-model="productForm.taxExclusiveTotalPrice"
+ @change="reverseMathNum('taxExclusiveTotalPrice')"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -513,7 +564,9 @@
productList,
getPurchaseById,
getOptions,
+ createPurchaseNo,
} from "@/api/procurementManagement/procurementLedger.js";
+import useFormData from "@/hooks/useFormData.js";
const { proxy } = getCurrentInstance();
const tableData = ref([]);
const productData = ref([]);
@@ -533,6 +586,7 @@
const fileList = ref([]);
import useUserStore from "@/store/modules/user";
import { modelList, productTreeList } from "@/api/basicData/product.js";
+import dayjs from "dayjs";
const userStore = useUserStore();
@@ -541,7 +595,16 @@
const dialogFormVisible = ref(false);
const data = reactive({
searchForm: {
- purchaseContractNumber: "",
+ supplierName: "", // 渚涘簲鍟嗗悕绉�
+ purchaseContractNumber: "", // 閲囪喘鍚堝悓缂栧彿
+ 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: {
purchaseContractNumber: "",
@@ -552,6 +615,7 @@
productData: [],
supplierName: "",
supplierId: "",
+ paymentMethod: "",
},
rules: {
purchaseContractNumber: [
@@ -561,7 +625,9 @@
supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
},
});
-const { searchForm, form, rules } = toRefs(data);
+const { form, rules } = toRefs(data);
+const { form: searchForm } = useFormData(data.searchForm);
+
// 浜у搧琛ㄥ崟寮规鏁版嵁
const productFormVisible = ref(false);
const productOperationType = ref("");
@@ -607,6 +673,17 @@
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();
+};
+
const formattedNumber = (row, column, cellValue) => {
return parseFloat(cellValue).toFixed(2);
};
@@ -642,14 +719,15 @@
};
const getList = () => {
tableLoading.value = true;
- purchaseListPage({ ...searchForm.value, ...page })
+ const { entryDate, ...rest } = searchForm;
+ purchaseListPage({ ...rest, ...page })
.then((res) => {
tableLoading.value = false;
- tableData.value = res.records;
+ tableData.value = res.data.records;
tableData.value.map((item) => {
item.children = [];
});
- total.value = res.total;
+ total.value = res.data.total;
expandedRowKeys.value = [];
})
.catch(() => {
@@ -672,7 +750,7 @@
productList({ salesLedgerId: row.id, type: 2 }).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);
});
@@ -701,6 +779,11 @@
form.value = {};
productData.value = [];
fileList.value = [];
+ if (operationType.value == "add") {
+ createPurchaseNo().then((res) => {
+ form.value.purchaseContractNumber = res.data;
+ });
+ }
userListNoPage().then((res) => {
userList.value = res.data;
});
@@ -755,6 +838,10 @@
// 绉婚櫎鏂囦欢
function handleRemove(file) {
console.log("handleRemove", file.id);
+ if (file.size > 1024 * 1024 * 10) {
+ // 浠呭墠绔竻鐞嗭紝涓嶈皟鐢ㄥ垹闄ゆ帴鍙e拰鎻愮ず
+ return;
+ }
if (operationType.value === "edit") {
let ids = [];
ids.push(file.id);
@@ -948,6 +1035,12 @@
const handleDelete = () => {
let ids = [];
if (selectedRows.value.length > 0) {
+ // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
+ const unauthorizedData = selectedRows.value.filter(item => item.recorderName !== userStore.nickName);
+ if (unauthorizedData.length > 0) {
+ proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+ return;
+ }
ids = selectedRows.value.map((item) => item.id);
} else {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
@@ -977,7 +1070,10 @@
return `${year}-${month}-${day}`;
}
const mathNum = () => {
- console.log("productForm.value", productForm.value);
+ if (!productForm.value.taxRate) {
+ proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+ return;
+ }
if (!productForm.value.taxInclusiveUnitPrice) {
return;
}
@@ -999,6 +1095,43 @@
);
}
};
+const reverseMathNum = (field) => {
+ if (!productForm.value.taxRate) {
+ proxy.$modal.msgWarning("璇峰厛閫夋嫨绋庣巼");
+ return;
+ }
+ const taxRate = Number(productForm.value.taxRate);
+ if (!taxRate) return;
+ if (field === 'taxInclusiveTotalPrice') {
+ // 宸茬煡鍚◣鎬讳环鍜屾暟閲忥紝鍙嶇畻鍚◣鍗曚环
+ if (productForm.value.quantity) {
+ productForm.value.taxInclusiveUnitPrice =
+ (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
+ }
+ // 宸茬煡鍚◣鎬讳环鍜屽惈绋庡崟浠凤紝鍙嶇畻鏁伴噺
+ else if (productForm.value.taxInclusiveUnitPrice) {
+ productForm.value.quantity =
+ (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
+ }
+ // 鍙嶇畻涓嶅惈绋庢�讳环
+ productForm.value.taxExclusiveTotalPrice =
+ (Number(productForm.value.taxInclusiveTotalPrice) / (1 + taxRate / 100)).toFixed(2);
+ } else if (field === 'taxExclusiveTotalPrice') {
+ // 鍙嶇畻鍚◣鎬讳环
+ productForm.value.taxInclusiveTotalPrice =
+ (Number(productForm.value.taxExclusiveTotalPrice) * (1 + taxRate / 100)).toFixed(2);
+ // 宸茬煡鏁伴噺锛屽弽绠楀惈绋庡崟浠�
+ if (productForm.value.quantity) {
+ productForm.value.taxInclusiveUnitPrice =
+ (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.quantity)).toFixed(2);
+ }
+ // 宸茬煡鍚◣鍗曚环锛屽弽绠楁暟閲�
+ else if (productForm.value.taxInclusiveUnitPrice) {
+ productForm.value.quantity =
+ (Number(productForm.value.taxInclusiveTotalPrice) / Number(productForm.value.taxInclusiveUnitPrice)).toFixed(2);
+ }
+ }
+};
// 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
const salesLedgerChange = async (row) => {
console.log("row", row);
--
Gitblit v1.9.3