소스 검색

抢险队伍管理修改详情显示不正确的bug

xiangyiyong 1 년 전
부모
커밋
2e49541a57

+ 91 - 67
src/views/lifeline/riskLinkageSystem/emergencyLinkage/rescueTeamManage/addRescueTeamModal.vue

@@ -31,6 +31,7 @@
   import { getCascaderFullValue } from '/@/utils/fnUtils';
   import { areaTree } from '/@/views/system/account/account.data';
   import { drawPoint, clearVectorLayerById } from '/@/views/lifeline/Map/common/utils/mapUtils';
+  import { getUserGroup } from '/@/api/system/system';
 
   const emit = defineEmits(['success', 'register']);
   const mapReady = ref<boolean>(false);
@@ -40,7 +41,7 @@
   const [registerForm, { validate, setFieldsValue, getFieldsValue, resetFields, resetSchema }] =
     useForm({
       labelWidth: 140,
-      schemas: rescueTeamFormSchema,
+      schemas: rescueTeamFormSchema(false),
       showActionButtonGroup: false,
       actionColOptions: {
         span: 8,
@@ -69,80 +70,103 @@
           longitude: Number(data.record.longitude), //经度
         });
       }
-      let newSchemas;
-      if (isDetail.value) {
-        newSchemas = rescueTeamFormSchema.map((item) => {
-          if (item.component === 'Cascader') {
-            item.componentProps = () => {
-              return {
-                options: areaTree,
-                fieldNames: {
-                  label: 'name',
-                  value: 'code',
-                  children: 'areas',
-                },
-                changeOnSelect: true,
-                showSearch: true,
-                placeholder: '城镇/街道',
-                params: { parentId: '511503' },
-                disabled: isDetail.value,
-                displayRender: ({ labels }: { labels: string[] }) => {
-                  return labels[labels.length - 1];
-                },
-                // loadData: ({ selectedOptions }: { selectedOptions: any[] }) => {
-                //   console.log('data.record.areaCode:', selectedOptions);
-                // },
-              };
-            };
-            return { ...item };
-          }
-          if (item.component === 'Select' && item.field === 'contactId') {
-            item.componentProps = ({ formModel }) => {
-              return {
-                placeholder: '请选择联系人姓名',
-                options: item.dataOptions || [],
-                disabled: isDetail.value,
-                onChange: (code: string) => {
-                  //选择后改变监听
-                  const item1 = (item.dataOptions || []).find(function (item) {
-                    return item.value == code;
-                  });
-                  formModel.contactPosition = item1?.position;
-                  formModel.contactPhone = item1?.phoneNumber;
-                },
-              };
-            };
-            return { ...item };
-          }
-          if (item.component === 'Select' && item.field === 'liableId') {
-            item.componentProps = ({ formModel }) => {
-              return {
-                placeholder: '请选择联系人姓名',
-                options: item.dataOptions || [],
-                disabled: isDetail.value,
-                onChange: (code: string) => {
-                  //选择后改变监听
-                  const item1 = (item.dataOptions || []).find(function (item) {
-                    return item.value == code;
-                  });
-                  formModel.liablePosition = item1?.position;
-                  formModel.liablePhone = item1?.phoneNumber;
-                },
-              };
-            };
-            return { ...item };
-          }
+      const userLists = ref<any[]>([]);
+      const res = await getUserGroup({
+        groupid: data.record.companyId,
+      });
+
+      if (res.length) {
+        userLists.value = res.map((item) => {
           return {
-            ...item,
-            componentProps: { ...item.componentProps, disabled: isDetail.value },
+            label: item.realName,
+            value: item.id,
+            phoneNumber: item.phoneNumber,
+            deptId: data.record.companyId,
+            level: item.realName,
+            position: item.expertTitleId,
           };
         });
       } else {
-        newSchemas = rescueTeamFormSchema;
+        userLists.value = [];
       }
+      let newSchemas;
+      const disabledObj = isUpdate.value
+        ? {}
+        : {
+            disabled: isDetail.value,
+          };
+      newSchemas = rescueTeamFormSchema(isDetail.value).map((item) => {
+        if (item.component === 'Cascader') {
+          item.componentProps = () => {
+            return {
+              ...item.componentProps,
+              options: areaTree,
+              fieldNames: {
+                label: 'name',
+                value: 'code',
+                children: 'areas',
+              },
+              ...disabledObj,
+              changeOnSelect: true,
+              showSearch: true,
+              placeholder: '城镇/街道',
+              params: { parentId: '511503' },
+              displayRender: ({ labels }: { labels: string[] }) => {
+                return labels[labels.length - 1];
+              },
+              // loadData: ({ selectedOptions }: { selectedOptions: any[] }) => {
+              //   console.log('data.record.areaCode:', selectedOptions);
+              // },
+            };
+          };
+          return { ...item };
+        }
+        if (item.component === 'Select' && item.field === 'contactId') {
+          item.componentProps = ({ formModel }) => {
+            return {
+              placeholder: '请选择联系人姓名',
+              options: userLists.value,
+              ...disabledObj,
+              onChange: (code: string) => {
+                //选择后改变监听
+                const item1 = userLists.value.find(function (item) {
+                  return item.value == code;
+                });
+                formModel.contactPosition = item1?.position;
+                formModel.contactPhone = item1?.phoneNumber;
+              },
+            };
+          };
+          return { ...item };
+        }
+        if (item.component === 'Select' && item.field === 'liableId') {
+          item.componentProps = ({ formModel }) => {
+            return {
+              placeholder: '请选择联系人姓名',
+              options: userLists.value,
+              ...disabledObj,
+              onChange: (code: string) => {
+                //选择后改变监听
+                const item1 = userLists.value.find(function (item) {
+                  return item.value == code;
+                });
+                formModel.liablePosition = item1?.position;
+                formModel.liablePhone = item1?.phoneNumber;
+              },
+            };
+          };
+          return { ...item, ...disabledObj };
+        }
+        return {
+          ...item,
+          componentProps: { ...item.componentProps, ...disabledObj },
+        };
+      });
       await resetSchema(newSchemas);
 
       await setFieldsValue(data.record);
+    } else {
+      await resetSchema(rescueTeamFormSchema(false));
     }
   });
   const getTitle = computed(() => (!unref(isUpdate) ? '新增救援队伍' : '编辑救援队伍'));

+ 255 - 241
src/views/lifeline/riskLinkageSystem/emergencyLinkage/rescueTeamManage/rescueTeam.data.ts

@@ -7,9 +7,10 @@ import { getAccountList, getUserGroup } from '/@/api/system/system';
 import { getAreaTree } from '/@/api/oem/index';
 import { ref } from 'vue';
 // import eventBus from '/@/utils/eventBus';
-interface FormSchemaNew extends FormSchema {
-  dataOptions?: Array<any>;
-}
+// interface FormSchemaNew extends FormSchema {
+//   dataOptions?: Array<any>;
+//   disabled?: Boolean;
+// }
 export let areaTree: any[] = [];
 export const areaCodeSchema = {
   field: 'areaCode',
@@ -198,259 +199,272 @@ export const searchFormSchema: FormSchema[] = [
     },
   },
 ];
-export const rescueTeamFormSchema: FormSchemaNew[] = [
-  {
-    field: 'companyId',
-    label: '单位名称',
-    component: 'ApiTreeSelect',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
-      api: async () => {
-        const data = await screenLinkOrganizationGetApi();
-        copyTransFun(data as any as any[]);
-        return data;
-      },
-      labelField: 'itemText',
-      valueField: 'id',
-      dropdownStyle: {
-        height: '200px',
-      },
-      onChange: (value) => {
-        if (!value) {
-          userLists.value = [];
-        }
-        getUserGroup({
-          groupid: value,
-        }).then((data) => {
-          if (data.length) {
-            userLists.value = data.map((item) => {
-              return {
-                label: item.realName,
-                value: item.id,
-                phoneNumber: item.phoneNumber,
-                deptId: value,
-                level: item.realName,
-                position: item.expertTitleId,
-              };
-            });
-          } else {
+export const rescueTeamFormSchema = (disabled): any => {
+  const data = [
+    {
+      field: 'companyId',
+      label: '单位名称',
+      component: 'ApiTreeSelect',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: {
+        maxLength: 255,
+        placeholder: '请选择',
+        disabled: disabled,
+        api: async () => {
+          const data = await screenLinkOrganizationGetApi();
+          copyTransFun(data as any as any[]);
+          return data;
+        },
+        labelField: 'itemText',
+        valueField: 'id',
+        dropdownStyle: {
+          height: '200px',
+        },
+        onChange: (value) => {
+          if (!value) {
             userLists.value = [];
           }
-        });
+          getUserGroup({
+            groupid: value,
+          }).then((data) => {
+            if (data.length) {
+              userLists.value = data.map((item) => {
+                return {
+                  label: item.realName,
+                  value: item.id,
+                  phoneNumber: item.phoneNumber,
+                  deptId: value,
+                  level: item.realName,
+                  position: item.expertTitleId,
+                };
+              });
+            } else {
+              userLists.value = [];
+            }
+          });
+        },
       },
     },
-  },
-  {
-    field: 'areaCodes',
-    label: '所属区域',
-    component: 'Cascader',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: () => {
-      return {
-        options: areaTree,
-        fieldNames: {
-          label: 'name',
-          value: 'code',
-          children: 'areas',
-        },
-        changeOnSelect: true,
-        showSearch: {
-          filter: (inputValue: string, path: any[]) => {
-            return path.some(
-              (option) =>
-                (option.code + '').indexOf(inputValue) > -1 ||
-                option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1
-            );
+    {
+      field: 'areaCodes',
+      label: '所属区域',
+      component: 'Cascader',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: () => {
+        return {
+          options: areaTree,
+          disabled: disabled,
+          fieldNames: {
+            label: 'name',
+            value: 'code',
+            children: 'areas',
           },
-        },
-        placeholder: '城镇/街道',
-        params: { parentId: '511503' },
-        displayRender: ({ labels }: { labels: string[] }) => {
-          return labels[labels.length - 1];
-        },
-        // loadData: ({ selectedOptions }: { selectedOptions: any[] }) => {
-        //   console.log('data.record.areaCode:', selectedOptions);
-        // },
-      };
+          changeOnSelect: true,
+          showSearch: {
+            filter: (inputValue: string, path: any[]) => {
+              return path.some(
+                (option) =>
+                  (option.code + '').indexOf(inputValue) > -1 ||
+                  option.name.toLowerCase().indexOf(inputValue.toLowerCase()) > -1
+              );
+            },
+          },
+          placeholder: '城镇/街道',
+          params: { parentId: '511503' },
+          displayRender: ({ labels }: { labels: string[] }) => {
+            return labels[labels.length - 1];
+          },
+          // loadData: ({ selectedOptions }: { selectedOptions: any[] }) => {
+          //   console.log('data.record.areaCode:', selectedOptions);
+          // },
+        };
+      },
+      // componentProps: {
+      //   api: async (params: Recordable) => {
+      //     try {
+      //       const result = await getAreaList(params);
+      //       return result;
+      //     } catch (error) {
+      //       return [];
+      //     }
+      //   },
+      //   params: { parentId: '511503' },
+      //   labelField: 'name',
+      //   valueField: 'code',
+      //   maxLength: 255,
+      //   placeholder: '请选择',
+      // },
     },
-    // componentProps: {
-    //   api: async (params: Recordable) => {
-    //     try {
-    //       const result = await getAreaList(params);
-    //       return result;
-    //     } catch (error) {
-    //       return [];
-    //     }
-    //   },
-    //   params: { parentId: '511503' },
-    //   labelField: 'name',
-    //   valueField: 'code',
-    //   maxLength: 255,
-    //   placeholder: '请选择',
-    // },
-  },
-  {
-    field: 'liableId',
-    label: '责任人姓名',
-    component: 'Select',
-    required: true,
-    colProps: { span: 8 },
-    dataOptions: userLists.value,
-    componentProps: ({ formModel }) => {
-      return {
-        placeholder: '请选择联系人姓名',
-        options: userLists.value,
-        onChange: (code: string) => {
-          //选择后改变监听
-          const item = userLists.value.find(function (item) {
-            return item.value == code;
-          });
-          formModel.liablePosition = item?.position;
-          formModel.liablePhone = item?.phoneNumber;
-        },
-      };
+    {
+      field: 'liableId',
+      label: '责任人姓名',
+      component: 'Select',
+      required: true,
+      colProps: { span: 8 },
+      dataOptions: userLists.value,
+      componentProps: ({ formModel }) => {
+        return {
+          placeholder: '请选择责任人人姓名',
+          disabled: disabled,
+          options: userLists.value,
+          onChange: (code: string) => {
+            //选择后改变监听
+            const item = userLists.value.find(function (item) {
+              return item.value == code;
+            });
+            formModel.liablePosition = item?.position;
+            formModel.liablePhone = item?.phoneNumber;
+          },
+        };
+      },
     },
-  },
-  {
-    field: 'liablePosition',
-    label: '责任人职务',
-    component: 'Input',
-    required: true,
-    colProps: { span: 8 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '',
-      disabled: true,
+    {
+      field: 'liablePosition',
+      label: '责任人职务',
+      component: 'Input',
+      required: true,
+      colProps: { span: 8 },
+      componentProps: {
+        maxLength: 255,
+        placeholder: '',
+        disabled: true,
+      },
     },
-  },
-  {
-    field: 'liablePhone',
-    label: '责任人电话',
-    component: 'Input',
-    required: true,
-    colProps: { span: 8 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '',
-      disabled: true,
+    {
+      field: 'liablePhone',
+      label: '责任人电话',
+      component: 'Input',
+      required: true,
+      colProps: { span: 8 },
+      componentProps: {
+        maxLength: 255,
+        placeholder: '',
+        disabled: true,
+      },
     },
-  },
-  {
-    field: 'contactId',
-    label: '联系人姓名',
-    component: 'Select',
-    required: true,
-    colProps: { span: 8 },
-    dataOptions: userLists.value,
-    componentProps: ({ formModel }) => {
-      return {
-        placeholder: '请选择联系人姓名',
-        options: userLists.value,
-        onChange: (code: string) => {
-          //选择后改变监听
-          const item = userLists.value.find(function (item) {
-            return item.value == code;
-          });
-          formModel.contactPosition = item?.position;
-          formModel.contactPhone = item?.phoneNumber;
-        },
-      };
+    {
+      field: 'contactId',
+      label: '联系人姓名',
+      component: 'Select',
+      required: true,
+      colProps: { span: 8 },
+      dataOptions: userLists.value,
+      componentProps: ({ formModel }) => {
+        return {
+          placeholder: '请选择联系人姓名',
+          options: userLists.value,
+          disabled: disabled,
+          onChange: (code: string) => {
+            //选择后改变监听
+            const item = userLists.value.find(function (item) {
+              return item.value == code;
+            });
+            formModel.contactPosition = item?.position;
+            formModel.contactPhone = item?.phoneNumber;
+          },
+        };
+      },
     },
-  },
-  {
-    field: 'contactPosition',
-    label: '联系人职务',
-    component: 'Input',
-    required: true,
-    colProps: { span: 8 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '',
-      disabled: true,
+    {
+      field: 'contactPosition',
+      label: '联系人职务',
+      component: 'Input',
+      required: true,
+      colProps: { span: 8 },
+      componentProps: {
+        maxLength: 255,
+        placeholder: '',
+        disabled: true,
+      },
     },
-  },
-  {
-    field: 'contactPhone',
-    label: '联系人电话',
-    component: 'Input',
-    required: true,
-    colProps: { span: 8 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '',
-      disabled: true,
+    {
+      field: 'contactPhone',
+      label: '联系人电话',
+      component: 'Input',
+      required: true,
+      colProps: { span: 8 },
+      componentProps: {
+        maxLength: 255,
+        placeholder: '',
+        disabled: true,
+      },
     },
-  },
-  {
-    field: 'firsttimeResponsePerson',
-    label: '第一时间响应人数',
-    component: 'InputNumber',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
+    {
+      field: 'firsttimeResponsePerson',
+      label: '第一时间响应人数',
+      component: 'InputNumber',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '请选择',
+      },
     },
-  },
-  {
-    field: 'maxResponsePerson',
-    label: '最大响应人数',
-    component: 'InputNumber',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
+    {
+      field: 'maxResponsePerson',
+      label: '最大响应人数',
+      component: 'InputNumber',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '请选择',
+      },
     },
-  },
-  {
-    field: 'content',
-    label: '救援领域内容和功能',
-    component: 'Input',
-    required: true,
-    colProps: { span: 24 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
+    {
+      field: 'content',
+      label: '救援领域内容和功能',
+      component: 'Input',
+      required: true,
+      colProps: { span: 24 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '请选择',
+      },
     },
-  },
-  {
-    field: 'longitude',
-    label: '经度',
-    component: 'Input',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
+    {
+      field: 'longitude',
+      label: '经度',
+      component: 'Input',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '请选择',
+      },
     },
-  },
-  {
-    field: 'latitude',
-    label: '纬度',
-    component: 'Input',
-    required: true,
-    colProps: { span: 12 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '请选择',
+    {
+      field: 'latitude',
+      label: '纬度',
+      component: 'Input',
+      required: true,
+      colProps: { span: 12 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '请选择',
+      },
     },
-  },
-  {
-    field: 'remark',
-    label: '备注',
-    component: 'InputTextArea',
-    required: false,
-    colProps: { span: 24 },
-    componentProps: {
-      maxLength: 255,
-      placeholder: '',
-      rows: 3,
-      width: 200,
+    {
+      field: 'remark',
+      label: '备注',
+      component: 'InputTextArea',
+      required: false,
+      colProps: { span: 24 },
+      componentProps: {
+        maxLength: 255,
+        disabled: disabled,
+        placeholder: '',
+        rows: 3,
+        width: 200,
+      },
     },
-  },
-];
+  ];
+  return data;
+};