From 7733d0a7f4d874c559e10387fab2ab8daab5fa09 Mon Sep 17 00:00:00 2001 From: hw Date: Wed, 12 Nov 2025 16:56:18 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20todo=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/.env.development | 4 +- apps/web-antd/src/api/mp/draft/index.ts | 10 +- .../mp/autoReply/components/ReplyForm.vue | 138 ------- apps/web-antd/src/views/mp/autoReply/data.ts | 94 ++++- .../web-antd/src/views/mp/autoReply/index.vue | 234 +++++------- .../ReplyTable.vue => modules/content.vue} | 15 +- .../src/views/mp/autoReply/modules/form.vue | 158 ++++---- .../mp/autoReply/{components => }/types.ts | 0 apps/web-antd/src/views/mp/draft/data.ts | 21 +- apps/web-antd/src/views/mp/draft/index.vue | 214 ++++------- .../{components => modules}/cover-select.vue | 106 ++---- .../{components => modules}/draft-table.vue | 4 +- .../src/views/mp/draft/modules/form.vue | 54 ++- .../{components => modules}/news-form.vue | 163 +++------ .../mp/draft/{components => modules}/types.ts | 2 +- .../views/mp/menu/components/menuOptions.ts | 43 --- apps/web-antd/src/views/mp/menu/data.ts | 22 ++ apps/web-antd/src/views/mp/menu/index.vue | 207 +++++------ .../assets/iphone_backImg.png | Bin .../assets/menu_foot.png | Bin .../assets/menu_head.png | Bin .../menu-editor.vue => modules/editor.vue} | 154 +++----- .../mp/menu/{components => modules}/index.ts | 8 +- .../previewer.vue} | 111 ++---- .../mp/menu/{components => modules}/types.ts | 44 +++ apps/web-antd/src/views/mp/modules/index.ts | 20 ++ .../wx-location.vue => location/location.vue} | 2 +- .../material-select.vue} | 340 ++++++++++-------- .../views/mp/modules/material-select/types.ts | 4 + .../mp/modules/{wx-msg => msg}/msg-event.vue | 0 .../mp/modules/{wx-msg => msg}/msg-list.vue | 9 +- .../views/mp/modules/{wx-msg => msg}/msg.vue | 24 +- .../views/mp/modules/{wx-msg => msg}/types.ts | 0 .../wx-music.vue => music/music.vue} | 23 +- .../{wx-news/wx-news.vue => news/news.vue} | 97 +---- .../wx-reply.vue => reply/reply.vue} | 48 +-- .../modules/{wx-reply => reply}/tab-image.vue | 12 +- .../modules/{wx-reply => reply}/tab-music.vue | 12 +- .../modules/{wx-reply => reply}/tab-news.vue | 9 +- .../modules/{wx-reply => reply}/tab-text.vue | 0 .../modules/{wx-reply => reply}/tab-video.vue | 7 +- .../modules/{wx-reply => reply}/tab-voice.vue | 15 +- .../mp/modules/{wx-reply => reply}/types.ts | 7 +- .../video-play.vue} | 13 +- .../voice-play.vue} | 28 +- .../mp/modules/wx-account-select/index.ts | 2 - .../wx-account-select/wx-account-select.vue | 123 ------- .../src/views/mp/modules/wx-location/index.ts | 1 - .../mp/modules/wx-material-select/index.ts | 3 - .../mp/modules/wx-material-select/types.ts | 12 - .../src/views/mp/modules/wx-msg/card.scss | 116 ------ .../src/views/mp/modules/wx-msg/comment.scss | 109 ------ .../src/views/mp/modules/wx-msg/index.ts | 3 - .../src/views/mp/modules/wx-msg/wx-msg.vue | 197 ---------- .../src/views/mp/modules/wx-music/index.ts | 1 - .../src/views/mp/modules/wx-news/index.ts | 1 - .../src/views/mp/modules/wx-reply/index.ts | 2 - .../views/mp/modules/wx-video-play/index.ts | 1 - .../views/mp/modules/wx-voice-play/index.ts | 1 - apps/web-antd/src/views/mp/tag/data.ts | 1 + 60 files changed, 1029 insertions(+), 2020 deletions(-) delete mode 100644 apps/web-antd/src/views/mp/autoReply/components/ReplyForm.vue rename apps/web-antd/src/views/mp/autoReply/{components/ReplyTable.vue => modules/content.vue} (70%) rename apps/web-antd/src/views/mp/autoReply/{components => }/types.ts (100%) rename apps/web-antd/src/views/mp/draft/{components => modules}/cover-select.vue (63%) rename apps/web-antd/src/views/mp/draft/{components => modules}/draft-table.vue (73%) rename apps/web-antd/src/views/mp/draft/{components => modules}/news-form.vue (68%) rename apps/web-antd/src/views/mp/draft/{components => modules}/types.ts (92%) delete mode 100644 apps/web-antd/src/views/mp/menu/components/menuOptions.ts rename apps/web-antd/src/views/mp/menu/{components => modules}/assets/iphone_backImg.png (100%) rename apps/web-antd/src/views/mp/menu/{components => modules}/assets/menu_foot.png (100%) rename apps/web-antd/src/views/mp/menu/{components => modules}/assets/menu_head.png (100%) rename apps/web-antd/src/views/mp/menu/{components/menu-editor.vue => modules/editor.vue} (64%) rename apps/web-antd/src/views/mp/menu/{components => modules}/index.ts (42%) rename apps/web-antd/src/views/mp/menu/{components/menu-previewer.vue => modules/previewer.vue} (68%) rename apps/web-antd/src/views/mp/menu/{components => modules}/types.ts (63%) create mode 100644 apps/web-antd/src/views/mp/modules/index.ts rename apps/web-antd/src/views/mp/modules/{wx-location/wx-location.vue => location/location.vue} (97%) rename apps/web-antd/src/views/mp/modules/{wx-material-select/wx-material-select.vue => material-select/material-select.vue} (39%) create mode 100644 apps/web-antd/src/views/mp/modules/material-select/types.ts rename apps/web-antd/src/views/mp/modules/{wx-msg => msg}/msg-event.vue (100%) rename apps/web-antd/src/views/mp/modules/{wx-msg => msg}/msg-list.vue (87%) rename apps/web-antd/src/views/mp/modules/{wx-msg => msg}/msg.vue (78%) rename apps/web-antd/src/views/mp/modules/{wx-msg => msg}/types.ts (100%) rename apps/web-antd/src/views/mp/modules/{wx-music/wx-music.vue => music/music.vue} (56%) rename apps/web-antd/src/views/mp/modules/{wx-news/wx-news.vue => news/news.vue} (39%) rename apps/web-antd/src/views/mp/modules/{wx-reply/wx-reply.vue => reply/reply.vue} (71%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-image.vue (93%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-music.vue (92%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-news.vue (89%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-text.vue (100%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-video.vue (95%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/tab-voice.vue (90%) rename apps/web-antd/src/views/mp/modules/{wx-reply => reply}/types.ts (90%) rename apps/web-antd/src/views/mp/modules/{wx-video-play/wx-video-play.vue => video-play/video-play.vue} (90%) rename apps/web-antd/src/views/mp/modules/{wx-voice-play/wx-voice-play.vue => voice-play/voice-play.vue} (83%) delete mode 100644 apps/web-antd/src/views/mp/modules/wx-account-select/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-account-select/wx-account-select.vue delete mode 100644 apps/web-antd/src/views/mp/modules/wx-location/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-material-select/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-material-select/types.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-msg/card.scss delete mode 100644 apps/web-antd/src/views/mp/modules/wx-msg/comment.scss delete mode 100644 apps/web-antd/src/views/mp/modules/wx-msg/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-msg/wx-msg.vue delete mode 100644 apps/web-antd/src/views/mp/modules/wx-music/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-news/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-reply/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-video-play/index.ts delete mode 100644 apps/web-antd/src/views/mp/modules/wx-voice-play/index.ts diff --git a/apps/web-antd/.env.development b/apps/web-antd/.env.development index cff2557643..fe07e867cc 100644 --- a/apps/web-antd/.env.development +++ b/apps/web-antd/.env.development @@ -4,9 +4,9 @@ VITE_PORT=5666 VITE_BASE=/ # 请求路径 -VITE_BASE_URL=http://127.0.0.1:48080 +VITE_BASE_URL=http://47.103.66.220:48080 # 接口地址 -VITE_GLOB_API_URL=/admin-api +VITE_GLOB_API_URL=http://47.103.66.220:48080/admin-api # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务 VITE_UPLOAD_TYPE=server # 是否打开 devtools,true 为打开,false 为关闭 diff --git a/apps/web-antd/src/api/mp/draft/index.ts b/apps/web-antd/src/api/mp/draft/index.ts index 9032ffd572..70b7c0e83d 100644 --- a/apps/web-antd/src/api/mp/draft/index.ts +++ b/apps/web-antd/src/api/mp/draft/index.ts @@ -50,13 +50,9 @@ export function updateDraft( mediaId: string, articles: MpDraftApi.Article[], ) { - return requestClient.put( - '/mp/draft/update', - { articles }, - { - params: { accountId, mediaId }, - }, - ); + return requestClient.put('/mp/draft/update', articles, { + params: { accountId, mediaId }, + }); } /** 删除草稿 */ diff --git a/apps/web-antd/src/views/mp/autoReply/components/ReplyForm.vue b/apps/web-antd/src/views/mp/autoReply/components/ReplyForm.vue deleted file mode 100644 index d90e51a346..0000000000 --- a/apps/web-antd/src/views/mp/autoReply/components/ReplyForm.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - diff --git a/apps/web-antd/src/views/mp/autoReply/data.ts b/apps/web-antd/src/views/mp/autoReply/data.ts index e3cbef345e..8056cd2c4d 100644 --- a/apps/web-antd/src/views/mp/autoReply/data.ts +++ b/apps/web-antd/src/views/mp/autoReply/data.ts @@ -1,13 +1,30 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeGridPropTypes } from '#/adapter/vxe-table'; +import type { MpAccountApi } from '#/api/mp/account'; import { markRaw } from 'vue'; import { DICT_TYPE } from '@vben/constants'; +import { getDictOptions } from '@vben/hooks'; -import { WxAccountSelect } from '#/views/mp/modules/wx-account-select'; +import { getSimpleAccountList } from '#/api/mp/account'; +import { ReplySelect } from '#/views/mp/modules'; -import { MsgType } from './components/types'; +import { MsgType } from './types'; + +/** 关联数据 */ +let accountList: MpAccountApi.AccountSimple[] = []; +getSimpleAccountList().then((data) => (accountList = data)); + +const RequestMessageTypes = new Set([ + 'image', + 'link', + 'location', + 'shortvideo', + 'text', + 'video', + 'voice', +]); // 允许选择的请求消息类型 /** 获取表格列配置 */ export function useGridColumns(msgType: MsgType): VxeGridPropTypes.Columns { @@ -76,13 +93,84 @@ export function useGridColumns(msgType: MsgType): VxeGridPropTypes.Columns { return columns; } +/** 新增/修改的表单 */ +export function useFormSchema(msgType: MsgType): VbenFormSchema[] { + const schema: VbenFormSchema[] = []; + + // 消息类型(仅消息回复显示) + if (msgType === MsgType.Message) { + schema.push({ + fieldName: 'requestMessageType', + label: '消息类型', + component: 'Select', + componentProps: { + placeholder: '请选择', + options: getDictOptions(DICT_TYPE.MP_MESSAGE_TYPE).filter((d) => + RequestMessageTypes.has(d.value as string), + ), + }, + }); + } + + // 匹配类型(仅关键词回复显示) + if (msgType === MsgType.Keyword) { + schema.push({ + fieldName: 'requestMatch', + label: '匹配类型', + component: 'Select', + componentProps: { + placeholder: '请选择匹配类型', + allowClear: true, + options: getDictOptions( + DICT_TYPE.MP_AUTO_REPLY_REQUEST_MATCH, + 'number', + ), + }, + rules: 'required', + }); + } + + // 关键词(仅关键词回复显示) + if (msgType === MsgType.Keyword) { + schema.push({ + fieldName: 'requestKeyword', + label: '关键词', + component: 'Input', + componentProps: { + placeholder: '请输入内容', + allowClear: true, + }, + rules: 'required', + }); + } + // 回复消息 + schema.push({ + fieldName: 'reply', + label: '回复消息', + component: markRaw(ReplySelect), + // componentProps: { + // modelValue: { type: 'video', content: '12456' }, + // }, + // modelPropName: 'modelValue', + }); + return schema; +} + /** 列表的搜索表单 */ export function useGridFormSchema(): VbenFormSchema[] { return [ { fieldName: 'accountId', label: '公众号', - component: markRaw(WxAccountSelect), + component: 'ApiSelect', + componentProps: { + options: accountList.map((item) => ({ + label: item.name, + value: item.id, + })), + placeholder: '请选择公众号', + }, + defaultValue: accountList[0]?.id, }, ]; } diff --git a/apps/web-antd/src/views/mp/autoReply/index.vue b/apps/web-antd/src/views/mp/autoReply/index.vue index 504f79dd74..ae1043f2fb 100644 --- a/apps/web-antd/src/views/mp/autoReply/index.vue +++ b/apps/web-antd/src/views/mp/autoReply/index.vue @@ -1,15 +1,9 @@ + diff --git a/apps/web-antd/src/views/mp/autoReply/components/ReplyTable.vue b/apps/web-antd/src/views/mp/autoReply/modules/content.vue similarity index 70% rename from apps/web-antd/src/views/mp/autoReply/components/ReplyTable.vue rename to apps/web-antd/src/views/mp/autoReply/modules/content.vue index 5948a91ccc..1d2a5187be 100644 --- a/apps/web-antd/src/views/mp/autoReply/components/ReplyTable.vue +++ b/apps/web-antd/src/views/mp/autoReply/modules/content.vue @@ -1,9 +1,6 @@ diff --git a/apps/web-antd/src/views/mp/autoReply/components/types.ts b/apps/web-antd/src/views/mp/autoReply/types.ts similarity index 100% rename from apps/web-antd/src/views/mp/autoReply/components/types.ts rename to apps/web-antd/src/views/mp/autoReply/types.ts diff --git a/apps/web-antd/src/views/mp/draft/data.ts b/apps/web-antd/src/views/mp/draft/data.ts index 2ee398fd11..cd8bf01c19 100644 --- a/apps/web-antd/src/views/mp/draft/data.ts +++ b/apps/web-antd/src/views/mp/draft/data.ts @@ -1,9 +1,12 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { MpAccountApi } from '#/api/mp/account'; -import { markRaw } from 'vue'; +import { getSimpleAccountList } from '#/api/mp/account'; -import { WxAccountSelect } from '#/views/mp/modules/wx-account-select'; +/** 关联数据 */ +let accountList: MpAccountApi.AccountSimple[] = []; +getSimpleAccountList().then((data) => (accountList = data)); /** 获取表格列配置 */ export function useGridColumns(): VxeTableGridOptions['columns'] { @@ -18,7 +21,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { field: 'updateTime', title: '更新时间', minWidth: 180, - formatter: 'formatDateTime', + formatter: 'formatDateTime', // TODO @YunaiV 接口返回数据不对,需要乘1000 }, { title: '操作', @@ -30,13 +33,21 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { } /** 列表的搜索表单 */ -// TODO @hw:这里的公众号选择,要改参考 /Users/yunai/Java/yudao-ui-admin-vben-v5/apps/web-antd/src/views/mp/tag/data.ts;相关联的代码还简单点~ +// DONE @hw:这里的公众号选择,要改参考 /apps/web-antd/src/views/mp/tag/data.ts;相关联的代码还简单点~ export function useGridFormSchema(): VbenFormSchema[] { return [ { fieldName: 'accountId', label: '公众号', - component: markRaw(WxAccountSelect), + component: 'ApiSelect', + componentProps: { + options: accountList.map((item) => ({ + label: item.name, + value: item.id, + })), + placeholder: '请选择公众号', + }, + defaultValue: accountList[0]?.id, }, ]; } diff --git a/apps/web-antd/src/views/mp/draft/index.vue b/apps/web-antd/src/views/mp/draft/index.vue index e1185adcc9..bf28472d55 100644 --- a/apps/web-antd/src/views/mp/draft/index.vue +++ b/apps/web-antd/src/views/mp/draft/index.vue @@ -1,10 +1,8 @@ + + diff --git a/apps/web-antd/src/views/mp/modules/wx-msg/types.ts b/apps/web-antd/src/views/mp/modules/msg/types.ts similarity index 100% rename from apps/web-antd/src/views/mp/modules/wx-msg/types.ts rename to apps/web-antd/src/views/mp/modules/msg/types.ts diff --git a/apps/web-antd/src/views/mp/modules/wx-music/wx-music.vue b/apps/web-antd/src/views/mp/modules/music/music.vue similarity index 56% rename from apps/web-antd/src/views/mp/modules/wx-music/wx-music.vue rename to apps/web-antd/src/views/mp/modules/music/music.vue index 381292e6fc..f0433d40f8 100644 --- a/apps/web-antd/src/views/mp/modules/wx-music/wx-music.vue +++ b/apps/web-antd/src/views/mp/modules/music/music.vue @@ -2,7 +2,7 @@ 【微信消息 - 音乐】 --> - - diff --git a/apps/web-antd/src/views/mp/modules/wx-reply/wx-reply.vue b/apps/web-antd/src/views/mp/modules/reply/reply.vue similarity index 71% rename from apps/web-antd/src/views/mp/modules/wx-reply/wx-reply.vue rename to apps/web-antd/src/views/mp/modules/reply/reply.vue index 225e8ab353..233487ffe2 100644 --- a/apps/web-antd/src/views/mp/modules/wx-reply/wx-reply.vue +++ b/apps/web-antd/src/views/mp/modules/reply/reply.vue @@ -10,21 +10,22 @@