瀏覽代碼

feat(修改): 修改整体

tangning 3 年之前
父節點
當前提交
36e80fef6f

+ 12 - 0
src/api/staff/list.ts

@@ -12,12 +12,24 @@ enum Api {
   checkUser = '/zfb-api/zfb/user/checkUserExists',
   deleteStaff = '/zfb-api/zfb/shop/sys/user/deleteStaff',
   getNumByStaff = '/zfb-api/zfb/shop/sys/user/getNumByStaff',
+  clean = '/zfb-api/zfb/loginOutByUser',
 }
 
 /**
  * @description: Get sample list value
  */
 
+export const clean = (params) =>
+  defHttp.post<Result>({
+    url: Api.clean,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
 export const ListApi = (params: PageParams) =>
   defHttp.post<ListGetResultModel>({
     url: Api.pageList,

+ 1 - 0
src/locales/lang/zh-CN/routes/dashboard.ts

@@ -29,6 +29,7 @@ export default {
   memberList: '会员列表',
   staff: '员工管理',
   staffList: '员工列表',
+  staffClean: '清除状态',
   feedback: '反馈管理',
   feedbackList: '反馈列表',
 };

+ 9 - 0
src/locales/lang/zh-CN/routes/rightsEnterprises.ts

@@ -6,6 +6,7 @@ export default {
   staffPhone: '员工手机号码',
   timeField: '时间',
   companyName: '企业名称',
+  companyId: '企业ID',
   companyPhone: '企业账号',
   userPermNum: '用户权益总数',
   exUserPermNum: '已过期用户权益数',
@@ -21,10 +22,18 @@ export default {
   createTime: '购买时间',
   activationTime: '激活时间',
   expirationTime: '到期时间',
+  incrementNum: '权益数',
+  addText: '新增',
+  kk: '四维看看 pro',
+  kj: '四维看见',
+  ss: '四维深时',
+  snCode: '授权相机S/N码',
+  cameraIncrementTypeName: '设备类型',
   state: {
     0: '未激活',
     1: '已生效',
     2: '已过期',
     9: '未过期',
   },
+  addcamera: '新增相机权益',
 };

+ 39 - 9
src/router/routes/modules/rightsEnterprises.ts

@@ -7,31 +7,61 @@ const staff: AppRouteModule = {
   path: '/rightsEnterprises',
   name: 'RightsEnterprises',
   component: LAYOUT,
-  redirect: '/rightsEnterprises/list',
+  redirect: '/rightsEnterprises/rights/list',
   meta: {
-    icon: 'medical-icon:care-staff-area',
+    icon: 'bi:columns',
     title: t('routes.rightsEnterprises.menuName'),
-    orderNo: 102,
+    orderNo: 150,
   },
   children: [
     {
-      path: 'staffList',
-      name: 'StaffList',
+      path: 'camera/list',
+      name: 'CameraList',
       // component: () => import('/@/views/rightsEnterprises/enterprises.vue'),
-      component: () => import('/@/views/rightsEnterprises/staff.vue'),
+      component: () => import('/@/views/rightsEnterprises/cameraList.vue'),
       meta: {
         title: t('routes.rightsEnterprises.staffList'),
         icon: 'ic:outline-remember-me',
+        hideChildrenInMenu: true,
       },
+      children: [
+        {
+          path: 'camera/detail/:id',
+          name: 'CameraDetail',
+          component: () => import('/@/views/rightsEnterprises/cameraDetail.vue'),
+          meta: {
+            currentActiveMenu: '/rightsEnterprises/camera/list',
+            title: t('routes.rightsEnterprises.staffList'),
+            hideMenu: true,
+            dynamicLevel: 3,
+            realPath: '/rightsEnterprises/camera/detail',
+          },
+        },
+      ],
     },
     {
-      path: 'enterprises',
-      name: 'EnterprisesList',
-      component: () => import('/@/views/rightsEnterprises/enterprises.vue'),
+      path: 'rights/list',
+      name: 'RightsList',
+      component: () => import('/@/views/rightsEnterprises/rightsList.vue'),
       meta: {
         title: t('routes.rightsEnterprises.staffList'),
         icon: 'ic:outline-remember-me',
+        hideChildrenInMenu: true,
       },
+      children: [
+        {
+          path: 'rights/detail/:id',
+          name: 'RightsDetail',
+          component: () => import('/@/views/rightsEnterprises/rightsDetail.vue'),
+          meta: {
+            currentActiveMenu: '/rightsEnterprises/rights/list',
+            title: t('routes.dashboard.orderDetail'),
+            hideMenu: true,
+            dynamicLevel: 3,
+            realPath: '/rightsEnterprises/rights/detail',
+          },
+        },
+      ],
     },
   ],
 };

+ 9 - 0
src/router/routes/modules/staff.ts

@@ -23,6 +23,15 @@ const staff: AppRouteModule = {
         icon: 'ic:outline-remember-me',
       },
     },
+    {
+      path: 'clean',
+      name: 'StaffClean',
+      component: () => import('/@/views/staff/clean.vue'),
+      meta: {
+        title: t('routes.dashboard.staffClean'),
+        icon: 'ic:outline-remember-me',
+      },
+    },
   ],
 };
 

+ 62 - 67
src/views/corporation/SubaccountModal.vue

@@ -15,14 +15,9 @@
         <template #name="{ model, field }">
           {{ model[field] }}
         </template>
-        <template #addeduser="{ model, field }">
-          {{ model[field] || 0 }}
-          <a-button
-            :disabled="model[field] >= modelRef.subNum"
-            @click="openTargetModal()"
-            type="primary"
-            preIcon="ic:outline-person-add"
-          >
+        <template #addeduser>
+          <!-- {{ model[field] || 0 }} :disabled="model[field] >= modelRef.subNum" ="{ model, field }"-->
+          <a-button @click="openTargetModal()" type="primary" preIcon="ic:outline-person-add">
             {{ t('routes.devices.add') }}{{ t('routes.devices.title') }}
           </a-button>
         </template>
@@ -201,65 +196,65 @@
           component: 'Input',
           labelWidth: 200,
         },
-        {
-          field: 'shotNum',
-          component: 'InputNumber',
-          slot: 'subNum',
-          label: `可拍摄员工数 :`,
-          labelWidth: 200,
-          rules: [
-            {
-              required: false,
-              // @ts-ignore
-              validator: async (rule, value) => {
-                let { addeduser, lookNum } = getFieldsValue();
-                if (value < addeduser - lookNum) {
-                  return Promise.reject('可添加员工总数应大于已添加员工数');
-                }
-                return Promise.resolve();
-              },
-              trigger: 'change',
-            },
-          ],
-          componentProps: () => {
-            return {
-              // xxxx props schema, tableAction, formModel  checkDevice
-              min: 0,
-              max: 999,
-              onChange: numOnChange,
-            };
-          },
-        },
-        {
-          field: 'lookNum',
-          component: 'InputNumber',
-          slot: 'subNum',
-          label: `可带看员工数 :`,
-          labelWidth: 200,
-          rules: [
-            {
-              required: false,
-              // @ts-ignore
-              validator: async (rule, value) => {
-                let { addeduser, shotNum } = getFieldsValue();
-                console.log('validator', value, addeduser);
-                if (value < addeduser - shotNum) {
-                  return Promise.reject('可添加员工总数应大于已添加员工数');
-                }
-                return Promise.resolve();
-              },
-              trigger: 'change',
-            },
-          ],
-          componentProps: () => {
-            return {
-              // xxxx props schema, tableAction, formModel  checkDevice
-              max: 999,
-              min: 0,
-              onChange: numsOnChange,
-            };
-          },
-        },
+        // {
+        //   field: 'shotNum',
+        //   component: 'InputNumber',
+        //   slot: 'subNum',
+        //   label: `可拍摄员工数 :`,
+        //   labelWidth: 200,
+        //   rules: [
+        //     {
+        //       required: false,
+        //       // @ts-ignore
+        //       validator: async (rule, value) => {
+        //         let { addeduser, lookNum } = getFieldsValue();
+        //         if (value < addeduser - lookNum) {
+        //           return Promise.reject('可添加员工总数应大于已添加员工数');
+        //         }
+        //         return Promise.resolve();
+        //       },
+        //       trigger: 'change',
+        //     },
+        //   ],
+        //   componentProps: () => {
+        //     return {
+        //       // xxxx props schema, tableAction, formModel  checkDevice
+        //       min: 0,
+        //       max: 999,
+        //       onChange: numOnChange,
+        //     };
+        //   },
+        // },
+        // {
+        //   field: 'lookNum',
+        //   component: 'InputNumber',
+        //   slot: 'subNum',
+        //   label: `可带看员工数 :`,
+        //   labelWidth: 200,
+        //   rules: [
+        //     {
+        //       required: false,
+        //       // @ts-ignore
+        //       validator: async (rule, value) => {
+        //         let { addeduser, shotNum } = getFieldsValue();
+        //         console.log('validator', value, addeduser);
+        //         if (value < addeduser - shotNum) {
+        //           return Promise.reject('可添加员工总数应大于已添加员工数');
+        //         }
+        //         return Promise.resolve();
+        //       },
+        //       trigger: 'change',
+        //     },
+        //   ],
+        //   componentProps: () => {
+        //     return {
+        //       // xxxx props schema, tableAction, formModel  checkDevice
+        //       max: 999,
+        //       min: 0,
+        //       onChange: numsOnChange,
+        //     };
+        //   },
+        // },
         {
           field: 'addeduser',
           label: `${t('routes.devices.addeduser')}`,

+ 36 - 21
src/views/rightsEnterprises/BindModal.vue

@@ -24,11 +24,10 @@
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, computed } from 'vue';
-  import { bindRights } from '/@/api/rightsEnterprises/list'; //roleLIstApi
+  import { defineComponent, ref, computed, reactive } from 'vue';
+  import { bindRights, bindStaffList } from '/@/api/rightsEnterprises/list'; //roleLIstApi
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
-  import { ListAllCompanyApi } from '/@/api/corporation/list';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useUserStore } from '/@/store/modules/user';
@@ -44,7 +43,9 @@
         isSee: false,
       });
       const userStore = useUserStore();
-      const { getCheckRole } = userStore;
+      const userIdList = reactive({
+        list: [],
+      });
       const userinfo = computed(() => userStore.getUserInfo);
       const { companyId } = userinfo.value;
       console.log('companyId', companyId);
@@ -64,7 +65,7 @@
         {
           field: 'permName',
           component: 'Input',
-          label: '手机号',
+          label: '权益',
           colProps: {
             span: 18,
           },
@@ -74,7 +75,7 @@
         {
           field: 'userId',
           label: '员工名称',
-          component: 'ApiSelect',
+          component: 'Select',
           itemProps: {
             validateTrigger: 'blur',
           },
@@ -82,19 +83,10 @@
             span: 22,
           },
           required: true,
-          ifShow: getCheckRole('plat_admin'),
+          // ifShow: getCheckRole('plat_admin'),
           componentProps: {
-            api: ListAllCompanyApi,
-            showSearch: true,
-            resultField: 'list',
-            labelField: 'name',
-            valueField: 'id',
-            immediate: true,
-            params: {
-              page: 1,
-              limit: 1000,
-            },
-            required: true,
+            options: userIdList.list,
+            onChange: userIdChange,
           },
         },
         {
@@ -150,9 +142,21 @@
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
-      function onDataReceive(data) {
+      async function onDataReceive(data) {
         // 方式1;
-        console.log('handleDelete', data);
+        let list = await bindStaffList({
+          companyId: data.companyId,
+          staffPermTypeId: data.permTypeId,
+        });
+        userIdList.list = list.map((ele) => {
+          return {
+            ...ele,
+            label: ele.staffName,
+            value: ele.staffId,
+            key: ele.staffPhone,
+          };
+        });
+        console.log('handleDelete', userIdList.list);
         modelRef.value.isSee = data.userId ? true : false;
         setFieldsValue({
           ...data,
@@ -164,10 +168,21 @@
             required: !data.userId,
             slot: !!data.userId ? 'text' : false,
           },
+          {
+            field: 'userId',
+            componentProps: {
+              options: userIdList.list,
+            },
+          },
         ];
         updateSchema(setSchema);
       }
-
+      function userIdChange(val, item) {
+        console.log('handleDelete', val, item);
+        setFieldsValue({
+          ...item,
+        });
+      }
       async function handleOk() {
         if (modelRef.value.isSee) {
           return closeModal();

+ 185 - 0
src/views/rightsEnterprises/addCameraModal.vue

@@ -0,0 +1,185 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.rightsEnterprises.addcamera')"
+    @ok="handleOk"
+    width="600px"
+  >
+    <div class="pt-3px pr-3px">
+      <BasicForm @register="registerForm">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, computed } from 'vue';
+  import { addCamrea, deviceType } from '/@/api/rightsEnterprises/list'; //roleLIstApi
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { ListAllCompanyApi } from '/@/api/corporation/list';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import dayjs from 'dayjs';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useUserStore } from '/@/store/modules/user';
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['ok'],
+    setup(_, context) {
+      const modelRef = ref({
+        isSee: false,
+      });
+      const userStore = useUserStore();
+      const userinfo = computed(() => userStore.getUserInfo);
+      const { companyId } = userinfo.value;
+      console.log('companyId', companyId);
+      const schemas: FormSchema[] = [
+        {
+          field: 'companyId',
+          label: t('routes.rightsEnterprises.companyName'),
+          component: 'ApiSelect',
+          itemProps: {
+            validateTrigger: 'blur',
+          },
+          colProps: {
+            span: 22,
+          },
+          required: true,
+          componentProps: {
+            api: ListAllCompanyApi,
+            showSearch: true,
+            resultField: 'list',
+            labelField: 'name',
+            valueField: 'id',
+            immediate: true,
+            params: {
+              page: 1,
+              limit: 1000,
+            },
+            onOptionsChange: (data) => {
+              console.log('data', data, arguments);
+            },
+            onChange: (data) => {
+              console.log('data', data, arguments);
+            },
+          },
+        },
+        {
+          field: 'userIncrementTypeId',
+          label: t('routes.rightsEnterprises.cameraIncrementTypeName'),
+          component: 'ApiSelect',
+          itemProps: {
+            validateTrigger: 'blur',
+          },
+          colProps: {
+            span: 22,
+          },
+          required: true,
+          // ifShow: getCheckRole('plat_admin'),
+          componentProps: {
+            api: deviceType,
+            showSearch: true,
+            resultField: 'list',
+            labelField: 'name',
+            valueField: 'id',
+            immediate: true,
+            params: {
+              page: 1,
+              limit: 1000,
+            },
+            required: true,
+          },
+        },
+        {
+          label: t('routes.rightsEnterprises.incrementNum'),
+          field: 'incrementNum',
+          component: 'Input',
+          colProps: {
+            span: 22,
+          },
+          componentProps: {
+            maxLength: 15,
+          },
+        },
+        {
+          field: 'incrementEndTime',
+          component: 'DatePicker',
+          label: t('routes.rightsEnterprises.expirationTime'),
+          colProps: {
+            span: 22,
+          },
+          componentProps: {
+            valueFormat: 'YYYY-MM-DD',
+            disabledDate: (current) => {
+              return current && current < dayjs().endOf('day');
+            },
+          },
+        },
+      ];
+      const title = ref('绑 定');
+      const { createMessage } = useMessage();
+      const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function onDataReceive(data) {
+        // 方式1;
+        modelRef.value.isSee = data.userId ? true : false;
+        setFieldsValue({
+          ...data,
+          userId: data.userId ? data.staffName : data.userId,
+        });
+        let setSchema = [
+          {
+            field: 'companyId',
+            componentProps: {
+              disabled: !!data.companyId,
+            },
+          },
+        ];
+        console.log('handleDelete', data, setSchema);
+        updateSchema(setSchema);
+      }
+
+      async function handleOk() {
+        if (modelRef.value.isSee) {
+          return closeModal();
+        }
+        let data = await validate();
+        let res = await addCamrea({
+          ...data,
+        });
+        context && context.emit('update', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
+      }
+
+      return {
+        register,
+        title,
+        schemas,
+        registerForm,
+        modelRef,
+        handleOk,
+        resetFields,
+        t,
+      };
+    },
+  });
+</script>

+ 288 - 0
src/views/rightsEnterprises/camera.vue

@@ -0,0 +1,288 @@
+<template>
+  <div>
+    <BasicTable @register="registerTable">
+      <template #toolbar>
+        <a-button
+          v-power="[RoleEnum.COMPANY_ADMIN, RoleEnum.PLAT_ADMIN]"
+          type="primary"
+          @click="handleOpenModal"
+        >
+          新增</a-button
+        >
+      </template>
+      <template #status="{ record }">
+        {{ renderStatus(record.state) }}
+      </template>
+      <template #createTime="{ record, field }">
+        <Time v-if="record[field]" :value="record[field]" mode="date" />
+      </template>
+      <!-- onClick: handleOpenModal.bind(null, record), 
+            ifShow: record.state == 0 && !!record.userId,
+            ifShow: !!record.userId,
+      -->
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '授权',
+              ifShow: !record.snCode,
+              onClick: handleDelete.bind(null, record),
+            },
+            {
+              label: '解绑',
+              color: 'error',
+              ifShow: !!record.snCode,
+              onClick: handleUpBind.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addCameraModal @register="register" @update="reload" />
+    <BindModal @register="registerDelList" @update="reload" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent, computed, onMounted, ref, watch, reactive } from 'vue';
+  import { BasicTable, useTable, BasicColumn, FormProps, TableAction } from '/@/components/Table';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useModal } from '/@/components/Modal';
+  import { uploadApi } from '/@/api/sys/upload';
+  import BindModal from './cameraBind.vue';
+  import addCameraModal from './addCameraModal.vue';
+  import { cameraDetailList, unbindCamera } from '/@/api/rightsEnterprises/list';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  // import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
+  import { RoleEnum } from '/@/enums/roleEnum';
+  import { useGo } from '/@/hooks/web/usePage';
+  import { Time } from '/@/components/Time';
+  import { useUserStore } from '/@/store/modules/user';
+  export default defineComponent({
+    name: 'StaffList',
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      BindModal,
+      addCameraModal,
+    },
+    props: {
+      companyInfo: {
+        type: Object,
+        default: function () {
+          return {};
+        },
+      },
+    },
+    setup(props) {
+      const [register, { openModal }] = useModal();
+      const surplusSubNum = ref({
+        lookNum: 0,
+        shotNum: 0,
+      });
+      const [registerDetail, { openModal: openDetaileModal }] = useModal();
+      const [registerDelList, { openModal: openDelListeModal }] = useModal();
+      const { createConfirm, createMessage } = useMessage();
+      const userStore = useUserStore();
+      const { getCheckRole } = userStore;
+      const userinfo = computed(() => userStore.getUserInfo);
+      const modelRef = reactive({
+        companyId: userinfo.value.companyId,
+        companyName: '0',
+        companyPhone: '',
+      });
+      const go = useGo();
+      const { t } = useI18n();
+      watch(
+        () => props.companyInfo,
+        (newProps) => {
+          modelRef.companyId = newProps.companyId;
+          modelRef.companyName = newProps.companyName;
+          modelRef.companyPhone = newProps.companyPhone;
+          console.log('companyInfo', modelRef);
+          reload();
+        },
+        {
+          deep: true,
+        },
+      );
+      onMounted(() => {
+        getNumByStaffData();
+      });
+
+      const columns: BasicColumn[] = [
+        {
+          title: '相机权益ID',
+          dataIndex: 'id',
+          fixed: 'left',
+          width: 50,
+        },
+        {
+          title: t('routes.rightsEnterprises.snCode'),
+          dataIndex: 'snCode',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.cameraIncrementTypeName'),
+          dataIndex: 'cameraIncrementTypeName',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.companyName'),
+          dataIndex: 'companyName',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.companyPhone'),
+          dataIndex: 'companyPhone',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.purchaseTime'),
+          dataIndex: 'createTime',
+          // slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.expirationTime'),
+          dataIndex: 'incrementEndTime',
+          // slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: '操作',
+          dataIndex: '',
+          ifShow: !getCheckRole('tourist'),
+          slots: { customRender: 'action' },
+          fixed: 'right',
+          width: 60,
+        },
+      ];
+
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'staffName',
+            label: t('routes.rightsEnterprises.staffName'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              span: 8,
+            },
+          },
+          {
+            field: 'staffPhone',
+            label: t('routes.corporation.phone'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              span: 8,
+            },
+          },
+        ],
+      };
+
+      const [registerTable, { reload }] = useTable({
+        title: t('routes.rightsEnterprises.staffList'),
+        api: cameraDetailList,
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: true,
+        rowKey: 'id',
+        pagination: { pageSize: 20 },
+        searchInfo: modelRef,
+        afterFetch: (T) => {
+          getNumByStaffData();
+          return T;
+        },
+        bordered: true,
+        sortFn: (sortInfo) => {
+          let order = sortInfo.order && sortInfo.order.replace('end', '');
+          return { ...sortInfo, sidx: sortInfo.field, order: order };
+        },
+      });
+
+      function renderStatus(type: number): string {
+        switch (type) {
+          // case 0:
+          //   return t('routes.rightsEnterprises.state.0');
+          // case 1:
+          //   return t('routes.rightsEnterprises.state.1');
+          case 2:
+            return t('routes.rightsEnterprises.state.2');
+          default:
+            return t('routes.rightsEnterprises.state.9');
+        }
+      }
+      function handleOpenModal() {
+        openModal(true, modelRef);
+      }
+      function handleCreate() {
+        if (
+          getCheckRole([RoleEnum.COMPANY_ADMIN]) &&
+          surplusSubNum.value.lookNum == 0 &&
+          surplusSubNum.value.shotNum == 0
+        ) {
+          return createMessage.error('新增失败,可添加员工数量为0个');
+        }
+        openDetaileModal(true, {});
+      }
+      function handleEdit(record: Recordable) {
+        openDetaileModal(true, record);
+      }
+      function getNumByStaffData() {
+        // getNumByStaff({}).then((res) => {
+        //   surplusSubNum.value.lookNum = res.lookNum;
+        //   surplusSubNum.value.shotNum = res.shotNum;
+        // });
+      }
+      async function handleDelete(record) {
+        return openDelListeModal(true, {
+          ...record,
+        });
+      }
+      function handleUpBind(record) {
+        createConfirm({
+          iconType: 'warning',
+          title: '温馨提醒',
+          content: `是否确定解绑相机?`,
+          onOk: async () => {
+            await unbindCamera({ id: record.id });
+            reload();
+          },
+        });
+      }
+      return {
+        registerTable,
+        registerDetail,
+        registerDelList,
+        openDelListeModal,
+        createMessage,
+        modelRef,
+        handleUpBind,
+        t,
+        reload,
+        go,
+        renderStatus,
+        handleCreate,
+        handleOpenModal,
+        register,
+        handleEdit,
+        handleDelete,
+        uploadApi: uploadApi as any,
+        RoleEnum,
+        surplusSubNum,
+        getCheckRole,
+        getNumByStaffData,
+      };
+    },
+  });
+</script>

+ 107 - 0
src/views/rightsEnterprises/cameraBind.vue

@@ -0,0 +1,107 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @cancel="resetFields"
+    @register="register"
+    title="授权相机"
+    @ok="handleOk"
+  >
+    <div class="pt-3px pr-3px">
+      <BasicForm @register="registerForm" />
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref } from 'vue';
+  import { bindCamera } from '/@/api/rightsEnterprises/list'; //roleLIstApi
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update'],
+    setup(_, context) {
+      const { t } = useI18n();
+      const modelRef = ref({
+        isSee: false,
+      });
+      const schemas: FormSchema[] = [
+        {
+          field: 'snCode',
+          component: 'Input',
+          label: '相机SN码',
+          colProps: {
+            span: 18,
+          },
+          required: true,
+        },
+        {
+          field: 'id',
+          component: 'Input',
+          label: 'id',
+          show: false,
+        },
+      ];
+      const title = ref('绑 定');
+      const { createMessage } = useMessage();
+      const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function onDataReceive(data) {
+        // 方式1;
+        console.log('handleDelete', data);
+        modelRef.value.isSee = data.userId ? true : false;
+        setFieldsValue({
+          ...data,
+          userId: data.userId ? data.staffName : data.userId,
+        });
+        let setSchema = [
+          {
+            field: 'userId',
+            required: !data.userId,
+            slot: !!data.userId ? 'text' : false,
+          },
+        ];
+        updateSchema(setSchema);
+      }
+
+      async function handleOk() {
+        if (modelRef.value.isSee) {
+          return closeModal();
+        }
+        let data = await validate();
+        let res = await bindCamera({
+          snCode: data.snCode,
+          id: data.id,
+        });
+        context && context.emit('update', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
+      }
+
+      return {
+        register,
+        title,
+        schemas,
+        registerForm,
+        modelRef,
+        handleOk,
+        resetFields,
+      };
+    },
+  });
+</script>

+ 17 - 0
src/views/rightsEnterprises/cameraDetail.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    <camera />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent } from 'vue';
+  import camera from './camera.vue';
+  export default defineComponent({
+    components: {
+      camera,
+    },
+    setup() {
+      return {};
+    },
+  });
+</script>

+ 282 - 0
src/views/rightsEnterprises/cameraList.vue

@@ -0,0 +1,282 @@
+<template>
+  <div>
+    <BasicTable @register="registerTable">
+      <template #toolbar>
+        <a-button
+          v-power="[RoleEnum.COMPANY_ADMIN, RoleEnum.PLAT_ADMIN]"
+          type="primary"
+          @click="handleCreate"
+          >新增</a-button
+        >
+      </template>
+      <template #headerTop v-if="getCheckRole([RoleEnum.COMPANY_ADMIN])">
+        <Alert
+          :message="`带看权益为 ${surplusSubNum.lookNum} 个、拍摄权益为 ${surplusSubNum.shotNum} 个`"
+          type="info"
+        />
+      </template>
+      <template #role="{ record }">
+        {{ renderRoleType(record.role) }}
+      </template>
+      <template #status="{ record }">
+        {{ renderStatus(record.status) }}
+      </template>
+      <template #createTime="{ record }">
+        <Time v-if="record.createTime" :value="record.createTime" mode="datetime" />
+      </template>
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '查看',
+              onClick: handleEdit.bind(null, record),
+            },
+            {
+              color: 'warning',
+              label: t('routes.rightsEnterprises.addText'),
+              onClick: handleOpenModal.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addModal @register="register" @update="reload" />
+    <ProductDrawer @register="registerDrawer" type="camera" @reload="reload" />
+    <addCameraModal @register="register" @update="reload" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent, computed, onMounted, ref } from 'vue';
+  import { BasicTable, useTable, BasicColumn, FormProps, TableAction } from '/@/components/Table';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useModal } from '/@/components/Modal';
+  import { uploadApi } from '/@/api/sys/upload';
+  import { Alert } from 'ant-design-vue';
+  import { cameraListApi, delApi, getNumByStaff } from '/@/api/rightsEnterprises/list';
+  import { useDrawer } from '/@/components/Drawer';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import ProductDrawer from './productDrawer.vue';
+  import { RoleEnum } from '/@/enums/roleEnum';
+  import { useGo } from '/@/hooks/web/usePage';
+  import addCameraModal from './addCameraModal.vue';
+  import addModal from './addModal.vue';
+  import { Time } from '/@/components/Time';
+  import { useUserStore } from '/@/store/modules/user';
+  import { useRouter } from 'vue-router';
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      Alert,
+      addModal,
+      ProductDrawer,
+      addCameraModal,
+    },
+    setup() {
+      const router = useRouter();
+      const [register, { openModal }] = useModal();
+      const [registerDrawer, { openDrawer }] = useDrawer();
+      const surplusSubNum = ref({
+        lookNum: 0,
+        shotNum: 0,
+      });
+      const { createConfirm, createMessage } = useMessage();
+      const userStore = useUserStore();
+      const { getCheckRole } = userStore;
+      const userinfo = computed(() => userStore.getUserInfo);
+      const companyId = ref(userinfo.value.companyId);
+      const go = useGo();
+      const { t } = useI18n();
+      console.log('companyId', companyId);
+      if (companyId.value) {
+        router.replace(`detail/${companyId.value}`);
+      }
+      onMounted(() => {
+        getNumByStaffData();
+      });
+
+      const columns: BasicColumn[] = [
+        {
+          title: 'ID',
+          dataIndex: 'id',
+          fixed: 'left',
+          width: 60,
+        },
+        {
+          title: t('routes.rightsEnterprises.companyName'),
+          dataIndex: 'name',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.companyPhone'),
+          dataIndex: 'phone',
+          width: 120,
+        },
+        {
+          title: t('routes.rightsEnterprises.kk'),
+          dataIndex: 'proIncrementNum',
+          width: 130,
+        },
+
+        {
+          title: t('routes.rightsEnterprises.kj'),
+          dataIndex: 'seeIncrementNum',
+          sorter: true,
+          width: 130,
+        },
+        {
+          title: t('routes.rightsEnterprises.ss'),
+          dataIndex: 'sensorIncrementNum',
+          // slots: { customRender: 'createTime' },
+          width: 130,
+        },
+        {
+          title: '操作',
+          dataIndex: '',
+          ifShow: !getCheckRole('tourist'),
+          slots: { customRender: 'action' },
+          fixed: 'right',
+          width: 120,
+        },
+      ];
+
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'companyName',
+            label: t('routes.rightsEnterprises.companyName'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              span: 8,
+            },
+          },
+          {
+            field: 'companyPhone',
+            label: t('routes.rightsEnterprises.companyPhone'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              span: 8,
+            },
+          },
+        ],
+      };
+
+      const [registerTable, { reload }] = useTable({
+        title: t('routes.rightsEnterprises.menuList'),
+        api: cameraListApi,
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: true,
+        // searchInfo:'',
+        rowKey: 'id',
+        pagination: { pageSize: 20 },
+        beforeFetch: (T) => {
+          return {
+            limit: T.limit,
+            page: T.page,
+            startTime: T.fieldTime?.[0],
+            endTime: T.fieldTime?.[1],
+          };
+        },
+        bordered: true,
+        sortFn: (sortInfo) => {
+          let order = sortInfo.order && sortInfo.order.replace('end', '');
+          return { ...sortInfo, sidx: sortInfo.field, order: order };
+        },
+      });
+
+      function renderRoleType(type: number): string {
+        switch (type) {
+          case 0:
+            return t('routes.staff.roleType.0');
+          case 1:
+            return t('routes.staff.roleType.1');
+          default:
+            return '';
+        }
+      }
+      function renderStatus(type: number): string {
+        switch (type) {
+          case 1:
+            return t('common.normal');
+          case 0:
+            return t('common.unNormal');
+          default:
+            return '';
+        }
+      }
+      function handleOpenModal(record: Recordable) {
+        console.log('Received', record);
+        openModal(true, {
+          ...record,
+          companyPhone: record.phone,
+          companyName: record.name,
+        });
+      }
+      function handleCreate() {
+        openModal(true, {});
+      }
+      function getNumByStaffData() {
+        getNumByStaff({}).then((res) => {
+          surplusSubNum.value.lookNum = res.lookNum;
+          surplusSubNum.value.shotNum = res.shotNum;
+        });
+      }
+      function handleEdit(record) {
+        // router.push(`detail/${record.companyId}`);
+        openDrawer(true, {
+          record: {
+            ...record,
+            companyId: record.id,
+            companyName: record.name,
+            companyPhone: record.phone,
+          },
+          isUpdate: true,
+        });
+      }
+      function handDelconfirm(record) {
+        createConfirm({
+          iconType: 'warning',
+          title: '警告',
+          content: `此操作将对${record.userName}进行删除, 是否继续?`,
+          onOk: async () => {
+            await delApi({ userId: record.id });
+            reload();
+          },
+        });
+      }
+      return {
+        registerTable,
+        createMessage,
+        handDelconfirm,
+        t,
+        reload,
+        openModal,
+        go,
+        renderRoleType,
+        renderStatus,
+        handleOpenModal,
+        handleCreate,
+        handleEdit,
+        register,
+        uploadApi: uploadApi as any,
+        RoleEnum,
+        surplusSubNum,
+        getCheckRole,
+        getNumByStaffData,
+        registerDrawer,
+      };
+    },
+  });
+</script>

+ 43 - 17
src/views/rightsEnterprises/list.vue

@@ -1,19 +1,20 @@
 <template>
   <div>
-    <BasicTable @register="registerTable">
+    <BasicTable @register="registerTable" :searchInfo="modelRef">
       <template #toolbar>
         <a-button
           v-power="[RoleEnum.COMPANY_ADMIN, RoleEnum.PLAT_ADMIN]"
           type="primary"
           @click="handleOpenModal"
-          >新增</a-button
+        >
+          新增</a-button
         >
       </template>
       <template #status="{ record }">
         {{ renderStatus(record.state) }}
       </template>
       <template #createTime="{ record, field }">
-        <Time :value="record[field]" mode="datetime" />
+        <Time v-if="record[field]" :value="record[field]" mode="date" />
       </template>
       <!-- onClick: handleOpenModal.bind(null, record), -->
       <template #action="{ record }">
@@ -44,7 +45,7 @@
   </div>
 </template>
 <script lang="ts">
-  import { defineComponent, computed, onMounted, ref } from 'vue';
+  import { defineComponent, computed, onMounted, ref, watch, reactive } from 'vue';
   import { BasicTable, useTable, BasicColumn, FormProps, TableAction } from '/@/components/Table';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useModal } from '/@/components/Modal';
@@ -59,6 +60,7 @@
   import { Time } from '/@/components/Time';
   import { useUserStore } from '/@/store/modules/user';
   export default defineComponent({
+    name: 'StaffList',
     components: {
       BasicTable,
       TableAction,
@@ -67,7 +69,15 @@
       addModal,
       // DelListModal,
     },
-    setup() {
+    props: {
+      companyInfo: {
+        type: Object,
+        default: function () {
+          return {};
+        },
+      },
+    },
+    setup(props) {
       const [register, { openModal }] = useModal();
       const surplusSubNum = ref({
         lookNum: 0,
@@ -79,11 +89,26 @@
       const userStore = useUserStore();
       const { getCheckRole } = userStore;
       const userinfo = computed(() => userStore.getUserInfo);
-      const { companyId } = userinfo.value;
-      const roleList = computed(() => userStore.getRoleList);
-      console.log('getRoleList', roleList, companyId);
+      // const {companyInfo} = toRefs(props)
+      const modelRef = reactive({
+        companyId: userinfo.value.companyId,
+        companyName: userinfo.value.companyName,
+        companyPhone: userinfo.value.phone,
+      });
       const go = useGo();
       const { t } = useI18n();
+      watch(
+        () => props.companyInfo,
+        (newProps) => {
+          modelRef.companyId = newProps.companyId;
+          modelRef.companyName = newProps.companyName;
+          modelRef.companyPhone = newProps.companyPhone;
+          reload();
+        },
+        {
+          deep: true,
+        },
+      );
       onMounted(() => {
         getNumByStaffData();
       });
@@ -164,8 +189,7 @@
               maxLength: 15,
             },
             colProps: {
-              xl: 5,
-              xxl: 5,
+              span: 8,
             },
           },
           {
@@ -176,8 +200,7 @@
               maxLength: 15,
             },
             colProps: {
-              xl: 5,
-              xxl: 5,
+              span: 8,
             },
           },
         ],
@@ -194,9 +217,7 @@
         showIndexColumn: true,
         rowKey: 'id',
         pagination: { pageSize: 20 },
-        searchInfo: {
-          companyId,
-        },
+        searchInfo: modelRef,
         afterFetch: (T) => {
           getNumByStaffData();
           return T;
@@ -209,7 +230,6 @@
       });
 
       function renderStatus(type: number): string {
-        console.log('renderStatus', type);
         switch (type) {
           // case 0:
           //   return t('routes.rightsEnterprises.state.0');
@@ -222,7 +242,11 @@
         }
       }
       function handleOpenModal(record: Recordable) {
-        openModal(true, record);
+        console.log('userinfo', userinfo);
+        openModal(true, {
+          ...record,
+          ...modelRef,
+        });
       }
       function handleCreate() {
         if (
@@ -246,6 +270,7 @@
       async function handleDelete(record) {
         return openDelListeModal(true, {
           ...record,
+          ...modelRef,
         });
       }
       function handleUpBind(record) {
@@ -265,6 +290,7 @@
         registerDelList,
         openDelListeModal,
         createMessage,
+        modelRef,
         handleUpBind,
         t,
         reload,

+ 86 - 0
src/views/rightsEnterprises/productDrawer.vue

@@ -0,0 +1,86 @@
+<template>
+  <BasicDrawer
+    v-bind="$attrs"
+    @register="registerDrawer"
+    :isDetail="true"
+    :showDetailBack="false"
+    showFooter
+    @ok="handleSubmit"
+  >
+    <list v-if="typeIf == 'rights'" :companyInfo="modelRef" />
+    <camera v-else :companyInfo="modelRef" />
+  </BasicDrawer>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, toRefs, reactive } from 'vue';
+  import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
+  import camera from './camera.vue';
+  import list from './list.vue';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  // import { useUserStore } from '/@/store/modules/user';
+
+  export default defineComponent({
+    name: 'ProductDrawer',
+    components: { BasicDrawer, camera, list },
+    props: {
+      type: {
+        type: String,
+        default: 'rights',
+      },
+    },
+    emits: ['reload', 'register'],
+    setup(props) {
+      const isUpdate = ref(true);
+      const modelRef = reactive({
+        companyId: 0,
+        companyName: '0',
+        companyPhone: '0',
+      });
+      // const userStore = useUserStore();
+      // const userinfo = computed(() => userStore.getUserInfo); computed
+      const { t } = useI18n();
+      // const {type} = toRefs(props)
+      const [registerDrawer, { setDrawerProps }] = useDrawerInner(async (data) => {
+        setDrawerProps({ confirmLoading: false });
+        isUpdate.value = !!data?.isUpdate;
+        modelRef.companyId = data?.record?.companyId;
+        modelRef.companyName = data?.record?.companyName;
+        modelRef.companyPhone = data?.record?.companyPhone;
+        console.log('handleSubmit', t, modelRef, data);
+      });
+      function handleSubmit() {
+        // console.log('handleSubmit')
+      }
+      return {
+        modelRef,
+        typeIf: toRefs(props).type,
+        registerDrawer,
+        handleSubmit,
+      };
+    },
+  });
+</script>
+
+<style scoped lang="less">
+  :deep(.detailed) {
+    .title {
+      display: flex;
+      span,
+      input,
+      div {
+        flex-grow: 1;
+      }
+      input {
+        display: inline-block;
+      }
+      .name {
+        flex-grow: 2;
+      }
+    }
+    tr {
+      th {
+        font-weight: 500;
+      }
+    }
+  }
+</style>

+ 17 - 0
src/views/rightsEnterprises/rightsDetail.vue

@@ -0,0 +1,17 @@
+<template>
+  <div>
+    <list />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent } from 'vue';
+  import list from './list.vue';
+  export default defineComponent({
+    components: {
+      list,
+    },
+    setup() {
+      return {};
+    },
+  });
+</script>

+ 251 - 0
src/views/rightsEnterprises/rightsList.vue

@@ -0,0 +1,251 @@
+<template>
+  <div>
+    <BasicTable @register="registerTable">
+      <template #toolbar>
+        <!-- <a-button
+          v-power="[RoleEnum.COMPANY_ADMIN, RoleEnum.PLAT_ADMIN]"
+          type="primary"
+          @click="handleCreate"
+          >新增</a-button
+        > -->
+      </template>
+      <template #headerTop v-if="getCheckRole([RoleEnum.COMPANY_ADMIN])">
+        <Alert
+          :message="`带看权益为 ${surplusSubNum.lookNum} 个、拍摄权益为 ${surplusSubNum.shotNum} 个`"
+          type="info"
+        />
+      </template>
+      <template #role="{ record }">
+        {{ renderRoleType(record.role) }}
+      </template>
+      <template #status="{ record }">
+        {{ renderStatus(record.status) }}
+      </template>
+      <template #createTime="{ record }">
+        <Time v-if="record.createTime" :value="record.createTime" mode="datetime" />
+      </template>
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '查看',
+              onClick: handleEdit.bind(null, record),
+            },
+            {
+              color: 'warning',
+              label: t('routes.rightsEnterprises.add'),
+              onClick: handleOpenModal.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addModal @register="register" @update="reload" />
+    <ProductDrawer @register="registerDrawer" type="rights" @reload="reload" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent, computed, onMounted, ref } from 'vue';
+  import { BasicTable, useTable, BasicColumn, FormProps, TableAction } from '/@/components/Table';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useModal } from '/@/components/Modal';
+  import { uploadApi } from '/@/api/sys/upload';
+  import { Alert } from 'ant-design-vue';
+  import { ListApi, delApi, getNumByStaff } from '/@/api/rightsEnterprises/list';
+  import { useDrawer } from '/@/components/Drawer';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import ProductDrawer from './productDrawer.vue';
+  import { RoleEnum } from '/@/enums/roleEnum';
+  import { useGo } from '/@/hooks/web/usePage';
+  import addModal from './addModal.vue';
+  import { Time } from '/@/components/Time';
+  import { useUserStore } from '/@/store/modules/user';
+  import { useRouter } from 'vue-router';
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      Alert,
+      addModal,
+      ProductDrawer,
+    },
+    setup() {
+      const router = useRouter();
+      const [register, { openModal }] = useModal();
+      const [registerDrawer, { openDrawer }] = useDrawer();
+      const surplusSubNum = ref({
+        lookNum: 0,
+        shotNum: 0,
+      });
+      const { createConfirm, createMessage } = useMessage();
+      const userStore = useUserStore();
+      const { getCheckRole } = userStore;
+      const userinfo = computed(() => userStore.getUserInfo);
+      const companyId = ref(userinfo.value.companyId);
+      const go = useGo();
+      const { t } = useI18n();
+      console.log('companyId', companyId);
+      if (companyId.value) {
+        router.replace(`detail/${companyId.value}`);
+      }
+      onMounted(() => {
+        getNumByStaffData();
+      });
+
+      const columns: BasicColumn[] = [
+        {
+          title: 'ID',
+          dataIndex: 'companyId',
+          fixed: 'left',
+          width: 60,
+        },
+        {
+          title: t('routes.staff.deptName'),
+          dataIndex: 'companyName',
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.companyPhone'),
+          dataIndex: 'companyPhone',
+          width: 80,
+        },
+        {
+          title: t('routes.rightsEnterprises.userPermNum'),
+          dataIndex: 'userPermNum',
+          width: 130,
+        },
+
+        {
+          title: t('routes.rightsEnterprises.exUserPermNum'),
+          dataIndex: 'exUserPermNum',
+          sorter: true,
+          width: 130,
+        },
+        {
+          title: t('routes.staff.createTime'),
+          dataIndex: 'createTime',
+          slots: { customRender: 'createTime' },
+          width: 130,
+        },
+        {
+          title: '操作',
+          dataIndex: '',
+          ifShow: !getCheckRole('tourist'),
+          slots: { customRender: 'action' },
+          fixed: 'right',
+          width: 120,
+        },
+      ];
+
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'fieldTime',
+            component: 'RangePicker',
+            label: t('routes.rightsEnterprises.timeField'),
+            colProps: {
+              span: 8,
+            },
+          },
+        ],
+      };
+
+      const [registerTable, { reload }] = useTable({
+        title: t('routes.rightsEnterprises.menuList'),
+        api: ListApi,
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: true,
+        rowKey: 'id',
+        pagination: { pageSize: 20 },
+        beforeFetch: (T) => {
+          return {
+            limit: T.limit,
+            page: T.page,
+            startTime: T.fieldTime?.[0],
+            endTime: T.fieldTime?.[1],
+          };
+        },
+        bordered: true,
+        sortFn: (sortInfo) => {
+          let order = sortInfo.order && sortInfo.order.replace('end', '');
+          return { ...sortInfo, sidx: sortInfo.field, order: order };
+        },
+      });
+
+      function renderRoleType(type: number): string {
+        switch (type) {
+          case 0:
+            return t('routes.staff.roleType.0');
+          case 1:
+            return t('routes.staff.roleType.1');
+          default:
+            return '';
+        }
+      }
+      function renderStatus(type: number): string {
+        switch (type) {
+          case 1:
+            return t('common.normal');
+          case 0:
+            return t('common.unNormal');
+          default:
+            return '';
+        }
+      }
+      function handleOpenModal(record: Recordable) {
+        console.log('Received', record);
+        openModal(true, record);
+      }
+      function getNumByStaffData() {
+        getNumByStaff({}).then((res) => {
+          surplusSubNum.value.lookNum = res.lookNum;
+          surplusSubNum.value.shotNum = res.shotNum;
+        });
+      }
+      function handleEdit(record) {
+        // router.push(`detail/${record.companyId}`);
+        openDrawer(true, {
+          record,
+          isUpdate: true,
+        });
+      }
+      function handDelconfirm(record) {
+        createConfirm({
+          iconType: 'warning',
+          title: '警告',
+          content: `此操作将对${record.userName}进行删除, 是否继续?`,
+          onOk: async () => {
+            await delApi({ userId: record.id });
+            reload();
+          },
+        });
+      }
+      return {
+        registerTable,
+        createMessage,
+        handDelconfirm,
+        t,
+        reload,
+        openModal,
+        go,
+        renderRoleType,
+        renderStatus,
+        handleOpenModal,
+        handleEdit,
+        register,
+        uploadApi: uploadApi as any,
+        RoleEnum,
+        surplusSubNum,
+        getCheckRole,
+        getNumByStaffData,
+        registerDrawer,
+      };
+    },
+  });
+</script>

+ 75 - 0
src/views/staff/clean.vue

@@ -0,0 +1,75 @@
+<template>
+  <div class="p-4">
+    <BasicForm @register="register" @submit="handleSubmit" />
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent } from 'vue';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { clean } from '/@/api/staff/list';
+  // import { useCopyToClipboard } from '/@/hooks/web/useCopyToClipboard';
+  export default defineComponent({
+    components: {
+      BasicForm,
+    },
+    setup() {
+      const { t } = useI18n();
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'userName',
+          component: 'Input',
+          label: '手机号',
+          colProps: {
+            span: 8,
+          },
+          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',
+            },
+          ],
+        },
+      ];
+      const [register, { setProps, validate, resetFields }] = useForm({
+        labelWidth: 120,
+        schemas,
+        actionColOptions: {
+          span: 4,
+        },
+        submitButtonOptions: {
+          text: '清除状态',
+        },
+      });
+      async function handleSubmit() {
+        let data = await validate();
+        await clean({ userName: data.userName }); //
+        createMessage.success(t('common.optSuccess'));
+        setTimeout(() => resetFields(), 500);
+      }
+      return {
+        handleSubmit,
+        setProps,
+        register,
+      };
+    },
+  });
+</script>

+ 9 - 49
src/views/staff/detailsModal.vue

@@ -7,28 +7,14 @@
     @ok="handleOk"
   >
     <div class="pt-3px pr-3px">
-      <BasicForm @register="registerForm" :model="modelRef">
-        <template #permList="{ model, field }">
-          <a-select
-            :options="permListOptions"
-            mode="multiple"
-            v-model:value="model[field]"
-            allowClear
-          />
-        </template>
-      </BasicForm>
+      <BasicForm @register="registerForm" :model="modelRef" />
     </div>
   </BasicModal>
 </template>
 <script lang="ts">
   import { defineComponent, ref, computed } from 'vue';
-  import {
-    checkUserApi,
-    saveApi,
-    updateApi,
-    getRoleListByParam,
-    getAllList,
-  } from '/@/api/staff/list'; //roleLIstApi
+  import { checkUserApi, saveApi, updateApi, getRoleListByParam } from '/@/api/staff/list'; //roleLIstApi
+  import { allListType } from '/@/api/rightsEnterprises/list';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { ListAllCompanyApi } from '/@/api/corporation/list';
@@ -50,9 +36,6 @@
       const { companyId } = userinfo.value;
       console.log('companyId', companyId);
       const permListOptions = computed(() => {
-        // getAllList({}).then(res => {
-        //   console.log('getAllList',res)
-        // })
         return [
           {
             label: '带看',
@@ -183,45 +166,22 @@
             ],
           },
         },
-        //  {
-        //   field: 'permList',
-        //   component: 'CheckboxGroup',
-        //   label: '权益',
-        //   colProps: {
-        //     span: 22,
-        //   },
-        //   componentProps: {
-        //     api: getAllList,
-        //     options: [
-        //       {
-        //         label: '带看',
-        //         value: '1',
-        //       },
-        //       {
-        //         label: '拍摄',
-        //         value: '2',
-        //       },
-        //     ],
-        //   },
-        // },
         {
           field: 'permList',
           component: 'ApiSelect',
           label: '权益',
-          defaultValue: [],
           colProps: {
             span: 22,
           },
           componentProps: {
-            api: getAllList,
-            // showSearch: true,
-            // resultField: 'list',
-            // labelField: 'name',
-            // valueField: 'id',
+            api: allListType,
+            labelField: 'permType',
+            valueField: 'id',
+            immediate: true,
             mode: 'multiple',
-            // immediate: true,
             params: {
-              companyId,
+              page: 1,
+              limit: 100,
             },
             required: true,
           },