Browse Source

fix(bugs): 修改问题

tangning 3 years ago
parent
commit
bc6be9b347

+ 23 - 0
src/api/corporation/list.ts

@@ -5,6 +5,7 @@ import {
   UpdateCompanyParam,
   DeviceListItem,
   DeviceGetResultModel,
+  SaveCompanyParam,
 } from './model';
 
 import { Result, UploadFileParams } from '/#/axios';
@@ -14,6 +15,7 @@ enum Api {
   listAllCompany = '/zfb-api/zfb/company/getListAll',
   selectCompanyByType = '/zfb-api/zfb/company/selectCompanyByType',
   uploadLogo = '/zfb-api/zfb/company/uploadLogo',
+  saveCompany = '/zfb-api/zfb/company/back/save',
   updateCompany = '/zfb-api/zfb/company/updateCompany',
   selectCompanyDevice = '/zfb-api/zfb/company/selectCompanyDevice',
   unbindDevice = '/zfb-api/zfb/company/unbindDevice',
@@ -72,6 +74,15 @@ export const updateCompnayApi = (params: UpdateCompanyParam) =>
       ignoreCancelToken: true,
     },
   });
+export const saveCompanyApi = (params: SaveCompanyParam) =>
+  defHttp.post<Result>({
+    url: Api.saveCompany,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 
 export const ListCompanyDeviceApi = (params: DeviceListItem) =>
   defHttp.post<DeviceGetResultModel>({
@@ -103,3 +114,15 @@ export function uploadLogoApi(
     params,
   );
 }
+// export function uploadMusicApi(
+//   params: UploadFileParams,
+//   // onUploadProgress: (progressEvent: ProgressEvent) => void,
+// ) {
+//   return defHttp.uploadFile<Result>(
+//     {
+//       url: Api.uploadMusic,
+//       // onUploadProgress,
+//     },
+//     params,
+//   );
+// }

+ 11 - 0
src/api/corporation/model.ts

@@ -9,6 +9,17 @@ export interface UpdateCompanyParam {
   floorLogo?: string;
   bgMusic?: string;
 }
+export interface SaveCompanyParam {
+  address?: string;
+  area?: string;
+  contacts?: string;
+  introduce?: string;
+  logo?: string;
+  name?: string;
+  phone?: string;
+  qualification?: string;
+  website?: string;
+}
 export interface addDeiceParam {
   childNames: string | null;
   id: number;

+ 18 - 4
src/locales/lang/zh-CN/routes/corporation.ts

@@ -2,7 +2,7 @@ export default {
   recharge: '充值',
   device: '设备',
   deviceId: '设备ID',
-  sub_account: '子账号',
+  sub_account: '员工账户',
   stateName: {
     0: '审核中',
     1: '已通过',
@@ -10,7 +10,7 @@ export default {
     9: '全部',
   },
   businessAuth: '企业认证',
-  timeField: '时间字段',
+  timeField: '提交时间',
   phone: '手机号',
   enterpriseName: '企业名称',
   submitTime: '提交时间',
@@ -20,13 +20,27 @@ export default {
   floorLogo: '加载地面LOGO',
   bgMusic: '背景音乐',
   cameraNum: '设备数量',
-  subNum: '子账号数量',
+  subNum: '已添加员工数',
   sceneNum: '上传场景数',
   point: '余额',
   expirationTime: '到期时间',
   detailed: '详细信息',
-  modifySubId: '修改子账号',
+  modifySubId: '修改员工',
+  addSubId: '新增员工',
   activeTime: '激活时间',
   unBind: '解除绑定',
   isUnBind: '是否解除绑定?',
+  reject: '拒绝',
+  allow: '同意',
+  name: '信息标题',
+  area: '所属区域',
+  address: '详细地址',
+  website: '企业官网',
+  introduce: '企业简介',
+  companyLogo: '企业LOGO',
+  qualification: '企业资质',
+  addCorporation: '新增企业',
+  managerName: '联系人',
+  optSuccess: '添加成功,默认密码为Geosign123',
+  approveState: '审核状态',
 };

+ 15 - 8
src/locales/lang/zh-CN/routes/devices.ts

@@ -1,17 +1,22 @@
 export default {
-  deviceList: '设备列表',
+  add: '新增',
+  title: '员工账号',
+  addBut: '新增员工账号',
+  listTile: '员工账号列表',
+  deviceList: '状态',
   device: '设备',
   addDevice: '新增设备',
   browserDevice: '查看设备',
   address: '物理地址',
   balance: '初始点数',
-  cameraType: '相机类型',
+  cameraType: '设备类型',
   childName: '设备ID',
   companyId: '客户名称',
   phoneName: '手机号(用户名)',
   orderSn: '订单号',
   own: '出库类型',
   addCamera: '添加相机',
+  editCamera: '编辑相机',
   type: '设备类型',
   wifiName: 'wifi名称',
   normalSales: '正常销售',
@@ -36,12 +41,14 @@ export default {
     '3': '其它',
   },
   partList: {},
-  addSubAccount: '新增子账号',
-  bindErr: '子账号已被该企业绑定',
-  excess: '子账号数量已满!',
-  unbindWarning: '确定要解绑该子账号?',
-  addeduser: '已添加字子号账号数',
-  subNum: '设备数量',
+  addSubAccount: '新增员工',
+  bindErr: '账号已被该企业绑定',
+  excess: '账号数量已满!',
+  unbindWarning: '确定要解绑该账号?',
+  addeduser: '已添加员工数',
+  num: '设备数量',
+  subNum: '可添加员工数',
+
   // normalSales: '正常销售',
   // normalSales: '正常销售',
 };

+ 277 - 0
src/views/corporation/AddCorporationModal.vue

@@ -0,0 +1,277 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.corporation.addCorporation')"
+    @visible-change="handleVisibleChange"
+    @ok="handleSubmit"
+    @cancel="resetFields"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm" :model="model" />
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, nextTick } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import dayjs from 'dayjs';
+  // import { checkUserAddAble } from '/@/api/corporation/modal';
+  import { data as CascaderData } from '/@/utils/cascaderData';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { uploadLogoApi, saveCompanyApi } from '/@/api/corporation/list';
+  const { t } = useI18n();
+  const schemas: FormSchema[] = [
+    {
+      field: 'name',
+      component: 'Input',
+      required: true,
+      label: t('routes.corporation.enterpriseName'),
+      componentProps: {
+        maxLength: 20,
+      },
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'contacts',
+      component: 'Input',
+      label: t('routes.corporation.managerName'),
+
+      required: true,
+      componentProps: {
+        maxLength: 85,
+      },
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'phone',
+      component: 'Input',
+      label: t('common.mobile'),
+      rules: [
+        {
+          required: true,
+          // @ts-ignore
+          validator: async (rule, value) => {
+            var reg_tel =
+              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
+            // var reg = /\S+@\S+\.\S+/;
+            if (!value) {
+              /* eslint-disable-next-line */
+
+              return Promise.reject(t('common.phone'));
+            }
+            if (!reg_tel.test(value)) {
+              /* eslint-disable-next-line */
+              return Promise.reject(t('common.phoneError'));
+            }
+            return Promise.resolve();
+          },
+          trigger: 'change',
+        },
+      ],
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'area',
+      label: '地区',
+      component: 'ApiCascader',
+      componentProps: {
+        api: () => {
+          return CascaderData;
+        },
+        apiParamKey: 'provinceCode',
+        dataField: 'children',
+        labelField: 'name',
+        valueField: 'name',
+        // numberToString: true,
+        isLeaf: (record) => {
+          return !(record.levelType < 3);
+        },
+        onChange: (data) => {
+          console.log('data', data);
+        },
+      },
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'address',
+      component: 'Input',
+      label: t('routes.corporation.address'),
+      required: true,
+      colProps: {
+        span: 22,
+      },
+      componentProps: {
+        maxLength: 50,
+      },
+    },
+    {
+      field: 'website',
+      component: 'Input',
+      label: t('routes.corporation.website'),
+      required: true,
+      colProps: {
+        span: 22,
+      },
+      componentProps: {
+        maxLength: 50,
+      },
+    },
+    {
+      field: 'expirationTime',
+      component: 'DatePicker',
+      label: t('routes.corporation.expirationTime'),
+      required: true,
+      colProps: {
+        span: 22,
+      },
+      componentProps: {
+        valueFormat: 'YYYY-MM-DD',
+        disabledDate: (current) => {
+          return current && current < dayjs().endOf('day');
+        },
+      },
+    },
+    {
+      field: 'logo',
+      component: 'Upload',
+      label: t('routes.corporation.companyLogo'),
+      required: true,
+      rules: [{ required: true, message: '请选择上传文件' }],
+      helpMessage: '支持png  jpg图片格式',
+      componentProps: {
+        api: uploadLogoApi,
+        maxNumber: 1,
+        maxSize: 10,
+        accept: ['jpg', 'jpeg', 'gif', 'png'],
+        afterFetch: function (data) {
+          console.log('data', data);
+          Reflect.set(data, 'url', data.message);
+          return data;
+        },
+      },
+
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'qualification',
+      component: 'Upload',
+      label: t('routes.corporation.qualification'),
+      required: true,
+      rules: [{ required: true, message: '请选择上传文件' }],
+      helpMessage: '支持png  jpg图片格式',
+      componentProps: {
+        api: uploadLogoApi,
+        maxNumber: 1,
+        maxSize: 10,
+        accept: ['jpg', 'jpeg', 'gif', 'png'],
+        afterFetch: function (data) {
+          console.log('data', data);
+          Reflect.set(data, 'url', data.message);
+          return data;
+        },
+      },
+
+      colProps: {
+        span: 22,
+      },
+    },
+    {
+      field: 'introduce',
+      component: 'InputTextArea',
+      label: t('routes.corporation.introduce'),
+      required: true,
+      colProps: {
+        span: 22,
+      },
+      componentProps: {
+        maxLength: 200,
+      },
+    },
+  ];
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['register', 'submit'],
+    setup(props, { emit }) {
+      const modelRef = ref({});
+      const { createMessage } = useMessage();
+      const [
+        registerForm,
+        {
+          // getFieldsValue,
+          // setFieldsValue,
+          // setProps
+          resetFields,
+          validate,
+        },
+      ] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+
+      function onDataReceive(data) {
+        console.log('Data Received', data);
+      }
+      const handleSubmit = async () => {
+        const values = await validate();
+
+        const insertData = {
+          ...values,
+          area: values.area.join(' '),
+          logo: values.logo[0],
+          qualification: values.qualification[0],
+        };
+        console.log('insertData', values);
+        //TODO hack parameter
+        const res = await saveCompanyApi(insertData);
+        // let res = await checkUserAddAble({ phoneNum: values.managerPhone });
+        console.log('res', res);
+        emit('submit');
+        closeModal();
+        resetFields();
+        createMessage.success(t('common.optSuccess'));
+        // createMessage.success(t('routes.corporation.optSuccess'));
+      };
+      function handleVisibleChange(v) {
+        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+
+      return {
+        t,
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        closeModal,
+        resetFields,
+        // nextTick,
+      };
+    },
+  });
+</script>

+ 62 - 24
src/views/corporation/AddModal.vue

@@ -2,9 +2,10 @@
   <BasicModal
     v-bind="$attrs"
     @register="register"
-    title="新增子账号"
+    :title="t('routes.corporation.addSubId')"
     @visible-change="handleVisibleChange"
     @ok="handleSubmit"
+    @cancel="handleClose"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm" :model="model" />
@@ -17,19 +18,47 @@
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { checkUserAddAble } from '/@/api/corporation/modal';
+  import { useI18n } from '/@/hooks/web/useI18n';
+
+  const { t } = useI18n();
   const schemas: FormSchema[] = [
     {
       field: 'memoName',
       component: 'Input',
-      label: '姓名',
+      label: t('common.fullName'),
       colProps: {
         span: 24,
       },
+      componentProps: {
+        maxLength: 25,
+      },
     },
     {
       field: 'phone',
       component: 'Input',
-      label: '手机号',
+      label: t('common.mobile'),
+      rules: [
+        {
+          required: true,
+          // @ts-ignore
+          validator: async (rule, value) => {
+            var reg_tel =
+              /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
+            // var reg = /\S+@\S+\.\S+/;
+            if (!value) {
+              /* eslint-disable-next-line */
+
+              return Promise.reject(t('common.phone'));
+            }
+            if (!reg_tel.test(value)) {
+              /* eslint-disable-next-line */
+              return Promise.reject(t('common.phoneError'));
+            }
+            return Promise.resolve();
+          },
+          trigger: 'change',
+        },
+      ],
       colProps: {
         span: 24,
       },
@@ -40,16 +69,18 @@
     props: {
       userData: { type: Object },
     },
-    emits: ['register'],
-    setup(props) {
+    emits: ['register', 'submit', 'tablelist'],
+    setup(props, { emit }) {
       const modelRef = ref({});
       const { createMessage } = useMessage();
       const [
         registerForm,
         {
-          getFieldsValue,
+          // getFieldsValue,
           // setFieldsValue,
           // setProps
+          resetFields,
+          validate,
         },
       ] = useForm({
         labelWidth: 120,
@@ -66,28 +97,29 @@
 
       function onDataReceive(data) {
         console.log('Data Received', data);
-        const { addList } = data;
-        if (typeof addList === 'function') {
-          //是函数    其中 FunName 为函数名称
-          addListFunc = addList;
-        }
       }
       const handleSubmit = async () => {
-        console.log('getFieldsValue()', getFieldsValue());
-        var reg_tel =
-          /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
-        let { phone, memoName } = getFieldsValue();
-        if (phone == '') {
-          createMessage.error('请填写您的手机号码!');
-          return false;
-        } else if (!reg_tel.test(phone)) {
-          createMessage.error('请正确填写您的手机号码!');
-          return false;
+        const values = await validate();
+        let addTips = false;
+        emit('tablelist', (list) => {
+          addTips = list.some((ele) => ele.userName == values.phone);
+        });
+
+        if (addTips) {
+          return createMessage.error('子账号已被该企业绑定');
         }
-        let res = await checkUserAddAble({ phone });
+        //TODO hack parameter
+        let res = await checkUserAddAble({ phone: values.phone });
+        console.log('checkUserAddAble', res);
         if (res.result == false) {
-          addListFunc({ phone, memoName });
+          // addListFunc({ phone: values.phone, memoName: values.memoName });
+          emit('submit', {
+            phone: values.phone,
+            memoName: values.memoName,
+          });
+          resetFields();
           closeModal();
+          createMessage.success(t('layout.setting.operatingTitle'));
         } else {
           createMessage.error('子账号已被该企业绑定');
         }
@@ -95,8 +127,11 @@
       function handleVisibleChange(v) {
         v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
-
+      function handleClose() {
+        resetFields();
+      }
       return {
+        t,
         register,
         schemas,
         registerForm,
@@ -105,6 +140,9 @@
         handleSubmit,
         addListFunc,
         closeModal,
+        handleClose,
+
+        // nextTick,
       };
     },
   });

+ 3 - 3
src/views/corporation/EditModal.vue

@@ -4,7 +4,7 @@
     @register="register"
     :title="t('routes.corporation.modifySubId')"
     @visible-change="handleVisibleChange"
-    @ok="submitMolad"
+    @ok="submitModal"
   >
     <div class="pt-3px pr-3px">
       <BasicForm @register="registerForm" :model="model" />
@@ -55,7 +55,7 @@
       const [register] = useModalInner((data) => {
         data && onDataReceive(data);
       });
-      function submitMolad() {
+      function submitModal() {
         console.log('handleSubmit', getFieldsValue());
       }
       function onDataReceive(data) {
@@ -72,7 +72,7 @@
 
       return {
         register,
-        submitMolad,
+        submitModal,
         schemas,
         registerForm,
         model: modelRef,

+ 116 - 127
src/views/corporation/SubaccountModal.vue

@@ -2,37 +2,36 @@
   <BasicModal
     v-bind="$attrs"
     @register="register"
-    title="子账号"
+    :title="t('routes.devices.title')"
     @ok="saveTable"
     width="600px"
     @visible-change="handleVisibleChange"
   >
     <div class="pt-3px pr-3px">
-      <BasicForm @register="registerForm" :model="modelRef">
+      <BasicForm @register="registerForm">
         <template #userName="{ model, field }">
           {{ model[field] }}
         </template>
         <template #name="{ model, field }">
           {{ model[field] }}
         </template>
-        <template #addeduser>
-          {{ myData.pagination.total || 0 }}
-          <a-button @click="openTargetModal()" type="primary" preIcon="ic:outline-person-add">
-            新增子账号
+        <template #addeduser="{ model, field }">
+          {{ model[field] || 0 }}
+          <a-button
+            :disabled="model.subNum == 0"
+            @click="openTargetModal()"
+            type="primary"
+            preIcon="ic:outline-person-add"
+          >
+            {{ t('routes.devices.add') }}{{ t('routes.devices.title') }}
           </a-button>
         </template>
       </BasicForm>
       <div class="table_list">
         <BasicTable
-          title="子账户列表"
-          ref="tableRef"
-          rowKey="id"
-          :columns="columns"
-          :showIndexColumn="false"
-          :dataSource="myData.TableData"
-          :bordered="true"
-          :pagination="false"
+          @register="registerSubtable"
           :beforeEditSubmit="beforeEditSubmit"
+          :searchInfo="searchInfo"
         >
           <template #action="{ record }">
             <TableAction
@@ -43,7 +42,7 @@
                 //   onClick: handleDelete.bind(null, record, 'edit'),
                 // },
                 {
-                  label: '解绑',
+                  label: t('common.unbind'),
                   icon: 'mdi:account-multiple-remove-outline',
                   onClick: handleDelete.bind(null, record, 'unbond'),
                 },
@@ -51,32 +50,21 @@
             />
           </template>
         </BasicTable>
-        <AddModal @register="register4" @addtable="addTabledata" />
+        <AddModal @tablelist="getTableList" @register="registerModal" @submit="handleAddUser" />
       </div>
     </div>
     <EditModal @register="registerEdit" />
   </BasicModal>
 </template>
 <script lang="ts">
-  import {
-    defineComponent,
-    ref,
-    reactive,
-    nextTick,
-    onMounted,
-    unref,
-    ComponentOptions,
-    shallowRef,
-    computed,
-    inject,
-  } from 'vue';
+  import { defineComponent, reactive, nextTick, unref } from 'vue';
   import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
-  import { BasicTable, BasicColumn, TableAction, TableActionType } from '/@/components/Table';
+  import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { selectUserList, saveSubUsers } from '/@/api/corporation/modal';
   import { useMessage } from '/@/hooks/web/useMessage';
   import EditModal from './EditModal.vue';
-  import { tableState } from './types/hooks';
+  // import { tableState } from './types/hooks';
   import AddModal from './AddModal.vue';
   import { useI18n } from '/@/hooks/web/useI18n';
   export default defineComponent({
@@ -84,58 +72,39 @@
     props: {
       userData: { type: Object },
     },
-    emits: ['addtable', 'register'],
-    setup(props) {
+    emits: ['addtable', 'register', 'update'],
+    setup(props, { emit }) {
       const { t } = useI18n();
       const { createConfirm, createMessage } = useMessage();
-      const currentModal = shallowRef<Nullable<ComponentOptions>>(null);
-      const tableRef = ref<Nullable<TableActionType>>(null);
-      const [register4, { openModal: addopenModal }] = useModal();
-      const modelRef = ref({});
-      const reload = inject('tablereload');
-      // const editList = ref({
-      //   list:[]
-      // })
-      const myData = reactive<tableState>({
-        TableData: [],
-        subNum: null,
-        id: null,
-        pagination: {
-          total: 0,
-          pageSize: 9999,
-          current: 1,
-        },
+
+      const [registerModal, { openModal: addopenModal }] = useModal();
+
+      const modelRef = reactive({
+        id: 0,
+        subNum: 0,
       });
-      const getPagination = computed(() => {
-        const { total, pageSize, current } = myData.pagination;
-        return {
-          total: total,
-          pageSize,
-          //size: 'small',
-          current: unref(current),
-          onChange(page) {
-            myData.pagination.current = page;
-            getApiList();
-          },
-        };
+      const searchInfo = reactive({
+        limit: 9999,
+        id: 0,
+        page: 1,
       });
       const columns: BasicColumn[] = [
         {
-          title: '姓名',
-          dataIndex: 'memoName',
+          title: t('common.fullName'),
+          dataIndex: 'nickName',
           edit: true,
           editRule: true,
           width: 200,
         },
         {
-          title: '手机号',
+          title: t('common.mobile'),
           edit: true,
           editRule: true,
           width: 200,
-          dataIndex: 'phone',
+          dataIndex: 'userName',
         },
         {
-          title: '操作',
+          title: t('common.operating'),
           dataIndex: '',
           slots: { customRender: 'action' },
           width: 100,
@@ -145,21 +114,21 @@
         {
           field: 'userName',
           component: 'Input',
-          label: t('routes.corporation.rechargeId'),
+          label: `${t('routes.corporation.enterpriseId')} :`,
           slot: 'userName',
           labelWidth: 200,
         },
         {
           field: 'name',
-          label: t('routes.corporation.enterpriseId'),
+          label: `${t('routes.corporation.enterpriseName')} :`,
           slot: 'name',
           component: 'Input',
           labelWidth: 200,
         },
         {
-          field: 'subNum',
+          field: 'totalSubNum',
           component: 'InputNumber',
-          label: t('routes.devices.subNum'),
+          label: `${t('routes.devices.subNum')} :`,
           labelWidth: 200,
           componentProps: () => {
             return {
@@ -171,7 +140,7 @@
         },
         {
           field: 'addeduser',
-          label: t('routes.devices.addeduser'),
+          label: `${t('routes.devices.addeduser')}`,
           labelWidth: 200,
           slot: 'addeduser',
           component: 'Input',
@@ -182,6 +151,7 @@
         {
           setFieldsValue,
           resetFields,
+          getFieldsValue,
           // setProps,
         },
       ] = useForm({
@@ -192,26 +162,57 @@
           span: 24,
         },
       });
+
+      const [
+        registerSubtable,
+        {
+          reload: reloadSubtable,
+          updateTableDataRecord,
+          deleteTableDataRecord,
+          getDataSource,
+          insertTableDataRecord,
+        },
+      ] = useTable({
+        title: `${t('routes.devices.listTile')}`,
+        rowKey: 'phone',
+        api: selectUserList,
+        immediate: false,
+        columns: columns,
+        showIndexColumn: false,
+        bordered: true,
+        pagination: false,
+      });
+
       const [registerEdit, { openModal: EditModal }] = useModal();
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
 
-      function onDataReceive(data) {
+      async function onDataReceive(data) {
         console.log('Data Received', data.record);
         // 方式1;
-        let { id, subNum } = data.record;
+        const { id, subNum } = data.record;
         resetFields();
         setFieldsValue({
           ...data.record,
         });
-        myData.id = id;
-        myData.subNum = subNum;
-        getApiList();
+        modelRef.id = id;
+        modelRef.subNum = subNum;
+
+        searchInfo.id = id;
+        await reloadSubtable();
+
+        const total = getDataSource();
+        console.log('total', total);
+        setFieldsValue({
+          addeduser: total?.length || 0,
+        });
       }
-      function numOnChange(event) {
-        myData.subNum = event;
-        console.log('numOnChange', event);
+      function numOnChange(data) {
+        console.log('data', data);
+        modelRef.subNum = data;
+        // myData.subNum = event;
+        // console.log('numOnChange', event);
       }
       async function handleDelete(item, type) {
         console.log('handleDelete', item, type);
@@ -229,91 +230,79 @@
             title: '提示',
             content: t('routes.devices.unbindWarning'),
             onOk: async () => {
-              tableRef.value.deleteTableDataRecord(item.id);
+              // tableRef.value.deleteTableDataRecord(item.id);
+              deleteTableDataRecord(item.userName);
             },
           });
         }
       }
-      function pageChange(page, d, a) {
-        console.log('pageChange', page, d, a);
-        myData.pagination.current = page;
-        getApiList();
-      }
-      async function getApiList() {
-        const { current, pageSize } = myData.pagination;
-        let res = await selectUserList({
-          id: myData.id,
-          page: current || 1,
-          limit: pageSize || 10,
-        });
-        myData.TableData = res.list || [];
-        myData.pagination.total = res.totalCount || 0;
-        console.log('selectUserList', res, myData);
-      }
-      async function beforeEditSubmit({ _, index, key, value }) {
-        myData.TableData[index][key] = value;
-        return true;
+
+      async function beforeEditSubmit({ record, _, key, value }) {
+        updateTableDataRecord(record.userName, { ...record, [key]: value });
       }
       function handleVisibleChange(v) {
         v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
       function openTargetModal() {
         console.log('openTargetModal');
-        addopenModal(true, {
-          addList: (val) => {
-            console.log('addList', val, myData.subNum > myData.pagination.total);
-            if (myData.subNum > myData.pagination.total) {
-              myData.TableData.push(val);
-              console.log('addList', val, myData.TableData);
-            } else {
-              createMessage.error(t('routes.devices.excess'));
-            }
-          },
-        });
+        addopenModal(true);
       }
       async function saveTable() {
-        let tableData = tableRef.value.getDataSource() || [];
+        // let tableData = tableRef.value.getDataSource() || [];
+        let tableData = getDataSource();
         let res = await saveSubUsers({
-          id: myData.id,
-          subNum: myData.subNum,
+          id: modelRef.id,
+          subNum: modelRef.subNum,
           subUsers: tableData,
         });
         console.log('saveTable', res);
-        createMessage.success(t('common.o'));
-        reload();
+        createMessage.success(t('common.optSuccess'));
+        // reload();
+        emit('update');
         closeModal();
       }
       function addTabledata(val) {
         console.log('addTabledata', val);
       }
-      onMounted(async () => {
-        myData.id && getApiList();
-      });
+      function getTableList(callback) {
+        let data = getFieldsValue();
+        let tableList = unref(getDataSource());
+        setFieldsValue({
+          subNum: Number(data.subNum) - 1,
+        });
+        callback(tableList);
+      }
+      function handleAddUser(newUser) {
+        insertTableDataRecord({
+          nickName: newUser.memoName,
+          userName: newUser.phone,
+        });
+      }
       return {
-        tableRef,
         register,
         handleDelete,
         registerEdit,
         numOnChange,
-        getApiList,
-        pageChange,
-        myData,
-        getPagination,
+        modelRef,
         schemas,
         columns,
         registerForm,
-        modelRef,
+
         handleVisibleChange,
         beforeEditSubmit,
-        register4,
+        registerModal,
         openTargetModal,
-        currentModal,
+
         addopenModal,
         saveTable,
         closeModal,
         addTabledata,
-        reload,
         t,
+        registerSubtable,
+        reloadSubtable,
+        searchInfo,
+        handleAddUser,
+        getTableList,
       };
     },
   });

+ 10 - 8
src/views/corporation/cameraModal.vue

@@ -20,8 +20,8 @@
         </template>
       </BasicForm>
       <BasicTable @register="registerDeviceTable" :searchInfo="searchInfo">
-        <template #activeTime="{ record }">
-          <Time v-if="record.activeTime" :value="record.activeTime" mode="datetime" />
+        <template #activatedTime="{ record }">
+          <Time v-if="record.activatedTime" :value="record.activatedTime" mode="datetime" />
         </template>
         <template #action="{ record }">
           <TableAction
@@ -64,7 +64,9 @@
       const { t } = useI18n();
       const { createMessage } = useMessage();
 
-      const searchInfo = reactive<Recordable>({});
+      const searchInfo = reactive<Recordable>({
+        id: '',
+      });
 
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
@@ -72,13 +74,13 @@
 
       const schemas: FormSchema[] = [
         {
-          field: 'userName',
+          field: 'companyName',
           label: t('routes.corporation.enterpriseName'),
           slot: 'userName',
           component: 'Input',
         },
         {
-          field: 'name',
+          field: 'managerPhone',
           label: t('routes.corporation.enterpriseId'),
           slot: 'name',
           component: 'Input',
@@ -123,8 +125,8 @@
         },
         {
           title: t('routes.corporation.activeTime'),
-          dataIndex: 'activeTime',
-          slots: { customRender: 'activeTime' },
+          dataIndex: 'activatedTime',
+          slots: { customRender: 'activatedTime' },
           width: 100,
         },
       ];
@@ -160,7 +162,7 @@
           ...data,
         });
 
-        searchInfo.userName = data.userName;
+        searchInfo.id = data.id;
         nextTick(reload);
       }
 

+ 10 - 7
src/views/corporation/chargeModal.vue

@@ -26,7 +26,7 @@
   import { useMessage } from '/@/hooks/web/useMessage';
   const schemas: FormSchema[] = [
     {
-      field: 'userName',
+      field: 'managerPhone',
       component: 'Input',
       label: '充值账号',
       labelWidth: 100,
@@ -64,11 +64,13 @@
     props: {
       userData: { type: Object },
     },
-    emits: ['register'],
-    setup(props) {
+    emits: ['register', 'update'],
+    setup(props, { emit }) {
       const { createConfirm, createMessage } = useMessage();
       const reload = inject('tablereload');
-      const modelRef = ref({});
+      const modelRef = ref({
+        id: 0,
+      });
       const [registerForm, { setFieldsValue, resetFields, getFieldsValue }] = useForm({
         labelWidth: 120,
         schemas,
@@ -85,11 +87,12 @@
         let { addPointnumber } = getFieldsValue();
         let res = await addPoint({
           id: modelRef.value.id,
-          point: addPointnumber,
+          point: Number(addPointnumber),
         });
         console.log('saveTable', res, addPoint);
-        createMessage.success('操作成功');
-        reload();
+        createMessage.success(t('common.optSuccess'));
+        // reload();
+        emit('update');
         closeModal();
       }
       async function submit() {

+ 60 - 33
src/views/corporation/detailsModal.vue

@@ -3,28 +3,34 @@
     v-bind="$attrs"
     @register="register"
     :title="t('routes.corporation.businessAuth')"
-    cancelText="拒绝"
-    okText="通过"
+    :cancelText="t('routes.corporation.reject')"
+    :okText="t('routes.corporation.allow')"
     @cancel="closeModal"
     @visible-change="handleVisibleChange"
   >
     <template #footer>
-      <div>
-        <a-button type="primary" danger @click="submitMolad(false)">拒绝</a-button>
-        <a-button type="primary" @click="submitMolad(true)">同意</a-button>
+      <div v-if="isShowFooter">
+        <a-button type="primary" danger @click="submitModal(false)">{{
+          t('routes.corporation.reject')
+        }}</a-button>
+        <a-button type="primary" @click="submitModal(true)">{{
+          t('routes.corporation.allow')
+        }}</a-button>
       </div>
     </template>
     <div class="pt-3px pr-3px">
       <BasicForm @register="registerForm">
         <template #text="{ model, field }">
-          {{ model[field] }}
+          : <span v-if="model[field]">{{ ` ${model[field]}` }}</span>
         </template>
         <template #link="{ model, field }">
-          <a :href="model[field]" target="_blank">{{ model[field] }}</a>
+          <a :href="model[field]" target="_blank">{{ `: ${model[field]}` }}</a>
         </template>
         <template #image="{ model, field }">
           <div v-if="model[field]">
-            <TableImg :size="200" :simpleShow="true" :imgList="[model[field]]" />
+            <Card style="overflow: hidden; min-height: 200px">
+              <TableImg :size="200" :simpleShow="true" :imgList="[model[field]]" />
+            </Card>
           </div>
         </template>
       </BasicForm>
@@ -32,22 +38,28 @@
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, nextTick } from 'vue';
+  import { defineComponent, ref, nextTick, computed } from 'vue';
   import { TableImg } from '/@/components/Table';
+  import { Card } from 'ant-design-vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { checkDevice, selectCompanyById, auditCompany } from '/@/api/corporation/modal';
   import { useI18n } from '/@/hooks/web/useI18n';
+  import { useLocaleStore } from '/@/store/modules/locale';
+  const localeStore = useLocaleStore();
 
   export default defineComponent({
-    components: { BasicModal, BasicForm, TableImg },
+    components: { BasicModal, BasicForm, TableImg, Card },
     props: {
       userData: { type: Object },
     },
     emits: ['register'],
     setup(props) {
-      const modelRef = ref({});
+      const modelRef = ref({
+        id: '',
+      });
+      const isShowFooter = ref(true);
       const { t } = useI18n();
       const num = ref(0);
       const { createMessage } = useMessage();
@@ -55,7 +67,7 @@
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
-
+      const isJA = computed(() => localeStore.getLocale === 'ja');
       const handlevalidator = async (_, value) => {
         console.log('handlevalidator', value);
         if (!value) {
@@ -77,7 +89,7 @@
       const schemas: FormSchema[] = [
         {
           field: 'name',
-          label: '信息标题',
+          label: t('routes.corporation.name'),
           slot: 'text',
           component: 'Input',
         },
@@ -87,46 +99,55 @@
           slot: 'text',
           component: 'Input',
         },
+        // {
+        //   field: 'companyName',
+        //   label: t('routes.corporation.enterpriseName'),
+        //   slot: 'text',
+        //   component: 'Input',
+        // },
         {
           field: 'phone',
-          label: '手机号',
+          label: t('common.mobile'),
           slot: 'text',
           component: 'Input',
         },
         {
           field: 'area',
-          label: '所属区域',
+          label: t('routes.corporation.area'),
           slot: 'text',
+          ifShow: false,
           component: 'Input',
         },
         {
           field: 'address',
-          label: '详细地址',
+          label: t('routes.corporation.address'),
           slot: 'text',
           component: 'Input',
         },
         {
           field: 'website',
-          label: '企业官网',
+          label: t('routes.corporation.website'),
           slot: 'text',
+          ifShow: false,
           component: 'Input',
         },
         {
-          field: 'name',
-          label: '企业简介',
-          slot: 'name',
+          field: 'introduce',
+          label: `${t('routes.corporation.introduce')}`,
+          slot: 'text',
           component: 'Input',
         },
         {
           field: 'logo',
-          label: '企业LOGO',
+          label: `${t('routes.corporation.companyLogo')} :`,
           slot: 'image',
           component: 'Input',
         },
         {
           field: 'qualification',
-          label: '企业资质',
+          label: `${t('routes.corporation.qualification')} :`,
           slot: 'image',
+          // ifShow: false,
           component: 'Input',
         },
       ];
@@ -135,26 +156,30 @@
         registerForm,
         { setFieldsValue, resetFields, appendSchemaByField, removeSchemaByFiled },
       ] = useForm({
-        labelWidth: 120,
+        labelWidth: isJA.value ? 150 : 120,
         schemas,
         showActionButtonGroup: false,
         actionColOptions: {
           span: 24,
         },
       });
-      async function submitMolad(val) {
-        console.log('submitMolad', val);
-        let res = await auditCompany({
-          id: modelRef.value.id,
-          state: val ? 1 : 2,
-        });
-        success(res);
-        closeModal();
+      async function submitModal(val) {
+        try {
+          console.log('submitModal', val);
+          await auditCompany({
+            id: modelRef.value.id,
+            state: val ? 1 : 2,
+          });
+          success(t('common.optSuccess'));
+          closeModal();
+        } catch (error) {
+          console.log('error', error);
+        }
       }
       async function onDataReceive(data) {
         // 方式1;
         resetFields();
-        let { id } = data.record;
+        let { id, state } = data.record;
         let res = await selectCompanyById({
           id,
         });
@@ -162,6 +187,7 @@
         setFieldsValue({
           ...res,
         });
+        isShowFooter.value = Number(state) === 0;
         modelRef.value = { ...data.record };
       }
       function numOnChange(event) {
@@ -219,7 +245,7 @@
       }
       return {
         register,
-        submitMolad,
+        submitModal,
         schemas,
         registerForm,
         numOnChange,
@@ -229,6 +255,7 @@
         closeModal,
         errorMsg: error,
         t,
+        isShowFooter,
       };
     },
   });

+ 272 - 114
src/views/corporation/deviceModal.vue

@@ -4,6 +4,7 @@
     @register="register"
     :title="t('routes.devices.addDevice')"
     @ok="submitModal"
+    @cancel="handleCloseModal"
     @visible-change="handleVisibleChange"
   >
     <div class="pt-3px pr-3px">
@@ -14,39 +15,61 @@
         <template #name="{ model, field }">
           {{ model[field] }}
         </template>
+        <template #subNum="{ model, field }">
+          <!-- {{ model[field] }} -->
+          <input-number
+            v-model:value="model[field]"
+            style="width: 260px; text-align: center"
+            class="justify-center suNum"
+            :min="0"
+            :max="20"
+            @blur="deviceMapping"
+            @press-enter="deviceMapping"
+          >
+            <template #addonBefore>
+              <a-button size="small" type="link" @click="handleMinusDevice">
+                <Icon icon="ic:baseline-minus" :size="20" />
+              </a-button>
+            </template>
+            <template #addonAfter>
+              <a-button size="small" type="link" @click="handlePlusDevice">
+                <Icon icon="ic:round-plus" :size="20" />
+              </a-button>
+            </template>
+          </input-number>
+        </template>
       </BasicForm>
     </div>
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, nextTick } from 'vue';
+  import { defineComponent, ref, nextTick, unref } from 'vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
-  import { AddDevice, checkDevice } from '/@/api/corporation/modal';
+  import { InputNumber } from 'ant-design-vue';
+  // AddDevice
+  import { checkDevice, AddDevice } from '/@/api/corporation/modal';
   import { useI18n } from '/@/hooks/web/useI18n';
+  import { Icon } from '/@/components/Icon/index';
+  import { clamp, range } from 'lodash-es';
+
   export default defineComponent({
-    components: { BasicModal, BasicForm },
+    components: { BasicModal, BasicForm, InputNumber, Icon },
     props: {
       userData: { type: Object },
     },
     emits: ['register'],
     setup(props) {
-      const modelRef = ref({});
-      const num = ref(0);
+      const modelRef = ref({
+        mappingLength: 0,
+      });
+
+      // const num = ref(0);
       const { t } = useI18n();
       const { createMessage } = useMessage();
       const { success, error } = createMessage;
-      // const debounce = (fn, delay) => {
-      //   var timer = null;
-      //   return function () {
-      //     var context = this, args = arguments;
-      //     clearTimeout(timer);
-      //     timer = setTimeout(function () {
-      //       fn.apply(context, args);
-      //     }, delay);
-      //   };
-      // }
+
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
@@ -71,31 +94,48 @@
       };
       const schemas: FormSchema[] = [
         {
-          field: 'userName',
+          field: 'id',
+          label: 'id',
+          show: false,
+          component: 'Input',
+        },
+        {
+          field: 'subNum',
+          label: 'subNum',
+          show: false,
+          component: 'Input',
+        },
+        {
+          field: 'companyName',
           label: t('routes.corporation.enterpriseName'),
           slot: 'userName',
           component: 'Input',
         },
         {
-          field: 'name',
+          field: 'managerPhone',
           label: t('routes.corporation.enterpriseId'),
           slot: 'name',
           component: 'Input',
         },
         {
-          field: 'num',
+          field: 'deviceNumber',
           component: 'InputNumber',
           label: t('routes.corporation.cameraNum'),
+          defaultValue: 0,
+          slot: 'subNum',
           colProps: {
             span: 8,
           },
-          componentProps: () => {
-            return {
-              // xxxx props schema, tableAction, formModel  checkDevice
-              min: 0,
-              onChange: numOnChange,
-            };
-          },
+          helpMessage: '最多批量增加20个!',
+          // componentProps: () => {
+          //   return {
+          //     // xxxx props schema, tableAction, formModel  checkDevice
+          //     min: 0,
+          //     max: 10,
+          //     // onChange: numOnChange,
+          //     onblur: deviceMapping,
+          //   };
+          // },
         },
       ];
       // let schemasList = []
@@ -105,7 +145,7 @@
           setFieldsValue,
           resetFields,
           getFieldsValue,
-          validateFields,
+          validate,
           appendSchemaByField,
           removeSchemaByFiled,
         },
@@ -118,125 +158,243 @@
         },
       });
 
+      // async function submitModal() {
+      //   let formData = {
+      //     ...getFieldsValue(),
+      //   };
+      //   let validate = false;
+      //   try {
+      //     const res = await validateFields();
+      //     validate = true;
+      //     console.log('passing', res, formData);
+      //   } catch (error: unknown) {
+      //     console.log('not passing', error);
+      //   }
+      //   if (validate) {
+      //     const { subNum, id, userName } = modelRef.value;
+      //     let childNameList = [];
+      //     Object.keys(formData).map((ele) => {
+      //       if (ele.includes('ID')) {
+      //         childNameList.push(formData[ele]);
+      //       }
+      //     });
+      //     console.log('modelRef.value', Object.keys(formData), childNameList);
+      //     try {
+      //       const res = await AddDevice({
+      //         childNames: childNameList as any as string[],
+      //         companyId: id,
+      //         subNum: String(subNum),
+      //         userName,
+      //       });
+      //       success(res);
+      //       closeModal();
+      //     } catch (errors) {
+      //       // error('errors');
+      //       // console.log('not passing', error);
+      //     }
+      //   }
+      // }
       async function submitModal() {
-        let formData = {
-          ...getFieldsValue(),
-        };
-        let validate = false;
         try {
-          const res = await validateFields();
-          validate = true;
-          console.log('passing', res, formData);
-        } catch (error: unknown) {
-          console.log('not passing', error);
-        }
-        if (validate) {
-          const { subNum, id, userName } = modelRef.value;
-          let childNameList = [];
-          Object.keys(formData).map((ele) => {
+          const values = await validate();
+          console.log('values,', values);
+          let childNameList: string[] = [];
+          Object.keys(values).map((ele) => {
             if (ele.includes('ID')) {
-              childNameList.push(formData[ele]);
+              childNameList.push(values[ele]);
             }
           });
-          console.log('modelRef.value', Object.keys(formData), childNameList);
-          try {
-            const res = await AddDevice({
-              childNames: childNameList,
-              id,
-              subNum,
-              userName,
-            });
-            success(res);
-            closeModal();
-          } catch (errors) {
-            error('errors');
-            console.log('not passing', error);
-          }
-        }
+
+          await AddDevice({
+            childNames: childNameList,
+            id: values.id,
+            subNum: String(values.subNum),
+            userName: values.userName,
+          });
+          success(t('common.optSuccess'));
+          closeModal();
+        } catch (error) {}
       }
+
       function onDataReceive(data) {
         // 方式1;
+        console.log('userName', data.record);
+
         resetFields();
         setFieldsValue({
           ...data.record,
+          subNum: 0,
         });
+      }
 
-        // // 方式2
-        modelRef.value = { ...data.record };
+      // function numOnChange(data) {
+      //   const value = Number(data);
+      //   if (num.value > value) {
+      //     //减
+      //     let delList = Array.from(new Array(num.value)).map((_, index) => {
+      //       console.log(index, value, num.value);
+      //       if (index >= value) {
+      //         return `ID${index}`;
+      //       }
+      //     });
 
-        // setProps({
-        //   ...data.record,
-        // });
+      //     removeSchemaByFiled(delList as any as string[]);
+      //     console.log('schemasList减', value, num.value, delList);
+      //     // value,num.value,schemasList.filter((_,index) => {return !(index<num.value)}).map((_,index) => `ID${index}`))
+      //   } else {
+      //     //增
+      //     let device = t('routes.corporation.device');
+      //     let schemasList: FormSchema[] = Array.from(new Array(value)).map((_, index) => {
+      //       return {
+      //         field: `ID${index}`,
+      //         component: 'Input',
+      //         label: device + 'ID' + index,
+      //         helpMessage: [t('common.checkTips'), `${device} ${t('common.unusual')}`],
+      //         itemProps: {
+      //           validateTrigger: 'blur',
+      //         },
+      //         colProps: {
+      //           span: 24,
+      //         },
+      //         rules: [
+      //           {
+      //             required: true,
+      //             message: `${t('common.inputText')} ${device} ID`,
+      //           },
+      //           {
+      //             validator: handlevalidator,
+      //           },
+      //         ],
+      //       };
+      //     });
+      //     console.log(
+      //       'schemasList增',
+      //       num.value,
+      //       schemasList.filter((_, index) => {
+      //         return index >= num.value;
+      //       }),
+      //     );
+      //     schemasList
+      //       .filter((_, index) => {
+      //         return index >= num.value;
+      //       })
+      //       .forEach((item) => appendSchemaByField(item, ''));
+      //   }
+      //   num.value = value;
+      // }
+
+      function handleVisibleChange(v) {
+        v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
-      function numOnChange(event) {
-        const value = Number(event);
-        if (num.value > value) {
-          //减
-          let delList = Array.from(new Array(num.value)).map((_, index) => {
-            console.log(index, value, num.value);
-            if (index >= value) {
-              return `ID${index}`;
-            }
-          });
-          removeSchemaByFiled(delList);
-          console.log('schemasList减', value, num.value, delList);
-          // value,num.value,schemasList.filter((_,index) => {return !(index<num.value)}).map((_,index) => `ID${index}`))
-        } else {
-          //增
-          let device = t('routes.corporation.device');
-          let schemasList: FormSchema[] = Array.from(new Array(value)).map((_, index) => {
-            return {
-              field: `ID${index}`,
-              component: 'Input',
-              label: device + 'ID' + index,
-              helpMessage: [t('common.checkTips'), `${device} ${t('common.unusual')}`],
-              itemProps: {
-                validateTrigger: 'blur',
+
+      async function handleCloseModal() {
+        // numOnChange(0);
+        await setFieldsValue({
+          subNum: 0,
+        });
+        deviceMapping();
+      }
+
+      function setMappingDevice(devices: number, start = 0): FormSchema[] {
+        return Array.from(new Array(devices)).map((_, index) => {
+          const startIndex = start + index + 1;
+          return {
+            field: `ID${startIndex}`,
+            component: 'Input',
+            label: `${t('routes.corporation.device')} ID  ${startIndex}`,
+            helpMessage: [
+              t('common.checkTips'),
+              `${t('routes.corporation.device')} ${t('common.unusual')}`,
+            ],
+            itemProps: {
+              validateTrigger: 'blur',
+            },
+            colProps: {
+              span: 24,
+            },
+            rules: [
+              {
+                required: true,
+                message: `${t('common.inputText')} ${t('routes.corporation.device')} ID`,
               },
-              colProps: {
-                span: 24,
+              {
+                validator: handlevalidator,
               },
-              rules: [
-                {
-                  required: true,
-                  message: `${t('common.inputText')} ${device} ID`,
-                },
-                {
-                  validator: handlevalidator,
-                },
-              ],
-            };
+            ],
+          };
+        });
+      }
+
+      async function deviceMapping() {
+        const values = getFieldsValue();
+        const devices: number = clamp(values.deviceNumber, 0, 20);
+        const currentLength = unref(modelRef).mappingLength;
+
+        const rest = devices - currentLength;
+        if (rest > 0) {
+          //plus
+          const schemas = setMappingDevice(rest, currentLength);
+          console.log('schemas', schemas);
+          const patchs = schemas.map((i: FormSchema) => {
+            return appendSchemaByField(i, '');
           });
-          console.log(
-            'schemasList增',
-            num.value,
-            schemasList.filter((_, index) => {
-              return index >= num.value;
-            }),
-          );
-          schemasList
-            .filter((_, index) => {
-              return index >= num.value;
-            })
-            .forEach((item) => appendSchemaByField(item, ''));
+          await Promise.all(patchs);
+          unref(modelRef).mappingLength = devices;
+          console.log('patch in');
+        } else {
+          // minus
+          const startIndex = currentLength + rest;
+          console.log('rest', rest);
+          console.log('currentLength', currentLength);
+          console.log('startIndex', startIndex);
+          const ranges = range(startIndex + 1, currentLength + 1, 1).map((i) => {
+            return `ID${i}`;
+          });
+          console.log('ranges', ranges);
+          removeSchemaByFiled(ranges);
+          unref(modelRef).mappingLength = devices;
         }
-        num.value = value;
       }
-      function handleVisibleChange(v) {
-        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      async function handlePlusDevice() {
+        const values = getFieldsValue();
+        const currentsubNum = values.deviceNumber;
+        const currentDevice = clamp(currentsubNum + 1, 0, 20);
+        await setFieldsValue({
+          deviceNumber: currentDevice,
+        });
+        deviceMapping();
       }
+      async function handleMinusDevice() {
+        const values = getFieldsValue();
+        const currentsubNum = values.deviceNumber;
+        const currentDevice = clamp(currentsubNum - 1, 0, 20);
+        await setFieldsValue({
+          deviceNumber: currentDevice,
+        });
+        deviceMapping();
+      }
+
       return {
         register,
         submitModal,
         schemas,
         registerForm,
-        numOnChange,
+        // numOnChange,
         modelRef,
         handleVisibleChange,
-        num,
+        // num,
         errorMsg: error,
+        handleCloseModal,
+        deviceMapping,
         t,
+        handlePlusDevice,
+        handleMinusDevice,
       };
     },
   });
 </script>
+<style lang="less">
+  .suNum .ant-input-number-input {
+    text-align: center;
+  }
+</style>

+ 18 - 4
src/views/corporation/verify.vue

@@ -1,7 +1,11 @@
 <template>
   <div class="p-4">
     <BasicTable @register="registerTable">
-      <template #toolbar> </template>
+      <template #toolbar>
+        <a-button type="primary" @click="openAddModal">{{
+          t('routes.corporation.addCorporation')
+        }}</a-button>
+      </template>
       <template #no="{ record }">
         <Tag :color="renderTag(record.state, 'color')">
           {{ renderTag(record.state, 'text') || '审核中' }}
@@ -26,6 +30,7 @@
       </template>
     </BasicTable>
     <detailsModal @register="registerDeviceModal" />
+    <AddCorporationModal @register="registerAddCorporationModal" @submit="reload" />
   </div>
 </template>
 <script lang="ts">
@@ -38,12 +43,14 @@
   import detailsModal from './detailsModal.vue';
   import { useModal } from '/@/components/Modal';
   import { useI18n } from '/@/hooks/web/useI18n';
+  import AddCorporationModal from './AddCorporationModal.vue';
 
   export default defineComponent({
-    components: { BasicTable, Tag, TableAction, detailsModal, Time },
+    components: { BasicTable, Tag, TableAction, detailsModal, Time, AddCorporationModal },
     setup() {
       const { t } = useI18n();
       const [registerDeviceModal, { openModal: openDeviceModal }] = useModal();
+      const [registerAddCorporationModal, { openModal: openAddCorporationModal }] = useModal();
       const columns: BasicColumn[] = [
         {
           title: t('routes.corporation.submitTime'),
@@ -67,7 +74,7 @@
           width: 120,
         },
         {
-          title: t('common.state'),
+          title: t('routes.corporation.approveState'),
           dataIndex: 'state',
           slots: { customRender: 'no' },
           width: 180,
@@ -116,7 +123,7 @@
         ],
       };
       // { getForm }
-      const [registerTable] = useTable({
+      const [registerTable, { reload }] = useTable({
         title: t('routes.corporation.businessAuth'),
         api: ListVerifyApi,
         columns: columns,
@@ -162,6 +169,10 @@
         }
       }
       // pagination.value = { pageSize: 20 };
+
+      function openAddModal() {
+        openAddCorporationModal(true);
+      }
       return {
         registerTable,
         uploadApi: uploadApi as any,
@@ -169,6 +180,9 @@
         infoText,
         renderTag,
         t,
+        openAddModal,
+        registerAddCorporationModal,
+        reload,
       };
     },
   });

+ 9 - 1
src/views/scenes/liveDrawer.vue

@@ -152,12 +152,20 @@
           field: 'sceneUrl',
           label: t('routes.scenes.sceneUrl'),
           component: 'ApiSelect',
-          required: true,
+          // required: true,
           colProps: {
             span: 10,
           },
           componentProps: {
             api: getAllSceneApi,
+            immediate: true,
+            resultField: 'list',
+            labelField: 'id',
+            valueField: 'id',
+            params: {
+              page: 1,
+              limit: 10,
+            },
           },
         },