From dd159ea51a7a77bd8cc00c70c0e900f472fb3395 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期四, 05 六月 2025 18:00:17 +0800
Subject: [PATCH] 完善基础管理 供应商、客户、煤种等功能
---
src/views/basicInformation/index.vue | 9
src/views/procureMent/index.vue | 157 +++++-------
src/views/procureMent/components/ProductionDialog.vue | 132 +++++++---
src/views/basicInformation/mould/coal.vue | 32 +-
src/views/basicInformation/mould/supplier.vue | 20 +
src/views/basicInformation/mould/customer.vue | 23 +
src/views/production/components/ProductionDialog.vue | 289 ++++++++---------------
7 files changed, 304 insertions(+), 358 deletions(-)
diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
index 48dcbf6..ff27c0e 100644
--- a/src/views/basicInformation/index.vue
+++ b/src/views/basicInformation/index.vue
@@ -30,12 +30,12 @@
</div>
<pagination v-if="total>0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination"
:layout="'total, prev, pager, next, jumper'" />
- <Supplier v-if="tabName === 'supplier'" v-model:supplierDialogFormVisible="dialogFormVisible" :form="form"
+ <Supplier v-if="tabName === 'supplier'" v-model:copyForm="copyForm" v-model:supplierDialogFormVisible="dialogFormVisible" :form="form"
:title="title" @submit="handleSubmit" @beforeClose="handleBeforeClose"
@update:dialogFormVisible="handleDialogFormVisible" :addOrEdit="addOrEdit" />
- <Customer v-if="tabName === 'customer'" v-model:customerDialogFormVisible="dialogFormVisible" :form="form"
+ <Customer v-if="tabName === 'customer'" v-model:copyForm="copyForm" v-model:customerDialogFormVisible="dialogFormVisible" :form="form"
:title="title" @submit="handleSubmit" :addOrEdit="addOrEdit" @beforeClose="handleBeforeClose" />
- <Coal v-if="tabName === 'coal'" v-model:coalDialogFormVisible="dialogFormVisible" :form="form" :title="title"
+ <Coal v-if="tabName === 'coal'" v-model:copyForm="copyForm" v-model:coalDialogFormVisible="dialogFormVisible" :form="form" :title="title"
:addOrEdit="addOrEdit" @submit="handleSubmit" />
<coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'"
v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible" :form="form" :title="title"
@@ -144,7 +144,6 @@
userList.value.forEach(user => {
userMap.value[user.userId] = user.username;
});
- console.log('鐢ㄦ埛鏄犲皠琛�:', userMap.value);
}
} catch (error) {
console.error('鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:', error);
@@ -236,7 +235,6 @@
minWidth: 150,
showOverflowTooltip: true,
formatter: (row, column, cellValue) => {
- console.log(row, column, cellValue);
let arr = [
row.businessProvinceId,
row.businessCityId,
@@ -387,7 +385,6 @@
};
// 鎻愪氦琛ㄥ崟
const handleSubmit = async (val) => {
- console.log(val);
if (val.result.code !== 200) {
ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg);
return;
diff --git a/src/views/basicInformation/mould/coal.vue b/src/views/basicInformation/mould/coal.vue
index 59eafad..ae905ed 100644
--- a/src/views/basicInformation/mould/coal.vue
+++ b/src/views/basicInformation/mould/coal.vue
@@ -32,12 +32,12 @@
/>
</el-form-item>
- <el-form-item>
+ <el-form-item class="dialog-footer">
+ <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
+ <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
<el-button type="primary" @click="submitForm">
纭畾
</el-button>
- <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
- <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
</el-form-item>
</el-form>
</el-dialog>
@@ -69,18 +69,16 @@
default: ''
},
})
-
+const copyForm = defineModel("copyForm", {
+ required: true,
+ type: Object,
+});
// 鍦ㄧ粍浠舵寕杞芥椂鑾峰彇鐢ㄦ埛淇℃伅
onMounted(async () => {
// 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭�
if (!userStore.name) {
try {
await userStore.getInfo()
- console.log('鐢ㄦ埛淇℃伅:', {
- id: userStore.id,
- name: userStore.name,
- nickName: userStore.nickName
- })
// 鑷姩濉厖缁存姢浜篒D
if (props.addOrEdit === 'add') {
formData.value.maintainerId = userStore.id
@@ -89,11 +87,6 @@
console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error)
}
} else {
- console.log('鐢ㄦ埛淇℃伅:', {
- id: userStore.id,
- name: userStore.name,
- nickName: userStore.nickName
- })
// 鑷姩濉厖缁存姢浜篒D
if (props.addOrEdit === 'add') {
formData.value.maintainerId = userStore.id
@@ -159,7 +152,8 @@
// 閲嶇疆琛ㄥ崟
const resetForm = () => {
if (!formRef.value) return
- formRef.value.resetFields()
+ formData.value = JSON.parse(JSON.stringify(copyForm.value));
+ // formRef.value.resetFields()
}
// 鍏抽棴寮圭獥
const handleClose = () => {
@@ -186,5 +180,11 @@
}
</script>
-<style lang="sass" scoped>
+<style lang="scss" scoped>
+.dialog-footer {
+ display: flex;
+ margin-top: 20px;
+ flex-direction: column;
+ align-items: flex-end;
+}
</style>
\ No newline at end of file
diff --git a/src/views/basicInformation/mould/customer.vue b/src/views/basicInformation/mould/customer.vue
index 4053cd7..f0f25c1 100644
--- a/src/views/basicInformation/mould/customer.vue
+++ b/src/views/basicInformation/mould/customer.vue
@@ -38,12 +38,12 @@
<el-form-item label="鑱旂郴浜鸿缁�" prop="contactAddress">
<el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉璇︾粏鍦板潃" />
</el-form-item>
- <el-form-item>
+ <el-form-item class="dialog-footer">
+ <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
+ <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
<el-button type="primary" @click="submitForm">
纭畾
</el-button>
- <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
- <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
</el-form-item>
</el-form>
</el-dialog>
@@ -83,6 +83,10 @@
"handleBeforeClose",
"update:customerDialogFormVisible",
]);
+const copyForm = defineModel("copyForm", {
+ required: true,
+ type: Object,
+});
onMounted(() => {
fetchAreaOptions()
})
@@ -159,7 +163,6 @@
let result = await addOrEditCustomer({
...formData.value,
})
- console.log(result);
obj.value = {
title: "缂栬緫",
...formData.value,
@@ -178,7 +181,9 @@
// 閲嶇疆琛ㄥ崟
const resetForm = () => {
if (!formRef.value) return;
- formRef.value.resetFields();
+ formData.value = JSON.parse(JSON.stringify(copyForm.value));
+
+ // formRef.value.resetFields();
};
// 鍏抽棴寮圭獥
const handleClose = () => {
@@ -213,5 +218,11 @@
});
</script>
-<style lang="sass" scoped>
+<style lang="scss" scoped>
+.dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 20px;
+ flex-direction: column;
+}
</style>
\ No newline at end of file
diff --git a/src/views/basicInformation/mould/supplier.vue b/src/views/basicInformation/mould/supplier.vue
index 9580ea2..b18cd9d 100644
--- a/src/views/basicInformation/mould/supplier.vue
+++ b/src/views/basicInformation/mould/supplier.vue
@@ -37,10 +37,10 @@
<el-form-item label="鑱旂郴浜鸿缁嗗湴鍧�" prop="contactAddress">
<el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃" />
</el-form-item>
- <el-form-item>
- <el-button type="primary" @click="submitForm"> 纭畾</el-button>
+ <el-form-item class="dialog-footer">
<el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button>
<el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button>
+ <el-button type="primary" @click="submitForm"> 纭畾</el-button>
</el-form-item>
</el-form>
</el-dialog>
@@ -73,7 +73,10 @@
});
const emit = defineEmits(["submit", "handleBeforeClose"]);
-
+const copyForm = defineModel("copyForm", {
+ required: true,
+ type: Object,
+});
onMounted(() => {
fetchAreaOptions()
})
@@ -173,7 +176,8 @@
// 閲嶇疆琛ㄥ崟
const resetForm = () => {
if (!formRef.value) return;
- formRef.value.resetFields();
+ formData.value = JSON.parse(JSON.stringify(copyForm.value));
+ // formRef.value.resetFields();
};
// 鍏抽棴寮圭獥
const handleClose = () => {
@@ -205,5 +209,11 @@
],
});
</script>
-<style lang="sass" scoped>
+<style lang="scss" scoped>
+.dialog-footer {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 20px;
+ flex-direction: column;
+}
</style>
\ No newline at end of file
diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue
index 547129c..3e6d937 100644
--- a/src/views/procureMent/components/ProductionDialog.vue
+++ b/src/views/procureMent/components/ProductionDialog.vue
@@ -19,29 +19,52 @@
<el-form-item label="渚涘簲鍟嗗悕绉�" prop="supplierName">
<el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" />
</el-form-item>
- <el-form-item label="鐓ょ" prop="category">
- <el-input v-model="form.category" placeholder="璇疯緭鍏�" />
+ <el-form-item label="鐓ょ" prop="coal">
+ <el-input v-model="form.coal" placeholder="璇疯緭鍏�" />
</el-form-item>
<el-form-item label="鍗曚綅" prop="unit">
<el-input v-model="form.unit" placeholder="璇疯緭鍏�" />
</el-form-item>
- <el-form-item label="閲囪喘鏁伴噺" prop="purchaseAmount">
- <el-input v-model="form.purchaseAmount" placeholder="璇疯緭鍏�" />
+ <el-form-item label="閲囪喘鏁伴噺" prop="purchaseQuantity">
+ <el-input v-model="form.purchaseQuantity" placeholder="璇疯緭鍏�" />
</el-form-item>
- <el-form-item label="鍗曚环(绋庡墠)" prop="priceBeforeTax">
- <el-input v-model="form.priceBeforeTax" placeholder="璇疯緭鍏�" />
+ <el-form-item label="鍗曚环(涓嶅惈绋�)" prop="priceExcludingTax">
+ <el-input v-model="form.priceExcludingTax" placeholder="璇疯緭鍏�" >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">鍏�</i>
+ </template>
+ </el-input>
</el-form-item>
- <el-form-item label="鎬讳环(绋庡墠)" prop="totalBeforeTax">
- <el-input v-model="form.totalBeforeTax" placeholder="璇疯緭鍏�" />
+ <el-form-item label="鎬讳环(涓嶅惈绋�)" prop="totalPriceExcludingTax">
+ <el-input v-model="form.totalPriceExcludingTax" placeholder="璇疯緭鍏�" >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">鍏�</i>
+ </template>
+ </el-input>
</el-form-item>
- <el-form-item label="鐑��" prop="calorificValue">
- <el-input v-model="form.calorificValue" placeholder="璇疯緭鍏�" />
+ <el-form-item label="鍗曚环(鍚◣)" prop="priceIncludingTax">
+ <el-input v-model="form.priceIncludingTax" placeholder="璇疯緭鍏�" >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">鍏�</i>
+ </template>
+ </el-input>
</el-form-item>
- <el-form-item label="鐧昏浜�" prop="registrant">
- <el-input v-model="form.registrant" placeholder="璇疯緭鍏�" />
+ <el-form-item label="鎬讳环(鍚◣)" prop="totalPriceIncludingTax">
+ <el-input v-model="form.totalPriceIncludingTax" placeholder="璇疯緭鍏�" >
+ <template v-slot:suffix>
+ <i style="font-style:normal;">鍏�</i>
+ </template>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="绋庣巼" prop="taxRate">
+ <el-input v-model="form.taxRate" placeholder="璇疯緭鍏�" />
+ </el-form-item>
+ <el-form-item label="鐧昏浜�" prop="registrantId">
+ <el-input v-model="form.registrantId" disabled placeholder="璇疯緭鍏�" />
</el-form-item>
<el-form-item label="鐧昏鏃ユ湡" prop="registrationDate">
<el-date-picker
+ disabled
v-model="form.registrationDate"
type="date"
placeholder="YYYY-MM-DD"
@@ -52,20 +75,18 @@
</el-form>
<template #footer>
<div class="dialog-footer">
- <el-button type="primary" @click="handleSubmit">淇濆瓨</el-button>
<!-- 閲嶇疆鍜屽彇娑� -->
<el-button
- type="primary"
@click="handleClose"
v-if="title.includes('鏂板')"
>鍙栨秷</el-button
>
<el-button
- type="primary"
@click="handleReset"
v-if="title.includes('缂栬緫')"
>閲嶇疆</el-button
>
+ <el-button type="primary" @click="handleSubmit">纭</el-button>
</div>
</template>
</el-dialog>
@@ -73,8 +94,10 @@
</template>
<script setup name="ProductionDialog">
-import { ref, defineProps, watch } from "vue";
+import { ref, defineProps, watch, onMounted, nextTick } from "vue";
import { ElMessage } from "element-plus";
+import useUserStore from '@/store/modules/user'
+import {addOrEditPR} from "@/api/procureMent";
const props = defineProps({
title: {
type: String,
@@ -90,19 +113,31 @@
required: true,
type: Object,
});
+const copyForm = defineModel("copyForm", {
+ required: true,
+ type: Object,
+});
+const userStore = useUserStore()
+const userInfo = ref({});
+onMounted(async () => {
+ let res = await userStore.getInfo()
+ userInfo.value = res;
+})
const rules = {
supplierName: [
{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" },
],
- category: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
+ coal: [{ required: true, message: "璇疯緭鍏ョ叅绉�", trigger: "blur" }],
unit: [{ required: true, message: "璇疯緭鍏ュ崟浣�", trigger: "blur" }],
- purchaseAmount: [
+ purchaseQuantity: [
{ required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "blur" },
],
- priceBeforeTax: [{ required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur" }],
- totalBeforeTax: [{ required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur" }],
- calorificValue: [{ required: true, message: "璇疯緭鍏ョ儹鍊�", trigger: "blur" }],
- registrant: [{ required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur" }],
+ priceExcludingTax: [{ required: true, message: "璇疯緭鍏ュ崟浠�", trigger: "blur" }],
+ totalPriceExcludingTax: [{ required: true, message: "璇疯緭鍏ユ�讳环", trigger: "blur" }],
+ priceIncludingTax: [{ required: true, message: "璇疯緭鍏ュ惈绋庡崟浠�", trigger: "blur" }],
+ totalPriceIncludingTax: [{ required: true, message: "璇疯緭鍏ュ惈绋庢�讳环", trigger: "blur" }],
+ taxRate: [{ required: true, message: "璇疯緭鍏ョ◣鐜�", trigger: "blur" }],
+ registrantId: [{ required: true, message: "璇疯緭鍏ョ櫥璁颁汉", trigger: "blur" }],
registrationDate: [
{ required: true, message: "璇烽�夋嫨鐧昏鏃ユ湡", trigger: "change" },
],
@@ -110,34 +145,47 @@
// 鍏抽棴寮圭獥
const handleClose = () => {
dialogFormVisible.value = false;
+};
+const handleReset = async () => {
+ // 閲嶇疆琛ㄥ崟鏁版嵁
+ form.value = JSON.parse(JSON.stringify(copyForm.value));
+ // 绛夊緟DOM鏇存柊瀹屾垚鍚庢竻闄よ〃鍗曢獙璇佺姸鎬�
+ await nextTick();
+ if (formRef.value) {
+ formRef.value.clearValidate();
+ }
console.log(form.value);
};
-const handleReset = () => {
- if (!formRef.value) return;
- formRef.value.resetFields();
- ElMessage.success("琛ㄥ崟宸查噸缃�");
-};
-// 鎸佺画鐩戝惉form.value鐨勫彉鍖�
-watch(
- () => form.value,
- (val) => {
- console.log(val);
- }
-);
const formRef = ref(null);
// 鎻愪氦琛ㄥ崟
const handleSubmit = async () => {
if (!formRef.value) return;
- await formRef.value.validate((valid) => {
+ await formRef.value.validate(async (valid) => {
if (valid) {
- try {
- emit("success", { ...form.value });
- handleClose();
- ElMessage.success("淇濆瓨鎴愬姛");
- } catch (error) {
- console.error("淇濆瓨澶辫触:", error);
- ElMessage.error("淇濆瓨澶辫触");
+ console.log("琛ㄥ崟楠岃瘉閫氳繃", form.value);
+ const obj = ref({});
+ if (props.title.includes('鏂板')) {
+ let result = await addOrEditPR({
+ ...form.value,
+ })
+ obj.value = {
+ title: "鏂板",
+ ...form.value,
+ result
+ };
+ } else {
+ delete form.value.updateTime
+ delete form.value.createTime
+ let result = await addOrEditPR({
+ ...form.value,
+ })
+ obj.value = {
+ title: "缂栬緫",
+ ...form.value,
+ result
+ };
}
+ emit("submit", obj.value);
}
});
};
diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
index b04a0f1..038b727 100644
--- a/src/views/procureMent/index.vue
+++ b/src/views/procureMent/index.vue
@@ -1,78 +1,37 @@
<template>
<div class="app-container">
- <el-form :inline="true" :model="queryParams" class="search-form">
- <el-form-item label="鎼滅储">
- <el-input
- v-model="queryParams.searchText"
- placeholder="璇疯緭鍏ュ叧閿瘝"
- clearable
- :style="{ width: '100%' }"
- />
- </el-form-item>
- <el-form-item label="渚涘簲鍟嗗悕绉�">
- <el-input
- v-model="queryParams.supplierName"
- placeholder="璇疯緭鍏�"
- clearable
- :style="{ width: '100%' }"
- />
- </el-form-item>
- <el-form-item label="缁熶竴浜鸿瘑鍒彿">
- <el-input
- v-model="queryParams.identifyNumber"
- placeholder="璇疯緭鍏�"
- clearable
- :style="{ width: '100%' }"
- />
- </el-form-item>
- <el-form-item label="缁忚惀鍦板潃">
- <el-input
- v-model="queryParams.address"
- placeholder="璇疯緭鍏�"
- clearable
- :style="{ width: '100%' }"
- />
- </el-form-item>
- <el-form-item>
- <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
- <el-button @click="resetQuery">閲嶇疆</el-button>
- </el-form-item>
- </el-form>
+ <el-form :inline="true" :model="queryParams" class="search-form">
+ <el-form-item label="鎼滅储">
+ <el-input v-model="queryParams.searchText" placeholder="璇疯緭鍏ュ叧閿瘝" clearable :style="{ width: '100%' }" />
+ </el-form-item>
+ <el-form-item label="渚涘簲鍟嗗悕绉�">
+ <el-input v-model="queryParams.supplierName" placeholder="璇疯緭鍏�" clearable :style="{ width: '100%' }" />
+ </el-form-item>
+ <el-form-item label="缁熶竴浜鸿瘑鍒彿">
+ <el-input v-model="queryParams.identifyNumber" placeholder="璇疯緭鍏�" clearable :style="{ width: '100%' }" />
+ </el-form-item>
+ <el-form-item label="缁忚惀鍦板潃">
+ <el-input v-model="queryParams.address" placeholder="璇疯緭鍏�" clearable :style="{ width: '100%' }" />
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
+ <el-button @click="resetQuery">閲嶇疆</el-button>
+ </el-form-item>
+ </el-form>
<el-card>
<!-- 鎿嶄綔鎸夐挳鍖� -->
<el-row :gutter="24" class="table-toolbar">
- <el-button type="primary" :icon="Plus" @click="handleAdd"
- >鏂板缓</el-button
- >
+ <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
<el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
<el-button type="info" :icon="Download" @click="handleExport">瀵煎嚭</el-button>
- </el-row>
+ </el-row>
<!-- 琛ㄦ牸缁勪欢 -->
- <data-table
- :loading="loading"
- :table-data="tableData"
- :columns="columns"
- @selection-change="handleSelectionChange"
- @edit="handleEdit"
- @delete="handleDeleteSuccess"
- :show-selection="true"
- :border="true"
- :maxHeight="440"
- /> <pagination
- v-if="total>0"
- :page="pageNum"
- :limit="pageSize"
- :total="total"
- @pagination="handlePagination"
- :layout="'total, prev, pager, next, jumper'"
- />
- </el-card> <ProductionDialog
- v-model:dialogFormVisible="dialogFormVisible"
- :form="form"
- :title="title"
- @submit="handleSubmit"
- @success="handleSuccess"
- />
+ <data-table :loading="loading" :table-data="tableData" :columns="columns" @selection-change="handleSelectionChange"
+ @edit="handleEdit" @delete="handleDeleteSuccess" :show-selection="true" :border="true" :maxHeight="440" />
+ <pagination v-if="total>0" :page="pageNum" :limit="pageSize" :total="total" @pagination="handlePagination"
+ :layout="'total, prev, pager, next, jumper'" />
+ </el-card> <ProductionDialog v-model:copyForm="copyForm" v-model:dialogFormVisible="dialogFormVisible" v-model:form="form" :title="title" @submit="handleSubmit"
+ @success="handleSuccess" />
</div>
</template>
@@ -84,6 +43,8 @@
import Pagination from "@/components/Pagination";
import ProductionDialog from './components/ProductionDialog.vue';
import { purchaseRegistration } from "@/api/procureMent";
+import useUserStore from '@/store/modules/user'
+
const { proxy } = getCurrentInstance()
const dialogFormVisible = ref(false);
const form = ref({});
@@ -94,6 +55,7 @@
const pageNum = ref(1)
const pageSize = ref(10);
const selectedRows = ref([]);
+const copyForm = ref({});
// 鏌ヨ鍙傛暟
const queryParams = reactive({
searchText: "",
@@ -113,10 +75,13 @@
// 杩欓噷娣诲姞瀹為檯鐨勬煡璇㈤�昏緫
getList();
};
-
+const userStore = useUserStore();
+onMounted(async() => {
+ let res = await userStore.getInfo()
+ form.value.registrantId = res.user.userName; // 璁剧疆鐧昏浜篒D
+});
// 鍒嗛〉澶勭悊
const handlePagination = (val) => {
- console.log("鍒嗛〉鍙傛暟锛�", val);
pageNum.value = val.page;
pageSize.value = val.limit;
queryParams.pageNum = val.page;
@@ -127,8 +92,8 @@
// supplier 渚涘簲鍟嗘暟鎹�
const columns = ref([
{ prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
- { prop: "unit", label: "鍗曚綅", minWidth: 150 },
{ prop: "coal", label: "鐓ょ绫诲瀷", minWidth: 120 },
+ { prop: "unit", label: "鍗曚綅", minWidth: 150 },
{ prop: "purchaseQuantity", label: "閲囪喘鏁伴噺", minWidth: 100 },
{ prop: "priceIncludingTax", label: "鍗曚环锛堝惈绋庯級", minWidth: 150 },
{ prop: "totalPriceIncludingTax", label: "鎬讳环锛堝惈绋庯級", minWidth: 100 },
@@ -145,46 +110,52 @@
queryParams[key] = "";
}
});
- handleQuery();
};
// 鏂板
const handleAdd = () => {
- console.log("鐐瑰嚮鏂板鎸夐挳");
addOrEdit.value = "add";
handleAddEdit();
};
// 鏂板缂栬緫
const handleAddEdit = () => {
addOrEdit.value == "add" ? (title.value = "鏂板") : (title.value = "缂栬緫");
- title.value = title.value + "閲囪喘淇℃伅";
- openDialog();
+ title.value = title.value + "閲囪喘淇℃伅";
+ openDialog();
};
// 鎵撳紑寮圭獥
const openDialog = () => {
if (addOrEdit.value === "edit") {
// 纭繚澶嶅埗涓�浠芥暟鎹紝閬垮厤鐩存帴寮曠敤
- form.value = JSON.parse(JSON.stringify(form.value));
+ copyForm.value = JSON.parse(JSON.stringify(form.value));
dialogFormVisible.value = true;
return;
}
// 鏂板缓鏃跺垵濮嬪寲琛ㄥ崟
form.value = {
supplierName: "",
- category: "",
+ coal: "",
unit: "",
- purchaseAmount: "",
- priceBeforeTax: "",
- totalBeforeTax: "",
- calorificValue: "",
- registrant: "",
+ purchaseQuantity: "",
+ priceExcludingTax: "",
+ totalPriceExcludingTax: "",
+ priceIncludingTax: "",
+ totalPriceIncludingTax: "",
+ taxRate: "",
+ registrantId: "",
registrationDate: new Date().toISOString().split('T')[0]
- }; dialogFormVisible.value = true;
- console.log("openDialog 璁剧疆 dialogFormVisible =", dialogFormVisible.value);
+ };
+ // 鏂板缓鏃朵篃闇�瑕佽缃� copyForm 鐢ㄤ簬閲嶇疆鍔熻兘
+ copyForm.value = JSON.parse(JSON.stringify(form.value));
+ dialogFormVisible.value = true;
};
// 鎻愪氦琛ㄥ崟
-const handleSubmit = () => {
- // 鎷垮埌鎻愪氦鏁版嵁
+const handleSubmit = (val) => {
+ if (val.result.code !== 200) {
+ ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg);
+ return;
+ }
+ ElMessage.success(val.title + val.result.msg);
dialogFormVisible.value = false;
getList();
};
@@ -194,9 +165,9 @@
};
// 琛ㄦ牸缂栬緫鏂规硶
const handleEdit = (row) => {
- form.value = JSON.parse(JSON.stringify(row));
- addOrEdit.value = "edit";
- handleAddEdit()
+ form.value = JSON.parse(JSON.stringify(row));
+ addOrEdit.value = "edit";
+ handleAddEdit()
};
const handleDelete = () => {
if (selectedRows.value.length === 0) {
@@ -204,7 +175,7 @@
return;
}
ElMessageBox.confirm(
- `纭鍒犻櫎閫変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
+ `纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛焋,
"鎻愮ず",
{
confirmButtonText: "纭畾",
@@ -236,7 +207,6 @@
};
// 鎴愬姛
const handleSuccess = (val) => {
- console.log(val);
tableData.value.push(val);
// getList();
total.value = tableData.value.length;
@@ -251,13 +221,11 @@
pageSize: pageSize.value,
...queryParams
});
- console.log("API杩斿洖鏁版嵁:", res);
if (res && res.data) {
tableData.value = res.data.records || [];
total.value = res.data.total || 0;
}
} catch (error) {
- console.error("鑾峰彇鏁版嵁澶辫触:", error);
ElMessage.error("鑾峰彇鏁版嵁澶辫触");
} finally {
loading.value = false;
@@ -267,7 +235,7 @@
</script>
<style scoped>
-.app-container{
+.app-container {
box-sizing: border-box;
}
.search-form {
@@ -310,7 +278,8 @@
}
}
/* 琛ㄦ牸宸ュ叿鏍� */
-.table-toolbar, .table-toolbar > * {
+.table-toolbar,
+.table-toolbar>* {
margin: 0 0 0 0 !important;
}
.table-toolbar{
diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 2787bb2..dedb7b3 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -1,22 +1,11 @@
<template>
- <el-dialog
- v-model="dialogVisible"
- :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
- width="800px"
- :close-on-click-modal="false"
- @close="handleClose"
- >
- <el-form
- ref="formRef"
- :model="formData"
- :rules="rules"
- label-width="120px"
- class="production-form"
- >
- <el-row :gutter="20">
- <el-col :span="12">
+ <el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'" width="1200px"
+ :close-on-click-modal="false" @close="handleClose">
+ <el-form ref="formRef" :model="formData" :rules="rules" class="production-form">
+ <el-row :gutter="24">
+ <el-col :span="6">
<el-form-item label="鐓ょ" prop="category">
- <el-select v-model="formData.category" placeholder="璇烽�夋嫨鐓ょ" clearable style="width: 100%">
+ <el-select v-model="formData.category" placeholder="璇烽�夋嫨鐓ょ" clearable style="width: 100%" @change="selectChange">
<el-option label="鐐肩劍" value="鐐肩劍" />
<el-option label="姘旂叅" value="姘旂叅" />
<el-option label="鏃犵儫鐓�" value="鏃犵儫鐓�" />
@@ -25,137 +14,53 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="鍗曚綅" prop="unit">
- <el-select v-model="formData.unit" placeholder="璇烽�夋嫨鍗曚綅" clearable style="width: 100%">
- <el-option label="鍚ㄤ綅" value="鍚ㄤ綅" />
- <el-option label="鍗冨厠" value="鍗冨厠" />
- </el-select>
+ <el-col :span="6">
+ <el-form-item label="鐑��" prop="Calorific">
+ <el-input v-model="formData.Calorific" placeholder="璇疯緭鍏ョ儹鍊�" clearable />
</el-form-item>
</el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鐢熶骇鏁伴噺" prop="productionVolume">
- <el-input-number
- v-model="formData.productionVolume"
- :min="0"
- :precision="2"
- style="width: 100%"
- @change="calculateTotal"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="浜哄伐鎴愭湰" prop="laborCost">
- <el-input-number
- v-model="formData.laborCost"
- :min="0"
- :precision="2"
- style="width: 100%"
- @change="calculateTotal"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鍘熸枡鎴愭湰" prop="materialCost">
- <el-input-number
- v-model="formData.materialCost"
- :min="0"
- :precision="2"
- style="width: 100%"
- @change="calculateTotal"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="璁惧璐圭敤" prop="equipmentCost">
- <el-input-number
- v-model="formData.equipmentCost"
- :min="0"
- :precision="2"
- style="width: 100%"
- @change="calculateTotal"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鎬绘垚鏈�" prop="totalCost">
- <el-input-number
- v-model="formData.totalCost"
- :min="0"
- :precision="2"
- style="width: 100%"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="鎬讳环鏍�" prop="totalPrice">
- <el-input-number
- v-model="formData.totalPrice"
- :min="0"
- :precision="2"
- style="width: 100%"
- @change="calculateProfit"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鍒╂鼎" prop="profit">
- <el-input-number
- v-model="formData.profit"
- :min="0"
- :precision="2"
- style="width: 100%"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="澶嶈浜�" prop="reviewer">
- <el-input v-model="formData.reviewer" placeholder="璇疯緭鍏ュ璁颁汉" />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="鏃ユ湡" prop="date">
- <el-date-picker
- v-model="formData.date"
- type="date"
- placeholder="璇烽�夋嫨鏃ユ湡"
- style="width: 100%"
- value-format="YYYY-MM-DD"
- />
- </el-form-item>
+ <el-col :span="4" :offset="8">
+ <el-button type="primary" @click="search">鏌ヨ</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
</el-col>
</el-row>
</el-form>
-
+ <ETable :columns="columns" height="200" @cell-edit="handleCellEdit" :showOperations="false" :tableData="tableData" @row-click="handleRowClick" :editableColumns="['used']" />
+ <el-row :gutter="10">
+ <el-col :span="4">
+ <h1>鐢熶骇鏄庣粏</h1>
+ </el-col>
+ </el-row>
+ <el-row :gutter="10">
+ <el-col :span="2">
+ <el-button type="primary">
+ <el-icon><Plus /></el-icon> 鏂板
+ </el-button>
+ </el-col>
+ <el-col :span="2"><el-button type="danger">
+ <el-icon><Delete /></el-icon> 鍒犻櫎
+ </el-button></el-col>
+ <el-col :span="2">
+ <el-button type="warning">
+ <el-icon><Warning /></el-icon> 淇敼
+ </el-button>
+ </el-col>
+ </el-row>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">鍙� 娑�</el-button>
<el-button type="primary" :loading="loading" @click="handleSubmit">纭� 瀹�</el-button>
</div>
+
</template>
</el-dialog>
</template>
<script setup>
import { ref, reactive, watch } from 'vue'
+import ETable from '@/components/Table/ETable.vue'
import { ElMessage } from 'element-plus'
+import { Delete, Warning } from '@element-plus/icons-vue'
const props = defineProps({
visible: {
@@ -171,14 +76,28 @@
default: () => ({})
}
})
-
+const dialogVisible = defineModel('visible', {
+ type: Boolean,
+ default: false
+})
const emit = defineEmits(['update:visible', 'success'])
-const dialogVisible = ref(false)
const dialogType = ref('add')
const loading = ref(false)
const formRef = ref(null)
+const tableData = ref([])
+const currentRow = ref(null)
+const columns = [
+ { label: '鐓ょ', prop: 'category' },
+ { label: '鐑��', prop: 'Calorific' },
+ { label: '搴撳瓨鏁伴噺', prop: 'stock' },
+ { label: '鏈浣跨敤鏁伴噺', prop: 'used' },
+]
+const handleRowClick = (row) => {
+ currentRow.value = row
+ console.log('褰撳墠琛屾暟鎹�:', currentRow.value)
+}
// 琛ㄥ崟鏁版嵁
const formData = reactive({
category: '',
@@ -197,51 +116,43 @@
// 琛ㄥ崟楠岃瘉瑙勫垯
const rules = {
category: [{ required: true, message: '璇烽�夋嫨鐓ょ', trigger: 'change' }],
- unit: [{ required: true, message: '璇烽�夋嫨鍗曚綅', trigger: 'change' }],
- productionVolume: [{ required: true, message: '璇疯緭鍏ョ敓浜ф暟閲�', trigger: 'blur' }],
- laborCost: [{ required: true, message: '璇疯緭鍏ヤ汉宸ユ垚鏈�', trigger: 'blur' }],
- materialCost: [{ required: true, message: '璇疯緭鍏ュ師鏂欐垚鏈�', trigger: 'blur' }],
- equipmentCost: [{ required: true, message: '璇疯緭鍏ヨ澶囪垂鐢�', trigger: 'blur' }],
- totalPrice: [{ required: true, message: '璇疯緭鍏ユ�讳环鏍�', trigger: 'blur' }],
- reviewer: [{ required: true, message: '璇疯緭鍏ュ璁颁汉', trigger: 'blur' }],
- date: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }]
}
-// 鐩戝惉visible鍙樺寲
-watch(() => props.visible, (val) => {
- dialogVisible.value = val
- if (val) {
- dialogType.value = props.type
- if (props.type === 'edit') {
- Object.assign(formData, props.rowData)
- }
+const search = () => {
+ // 鏌ヨ閫昏緫
+ if (!formData.category) {
+ return this.$message.error('璇烽�夋嫨鐓ょ')
}
-})
-
-// 鐩戝惉dialogVisible鍙樺寲
-watch(() => dialogVisible.value, (val) => {
- emit('update:visible', val)
-})
-
-// 璁$畻鎬绘垚鏈�
-const calculateTotal = () => {
- formData.totalCost = (
- formData.laborCost +
- formData.materialCost +
- formData.equipmentCost
- )
- calculateProfit()
+ loading.value = true
+ // 妯℃嫙鏌ヨ鏁版嵁
+ setTimeout(() => {
+ // 鍋囨暟鎹�
+ tableData.value = [
+ { category: '鐐肩劍', Calorific: '6000', stock: 100, used: 20 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '姘旂叅', Calorific: '5500', stock: 80, used: 15 },
+ { category: '鏃犵儫鐓�', Calorific: '7000', stock: 120, used: 30 }
+ ]
+ loading.value = false
+ }, 1000)
}
-// 璁$畻鍒╂鼎
-const calculateProfit = () => {
- formData.profit = formData.totalPrice - formData.totalCost
+const reset = () => {
+ // formRef
+ formRef.value?.resetFields()
+}
+
+const selectChange = (value) => {
}
// 鎻愪氦琛ㄥ崟
const handleSubmit = async () => {
if (!formRef.value) return
-
+
await formRef.value.validate((valid) => {
if (valid) {
loading.value = true
@@ -271,28 +182,28 @@
date: ''
})
}
+
+// 娣诲姞鍗曞厓鏍肩紪杈戝鐞嗗嚱鏁�
+const handleCellEdit = (row, prop, value) => {
+ console.log('鍗曞厓鏍肩紪杈�:', prop)
+ // console.log('鍗曞厓鏍肩紪杈戝畬鎴�:', row, prop, value)
+ // 杩欓噷鍙互娣诲姞楠岃瘉閫昏緫锛屼緥濡傛鏌ヤ娇鐢ㄩ噺鏄惁澶т簬搴撳瓨
+ if (prop === 'used' && Number(value) > Number(row.stock)) {
+ ElMessage.warning('浣跨敤鏁伴噺涓嶈兘澶т簬搴撳瓨鏁伴噺锛�')
+ // 鍙互鍦ㄨ繖閲岄噸缃��
+ row.used = row.stock
+ }
+}
</script>
-<style scoped>
-.production-form {
- padding: 20px;
+<style scoped lang="scss">
+.el-form{
+ .el-row {
+ padding-top: 20px;
+ background: rgba($color: #F8FAFB, $alpha: 0.5) ;
+ }
}
-
-.dialog-footer {
- display: flex;
- justify-content: flex-end;
- gap: 10px;
+.el-row>.el-col>h1{
+ font-weight: bolder;
}
-
-:deep(.el-form-item__label) {
- font-weight: bold;
-}
-
-:deep(.el-input-number) {
- width: 100%;
-}
-
-:deep(.el-select) {
- width: 100%;
-}
-</style>
\ No newline at end of file
+</style>
\ No newline at end of file
--
Gitblit v1.9.3