Browse Source

fix(bugs): 修改

tangning 3 years ago
parent
commit
96fc21a447

+ 159 - 0
src/api/rightsEnterprises/list.ts

@@ -0,0 +1,159 @@
+import { defHttp } from '/@/utils/http/axios';
+import { PageParams, DelParams, roleParams } from './model';
+import { Result } from '/#/axios';
+
+enum Api {
+  pageList = '/zfb-api/zfb/shop/staffPerm/companyList',
+  staffList = '/zfb-api/zfb/shop/staffPerm/list',
+  preDel = '/zfb-api/zfb/shop/sys/user/preDeleteStaff',
+  roleList = '/zfb-api/zfb/shop/sys/user/roleList',
+  getRoleListByParam = '/zfb-api/zfb/shop/sys/user/getRoleListByParam',
+  staffPermSave = '/zfb-api/zfb/shop/staffPerm/save',
+  staffPermBind = '/zfb-api/zfb/shop/staffPerm/bind',
+  staffPermUnbind = '/zfb-api/zfb/shop/staffPerm/unbind',
+  update = '/zfb-api/zfb/shop/sys/user/update',
+  checkUser = '/zfb-api/zfb/user/checkUserExists',
+  deleteStaff = '/zfb-api/zfb/shop/sys/user/deleteStaff',
+  getNumByStaff = '/zfb-api/zfb/shop/sys/user/getNumByStaff',
+  allList = '/zfb-api/zfb/shop/staffPerm/allList',
+  allListType = '/zfb-api/zfb/shop/staffPerm/allListType',
+}
+
+/**
+ * @description: Get sample list value
+ */
+
+export const ListApi = (params: PageParams) =>
+  defHttp.post<Result>({
+    url: Api.pageList,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const staffList = (params: PageParams) =>
+  defHttp.post<Result>({
+    url: Api.staffList,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const getNumByStaff = (params: any) =>
+  defHttp.get<Result>({
+    url: Api.getNumByStaff,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const delApi = (params: DelParams) =>
+  defHttp.post<Result>({
+    url: Api.deleteStaff,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const preDelApi = (params: number) =>
+  defHttp.post<Result>({
+    url: Api.preDel,
+    params: { userId: params },
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const getRoleListByParam = (params: roleParams) =>
+  defHttp.post<Result>({
+    url: Api.getRoleListByParam,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const roleLIstApi = (params) =>
+  defHttp.post<Result>({
+    url: Api.roleList,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const checkUserApi = (params) =>
+  defHttp.post<boolean>({
+    url: Api.checkUser,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const unbindRights = (params) =>
+  defHttp.post<Result>({
+    url: Api.staffPermUnbind,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const bindRights = (params) =>
+  defHttp.post<Result>({
+    url: Api.staffPermBind,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const saveRights = (params) =>
+  defHttp.post<Result>({
+    url: Api.staffPermSave,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const updateApi = (params) =>
+  defHttp.post<Result>({
+    url: Api.update,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const getAllList = (params: any) =>
+  defHttp.get<Result>({
+    url: Api.allList,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const allListType = (params: any) =>
+  defHttp.get<Result>({
+    url: Api.allListType,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 30 - 0
src/api/rightsEnterprises/model.ts

@@ -0,0 +1,30 @@
+import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';
+/**
+ * @description: Request list interface parameters
+ */
+export type PageParams = BasicPageParams;
+
+export interface DelParams {
+  userId: number;
+  toUserId: number;
+  toUserPhone: string;
+}
+
+export interface roleParams {
+  type: number;
+  roleId: number;
+}
+export interface StaffListItem {
+  id: number;
+
+  name: string;
+  company: string;
+  phone: string;
+  status: string;
+  role: string;
+  createTime: string;
+}
+/**
+ * @description: Request list return value
+ */
+export type ListGetResultModel = BasicFetchResult<StaffListItem>;

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

@@ -0,0 +1,30 @@
+export default {
+  menuName: '企业权益管理',
+  menuList: '企业权益',
+  staffList: '员工权益',
+  staffName: '员工名称',
+  staffPhone: '员工手机号码',
+  timeField: '时间',
+  companyName: '企业名称',
+  companyPhone: '企业账号',
+  userPermNum: '用户权益总数',
+  exUserPermNum: '已过期用户权益数',
+  // companyName:'购买日期',
+  ddd: '公司到期日期',
+  add: '新增权益',
+  title: '新增权益',
+  rightsType: '权益类型',
+  year: '年限',
+  muber: '数量',
+  purchaseTime: '购买日期',
+  permName: '权益',
+  createTime: '购买时间',
+  activationTime: '激活时间',
+  expirationTime: '到期时间',
+  state: {
+    0: '未激活',
+    1: '已生效',
+    2: '已过期',
+    9: '未过期',
+  },
+};

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

@@ -0,0 +1,39 @@
+import type { AppRouteModule } from '/@/router/types';
+
+import { LAYOUT } from '/@/router/constant';
+import { t } from '/@/hooks/web/useI18n';
+
+const staff: AppRouteModule = {
+  path: '/rightsEnterprises',
+  name: 'RightsEnterprises',
+  component: LAYOUT,
+  redirect: '/rightsEnterprises/list',
+  meta: {
+    icon: 'medical-icon:care-staff-area',
+    title: t('routes.rightsEnterprises.menuName'),
+    orderNo: 102,
+  },
+  children: [
+    {
+      path: 'staffList',
+      name: 'StaffList',
+      // component: () => import('/@/views/rightsEnterprises/enterprises.vue'),
+      component: () => import('/@/views/rightsEnterprises/staff.vue'),
+      meta: {
+        title: t('routes.rightsEnterprises.staffList'),
+        icon: 'ic:outline-remember-me',
+      },
+    },
+    {
+      path: 'enterprises',
+      name: 'EnterprisesList',
+      component: () => import('/@/views/rightsEnterprises/enterprises.vue'),
+      meta: {
+        title: t('routes.rightsEnterprises.staffList'),
+        icon: 'ic:outline-remember-me',
+      },
+    },
+  ],
+};
+
+export default staff;

+ 6 - 6
src/views/corporation/index.vue

@@ -202,12 +202,12 @@
           dataIndex: 'point',
           width: 80,
         },
-        {
-          title: t('routes.corporation.expirationTime'),
-          dataIndex: 'expirationTime',
-          slots: { customRender: 'expirationTime' },
-          width: 180,
-        },
+        // {
+        //   title: t('routes.corporation.expirationTime'),
+        //   dataIndex: 'expirationTime',
+        //   slots: { customRender: 'expirationTime' },
+        //   width: 180,
+        // },
       ];
 
       const searchForm: Partial<FormProps> = {

+ 40 - 40
src/views/devices/AddModal.vue

@@ -17,7 +17,7 @@
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
-  import { allCompanyApi, addCameraApi } from '/@/api/device/list';
+  import { addCameraApi } from '/@/api/device/list';
   import { useI18n } from '/@/hooks/web/useI18n';
 
   const { t } = useI18n();
@@ -77,15 +77,15 @@
             span: 24,
           },
         },
-        {
-          field: 'address',
-          required: true,
-          component: 'Input',
-          label: t('routes.devices.address'),
-          colProps: {
-            span: 24,
-          },
-        },
+        // {
+        //   field: 'address',
+        //   required: true,
+        //   component: 'Input',
+        //   label: t('routes.devices.address'),
+        //   colProps: {
+        //     span: 24,
+        //   },
+        // },
         {
           field: 'snCode',
           component: 'Input',
@@ -112,36 +112,36 @@
             span: 24,
           },
         },
-        {
-          field: 'orderSn',
-          component: 'Input',
-          label: t('routes.devices.orderSn'),
-          colProps: {
-            span: 24,
-          },
-        },
-        {
-          field: 'companyId',
-          component: 'ApiSelect',
-          label: t('routes.devices.companyId'),
-          itemProps: {
-            validateTrigger: 'blur',
-          },
-          componentProps: {
-            api: allCompanyApi,
-            numberToString: true,
-            labelField: 'name',
-            valueField: 'id',
-            immediate: true,
-            params: {
-              page: 1,
-              limit: 1000,
-            },
-          },
-          colProps: {
-            span: 24,
-          },
-        },
+        // {
+        //   field: 'orderSn',
+        //   component: 'Input',
+        //   label: t('routes.devices.orderSn'),
+        //   colProps: {
+        //     span: 24,
+        //   },
+        // },
+        // {
+        //   field: 'companyId',
+        //   component: 'ApiSelect',
+        //   label: t('routes.devices.companyId'),
+        //   itemProps: {
+        //     validateTrigger: 'blur',
+        //   },
+        //   componentProps: {
+        //     api: allCompanyApi,
+        //     numberToString: true,
+        //     labelField: 'name',
+        //     valueField: 'id',
+        //     immediate: true,
+        //     params: {
+        //       page: 1,
+        //       limit: 1000,
+        //     },
+        //   },
+        //   colProps: {
+        //     span: 24,
+        //   },
+        // },
       ];
       const [registerForm, { validate, resetFields }] = useForm({
         labelWidth: 120,

+ 12 - 12
src/views/devices/EditModal.vue

@@ -121,18 +121,18 @@
             span: 24,
           },
         },
-        {
-          field: 'address',
-          component: 'Input',
-          required: true,
-          label: t('routes.devices.address'),
-          componentProps: {
-            disabled: true,
-          },
-          colProps: {
-            span: 24,
-          },
-        },
+        // {
+        //   field: 'address',
+        //   component: 'Input',
+        //   required: true,
+        //   label: t('routes.devices.address'),
+        //   componentProps: {
+        //     disabled: true,
+        //   },
+        //   colProps: {
+        //     span: 24,
+        //   },
+        // },
         {
           field: 'snCode',
           component: 'Input',

+ 198 - 0
src/views/rightsEnterprises/BindModal.vue

@@ -0,0 +1,198 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @cancel="resetFields"
+    @register="register"
+    :title="title"
+    @ok="handleOk"
+  >
+    <div class="pt-3px pr-3px">
+      <BasicForm @register="registerForm">
+        <template #permList="{ model, field }">
+          <a-select
+            :options="permListOptions"
+            mode="multiple"
+            v-model:value="model[field]"
+            allowClear
+          />
+        </template>
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, computed } from 'vue';
+  import { bindRights } 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';
+  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 { getCheckRole } = userStore;
+      const userinfo = computed(() => userStore.getUserInfo);
+      const { companyId } = userinfo.value;
+      console.log('companyId', companyId);
+      const permListOptions = computed(() => {
+        return [
+          {
+            label: '带看',
+            value: '1',
+          },
+          {
+            label: '拍摄',
+            value: '2',
+          },
+        ];
+      });
+      const schemas: FormSchema[] = [
+        {
+          field: 'permName',
+          component: 'Input',
+          label: '手机号',
+          colProps: {
+            span: 18,
+          },
+          required: false,
+          slot: 'text',
+        },
+        {
+          field: 'userId',
+          label: '员工名称',
+          component: 'ApiSelect',
+          itemProps: {
+            validateTrigger: 'blur',
+          },
+          colProps: {
+            span: 22,
+          },
+          required: true,
+          ifShow: getCheckRole('plat_admin'),
+          componentProps: {
+            api: ListAllCompanyApi,
+            showSearch: true,
+            resultField: 'list',
+            labelField: 'name',
+            valueField: 'id',
+            immediate: true,
+            params: {
+              page: 1,
+              limit: 1000,
+            },
+            required: true,
+          },
+        },
+        {
+          field: 'staffPhone',
+          component: 'Input',
+          label: '手机号',
+          colProps: {
+            span: 22,
+          },
+          componentProps: {
+            maxLength: 15,
+          },
+          slot: 'text',
+        },
+        {
+          field: 'activationTime',
+          component: 'Input',
+          label: '权益激活时间',
+          colProps: {
+            span: 22,
+          },
+          defaultValue: 8,
+          slot: 'text',
+        },
+        {
+          field: 'expirationTime',
+          component: 'Input',
+          label: '权益过期时间',
+          colProps: {
+            span: 22,
+          },
+          defaultValue: 8,
+          slot: 'text',
+        },
+        {
+          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 bindRights({
+          userId: data.userId,
+          id: data.id,
+        });
+        context && context.emit('update', res);
+        createMessage.success(t('common.optSuccess'));
+        closeModal();
+        resetFields();
+      }
+
+      return {
+        register,
+        title,
+        schemas,
+        registerForm,
+        modelRef,
+        handleOk,
+        resetFields,
+        permListOptions,
+      };
+    },
+  });
+</script>

+ 318 - 0
src/views/rightsEnterprises/addModal.vue

@@ -0,0 +1,318 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.rightsEnterprises.add')"
+    @ok="saveTable"
+    width="700px"
+    @visible-change="handleVisibleChange"
+  >
+    <div class="pt-3px pr-3px">
+      <BasicForm @register="registerForm">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+      <div class="table_list">
+        <BasicTable @register="registerSubtable">
+          <template #time>
+            <Time :value="new Date()" mode="date" />
+          </template>
+        </BasicTable>
+      </div>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, reactive, nextTick, unref } from 'vue';
+  import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
+  import { BasicTable, useTable, BasicColumn } from '/@/components/Table';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { Time } from '/@/components/Time';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { allListType, saveRights } from '/@/api/rightsEnterprises/list';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  export default defineComponent({
+    components: {
+      BasicModal,
+      BasicForm,
+      BasicTable,
+      Time,
+    },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['addtable', 'register', 'update'],
+    setup(props, { emit }) {
+      const { t } = useI18n();
+      const { createConfirm, createMessage } = useMessage();
+
+      const [registerModal, { openModal: addopenModal }] = useModal();
+      const minNumber = reactive({
+        shotNum: 0,
+        lookNum: 0,
+      });
+      const modelRef = reactive({
+        id: 0,
+        subNum: 0,
+        companyId: 0,
+      });
+      const columns: BasicColumn[] = [
+        {
+          title: t('routes.rightsEnterprises.rightsType'),
+          width: 0,
+          ifShow: false,
+          dataIndex: 'id',
+        },
+        {
+          title: t('routes.rightsEnterprises.rightsType'),
+          width: 160,
+          dataIndex: 'permType',
+        },
+        {
+          title: t('routes.rightsEnterprises.year'),
+          width: 80,
+          dataIndex: 'useYear',
+        },
+        {
+          title: t('routes.rightsEnterprises.muber'),
+          dataIndex: 'muber',
+          edit: true,
+          editRule: true,
+          // slots: { customRender: 'subNum' },
+          editComponent: 'InputNumber',
+          width: 200,
+        },
+        {
+          title: t('routes.rightsEnterprises.purchaseTime'),
+          width: 150,
+          dataIndex: 'purchaseTime',
+          slots: { customRender: 'time' },
+        },
+      ];
+      const schemas: FormSchema[] = [
+        {
+          field: 'companyPhone',
+          component: 'Input',
+          label: `${t('routes.corporation.enterpriseId')} :`,
+          slot: 'text',
+          labelWidth: 200,
+        },
+        {
+          field: 'companyName',
+          label: `${t('routes.corporation.enterpriseName')} :`,
+          slot: 'text',
+          component: 'Input',
+          labelWidth: 200,
+        },
+      ];
+      const [registerForm, { setFieldsValue, resetFields, getFieldsValue, validateFields }] =
+        useForm({
+          labelWidth: 120,
+          schemas,
+          showActionButtonGroup: false,
+          actionColOptions: {
+            span: 24,
+          },
+        });
+
+      const [
+        registerSubtable,
+        { reload: reloadSubtable, deleteTableDataRecord, getDataSource, insertTableDataRecord },
+      ] = useTable({
+        // title: `${t('routes.devices.listTile')}`,
+        rowKey: 'phone',
+        api: allListType,
+        showIndexColumn: false,
+        canResize: false,
+        afterFetch: (T) => {
+          console.log('afterFetch', T);
+          return T.map((ele) => {
+            ele.muber = 1;
+            return ele;
+          });
+        },
+        columns,
+        bordered: true,
+        pagination: false,
+      });
+
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(unref(data));
+      });
+
+      async function onDataReceive(data) {
+        console.log('Data Received', data);
+        // 方式1;
+        resetFields();
+        modelRef.companyId = data.companyId;
+        setFieldsValue({
+          ...data,
+        });
+      }
+      async function numOnChange() {
+        // await setFieldsValue({
+        //   [name]: data,
+        // });
+        let { shotNum, lookNum } = getFieldsValue();
+        modelRef.subNum = lookNum + shotNum;
+        validateFields(['lookNum', 'shotNum']);
+      }
+      async function numsOnChange(data, type) {
+        let formdata = getFieldsValue();
+        let value = formdata[type];
+        if (data) {
+          value++;
+        } else {
+          value--;
+        }
+        await setFieldsValue({
+          [type]: value,
+        });
+        let { shotNum, lookNum } = getFieldsValue();
+        modelRef.subNum = lookNum + shotNum;
+        validateFields(['lookNum', 'shotNum']);
+      }
+      async function handleDelete(item, type) {
+        if (type == 'edit') {
+          //编辑
+          const { memoName, phone } = item;
+          EditModal(true, {
+            memoName,
+            phone,
+          });
+        } else {
+          let { lookNum, shotNum } = minNumber;
+          // minNumber.shotNum = shotNum;
+          //解除
+          if (item.roleId == 8) {
+            lookNum--;
+            shotNum--;
+          } else if (item.roleId == 81) {
+            lookNum--;
+          } else if (item.roleId == 82) {
+            shotNum--;
+          }
+          createConfirm({
+            iconType: 'warning',
+            title: '提示',
+            content: t('routes.devices.unbindWarning'),
+            onOk: async () => {
+              // tableRef.value.deleteTableDataRecord(item.id);
+              deleteTableDataRecord(item.userName);
+              minNumber.lookNum = lookNum;
+              minNumber.shotNum = shotNum;
+            },
+          });
+        }
+      }
+      function handleVisibleChange(v) {
+        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+      function openTargetModal() {
+        console.log('openTargetModal');
+        addopenModal(true);
+      }
+      async function saveTable() {
+        // let tableData = tableRef.value.getDataSource() || [];
+        // let fromData = await validate();
+        let tableData = getDataSource();
+        const permList = tableData?.map((ele) => {
+          return {
+            staffPermTypeId: ele.id,
+            num: ele.muber || 0,
+            // takeLookNum:50,
+          };
+        });
+        let res = await saveRights({
+          companyId: modelRef.companyId,
+          permList,
+        });
+        console.log('tableData', res);
+        createMessage.success(t('common.optSuccess'));
+        // reload();
+        emit('update');
+        closeModal();
+      }
+      function addTabledata(val) {
+        console.log('addTabledata', val);
+      }
+      function getTableList(callback) {
+        // let data = getFieldsValue();
+        let tableList = unref(getDataSource());
+        // setFieldsValue({
+        //   subNum: Number(data.subNum) - 1,
+        // });
+        callback(tableList);
+      }
+      // function formatRoleName(val) {
+
+      // },
+      function handleAddUser(newUser) {
+        let DataSource = getDataSource();
+        let { shotNum, lookNum } = getFieldsValue();
+        const total = DataSource?.length;
+        let look = 0,
+          shoot = 0;
+        DataSource.map((ele) => {
+          if (ele.roleId == 8) {
+            look++;
+            shoot++;
+          } else if (ele.roleId == 81) {
+            look++;
+          } else if (ele.roleId == 82) {
+            shoot++;
+          }
+        });
+        console.log('look', look, shoot, 'shotNum, lookNum', shotNum, lookNum, newUser);
+        if ((newUser.roleId == 8 || newUser.roleId == 81) && !(look < lookNum)) {
+          return createMessage.error('可带看员工数不足');
+        } else if ((newUser.roleId == 8 || newUser.roleId == 82) && !(shoot < shotNum)) {
+          return createMessage.error('可拍摄员工数不足');
+        }
+        minNumber.lookNum = lookNum;
+        minNumber.shotNum = shotNum;
+        let obj = {
+          8: '带看&拍摄员工',
+          81: '带看员工',
+          82: '拍摄员工',
+        };
+        insertTableDataRecord({
+          nickName: newUser.memoName,
+          userName: newUser.phone,
+          phone: newUser.phone,
+          roleName: obj[newUser.roleId],
+          roleId: newUser.roleId,
+        });
+
+        setFieldsValue({
+          addeduser: total || 0,
+        });
+        createMessage.success(t('layout.setting.operatingTitle'));
+      }
+      return {
+        register,
+        handleDelete,
+        numOnChange,
+        numsOnChange,
+        modelRef,
+        schemas,
+        registerForm,
+        minNumber,
+        handleVisibleChange,
+        registerModal,
+        openTargetModal,
+
+        addopenModal,
+        saveTable,
+        closeModal,
+        addTabledata,
+        t,
+        registerSubtable,
+        reloadSubtable,
+        handleAddUser,
+        getTableList,
+      };
+    },
+  });
+</script>

+ 235 - 0
src/views/rightsEnterprises/enterprises.vue

@@ -0,0 +1,235 @@
+<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 :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" />
+  </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 { useI18n } from '/@/hooks/web/useI18n';
+  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';
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      Alert,
+      addModal,
+    },
+    setup() {
+      const [register, { openModal }] = useModal();
+      const surplusSubNum = ref({
+        lookNum: 0,
+        shotNum: 0,
+      });
+      const { createConfirm, createMessage } = useMessage();
+      const userStore = useUserStore();
+      const { getCheckRole } = userStore;
+      const roleList = computed(() => userStore.getRoleList);
+      console.log('getRoleList', roleList);
+      const go = useGo();
+      const { t } = useI18n();
+      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) {
+        console.log('record', record);
+      }
+      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,
+      };
+    },
+  });
+</script>

+ 286 - 0
src/views/rightsEnterprises/list.vue

@@ -0,0 +1,286 @@
+<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 :value="record[field]" mode="datetime" />
+      </template>
+      <!-- onClick: handleOpenModal.bind(null, record), -->
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '查看',
+              ifShow: !!record.userId,
+              onClick: handleDelete.bind(null, record),
+            },
+            {
+              label: '绑定',
+              ifShow: record.state == 0 && !record.userId,
+              onClick: handleDelete.bind(null, record),
+            },
+            {
+              label: '解绑',
+              ifShow: record.state == 0 && !!record.userId,
+              color: 'error',
+              onClick: handleUpBind.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addModal @register="register" @update="reload" />
+    <BindModal @register="registerDelList" @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 BindModal from './BindModal.vue';
+  import addModal from './addModal.vue';
+  import { staffList, unbindRights } 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({
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      BindModal,
+      addModal,
+      // DelListModal,
+    },
+    setup() {
+      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 { companyId } = userinfo.value;
+      const roleList = computed(() => userStore.getRoleList);
+      console.log('getRoleList', roleList, companyId);
+      const go = useGo();
+      const { t } = useI18n();
+      onMounted(() => {
+        getNumByStaffData();
+      });
+
+      const columns: BasicColumn[] = [
+        {
+          title: 'ID',
+          dataIndex: 'id',
+          fixed: 'left',
+          ifShow: false,
+          width: 0,
+        },
+        {
+          title: t('routes.rightsEnterprises.permName'),
+          dataIndex: 'permName',
+          width: 160,
+        },
+        {
+          title: t('routes.staff.userName'),
+          dataIndex: 'staffName',
+          width: 80,
+        },
+        {
+          title: '手机',
+          dataIndex: 'staffPhone',
+          width: 160,
+        },
+
+        {
+          title: t('common.roleName'),
+          dataIndex: 'staffRoleName',
+          // slots: { customRender: 'role' },
+          sorter: true,
+          width: 80,
+        },
+        {
+          title: t('routes.rightsEnterprises.createTime'),
+          dataIndex: 'createTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.activationTime'),
+          dataIndex: 'activationTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.expirationTime'),
+          dataIndex: 'expirationTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('common.state'),
+          dataIndex: 'status',
+          slots: { customRender: 'status' },
+          width: 80,
+        },
+        {
+          title: '操作',
+          dataIndex: '',
+          ifShow: !getCheckRole('tourist'),
+          slots: { customRender: 'action' },
+          fixed: 'right',
+          width: 100,
+        },
+      ];
+
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'staffName',
+            label: t('routes.rightsEnterprises.staffName'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              xl: 5,
+              xxl: 5,
+            },
+          },
+          {
+            field: 'staffPhone',
+            label: t('routes.corporation.phone'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              xl: 5,
+              xxl: 5,
+            },
+          },
+        ],
+      };
+
+      const [registerTable, { reload }] = useTable({
+        title: t('routes.rightsEnterprises.staffList'),
+        api: staffList,
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: true,
+        rowKey: 'id',
+        pagination: { pageSize: 20 },
+        searchInfo: {
+          companyId,
+        },
+        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 {
+        console.log('renderStatus', type);
+        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(record: Recordable) {
+        openModal(true, record);
+      }
+      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 unbindRights({ id: record.id });
+            reload();
+          },
+        });
+      }
+      return {
+        registerTable,
+        registerDetail,
+        registerDelList,
+        openDelListeModal,
+        createMessage,
+        handleUpBind,
+        t,
+        reload,
+        go,
+        renderStatus,
+        handleCreate,
+        handleOpenModal,
+        register,
+        handleEdit,
+        handleDelete,
+        uploadApi: uploadApi as any,
+        RoleEnum,
+        surplusSubNum,
+        getCheckRole,
+        getNumByStaffData,
+      };
+    },
+  });
+</script>

+ 286 - 0
src/views/rightsEnterprises/staff.vue

@@ -0,0 +1,286 @@
+<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 :value="record[field]" mode="datetime" />
+      </template>
+      <!-- onClick: handleOpenModal.bind(null, record), -->
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+            {
+              label: '查看',
+              ifShow: !!record.userId,
+              onClick: handleDelete.bind(null, record),
+            },
+            {
+              label: '绑定',
+              ifShow: record.state == 0 && !record.userId,
+              onClick: handleDelete.bind(null, record),
+            },
+            {
+              label: '解绑',
+              ifShow: record.state == 0 && !!record.userId,
+              color: 'error',
+              onClick: handleUpBind.bind(null, record),
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <addModal @register="register" @update="reload" />
+    <BindModal @register="registerDelList" @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 BindModal from './BindModal.vue';
+  import addModal from './addModal.vue';
+  import { staffList, unbindRights } 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({
+    components: {
+      BasicTable,
+      TableAction,
+      Time,
+      BindModal,
+      addModal,
+      // DelListModal,
+    },
+    setup() {
+      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 { companyId } = userinfo.value;
+      const roleList = computed(() => userStore.getRoleList);
+      console.log('getRoleList', roleList, companyId);
+      const go = useGo();
+      const { t } = useI18n();
+      onMounted(() => {
+        getNumByStaffData();
+      });
+
+      const columns: BasicColumn[] = [
+        {
+          title: 'ID',
+          dataIndex: 'id',
+          fixed: 'left',
+          ifShow: false,
+          width: 0,
+        },
+        {
+          title: t('routes.rightsEnterprises.permName'),
+          dataIndex: 'permName',
+          width: 160,
+        },
+        {
+          title: t('routes.staff.userName'),
+          dataIndex: 'staffName',
+          width: 80,
+        },
+        {
+          title: '手机',
+          dataIndex: 'staffPhone',
+          width: 160,
+        },
+
+        {
+          title: t('common.roleName'),
+          dataIndex: 'staffRoleName',
+          // slots: { customRender: 'role' },
+          sorter: true,
+          width: 80,
+        },
+        {
+          title: t('routes.rightsEnterprises.createTime'),
+          dataIndex: 'createTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.activationTime'),
+          dataIndex: 'activationTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('routes.rightsEnterprises.expirationTime'),
+          dataIndex: 'expirationTime',
+          slots: { customRender: 'createTime' },
+          width: 160,
+        },
+        {
+          title: t('common.state'),
+          dataIndex: 'status',
+          slots: { customRender: 'status' },
+          width: 80,
+        },
+        {
+          title: '操作',
+          dataIndex: '',
+          ifShow: !getCheckRole('tourist'),
+          slots: { customRender: 'action' },
+          fixed: 'right',
+          width: 100,
+        },
+      ];
+
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        schemas: [
+          {
+            field: 'staffName',
+            label: t('routes.rightsEnterprises.staffName'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              xl: 5,
+              xxl: 5,
+            },
+          },
+          {
+            field: 'staffPhone',
+            label: t('routes.corporation.phone'),
+            component: 'Input',
+            componentProps: {
+              maxLength: 15,
+            },
+            colProps: {
+              xl: 5,
+              xxl: 5,
+            },
+          },
+        ],
+      };
+
+      const [registerTable, { reload }] = useTable({
+        title: t('routes.rightsEnterprises.staffList'),
+        api: staffList,
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: true,
+        rowKey: 'id',
+        pagination: { pageSize: 20 },
+        searchInfo: {
+          companyId,
+        },
+        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 {
+        console.log('renderStatus', type);
+        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(record: Recordable) {
+        openModal(true, record);
+      }
+      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 unbindRights({ id: record.id });
+            reload();
+          },
+        });
+      }
+      return {
+        registerTable,
+        registerDetail,
+        registerDelList,
+        openDelListeModal,
+        createMessage,
+        handleUpBind,
+        t,
+        reload,
+        go,
+        renderStatus,
+        handleCreate,
+        handleOpenModal,
+        register,
+        handleEdit,
+        handleDelete,
+        uploadApi: uploadApi as any,
+        RoleEnum,
+        surplusSubNum,
+        getCheckRole,
+        getNumByStaffData,
+      };
+    },
+  });
+</script>

+ 1 - 1
src/views/staff/delListModal.vue

@@ -9,7 +9,7 @@
     <div class="pt-3px pr-3px">
       <BasicForm @register="registerForm">
         <template #tips>
-          <div>请将当前员工的直播间数据进行迁移后,再删除员工</div>
+          <div>请将员工的数据迁移后,再删除员工(删除员工后,权益将进行解绑)</div>
         </template>
       </BasicForm>
     </div>

+ 97 - 4
src/views/staff/detailsModal.vue

@@ -7,13 +7,28 @@
     @ok="handleOk"
   >
     <div class="pt-3px pr-3px">
-      <BasicForm @register="registerForm" :model="model" />
+      <BasicForm @register="registerForm" :model="modelRef">
+        <template #permList="{ model, field }">
+          <a-select
+            :options="permListOptions"
+            mode="multiple"
+            v-model:value="model[field]"
+            allowClear
+          />
+        </template>
+      </BasicForm>
     </div>
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref } from 'vue';
-  import { checkUserApi, saveApi, updateApi, getRoleListByParam } from '/@/api/staff/list'; //roleLIstApi
+  import { defineComponent, ref, computed } from 'vue';
+  import {
+    checkUserApi,
+    saveApi,
+    updateApi,
+    getRoleListByParam,
+    getAllList,
+  } from '/@/api/staff/list'; //roleLIstApi
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { ListAllCompanyApi } from '/@/api/corporation/list';
@@ -31,6 +46,24 @@
       const modelRef = ref({});
       const userStore = useUserStore();
       const { getCheckRole } = userStore;
+      const userinfo = computed(() => userStore.getUserInfo);
+      const { companyId } = userinfo.value;
+      console.log('companyId', companyId);
+      const permListOptions = computed(() => {
+        // getAllList({}).then(res => {
+        //   console.log('getAllList',res)
+        // })
+        return [
+          {
+            label: '带看',
+            value: '1',
+          },
+          {
+            label: '拍摄',
+            value: '2',
+          },
+        ];
+      });
       const schemas: FormSchema[] = [
         {
           field: 'phone',
@@ -150,6 +183,49 @@
             ],
           },
         },
+        //  {
+        //   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',
+            mode: 'multiple',
+            // immediate: true,
+            params: {
+              companyId,
+            },
+            required: true,
+          },
+        },
         // {
         //   field: 'status',
         //   label: '状态',
@@ -221,6 +297,14 @@
               disabled: data.id ? (data.roleId != 2 ? true : false) : false,
             },
           },
+          {
+            field: 'permList',
+            componentProps: {
+              params: {
+                companyId: data.companyId || companyId,
+              },
+            },
+          },
         ];
         title.value = data.id ? '编辑' : '新增';
         updateSchema(setSchema);
@@ -244,7 +328,16 @@
         resetFields();
       }
 
-      return { register, title, schemas, registerForm, model: modelRef, handleOk, resetFields };
+      return {
+        register,
+        title,
+        schemas,
+        registerForm,
+        modelRef,
+        handleOk,
+        resetFields,
+        permListOptions,
+      };
     },
   });
 </script>

+ 1 - 1
src/views/staff/list.vue

@@ -11,7 +11,7 @@
       </template>
       <template #headerTop v-if="getCheckRole([RoleEnum.COMPANY_ADMIN])">
         <Alert
-          :message="`可新增带看员工为 ${surplusSubNum.lookNum} 个、拍摄员工为 ${surplusSubNum.shotNum} 个`"
+          :message="`带看权益为 ${surplusSubNum.lookNum} 个、拍摄权益为 ${surplusSubNum.shotNum} 个`"
           type="info"
         />
       </template>