diff --git a/src/api/product/index.ts b/src/api/product/index.ts index 17304837..d5de8d4b 100644 --- a/src/api/product/index.ts +++ b/src/api/product/index.ts @@ -36,7 +36,7 @@ export function deleteProduct(id: string) { } export function getAllProducts() { - return defHttp.get({ + return defHttp.get[]>({ url: '/product/select', }) } diff --git a/src/api/subscription/list/index.ts b/src/api/subscription/list/index.ts index e69de29b..a4617473 100644 --- a/src/api/subscription/list/index.ts +++ b/src/api/subscription/list/index.ts @@ -0,0 +1,29 @@ +import type { GetSubscriptionListParams, SubScription } from './types' +import { defHttp } from '@/utils/http/axios' + +export function getSubscriptionList(params: GetSubscriptionListParams) { + return defHttp.get>({ + url: '/server/subscribe/page', + params, + }) +} + +export function createSubscription(data: Pick) { + return defHttp.post({ + url: '/server/subscribe/save', + data, + }) +} + +export function updateSubscription(data: Pick) { + return defHttp.post({ + url: '/server/subscribe/update', + data, + }) +} + +export function deleteSubscription(id: string) { + return defHttp.post({ + url: `/server/subscribe/remove?id=${id}`, + }) +} diff --git a/src/api/subscription/list/types.ts b/src/api/subscription/list/types.ts index 47514c21..c1a66711 100644 --- a/src/api/subscription/list/types.ts +++ b/src/api/subscription/list/types.ts @@ -1,3 +1,7 @@ +export interface GetSubscriptionListParams extends PageParam { + productId?: string +} + export interface SubScription { id: string messageType: string diff --git a/src/views/subscription/list/SubscriptionFormModal.vue b/src/views/subscription/list/SubscriptionFormModal.vue new file mode 100644 index 00000000..9108a181 --- /dev/null +++ b/src/views/subscription/list/SubscriptionFormModal.vue @@ -0,0 +1,60 @@ + + + diff --git a/src/views/subscription/list/data.ts b/src/views/subscription/list/data.ts new file mode 100644 index 00000000..39b9f02b --- /dev/null +++ b/src/views/subscription/list/data.ts @@ -0,0 +1,99 @@ +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'), + }, + }, + ] +} diff --git a/src/views/subscription/list/index.vue b/src/views/subscription/list/index.vue new file mode 100644 index 00000000..7e9d1fc0 --- /dev/null +++ b/src/views/subscription/list/index.vue @@ -0,0 +1,82 @@ + + +