2 天以前 35722562e9e13f0504acc15b740d042ecb810199
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<script lang="ts" setup>
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { QcReportInstanceApi } from '#/api/mes/qc/report/instance';
 
import { onMounted } from 'vue';
import { useRoute } from 'vue-router';
 
import { Page, useVbenModal } from '@vben/common-ui';
 
import { message, Tag } from 'ant-design-vue';
 
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteInstance,
  getInstancePage,
} from '#/api/mes/qc/report/instance';
import { $t } from '#/locales';
 
import { useGridColumns, useGridFormSchema } from './data';
import Detail from './modules/detail.vue';
 
defineOptions({ name: 'QcReportInstance' });
 
const route = useRoute();
 
const [DetailModal, detailModalApi] = useVbenModal({
  connectedComponent: Detail,
  destroyOnClose: true,
});
 
/** 刷新表格 */
function handleRefresh() {
  gridApi.query();
}
 
/** 查看报告详情与预览 */
function handleDetail(row: QcReportInstanceApi.Instance) {
  detailModalApi.setData(row).open();
}
 
/** 删除报告实例 */
async function handleDelete(row: QcReportInstanceApi.Instance) {
  const hideLoading = message.loading({
    content: $t('ui.actionMessage.deleting', [row.reportNo]),
    duration: 0,
  });
  try {
    await deleteInstance(row.id!);
    message.success($t('ui.actionMessage.deleteSuccess', [row.reportNo]));
    handleRefresh();
  } finally {
    hideLoading();
  }
}
 
const [Grid, gridApi] = useVbenVxeGrid({
  formOptions: {
    schema: useGridFormSchema(),
  },
  gridOptions: {
    columns: useGridColumns(),
    height: 'auto',
    keepSource: true,
    proxyConfig: {
      ajax: {
        query: async ({ page }, formValues) => {
          return await getInstancePage({
            pageNo: page.currentPage,
            pageSize: page.pageSize,
            ...formValues,
          });
        },
      },
    },
    rowConfig: {
      keyField: 'id',
      isHover: true,
    },
    toolbarConfig: {
      refresh: true,
      search: true,
    },
  } as VxeTableGridOptions<QcReportInstanceApi.Instance>,
});
 
/**
 * 从质检单「出报告」跳过来时会带 businessType + businessId,预填到搜索条件里并直接查一次,
 * 用户进来就看到刚出的那份报告,不用自己再筛一遍。
 * <p>
 * 必须跟着调 submitForm:表格取搜索条件是读 formApi.getLatestSubmissionValues(),
 * 只 setFieldValue 的话条件会填进表单但查询仍用旧值,列表还是全量——等于没筛。
 */
onMounted(async () => {
  const { businessType, businessId } = route.query;
  if (!businessType && !businessId) {
    return;
  }
  const values: Record<string, string> = {};
  if (businessType) {
    values.businessType = String(businessType);
  }
  if (businessId) {
    values.businessId = String(businessId);
  }
  await gridApi.formApi.setValues(values);
  await gridApi.formApi.submitForm();
});
</script>
 
<template>
  <Page auto-content-height>
    <DetailModal />
 
    <Grid table-title="报告实例列表">
      <template #templateVersion="{ row }">
        <Tag v-if="row.templateVersion" color="green">
          {{ row.templateVersion }}
        </Tag>
        <span v-else class="text-gray-400">—</span>
      </template>
      <template #actions="{ row }">
        <TableAction
          :actions="[
            {
              label: '预览',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['qc-report:instance:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
              label: $t('common.delete'),
              type: 'link',
              danger: true,
              icon: ACTION_ICON.DELETE,
              auth: ['qc-report:instance:delete'],
              popConfirm: {
                title: $t('ui.actionMessage.deleteConfirm', [row.reportNo]),
                confirm: handleDelete.bind(null, row),
              },
            },
          ]"
        />
      </template>
    </Grid>
  </Page>
</template>