EmployeeFieldApplyDrawer.vue 8.24 KB
<template>
    <!-- 申请权限抽屉 -->
    <BasicDrawer
      v-bind="$attrs"
      @register="registerDrawer"
      @ok="handleApplySubmit"
      title="字段编辑权限申请"
      width="60%"
      :destroyOnClose="true"
      :isDetail="true"
      :showFooter="true"
      okText="申请"
      :showDetailBack="false"
      :closable="true"
      class="apply-permission-drawer"
    >
      <div>
        <h3 style="margin-bottom: 16px; color: #1890ff;">请选择需要申请编辑权限的字段:</h3>
        <BasicForm @register="registerApplyForm" />
      </div>
    </BasicDrawer>
    
    <!-- 申请理由组件 -->
    <ApproveReason @register="registerApproveReason" @success="handleApproveSuccess" />
  </template>
  
  <script lang="ts">
    import { defineComponent, ref } from 'vue';
    import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer';
    import { BasicForm, useForm } from '/@/components/Form/index';
    import { useModal } from '/@/components/Modal';
    import { message } from 'ant-design-vue';
    import ApproveReason from '../personnel/salary/attendance/ApproveReason.vue';
  
    export default defineComponent({
      name: 'EmployeeFieldApplyDrawer',
      components: {
        BasicDrawer,
        BasicForm,
        ApproveReason,
      },
      setup() {
        const currentApplyRecord = ref<any>(null);
        const selectedApplyFields = ref<any>({});
        
        // 注册申请权限抽屉,使用useDrawerInner接收数据
        const [registerDrawer, { closeDrawer }] = useDrawerInner(async (data) => {
          if (data?.record) {
            currentApplyRecord.value = { ...data.record };
          }
        });
        
        // 注册申请理由模态框
        const [registerApproveReason, { openModal: openApproveReasonModal }] = useModal();
        
        // 定义申请权限表单字段
        const getApplySchema = () => [
          {
            field: 'attendanceAllowance',
            label: '全勤奖',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'basicWages',
            label: '基本工资',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'contractEndTime',
            label: '合同结束时间',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'contractStartTime',
            label: '合同签署时间',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'managementAllowance',
            label: '管理岗位津贴',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'mealAllowance',
            label: '餐补',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'monthlyAttendanceName',
            label: '考勤组',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'performanceAllowance',
            label: '绩效部分',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'periodEndTime',
            label: '试用期结束时间',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'periodStartTime',
            label: '试用期开始时间',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'phoneAllowance',
            label: '话费补贴',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'postAllowance',
            label: '岗位津贴',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'roleName',
            label: '岗位',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'socialSettingName',
            label: '社保待遇',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
          {
            field: 'transportationAllowance',
            label: '交通补贴',
            component: 'Switch',
            componentProps: {
              checkedValue: 'UN_LOCKED',
              unCheckedValue: 'LOCKED',
            },
            colProps: {
              span: 8,
            },
          },
        ];
        
        // 注册申请权限表单
        const [registerApplyForm, { getFieldsValue: getApplyFieldsValue }] = useForm({
          labelWidth: 180,
          schemas: getApplySchema(),
          showActionButtonGroup: false,
          actionColOptions: {
            span: 24,
          },
        });
        
        // 处理申请权限提交
        const handleApplySubmit = async () => {
          try {
            const fieldValues = getApplyFieldsValue();
            selectedApplyFields.value = fieldValues;
            closeDrawer();
            
            // 打开申请理由模态框
            openApproveReasonModal(true, {
              fieldValues: selectedApplyFields.value,
              userId: currentApplyRecord.value?.id,
              apiUrl: '/order/erp/users/fieldApply'
            });
          } catch (error) {
            console.error('获取表单数据失败:', error);
            message.error('获取表单数据失败');
          }
        };
        
        // 处理申请成功回调
        const handleApproveSuccess = () => {
          selectedApplyFields.value = {};
          currentApplyRecord.value = null;
          message.success('申请提交成功');
        };
  
        return {
          registerDrawer,
          registerApplyForm,
          registerApproveReason,
          handleApplySubmit,
          handleApproveSuccess,
        };
      },
    });
  </script>
  
  <style lang="less" scoped>
    // 申请权限抽屉样式,与出勤统计表保持一致
    :deep(.apply-permission-drawer) {
      .ant-drawer-content {
        position: fixed;
        z-index: 10;
      }
    }
  </style>