FieldPanel.vue 9.39 KB
<template>
  <BasicTable @register="registerTable" className="p-0">
    <template #bodyCell="{ column, record }">
      <template v-if="column.key === 'picUrl'">
        <img
          :width="50"
          :height="50"
          :src="record?.orderBaseInfo?.smallPicUrl"
          @click="handlePreview(record?.orderBaseInfo?.picUrl)"
        />
      </template>
      <template v-if="column.key === 'action'">
        <TableAction
          :actions="[
            {
              label: '详情',
              // icon: 'ic:outline-delete-outline',
              onClick: handleDetail.bind(null, record),
            },
          ]"
        />
      </template>
    </template>
  </BasicTable>
  <BasicDrawer
    width="500"
    :showFooter="!isApproved && (role === ROLE.ADMIN || role === ROLE.BUSINESS)"
    @register="registerDrawer"
    title="申请信息"
    okText="通过"
    @ok="handleTrue"
  >
    <BaseInfo :baseInfos="baseInfos" />
    <template v-if="fieldInfos.auditRoleCodes.includes('business_user')">
      <h2 className="mt-8">基本信息申请字段</h2>
      <div>{{ fieldInfos.baseFields.join(' , ') }}</div>
    </template>
    <template v-if="!fieldInfos.auditRoleCodes.includes('business_user')">
      <h2 className="mt-8">利润分析表申请字段</h2>
      <div>
        {{ fieldInfos.profitFields.join(' , ') }}
      </div>

      <h2 className="mt-8">项目报告书申请字段</h2>
      <div>
        <span>{{ fieldInfos.reportFields.join(' , ') }}</span>
      </div>

      <h2 className="mt-8">跟单信息申请字段</h2>
      <div>
        <span>{{ fieldInfos.trackStageFields.join(' , ') }}</span>
      </div>

      <h2 className="mt-8">质量检测申请字段</h2>
      <div>
        <span>{{ fieldInfos.inspectionStageFields.join(' , ') }}</span>
      </div>
    </template>
    <template #appendFooter>
      <a-button @click="handleFalse"> 不通过</a-button>
    </template>
  </BasicDrawer>
  <MsgModal v-if="msgVisible" @msg-modal-close="handleMsgModalClose" />
</template>
<script lang="ts">
  import MsgModal from './MsgModal.vue';
  import { computed, defineComponent, ref } from 'vue';
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { BasicDrawer, useDrawer } from '/@/components/Drawer';
  import { approveAuditApi, getApprovedListApi, getWaitListApi } from '/@/api/project/approve';
  import {
    FIELDS_BASE_INFO,
    FIELDS_INSPECTION_INFO,
    FIELDS_PROFIT_INFO,
    FIELDS_REPORT_INFO,
    FIELDS_TRACK_STAGE_INFO,
  } from '../order/tableData';
  import { find, isEmpty } from 'lodash-es';
  import { ROLE } from '../order//type.d';
  import { useUserStoreWithOut } from '/@/store/modules/user';
  import BaseInfo from './BaseInfo.vue';
  import { createImgPreview } from '/@/components/Preview';
  import { getFormConfig } from './data';

  const userStore = useUserStoreWithOut();

  export default defineComponent({
    components: {
      BasicTable,
      BasicDrawer,
      TableAction,
      BaseInfo,
      MsgModal,
    },
    props: {
      isApproved: { type: Boolean },
    },
    setup(props) {
      // visible 用于msgModal显示隐藏
      const msgVisible = ref(false);

      const checkedKeys = ref<Array<string | number>>([]);
      const currentKey = ref('1');
      const [registerDrawer, { openDrawer, closeDrawer }] = useDrawer();
      const fieldInfos = ref({
        auditRoleCodes: 'business_user',
        baseFields: [],
        reportFields: [],
        profitFields: [],
        inspectionStageFields: [],
        trackStageFields: [],
      });
      const baseInfos = ref({});
      const id = ref('');

      let columns = [
        {
          title: '申请人',
          dataIndex: 'createBy',
          width: 150,
        },
        {
          title: '审核字段类型',
          dataIndex: 'auditRoleCodes',
          width: 150,
          customRender: (column) => {
            const { record } = column || {};
            return record?.auditRoleCodes.includes('business_user') ? '基本信息' : '其他模块';
          },
        },
        {
          title: '内部编号',
          dataIndex: 'innerNo',
          width: 150,
          customRender: (column) => {
            const { record } = column || {};
            return record?.orderBaseInfo?.innerNo;
          },
        },

        {
          title: '图片',
          dataIndex: 'picUrl',
          width: 150,
        },
      ];

      if (props.isApproved) {
        columns = columns.concat([
          {
            title: '状态',
            dataIndex: 'status',
            width: 150,
            customRender: (column) => {
              const { record } = column || {};

              return record.status === 10 ? '通过' : '拒绝';
            },
          },
          { title: '拒绝原因', dataIndex: 'refuseRemark', width: 250 },
        ]);
      }
      const [registerTable, { reload }] = useTable({
        scroll: false,
        api: props.isApproved ? getApprovedListApi : getWaitListApi,
        searchInfo: { type: 0 },
        columns,
        useSearchForm: true,
        formConfig: getFormConfig(true),
        rowKey: 'id',
        actionColumn: {
          width: 160,
          title: 'Action',
          dataIndex: 'action',
          // slots: { customRender: 'action' },
        },
      });

      function onSelect(record, selected) {
        if (selected) {
          checkedKeys.value = [...checkedKeys.value, record.id];
        } else {
          checkedKeys.value = checkedKeys.value.filter((id) => id !== record.id);
        }
      }
      function onSelectAll(selected, selectedRows, changeRows) {
        const changeIds = changeRows.map((item) => item.id);
        if (selected) {
          checkedKeys.value = [...checkedKeys.value, ...changeIds];
        } else {
          checkedKeys.value = checkedKeys.value.filter((id) => {
            return !changeIds.includes(id);
          });
        }
      }
      function handleEdit(record, e) {
        e?.stopPropagation();
        return false;
      }

      function handleProfitModal() {}

      async function handleDetail(data) {
        fieldInfos.value = {
          auditRoleCodes: data.auditRoleCodes,
          baseFields: [],
          reportFields: [],
          profitFields: [],
          inspectionStageFields: [],
          trackStageFields: [],
        };
        openDrawer(true, { data });

        !isEmpty(data.fieldInfos.baseFields) &&
          Object.entries(data.fieldInfos.baseFields)?.map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_BASE_INFO, { field: key });
              fieldInfos.value.baseFields.push(obj?.label);
            }
          });
        !isEmpty(data.fieldInfos.reportFields) &&
          Object.entries(data.fieldInfos.reportFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_REPORT_INFO, { field: key });
              fieldInfos.value.reportFields.push(obj?.label);
            }
          });
        !isEmpty(data.fieldInfos.profitAnalysisFields) &&
          Object.entries(data.fieldInfos.profitAnalysisFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_PROFIT_INFO, { field: key });
              fieldInfos.value.profitFields.push(obj?.label);
            }
          });

        !isEmpty(data.fieldInfos.trackStageFields) &&
          Object.entries(data.fieldInfos.trackStageFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_TRACK_STAGE_INFO, { field: key });
              fieldInfos.value.trackStageFields.push(obj?.label);
            }
          });

        !isEmpty(data.fieldInfos.inspectionStageFields) &&
          Object.entries(data.fieldInfos.inspectionStageFields).map(([key, value]) => {
            if (value === 'UN_LOCKED') {
              const obj = find(FIELDS_INSPECTION_INFO, { field: key });
              fieldInfos.value.inspectionStageFields.push(obj?.label);
            }
          });

        id.value = data.id;
        baseInfos.value = FIELDS_BASE_INFO.map((field) => {
          return {
            label: field.label,
            value: data.orderBaseInfo[field.field],
          };
        }).filter((item) => !!item.value);
      }

      async function handleTrue() {
        await approveAuditApi({ status: 10, id: id.value });
        reload();
        closeDrawer();
      }

      async function handleFalse() {
        msgVisible.value = true;
      }

      const role = computed(() => {
        return userStore.getUserInfo?.roleSmallVO?.code;
      });

      // 定义MsgModalClose的事件,方便子组件调用
      const handleMsgModalClose = async (data) => {
        if (data) {
          await approveAuditApi({ status: 20, id: id.value, refuseRemark: data });
          reload();
          closeDrawer();
        }
        msgVisible.value = false;
      };

      const handlePreview = (url) => {
        createImgPreview({ imageList: [url], defaultWidth: 500 });
        return false;
      };

      return {
        handleProfitModal,
        registerTable,
        checkedKeys,
        currentKey,
        onSelect,
        handleEdit,
        onSelectAll,
        handleDetail,
        registerDrawer,
        fieldInfos,
        baseInfos,
        handleTrue,
        handleFalse,
        ROLE,
        role,
        msgVisible,
        handleMsgModalClose,
        handlePreview,
      };
    },
  });
</script>