src/views/basicData/mdm/components/select-dialog.vue
@@ -1,13 +1,15 @@
<script lang="ts" setup>
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MdmItemApi } from '#/api/mdm/item';
import type { MesMdItemTypeApi } from '#/api/mes/md/item/type';
import { nextTick, ref } from 'vue';
import { message, Modal } from 'ant-design-vue';
import { message, Modal, Tag } from 'ant-design-vue';
import { useVbenVxeGrid } from '#/adapter/vxe-table';
import { getItemPage } from '#/api/mdm/item';
import { getItemTypeSimpleList } from '#/api/mes/md/item/type';
import {
  useMdmItemSelectGridColumns,
@@ -24,6 +26,21 @@
const multiple = ref(true); // 是否多选
const selectedRows = ref<MdmItemApi.Item[]>([]); // 已选物料列表
const preSelectedIds = ref<number[]>([]); // 预选物料编号列表
const categoryList = ref<MesMdItemTypeApi.ItemType[]>([]); // 分类列表缓存
const TAG_COLORS = ['green', 'orange', 'blue', 'purple', 'cyan', 'magenta', 'geekblue', 'volcano', 'gold', 'lime'] as const;
function getCategoryName(categoryId?: number) {
  if (!categoryId || !categoryList.value.length) return '';
  const category = categoryList.value.find((item) => item.id === categoryId);
  return category?.name || '';
}
function getCategoryColor(categoryId?: number): string {
  if (!categoryId) return '';
  const index = categoryList.value.findIndex((item) => item.id === categoryId);
  return index >= 0 ? TAG_COLORS[index % TAG_COLORS.length]! : '';
}
/** 获取当前表格数据 */
function getTableRows() {
@@ -121,6 +138,13 @@
    proxyConfig: {
      ajax: {
        query: async ({ page }, formValues) => {
          if (!categoryList.value.length) {
            try {
              categoryList.value = await getItemTypeSimpleList();
            } catch {
              categoryList.value = [];
            }
          }
          return await getItemPage({
            pageNo: page.currentPage,
            pageSize: page.pageSize,
@@ -204,6 +228,15 @@
    @ok="handleConfirm"
    @cancel="closeModal"
  >
    <Grid table-title="物料列表" />
    <Grid table-title="物料列表">
      <template #categoryId="{ row }">
        <Tag v-if="getCategoryColor(row.categoryId)" :color="getCategoryColor(row.categoryId)">{{ getCategoryName(row.categoryId) }}</Tag>
        <span v-else>{{ getCategoryName(row.categoryId) || '-' }}</span>
      </template>
      <template #isBatchManaged="{ row }">
        <Tag v-if="row.isBatchManaged" color="success">是</Tag>
        <Tag v-else>否</Tag>
      </template>
    </Grid>
  </Modal>
</template>