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