Browse Source

完善form表单

cz 2 years ago
parent
commit
c97395e4f5

+ 60 - 23
src/components/testForm/index.vue

@@ -218,10 +218,17 @@
         inset
         inset
         v-for="(item, index) in formData[btnConfigCopy.prop]"
         v-for="(item, index) in formData[btnConfigCopy.prop]"
         :key="index"
         :key="index"
-        style="margin-top: 10px !important"
       >
       >
-        <div>
-          明细{{ index + 1 }} <span @click="handleRemove(index)">删除</span>
+        <div class="row">
+          <div>{{ btnConfigCopy.listTitle || "明细" }}{{ index + 1 }}</div>
+          <van-button
+            plain
+            type="primary"
+            @click="handleRemove(index)"
+            size="mini"
+            style="border: none; background: #ecebeb"
+            >删除</van-button
+          >
         </div>
         </div>
         <!-- 循环表单数据 -->
         <!-- 循环表单数据 -->
         <div v-for="(i, sonIndex) in btnConfigCopy.listConfig" :key="i.prop">
         <div v-for="(i, sonIndex) in btnConfigCopy.listConfig" :key="i.prop">
@@ -299,7 +306,7 @@
       </div>
       </div>
 
 
       <!-- 按钮 -->
       <!-- 按钮 -->
-      <div class="btn-box">
+      <div class="btn-box" v-if="btnConfigCopy.isNeed">
         <van-button
         <van-button
           :plain="btnConfigCopy.plain ? btnConfigCopy.plain : false"
           :plain="btnConfigCopy.plain ? btnConfigCopy.plain : false"
           :type="btnConfigCopy.itemType ? btnConfigCopy.itemType : 'primary'"
           :type="btnConfigCopy.itemType ? btnConfigCopy.itemType : 'primary'"
@@ -318,7 +325,7 @@
           }}</van-button
           }}</van-button
         >
         >
       </div>
       </div>
-      <div style="margin: 16px">
+      <div style="margin: 16px" v-show="!formOption.hiddenSubmitBtn">
         <van-button round block type="primary" native-type="submit">
         <van-button round block type="primary" native-type="submit">
           提交
           提交
         </van-button>
         </van-button>
@@ -437,7 +444,6 @@ const selectDataEcho = (item, val) => {
 };
 };
 
 
 let btnConfigCopy = {};
 let btnConfigCopy = {};
-const btnPickerList = ref([]);
 const formDataInit = (flag) => {
 const formDataInit = (flag) => {
   if (!flag) {
   if (!flag) {
     var map = {
     var map = {
@@ -452,42 +458,40 @@ const formDataInit = (flag) => {
     };
     };
     // 判断是否需要按钮
     // 判断是否需要按钮
     if (formOption.value.btnConfig && formOption.value.btnConfig.isNeed) {
     if (formOption.value.btnConfig && formOption.value.btnConfig.isNeed) {
-      formData.value[formOption.value.btnConfig.prop] = [];
       btnConfigCopy = { ...formOption.value.btnConfig };
       btnConfigCopy = { ...formOption.value.btnConfig };
-      if (
-        formOption.value.btnConfig.listConfig &&
-        formOption.value.btnConfig.listConfig.length > 0
-      ) {
-        btnPickerList.value = formOption.value.btnConfig.listConfig
-          .filter((x) => x.type === "picker")
-          .map((x) => x.itemType);
+      if (formData.value[btnConfigCopy.prop] === undefined) {
+        formData.value[btnConfigCopy.prop] = [];
       }
       }
     }
     }
     // 初始化默认值
     // 初始化默认值
     for (let i = 0; i < formConfig.value.length; i++) {
     for (let i = 0; i < formConfig.value.length; i++) {
       const element = formConfig.value[i];
       const element = formConfig.value[i];
+      if (element.type === "cascader" && element.itemType === "city") {
+        cityOptionInit();
+        // formData.value[element.prop] = map[element.type];
+        // formData.value[element.prop + "Name"] = map[element.type];
+      }
       if (
       if (
         formData.value[element.prop] === undefined ||
         formData.value[element.prop] === undefined ||
         formData.value[element.prop] === ""
         formData.value[element.prop] === ""
       ) {
       ) {
         if (element.type === "slot") {
         if (element.type === "slot") {
           continue;
           continue;
-        } else if (element.type === "cascader" && element.itemType === "city") {
-          cityOptionInit();
-          formData.value[element.prop] = map[element.type];
-          formData.value[element.prop + "Name"] = map[element.type];
         } else if (element.type === "picker" || element.type === "cascader") {
         } else if (element.type === "picker" || element.type === "cascader") {
-          formData.value[element.prop] = map[element.type];
-          formData.value[element.prop + "Name"] = map[element.type];
+          if (element.itemType !== "datePicker") {
+            formData.value[element.prop] = map[element.type];
+            formData.value[element.prop + "Name"] = map[element.type];
+          }
         } else if (map[element.type] != undefined) {
         } else if (map[element.type] != undefined) {
           formData.value[element.prop] = map[element.type];
           formData.value[element.prop] = map[element.type];
         }
         }
       }
       }
     }
     }
   } else {
   } else {
+    // 选择框值回显
     for (let i = 0; i < formConfig.value.length; i++) {
     for (let i = 0; i < formConfig.value.length; i++) {
       const element = formConfig.value[i];
       const element = formConfig.value[i];
-      if (element.type === "picker") {
+      if (element.type === "picker" && element.itemType !== "datePicker") {
         formData.value[element.prop + "Name"] = selectDataEcho(
         formData.value[element.prop + "Name"] = selectDataEcho(
           element,
           element,
           formData.value[element.prop]
           formData.value[element.prop]
@@ -499,7 +503,30 @@ const formDataInit = (flag) => {
         );
         );
       }
       }
     }
     }
+    if (formOption.value.btnConfig && formOption.value.btnConfig.isNeed) {
+      const list = formData.value[btnConfigCopy.prop];
+      for (let i = 0; i < list.length; i++) {
+        const x = list[i];
+        for (let j = 0; j < btnConfigCopy.listConfig.length; j++) {
+          const listEle = btnConfigCopy.listConfig[j];
+          if (
+            listEle.type === "picker" &&
+            listEle.itemType &&
+            listEle.itemType !== "datePicker"
+          ) {
+            formData.value[btnConfigCopy.prop][i][listEle.prop + "Name"] =
+              selectDataEcho(
+                listEle,
+                formData.value[btnConfigCopy.prop][i][listEle.prop]
+              );
+          } else {
+            continue;
+          }
+        }
+      }
+    }
   }
   }
+  console.log(formData.value, "表单值");
   emit("update:modelValue", formData.value);
   emit("update:modelValue", formData.value);
 };
 };
 
 
@@ -602,7 +629,7 @@ const getAreaInfo = (selectedOptions, item, index) => {
             .map((item) => item.text)
             .map((item) => item.text)
             .join(" ");
             .join(" ");
           formConfig.value[index].showPicker = false;
           formConfig.value[index].showPicker = false;
-          formData.value.selectedOptions = selectedOptions;
+          formData.value.cityObj = selectedOptions;
           return;
           return;
         }
         }
       }
       }
@@ -611,7 +638,7 @@ const getAreaInfo = (selectedOptions, item, index) => {
           .map((item) => item.text)
           .map((item) => item.text)
           .join(" ");
           .join(" ");
         formConfig.value[index].showPicker = false;
         formConfig.value[index].showPicker = false;
-        formData.value.selectedOptions = selectedOptions;
+        formData.value.cityObj = selectedOptions;
         return;
         return;
       }
       }
       if (selectedOptions.tabIndex === 0) {
       if (selectedOptions.tabIndex === 0) {
@@ -754,4 +781,14 @@ defineExpose({
   width: 100%;
   width: 100%;
   text-align: center;
   text-align: center;
 }
 }
+.row {
+  color: #999999;
+  background: #ecebeb;
+  height: 32px;
+  line-height: 32px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 15px;
+}
 </style>
 </style>

+ 43 - 7
src/views/MES/produceManage/completeProject1/index.vue

@@ -35,11 +35,13 @@ const formOption = reactive({
   labelAlign: "top",
   labelAlign: "top",
   scroll: true,
   scroll: true,
   labelWidth: "62pk",
   labelWidth: "62pk",
+  // hiddenSubmitBtn: true,
   btnConfig: {
   btnConfig: {
     isNeed: true,
     isNeed: true,
     label: "明细",
     label: "明细",
     prop: "list",
     prop: "list",
     plain: true,
     plain: true,
+    // itemType: "default",
     listConfig: [
     listConfig: [
       {
       {
         type: "input",
         type: "input",
@@ -56,6 +58,7 @@ const formOption = reactive({
         itemType: "onePicker",
         itemType: "onePicker",
         showPicker: false,
         showPicker: false,
         readonly: false,
         readonly: false,
+        // 指定label、value
         fieldNames: {
         fieldNames: {
           text: "att",
           text: "att",
           value: "id",
           value: "id",
@@ -79,14 +82,13 @@ const formOption = reactive({
         prop: "date",
         prop: "date",
         itemType: "datePicker",
         itemType: "datePicker",
         showPicker: false,
         showPicker: false,
-        split: "-",
+        split: "-", //时间分隔符
         columnsType: ["year", "month"], //只选年月
         columnsType: ["year", "month"], //只选年月
       },
       },
     ],
     ],
     clickFn: () => {
     clickFn: () => {
       formData.data.list.push({
       formData.data.list.push({
         name: "cz",
         name: "cz",
-        showPicker: false,
       });
       });
     },
     },
   },
   },
@@ -185,6 +187,7 @@ const formConfig = reactive([
     prop: "common",
     prop: "common",
     itemType: "common",
     itemType: "common",
     showPicker: false,
     showPicker: false,
+    // options: classification.value,
     options: [],
     options: [],
     fieldNames: {
     fieldNames: {
       text: "label",
       text: "label",
@@ -234,18 +237,51 @@ const formData = reactive({
     reamlke: "beizhu回显",
     reamlke: "beizhu回显",
     select: "1",
     select: "1",
     date: "2022-01-09",
     date: "2022-01-09",
-    common: "1640595238534144001",
-    city: "1",
+    common: "1651135364980989953",
+    city: "22",
     cityName: "合肥",
     cityName: "合肥",
-    fileList: [
+    // fileList: [
+    //   {
+    //     url: "https://os.winfaster.cn/byteSailing/test/2023/04/25/2e13ecba1978472d9e97fcec6335c975.png",
+    //     fileName: "board-2.png",
+    //   },
+    // ],
+    list: [
+      {
+        name: "qqq",
+        select: "1",
+        date: "2022-01",
+      },
       {
       {
-        url: "https://os.winfaster.cn/byteSailing/test/2023/04/25/2e13ecba1978472d9e97fcec6335c975.png",
-        fileName: "board-2.png",
+        name: "www",
+        select: "2",
+        date: "2023-01",
       },
       },
     ],
     ],
   },
   },
 });
 });
 const onSubmit = () => {
 const onSubmit = () => {
+  // 城市级联选择器和上传附件数据需手动赋值
+  if (formData.data.fileList && formData.data.fileList.length > 0) {
+    formData.data.fileList = formData.data.fileList.map((item) => ({
+      id: item.id,
+      fileName: item.fileName,
+    }));
+  } else {
+    formData.data.fileList = [];
+  }
+  if (formData.data.cityObj) {
+    formData.data.countryId =
+      formData.data.cityObj.selectedOptions[0].value;
+    formData.data.provinceId =
+      formData.data.cityObj.tabIndex === 2
+        ? formData.data.cityObj.selectedOptions[1].value
+        : null;
+    formData.data.cityId =
+      formData.data.cityObj.tabIndex === 1
+        ? formData.data.cityObj.selectedOptions[1].value
+        : formData.data.cityObj.selectedOptions[2].value;
+  }
   console.log(formData.data, "wssa");
   console.log(formData.data, "wssa");
 };
 };
 // getList();
 // getList();