From 19520d076777a22f76477c4b29e1a6e7a3891196 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期二, 10 六月 2025 11:48:32 +0800
Subject: [PATCH] 修改方案字段以及接口上传

---
 src/views/basicInformation/mould/coalQualityMaintenance.vue |  367 +++++++++++++++++++++++++++++++++-------------------
 1 files changed, 232 insertions(+), 135 deletions(-)

diff --git a/src/views/basicInformation/mould/coalQualityMaintenance.vue b/src/views/basicInformation/mould/coalQualityMaintenance.vue
index 0b87d1d..26fe0ac 100644
--- a/src/views/basicInformation/mould/coalQualityMaintenance.vue
+++ b/src/views/basicInformation/mould/coalQualityMaintenance.vue
@@ -1,181 +1,278 @@
+<!-- 鐓よ川鏂规缁存姢寮圭獥缁勪欢 -->
 <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="coal">
-          <el-input
-            v-model="formData.coal"
-            placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О"
-          />
-        </el-form-item>
-        <el-form-item label="鍏ㄦ按鍚噺鐧惧垎姣� (%)" prop="totalMoisture">
-          <el-input
-            v-model="formData.totalMoisture"
-            placeholder="璇疯緭鍏ュ叏姘村惈閲忕櫨鍒嗘瘮"
-          />
-        </el-form-item>
-        <el-form-item label="鍏ㄦ按鍚噺鐧惧垎姣� (%)" prop="analysisMoisture">
-          <el-input
-            v-model="formData.analysisMoisture"
-            placeholder="璇疯緭鍏ュ叏姘村惈閲忕櫨鍒嗘瘮"
-          />
-        </el-form-item>
-        <el-form-item label="鍏ㄦ按鍚噺鐧惧垎姣� (%)" prop="volatileMatter">
-          <el-input
-            v-model="formData.volatileMatter"
-            placeholder="璇疯緭鍏ュ叏姘村惈閲忕櫨鍒嗘瘮"
-          />
-        </el-form-item>
-        <el-form-item label="鍥哄畾纰崇櫨鍒嗘瘮 (%)" prop="fixedCarbon">
-          <el-input
-            v-model="formData.fixedCarbon"
-            placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"
-          />
-        </el-form-item>
-        <el-form-item label="浣庝綅鍙戠儹閲忥紙鍗曚綅锛氬崈鍗�/鍗冨厠锛�" prop="lowerHeatValue">
-          <el-input
-            v-model="formData.lowerHeatValue"
-            placeholder="璇疯緭鍏ラ摱琛岃处鎴�"
-          />
-        </el-form-item>
-        <el-form-item label="楂樹綅鍙戠儹閲忥紙鍗曚綅锛氬崈鍗�/鍗冨厠锛�" prop="higherHeatValue">
-          <el-input v-model="formData.higherHeatValue" placeholder="璇疯緭鍏ュ紑鎴疯" />
-        </el-form-item>
-        <el-form-item label="鐏板垎鐧惧垎姣� (%)" prop="ashContent">
-          <el-input v-model="formData.ashContent" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
-        </el-form-item>
-        <el-form-item label="纭惈閲忕櫨鍒嗘瘮 (%)" prop="sulfurContent">
-          <el-input
-            v-model="formData.sulfurContent"
-            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 />
+      </el-form-item>
 
+      <!-- 鐓よ川瀛楁澶氶�変笅鎷夋 -->
+      <el-form-item label="鐓よ川鏂规绫诲瀷" prop="coalFieldList">
+        <el-select v-model="formData.coalFieldList" placeholder="璇烽�夋嫨鐓よ川鏂规绫诲瀷" style="width: 100%" clearable multiple>
+          <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" />
+      </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 { addOrEditCoalQuality } from "@/api/basicInformation/coalQualityMaintenance.js";
+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 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 formData = ref({});
+
+// ===== 璁$畻灞炴�� =====
+/** 鏄惁涓虹紪杈戞ā寮� */
+const isEditMode = computed(() => props.addOrEdit === 'edit');
+
+// ===== 琛ㄥ崟楠岃瘉瑙勫垯 =====
+const formRules = reactive({
+  plan: [
+    { required: true, message: "璇疯緭鍏ユ柟妗堝悕绉�", 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 };
+  console.log(formData.value)
+  // 澶勭悊 coalFieldList 瀛楁锛氱紪杈戞椂闇�瑕佸皢瀛楃涓茶浆鎹负鏁扮粍渚涘閫夌粍浠朵娇鐢�
+  if (newForm.coalFields) {
+    if (typeof newForm.coalFields === 'string') {
+      // 灏嗗瓧绗︿覆杞崲涓篒D鏁扮粍锛岀劧鍚庡尮閰嶅搴旂殑閫夐」瀵硅薄
+      const ids = parseCoalFields(newForm.coalFields);
+      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;
-  await formRef.value.validate(async (valid, fields) => {
-    if (valid) {
 
-      let result = await addOrEditCoalQuality({...formData.value});
-      console.log(result);
-      // emit("submit", formData.value);
+  // 鍒濆鍖栧瓧娈垫暟缁�
+  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)
+    };
+
+    // 鍒犻櫎涓嶉渶瑕佺殑鏃堕棿瀛楁锛堢紪杈戞椂锛�
+    if (isEditMode.value) {
+      delete submitData.createTime;
+      delete submitData.updateTime;
     }
-  });
+
+    // 璋冪敤API鎻愪氦鏁版嵁
+    const result = await addOrEditCoalPlan(submitData);
+
+    // 鏋勫缓鍝嶅簲鏁版嵁骞惰Е鍙戞彁浜や簨浠�
+    const responseData = {
+      title: isEditMode.value ? "缂栬緫" : "鏂板",
+      ...submitData,
+      result
+    };
+    emit("submit", responseData);
+  } catch (error) {
+    console.error("琛ㄥ崟鎻愪氦澶辫触", error);
+  }
 };
-// 鍙栨秷琛ㄥ崟
+
+/**
+ * 鍙栨秷鎿嶄綔
+ */
 const cancelForm = () => {
-  emit("update:coalQualityMaintenanceDialogFormVisible", false);
+  dialogVisible.value = false;
   formData.value = {};
 };
-// 閲嶇疆琛ㄥ崟
+
+/**
+ * 閲嶇疆琛ㄥ崟
+ */
 const resetForm = () => {
   if (!formRef.value) return;
   formRef.value.resetFields();
 };
-// 鍏抽棴寮圭獥
+
+/**
+ * 鍏抽棴寮圭獥
+ */
 const handleClose = () => {
-  // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟
   emit("handleBeforeClose");
-  emit("update:coalQualityMaintenanceDialogFormVisible", false);
+  dialogVisible.value = false;
 };
-const rules = reactive({
-  coal: [
-    { required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur" },
-  ],
-});
 </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