From 0034f1b65f181ab5deaf6ed167da121edc5332a2 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 16 九月 2025 10:40:33 +0800
Subject: [PATCH] 部署修改
---
src/views/basicInformation/mould/coalQualityMaintenance.vue | 405 ++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 244 insertions(+), 161 deletions(-)
diff --git a/src/views/basicInformation/mould/coalQualityMaintenance.vue b/src/views/basicInformation/mould/coalQualityMaintenance.vue
index e42754b..cb66226 100644
--- a/src/views/basicInformation/mould/coalQualityMaintenance.vue
+++ b/src/views/basicInformation/mould/coalQualityMaintenance.vue
@@ -1,193 +1,276 @@
+<!-- 鐓よ川鏂规缁存姢寮圭獥缁勪欢 -->
<template>
- <div>
- <el-dialog
- v-model="dialogVisible"
- :title="title"
- width="600"
- :close-on-click-modal="false"
- :before-close="handleClose"
- >
- <el-form
- ref="formRef"
- style="max-width: 400px; margin: 0 auto"
- :model="formData"
- :rules="rules"
- label-width="auto"
- >
- <el-form-item label="瀹㈡埛鍚嶇О" prop="supplierName">
- <el-input
- v-model="formData.supplierName"
- placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О"
- />
- </el-form-item>
- <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="identifyNumber">
- <el-input
- v-model="formData.identifyNumber"
- placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"
- />
- </el-form-item>
- <el-form-item label="缁忚惀鍦板潃" prop="address">
- <el-cascader
- placeholder="璇烽�夋嫨缁忚惀鍦板潃"
- size="default"
- :options="addressSelectOptions"
- v-model="formData.address"
- @change="handleChange"
- >
- </el-cascader>
- </el-form-item>
- <el-form-item label="璇︾粏鍦板潃" prop="addressDetail">
- <el-input
- v-model="formData.addressDetail"
- placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"
- />
- </el-form-item>
- <el-form-item label="閾惰璐︽埛" prop="bankAccount">
- <el-input
- v-model="formData.bankAccount"
- placeholder="璇疯緭鍏ラ摱琛岃处鎴�"
- />
- </el-form-item>
- <el-form-item label="寮�鎴疯" prop="bank">
- <el-input v-model="formData.bank" placeholder="璇疯緭鍏ュ紑鎴疯" />
- </el-form-item>
- <el-form-item label="鑱旂郴浜�" prop="contacts">
- <el-input v-model="formData.contacts" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
- </el-form-item>
- <el-form-item label="鑱旂郴浜虹數璇�" prop="contactsPhone">
- <el-input
- v-model="formData.contactsPhone"
- placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽"
- />
- </el-form-item>
- <el-form-item>
- <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>
- </div>
-</template>
+ <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false"
+ :before-close="handleClose">
+ <!-- 琛ㄥ崟鍖哄煙 -->
+ <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px"
+ style="max-width: 400px; margin: 0 auto">
+ <!-- 鏂规鍚嶇О杈撳叆妗� -->
+ <el-form-item label="鐓よ川鏂规鍚嶇О" prop="plan">
+ <el-input v-model="formData.plan" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堝悕绉�" clearable :disabled="isViewMode"/>
+ </el-form-item>
+ <!-- 鐓よ川瀛楁澶氶�変笅鎷夋 -->
+ <el-form-item label="鐓よ川鏂规绫诲瀷" prop="coalFieldList">
+ <el-select v-model="formData.coalFieldList" placeholder="璇烽�夋嫨鐓よ川鏂规绫诲瀷" style="width: 100%" clearable
+ multiple :disabled="isViewMode">
+ <el-option v-for="item in fieldOptions" :key="item.id" :label="item.label" :value="item"/>
+ </el-select>
+ </el-form-item>
+
+ <!-- 鏂规鎻忚堪鏂囨湰鍩� -->
+ <el-form-item label="鐓よ川鏂规鎻忚堪" prop="schemeDesc">
+ <el-input v-model="formData.schemeDesc" type="textarea" placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堟弿杩�" :rows="3" :disabled="isViewMode"/>
+ </el-form-item>
+
+ <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+ <el-form-item class="dialog-footer">
+ <el-button v-if="isEditMode" @click="resetForm">閲嶇疆</el-button>
+ <el-button v-else @click="cancelForm">鍙栨秷</el-button>
+ <el-button type="primary" @click="submitForm">纭畾</el-button>
+ </el-form-item>
+ </el-form>
+ </el-dialog>
+</template>
<script setup>
-import { ref, watch, defineProps, onMounted } from "vue";
-import addressList from "@/api/jsonApi/areaList.json";
+import {ref, reactive, watch, computed, onMounted} from "vue";
+import {getCoalFieldList, addOrEditCoalPlan} from "@/api/basicInformation/coalQualityMaintenance";
+
+// ===== 缁勪欢灞炴�у畾涔� =====
const props = defineProps({
+ /** 鍏抽棴寮圭獥鍓嶇殑鍥炶皟鍑芥暟 */
beforeClose: {
type: Function,
- default: () => {},
+ default: () => {
+ },
},
+ /** 琛ㄥ崟鏁版嵁 */
form: {
type: Object,
default: () => ({}),
},
+ /** 鎿嶄綔绫诲瀷锛歛dd-鏂板锛宔dit-缂栬緫 */
addOrEdit: {
type: String,
default: "add",
},
+ /** 寮圭獥鏍囬 */
title: {
type: String,
default: "",
},
});
-
+const isViewMode = computed(() => props.addOrEdit.includes("view"));
+const copyForm = defineModel("copyForm", {
+ required: true,
+ type: Object,
+});
+// ===== 浜嬩欢瀹氫箟 =====
const emit = defineEmits(["submit", "handleBeforeClose"]);
-onMounted(()=>{
- addressSelectOptions.value = mapAddress(addressList);
-})
-// 鍦板潃閫夋嫨鏁版嵁
-const addressSelectOptions = ref([]);
-// 澶勭悊鍦板潃鏁版嵁杞崲
-function mapAddress(list) {
- return list.map(item => ({
- value: item.no,
- label: item.name,
- children: item.children ? mapAddress(item.children) : undefined
- }));
-}
-// 琛ㄥ崟寮曠敤
-const formRef = ref(null);
-// 琛ㄥ崟鏁版嵁
-const formData = ref({ ...props.form });
-// 寮圭獥鍙鎬�
+// ===== 鍝嶅簲寮忔暟鎹� =====
+/** 琛ㄥ崟寮曠敤 */
+const formRef = ref();
+
+/** 鐓よ川瀛楁閫夐」鍒楄〃 */
+const fieldOptions = reactive([]);
+
+/** 寮圭獥鏄剧ず鐘舵�� */
const dialogVisible = defineModel("coalQualityMaintenanceDialogFormVisible", {
required: true,
type: Boolean,
});
-// 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖�
-watch(
- () => props.form,
- (newVal) => {
- formData.value = { ...newVal };
- },
- { deep: true }
-);
-// 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖�
-watch(
- () => dialogVisible.value,
- (newVal) => {
- emit("update:coalQualityMaintenanceDialogFormVisible", newVal);
- }
-);
-// 澶勭悊鍦板潃閫夋嫨鍙樺寲
-const handleChange = (value) => {
- console.log(value);
-};
-// 鎻愪氦琛ㄥ崟
-const submitForm = async () => {
- if (!formRef.value) return;
- await formRef.value.validate((valid, fields) => {
- if (valid) {
- emit("submit", formData.value);
- }
- });
-};
-// 鍙栨秷琛ㄥ崟
-const cancelForm = () => {
- emit("update:coalQualityMaintenanceDialogFormVisible", false);
- formData.value = {};
-};
-// 閲嶇疆琛ㄥ崟
-const resetForm = () => {
- if (!formRef.value) return;
- formRef.value.resetFields();
-};
-// 鍏抽棴寮圭獥
-const handleClose = () => {
- // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟
- emit("handleBeforeClose");
- emit("update:coalQualityMaintenanceDialogFormVisible", false);
-};
-const rules = reactive({
- supplierName: [
- { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" },
+/** 琛ㄥ崟鏁版嵁 */
+const formData = ref({});
+
+// ===== 璁$畻灞炴�� =====
+/** 鏄惁涓虹紪杈戞ā寮� */
+const isEditMode = computed(() => props.addOrEdit === 'edit');
+
+// ===== 琛ㄥ崟楠岃瘉瑙勫垯 =====
+const formRules = reactive({
+ plan: [
+ {required: true, message: "璇疯緭鍏ユ柟妗堝悕绉�", trigger: "blur"},
],
- identifyNumber: [
- { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
- { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" },
- ],
- address: [
- {
- required: true,
- message: "璇烽�夋嫨缁忚惀鍦板潃",
- trigger: "change",
- },
- ],
- bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }],
- bank: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
- contacts: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }],
- contactsPhone: [
- { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
- { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" },
+ coalFieldList: [
+ {required: true, message: "璇烽�夋嫨鏂规绫诲瀷", trigger: "blur"},
],
});
+
+// ===== 宸ュ叿鍑芥暟 =====
+/**
+ * 灏嗗瓧绗︿覆鏍煎紡鐨勭叅璐ㄥ瓧娈佃浆鎹负鏁扮粍
+ */
+const parseCoalFields = (coalFieldsStr) => {
+ if (!coalFieldsStr || typeof coalFieldsStr !== 'string') return [];
+ return coalFieldsStr
+ .split(',')
+ .map(id => parseInt(id.trim()))
+ .filter(id => !isNaN(id));
+};
+
+/**
+ * 灏嗘暟缁勬牸寮忕殑鐓よ川瀛楁杞崲涓哄瓧绗︿覆
+ */
+const stringifyCoalFields = (coalFieldsArray) => {
+ if (!Array.isArray(coalFieldsArray)) return '';
+ return coalFieldsArray.join(',');
+};
+
+/**
+ * 鍒濆鍖栬〃鍗曟暟鎹�
+ * @param {Object} newForm - 鏂扮殑琛ㄥ崟鏁版嵁
+ */
+const initFormData = (newForm) => {
+ formData.value = {...newForm};
+ // 澶勭悊 coalFieldList 瀛楁锛氱紪杈戞椂闇�瑕佸皢瀛楃涓茶浆鎹负鏁扮粍渚涘閫夌粍浠朵娇鐢�
+ if (newForm.fieldIds) {
+ if (typeof newForm.fieldIds === 'string') {
+ // 灏嗗瓧绗︿覆杞崲涓篒D鏁扮粍锛岀劧鍚庡尮閰嶅搴旂殑閫夐」瀵硅薄
+ const ids = parseCoalFields(newForm.fieldIds);
+ formData.value.coalFieldList = ids.map(id => {
+ const option = fieldOptions.find(opt => opt.value === id);
+ return option || {fields: `瀛楁${id}`, value: id};
+ });
+ } else if (Array.isArray(newForm.coalFieldList)) {
+ // 纭繚鏁扮粍涓殑鍊奸兘鏄纭殑瀵硅薄鏍煎紡
+ formData.value.coalFieldList = newForm.coalFieldList.map(item => {
+ if (typeof item === 'object' && item.value !== undefined) {
+ return item;
+ } else {
+ // 濡傛灉鏄函ID锛岄渶瑕佸尮閰嶅搴旂殑閫夐」
+ const id = parseInt(item);
+ const option = fieldOptions.find(opt => opt.value === id);
+ return option || {fields: `瀛楁${id}`, value: id};
+ }
+ });
+ }
+ } else {
+ // 濡傛灉娌℃湁 coalFieldList锛屽垵濮嬪寲涓虹┖鏁扮粍
+ formData.value.coalFieldList = [];
+ }
+};
+
+// ===== 鐢熷懡鍛ㄦ湡閽╁瓙 =====
+/**
+ * 缁勪欢鎸傝浇鏃惰幏鍙栫叅璐ㄥ瓧娈甸�夐」
+ */
+onMounted(async () => {
+ try {
+ const {data, code} = await getCoalFieldList();
+ if (code === 200) {
+ // 鏋勫缓閫夐」鏁版嵁锛屾牸寮忓寲涓簕 label, value }
+ fieldOptions.push(...data.map(item => ({
+ label: item.fieldName,
+ value: item.id,
+ fields: item.fields
+ })));
+ } else {
+ console.error("鑾峰彇鐓よ川瀛楁鍒楄〃澶辫触", data);
+ }
+ } catch (error) {
+ console.error("鑾峰彇鐓よ川瀛楁鍒楄〃寮傚父", error);
+ }
+});
+
+// ===== 鐩戝惉鍣� =====
+/**
+ * 鐩戝惉琛ㄥ崟鏁版嵁鍙樺寲锛屽疄鐜版暟鎹洖鏄�
+ */
+watch(() => props.form, initFormData, {
+ deep: true,
+ immediate: true
+});
+
+// ===== 浜嬩欢澶勭悊鍑芥暟 =====
+/**
+ * 鎻愪氦琛ㄥ崟
+ */
+const submitForm = async () => {
+ if (!formRef.value) return;
+
+ // 鍒濆鍖栧瓧娈垫暟缁�
+ formData.value.fieldIds = [];
+ formData.value.coalFields = [];
+
+ // 瀹夊叏澶勭悊 coalFieldList 鏁版嵁
+ if (formData.value.coalFieldList && Array.isArray(formData.value.coalFieldList)) {
+ formData.value.coalFieldList.forEach((element) => {
+ // 妫�鏌ュ厓绱犳槸鍚︿负瀵硅薄骞朵笖鏈夊繀瑕佺殑灞炴��
+ if (element && typeof element === 'object') {
+ if (element.value !== undefined) {
+ formData.value.fieldIds.push(element.value);
+ }
+ if (element.fields !== undefined) {
+ formData.value.coalFields.push(element.fields);
+ }
+ } else {
+ // 濡傛灉鍏冪礌鏄畝鍗曞�硷紝鐩存帴浣跨敤
+ formData.value.fieldIds.push(element);
+ // 灏濊瘯浠� fieldOptions 涓壘鍒板搴旂殑 label
+ const option = fieldOptions.find(opt => opt.value === element);
+ if (option) {
+ formData.value.coalFields.push(option.fields);
+ }
+ }
+ });
+ }
+
+ // 鍒犻櫎涓存椂瀛楁
+ delete formData.value.coalFieldList;
+
+ try {
+ // 鍑嗗鎻愪氦鏁版嵁锛氬皢鏁扮粍杞崲涓哄瓧绗︿覆
+ const submitData = {
+ ...formData.value,
+ coalFields: stringifyCoalFields(formData.value.coalFields),
+ fieldIds: stringifyCoalFields(formData.value.fieldIds)
+ };
+ // 璋冪敤API鎻愪氦鏁版嵁
+ const result = await addOrEditCoalPlan(submitData);
+
+ // 鏋勫缓鍝嶅簲鏁版嵁骞惰Е鍙戞彁浜や簨浠�
+ const responseData = {
+ title: isEditMode.value ? "缂栬緫" : "鏂板",
+ ...submitData,
+ result
+ };
+ emit("submit", responseData);
+ } catch (error) {
+ console.error("琛ㄥ崟鎻愪氦澶辫触", error);
+ }
+};
+
+/**
+ * 鍙栨秷鎿嶄綔
+ */
+const cancelForm = () => {
+ dialogVisible.value = false;
+ formData.value = {};
+};
+
+/**
+ * 閲嶇疆琛ㄥ崟
+ */
+const resetForm = () => {
+ formData.value = JSON.parse(JSON.stringify(copyForm.value));
+ initFormData(formData.value);
+};
+
+/**
+ * 鍏抽棴寮圭獥
+ */
+const handleClose = () => {
+ emit("handleBeforeClose");
+ dialogVisible.value = false;
+};
</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
--
Gitblit v1.9.3