index.vue 6.16 KB
<template>
  <div>
    <BasicTable @register="registerTable" :bordered="true">
      <template #bodyCell="{ column, record }">
        <template v-if="column.key === 'action'">
          <TableAction
            :actions="createActions(record)"
            :dropDownActions="createDropActions(record)"
          />
        </template>
        <!-- <template v-if="column.key === 'relationValue'">
          <a-input
            v-if="record.settingValue === 'A01'"
            v-model:value="record.settingValue"
            :max-length="50"
          />
          <span v-else style="color: red">
            {{ record.settingValue }}
          </span>
        </template> -->
      </template>
    </BasicTable>
    <!-- <BasicModal
      title="拒绝原因"
      width="30%"
      @register="registerModal"
      @visible-change="handleClose"
      @ok="handleOk"
      wrapClassName="approve-modal"
    >
      <div className="pa-8">
        <a-textarea :rows="6" placeholder="请输入拒绝原因" v-model:value="message" />
      </div>
    </BasicModal> -->
    <CheckDetail @register="checkModalRegister" :onGoFormDetail="handleGoFormDetail" />
    <FinanceEdit @register="registerFinanceEdit" @success="handleSuccess" />
    <HistoryDetail @register="registerHistoryDetail" />
  </div>
</template>
<script setup lang="ts">
  import { BasicTable, useTable, TableAction } from '/@/components/Table';
  import { getServiceProfit } from '@/api/project/invoice';
  import { searchFormSchema, COLUMNS } from './data';
  import { useMessage } from '/@/hooks/web/useMessage';
  import { onMounted, ref, computed, unref } from 'vue';
  import { useDrawer } from '/@/components/Drawer';
  import FinanceEdit from './FinanceEdit.vue';
  import HistoryDetail from './HistoryDetail.vue';
  import CheckDetail from './CheckDetail.vue';
  import { useUserStoreWithOut } from '/@/store/modules/user';
  import { ROLE } from '../../../type.d';
  import { useOrderStoreWithOut } from '/@/store/modules/order';

  const { createMessage } = useMessage();
  const message = ref();
  const checkedKeys = ref<string[]>([]);
  const invoiceIdKeys = ref<string[]>([]);
  const checkIdKeys = ref<string[]>([]);
  const orderStore = useOrderStoreWithOut();
  const [checkModalRegister, { openDrawer: openCheckDetailDrawer }] = useDrawer();
  const [registerFinanceEdit, { openDrawer: openFinanceEdit }] = useDrawer();
  const [registerHistoryDetail, { openDrawer: openHistoryDetail }] = useDrawer();
  const userStore = useUserStoreWithOut();
  const user = userStore.getUserInfo;
  const role = computed(() => {
    return user?.roleSmallVO?.code;
  });
  const [registerTable, { reload, getSelectRowKeys, getDataSource, setSelectedRowKeys }] = useTable({
    
    api: getServiceProfit,
    bordered: true,
    columns: COLUMNS,
    clickToRowSelect: false,
    rowKey: 'id',
    formConfig: {
      labelWidth: 120,
      schemas: searchFormSchema,
      autoSubmitOnEnter: true,
    },
    useSearchForm: true,
    showTableSetting: true,
    showIndexColumn: false,
    tableSetting: {
      setting: false,
    },
    actionColumn: {
      width: 260,
      title: 'Action',
      dataIndex: 'action',
    },
  });

  function createActions(record: any): any[] {
    if (!record.editable) {
      const actions = [
        {
          label: '财务编辑',
          onClick: handleFinanceEdit.bind(null, record),
        },
        // {
        //   label: '编辑',
        //   onClick: handleEdit.bind(null, record),
        // },
        // {
        //   label: '删除',
        //   popConfirm: {
        //     title: '确认删除?',
        //     confirm: handleDelete.bind(null, record),
        //   },
        // },
        {
          label: '申请权限',
          // popConfirm: {
          //   title: '确认申请?',
          //   confirm: handleFalse.bind(null, record),
          // },
          onClick: handleFalse.bind(null, record),
        },
        {
          label: '审核通过',
          popConfirm: {
            title: '确认审核?',
            confirm: () => {
              if (record.status === 0 && role.value === ROLE.ADMIN) {
                handleStatus(record, true);
              }
              return;
            },
          },
        },
      ];
      return actions;
    }
    return [
      {
        label: '保存',
        onClick: handleSave.bind(null, record),
      },
      {
        label: '取消',
        popConfirm: {
          title: '是否取消编辑',
          confirm: handleCancel.bind(null, record),
        },
      },
    ];
  }
  function createDropActions(record: any) {
    if (!record.editable) {
      const actions = [
        {
          label: '历史记录',
          onClick: handleHistoryDetail.bind(null, record),
        },
      ];
      return actions;
    }
  }

  onMounted(async () => {
    await orderStore.getDict();
  });

  function handleFinanceEdit(record) {
    openFinanceEdit(true, {
      data: record,
    });
  }

  function handleFalse(record, e) {
    openCheckDetailDrawer(true, record);
    e?.stopPropagation();
    return false;
  }

  // async function handleFalse(record: any) {
  //   console.log(record);
  //   // openModal(true, { record });
  // }

  function handleSuccess() {
    setTimeout(() => {
      reload();
    }, 50);
  }

  async function handleSave(record) {
    await saveConfig({ id: record.id, relationValue: record.relationValue });
    handleCancel(record);
    reload();
  }
  function handleEdit(record: any) {
    // if (record.settingValue == 'A01') {
    //   error('请勿连续点击生成按钮,需要等待三秒再点击生成');
    // } else {
    record.onEdit?.(true);
  }

  function handleCancel(record) {
    record.onEdit?.(false, false);
  }

  async function handleDelete(record) {
    // await deleteConfig({ ids: [record.id] });
    reload();
  }

  async function handleStatus(record, status) {
    try {
      // You can implement the API call here
      // await someApiCall({ id: record.id, status });
      reload();
    } catch (error) {
      console.error('Error updating status:', error);
    }
  }

  async function handleHistoryDetail(record) {
    openHistoryDetail(true, {
      data: record,
    });
  }
</script>
<style></style>