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