import type { Ref } from 'vue' import { h } from 'vue' import { Space, Tag } from 'ant-design-vue' import type { BasicColumn, FormSchema } from '@/components/Table' import { useSystemEnumStore } from '@/store/modules/systemEnum' import { getAllProducts } from '@/api/product' import type { Product } from '@/api/product/types' const { getSystemEnums } = useSystemEnumStore() let productsCache: Pick[] = [] async function getCachedProducts() { if (productsCache.length) return productsCache try { return productsCache = await getAllProducts() } catch { return [] } } export const columns: BasicColumn[] = [ { title: '产品名称', dataIndex: 'productId', customRender({ value }) { return productsCache.find(item => item.id === value)?.productName }, }, { title: '推送消息类型', dataIndex: 'messageType', customRender({ value }) { const values = value.split(',') const types = getSystemEnums('eSubscribeMessageType') return h( Space, () => types .map(item => values.includes(item.value.toString()) ? item.label : null) .filter(Boolean) .map(name => h(Tag, () => name)), ) }, }, { title: '创建时间', dataIndex: 'createTime', }, ] export const searchFormSchema: FormSchema[] = [ { field: 'productId', label: '产品名称', component: 'ApiSelect', componentProps: { api: getCachedProducts, showSearch: true, fieldNames: { label: 'productName', value: 'id', }, }, colProps: { span: 6, }, }, ] export function getFormSchema(isUpload: Ref): FormSchema[] { return [ { field: 'productId', fields: ['id'], label: '产品名称', required: true, component: 'ApiSelect', componentProps: { api: getCachedProducts, valueField: 'id', labelField: 'productName', showSearch: true, }, dynamicDisabled: () => isUpload.value, }, { field: 'messageType', label: '推送消息类型', required: true, component: 'Select', componentProps: { mode: 'multiple', options: getSystemEnums('eSubscribeMessageType'), }, }, ] }