From 391af4e3cfc4f95d57b98b18c2eca9f0e91d41a7 Mon Sep 17 00:00:00 2001 From: K <1175047471@qq.com> Date: Mon, 4 Mar 2024 15:31:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=8D=E5=8A=A1=E7=AB=AF=E8=AE=A2?= =?UTF-8?q?=E9=98=85=20-=20=E8=AE=A2=E9=98=85=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/product/index.ts | 2 +- src/api/subscription/list/index.ts | 29 ++++++ src/api/subscription/list/types.ts | 4 + .../list/SubscriptionFormModal.vue | 60 +++++++++++ src/views/subscription/list/data.ts | 99 +++++++++++++++++++ src/views/subscription/list/index.vue | 82 +++++++++++++++ 6 files changed, 275 insertions(+), 1 deletion(-) create mode 100644 src/views/subscription/list/SubscriptionFormModal.vue create mode 100644 src/views/subscription/list/data.ts create mode 100644 src/views/subscription/list/index.vue 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 @@ + + +