From b93491579c8afb85852faf5649976e8dcbc48642 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Fri, 14 Apr 2023 21:32:11 +0800 Subject: [PATCH 01/60] =?UTF-8?q?=E7=BB=99=E6=89=80=E6=9C=89=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=B7=BB=E5=8A=A0name=E5=B1=9E=E6=80=A7=E9=A2=84?= =?UTF-8?q?=E9=98=B2=E6=9C=AA=E7=9F=A5bug!!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 4 +- src/components/Backtop/src/Backtop.vue | 2 +- .../ConfigGlobal/src/ConfigGlobal.vue | 4 +- .../src/ContentDetailWrap.vue | 10 +- .../ContentWrap/src/ContentWrap.vue | 4 +- src/components/CountTo/src/CountTo.vue | 2 +- src/components/Crontab/src/Crontab.vue | 102 ++++++++-------- src/components/Cropper/src/CopperModal.vue | 51 ++++---- src/components/Cropper/src/Cropper.vue | 4 +- src/components/Cropper/src/CropperAvatar.vue | 14 ++- .../Descriptions/src/Descriptions.vue | 10 +- src/components/Dialog/src/Dialog.vue | 18 +-- src/components/Echart/src/Echart.vue | 2 +- src/components/Editor/src/Editor.vue | 6 +- src/components/Error/src/Error.vue | 4 +- src/components/IFrame/src/IFrame.vue | 6 +- src/components/Icon/src/Icon.vue | 4 +- src/components/Icon/src/IconSelect.vue | 22 ++-- .../ImageViewer/src/ImageViewer.vue | 2 +- src/components/Infotip/src/Infotip.vue | 6 +- .../InputPassword/src/InputPassword.vue | 8 +- src/components/Pagination/index.vue | 10 +- src/components/Qrcode/src/Qrcode.vue | 9 +- src/components/Search/src/Search.vue | 24 ++-- src/components/Sticky/src/Sticky.vue | 5 +- src/components/Tooltip/src/Tooltip.vue | 3 +- src/components/Verifition/src/Verify.vue | 42 ++++--- .../Verifition/src/Verify/VerifyPoints.vue | 14 +-- .../Verifition/src/Verify/VerifySlide.vue | 22 ++-- src/components/XButton/src/XButton.vue | 7 +- src/components/XButton/src/XTextButton.vue | 7 +- src/layout/components/AppView.vue | 2 +- .../components/Collapse/src/Collapse.vue | 6 +- .../ContextMenu/src/ContextMenu.vue | 11 +- src/layout/components/Footer/src/Footer.vue | 2 +- .../LocaleDropdown/src/LocaleDropdown.vue | 8 +- src/layout/components/Logo/src/Logo.vue | 6 +- src/layout/components/Message/src/Message.vue | 19 ++- .../components/Screenfull/src/Screenfull.vue | 6 +- src/layout/components/Setting/src/Setting.vue | 16 +-- .../src/components/ColorRadioPicker.vue | 6 +- .../src/components/InterfaceDisplay.vue | 2 +- .../src/components/LayoutRadioPicker.vue | 2 +- .../SizeDropdown/src/SizeDropdown.vue | 4 +- .../components/TagsView/src/TagsView.vue | 39 ++++--- .../ThemeSwitch/src/ThemeSwitch.vue | 10 +- .../components/UserInfo/src/UserInfo.vue | 2 +- src/views/Error/403.vue | 2 +- src/views/Error/404.vue | 2 +- src/views/Error/500.vue | 2 +- src/views/Home/Index2.vue | 109 +++++++++--------- src/views/Login/Login.vue | 2 +- src/views/Login/components/LoginForm.vue | 42 +++---- src/views/Login/components/LoginFormTitle.vue | 2 +- src/views/Login/components/MobileForm.vue | 30 ++--- src/views/Login/components/QrCodeForm.vue | 8 +- src/views/Login/components/RegisterForm.vue | 20 ++-- src/views/Profile/components/BasicInfo.vue | 6 +- src/views/Profile/components/ProfileUser.vue | 31 +++-- src/views/Profile/components/ResetPwd.vue | 8 +- src/views/Profile/components/UserAvatar.vue | 11 +- src/views/bpm/form/editor/index.vue | 11 +- src/views/bpm/group/UserGroupForm.vue | 10 +- src/views/bpm/model/ModelForm.vue | 33 +++--- src/views/bpm/model/ModelImportForm.vue | 29 ++--- src/views/bpm/oa/leave/create.vue | 21 ++-- src/views/bpm/oa/leave/detail.vue | 6 +- .../detail/ProcessInstanceBpmnViewer.vue | 10 +- .../detail/ProcessInstanceTaskList.vue | 10 +- .../detail/TaskUpdateAssigneeForm.vue | 8 +- src/views/bpm/task/done/TaskDetail.vue | 6 +- .../bpm/taskAssignRule/TaskAssignRuleForm.vue | 39 ++++--- .../infra/apiAccessLog/ApiAccessLogDetail.vue | 10 +- .../infra/apiErrorLog/ApiErrorLogDetail.vue | 18 +-- src/views/infra/codegen/EditTable.vue | 5 +- src/views/infra/codegen/ImportTable.vue | 43 ++++--- src/views/infra/codegen/PreviewCode.vue | 29 ++--- .../codegen/components/BasicInfoForm.vue | 14 +-- .../codegen/components/ColumInfoForm.vue | 28 ++--- .../codegen/components/GenerateInfoForm.vue | 18 +-- src/views/infra/config/ConfigForm.vue | 10 +- .../dataSourceConfig/DataSourceConfigForm.vue | 8 +- src/views/infra/file/FileForm.vue | 29 ++--- src/views/infra/fileConfig/FileConfigForm.vue | 13 ++- src/views/infra/job/JobDetail.vue | 6 +- src/views/infra/job/logger/JobLogDetail.vue | 6 +- src/views/infra/webSocket/index.vue | 14 +-- .../mall/product/property/PropertyForm.vue | 11 +- .../mall/product/property/value/ValueForm.vue | 11 +- src/views/mp/account/AccountForm.vue | 11 +- .../mp/components/wx-editor/WxEditor.vue | 22 ++-- src/views/mp/components/wx-news/main.vue | 18 ++- src/views/mp/tag/TagForm.vue | 9 +- src/views/mp/user/UserForm.vue | 11 +- src/views/pay/app/AppForm.vue | 9 +- src/views/pay/merchant/MerchantForm.vue | 11 +- src/views/pay/order/OrderDetail.vue | 6 +- src/views/pay/refund/RefundDetail.vue | 6 +- src/views/system/area/AreaForm.vue | 11 +- src/views/system/dept/DeptForm.vue | 23 ++-- src/views/system/dict/DictTypeForm.vue | 13 ++- src/views/system/dict/data/DictDataForm.vue | 15 +-- src/views/system/errorCode/ErrorCodeForm.vue | 16 +-- src/views/system/loginlog/LoginLogDetail.vue | 6 +- .../system/mail/account/MailAccountDetail.vue | 6 +- .../system/mail/account/MailAccountForm.vue | 11 +- src/views/system/mail/log/MailLogDetail.vue | 6 +- .../system/mail/template/MailTemplateForm.vue | 13 ++- .../mail/template/MailTemplateSendForm.vue | 11 +- src/views/system/menu/MenuForm.vue | 67 +++++------ src/views/system/notice/NoticeForm.vue | 15 +-- .../notify/message/NotifyMessageDetail.vue | 6 +- .../notify/my/MyNotifyMessageDetail.vue | 8 +- src/views/system/oauth2/client/ClientForm.vue | 33 +++--- .../system/operatelog/OperateLogDetail.vue | 14 +-- src/views/system/post/PostForm.vue | 12 +- src/views/system/role/RoleAssignMenuForm.vue | 21 ++-- .../system/role/RoleDataPermissionForm.vue | 29 ++--- src/views/system/role/RoleForm.vue | 13 ++- src/views/system/role/index.vue | 101 ++++++++-------- .../sensitiveWord/SensitiveWordForm.vue | 13 ++- .../sensitiveWord/SensitiveWordTestForm.vue | 15 +-- src/views/system/sensitiveWord/index.vue | 90 ++++++++------- .../system/sms/channel/SmsChannelForm.vue | 11 +- src/views/system/sms/log/SmsLogDetail.vue | 6 +- .../system/sms/template/SmsTemplateForm.vue | 15 +-- .../sms/template/SmsTemplateSendForm.vue | 11 +- src/views/system/tenant/TenantForm.vue | 20 ++-- .../tenantPackage/TenantPackageForm.vue | 19 +-- src/views/system/user/DeptTree.vue | 10 +- src/views/system/user/UserAssignRoleForm.vue | 9 +- src/views/system/user/UserForm.vue | 19 +-- src/views/system/user/UserImportForm.vue | 28 ++--- 133 files changed, 1126 insertions(+), 993 deletions(-) diff --git a/src/App.vue b/src/App.vue index a7867a1c8..75edd24f3 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,4 +1,4 @@ - - 格式支持 mp3/wma/wav/amr,文件大小不超过 2M,播放长度不超过 60s - - + @@ -71,7 +71,6 @@ > - @@ -85,21 +84,18 @@ - - - From ae74af59fc2db7c7340d911cbe1a5d818ddb3a7e Mon Sep 17 00:00:00 2001 From: dhb52 Date: Sat, 15 Apr 2023 16:54:36 +0800 Subject: [PATCH 14/60] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mp/material/components/UploadFile.vue | 5 +++-- src/views/mp/material/components/UploadVideo.vue | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/views/mp/material/components/UploadFile.vue b/src/views/mp/material/components/UploadFile.vue index 3ab62224c..93e6dd410 100644 --- a/src/views/mp/material/components/UploadFile.vue +++ b/src/views/mp/material/components/UploadFile.vue @@ -7,6 +7,7 @@ :file-list="fileList" :data="uploadData" :on-progress="() => (uploading = true)" + :on-error="(err: Error) => message.error(`上传失败: ${err.message}`)" :before-upload="beforeUpload" :on-success="handleUploadSuccess" > @@ -33,7 +34,7 @@ import { const message = useMessage() -const props = defineProps<{ type: boolean }>() +const props = defineProps<{ type: MaterialType }>() const fileList = ref([]) const emit = defineEmits<{ @@ -47,7 +48,7 @@ const uploadData: UploadData = reactive({ }) const uploading = ref(false) -const beforeUpload = props.type == MaterialType.Image ? beforeImageUpload : beforeVoiceUpload +const beforeUpload = props.type === MaterialType.Image ? beforeImageUpload : beforeVoiceUpload const handleUploadSuccess: UploadProps['onSuccess'] = (res: any) => { if (res.code !== 0) { diff --git a/src/views/mp/material/components/UploadVideo.vue b/src/views/mp/material/components/UploadVideo.vue index 816711d17..1221273b0 100644 --- a/src/views/mp/material/components/UploadVideo.vue +++ b/src/views/mp/material/components/UploadVideo.vue @@ -9,6 +9,7 @@ :data="uploadData" :before-upload="beforeVideoUpload" :on-progress="() => (uploading = true)" + :on-error="(err: Error) => message.error(`上传失败: ${err.message}`)" :on-success="handleUploadSuccess" ref="uploadVideoRef" :auto-upload="false" From e3660e0b20f4515e1c524b079cfc8f6937e288ef Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 15 Apr 2023 17:07:41 +0800 Subject: [PATCH 15/60] =?UTF-8?q?REVIEW=20=E7=AB=99=E5=86=85=E4=BF=A1?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E7=9A=84=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/notify/template/index.ts | 23 ++-- .../notify/template/NotifyTemplateForm.vue | 13 +- .../template/NotifyTemplateSendForm.vue | 127 ++++++++++++++++++ src/views/system/notify/template/index.vue | 117 ++-------------- 4 files changed, 152 insertions(+), 128 deletions(-) create mode 100644 src/views/system/notify/template/NotifyTemplateSendForm.vue diff --git a/src/api/system/notify/template/index.ts b/src/api/system/notify/template/index.ts index f2bf5d27e..50196e85d 100644 --- a/src/api/system/notify/template/index.ts +++ b/src/api/system/notify/template/index.ts @@ -1,24 +1,17 @@ import request from '@/config/axios' export interface NotifyTemplateVO { - id: number | null + id?: number name: string nickname: string code: string content: string - type: number | null + type: number params: string - status: number | null + status: number remark: string } -export interface NotifyTemplatePageReqVO extends PageParam { - name?: string - code?: string - status?: number - createTime?: Date[] -} - export interface NotifySendReqVO { userId: number | null templateCode: string @@ -26,22 +19,22 @@ export interface NotifySendReqVO { } // 查询站内信模板列表 -export const getNotifyTemplatePageApi = async (params: NotifyTemplatePageReqVO) => { +export const getNotifyTemplatePage = async (params: PageParam) => { return await request.get({ url: '/system/notify-template/page', params }) } // 查询站内信模板详情 -export const getNotifyTemplateApi = async (id: number) => { +export const getNotifyTemplate = async (id: number) => { return await request.get({ url: '/system/notify-template/get?id=' + id }) } // 新增站内信模板 -export const createNotifyTemplateApi = async (data: NotifyTemplateVO) => { +export const createNotifyTemplate = async (data: NotifyTemplateVO) => { return await request.post({ url: '/system/notify-template/create', data }) } // 修改站内信模板 -export const updateNotifyTemplateApi = async (data: NotifyTemplateVO) => { +export const updateNotifyTemplate = async (data: NotifyTemplateVO) => { return await request.put({ url: '/system/notify-template/update', data }) } @@ -51,6 +44,6 @@ export const deleteNotifyTemplateApi = async (id: number) => { } // 发送站内信 -export const sendNotifyApi = (data: NotifySendReqVO) => { +export const sendNotify = (data: NotifySendReqVO) => { return request.post({ url: '/system/notify-template/send-notify', data }) } diff --git a/src/views/system/notify/template/NotifyTemplateForm.vue b/src/views/system/notify/template/NotifyTemplateForm.vue index d600a59c3..55e51ebdf 100644 --- a/src/views/system/notify/template/NotifyTemplateForm.vue +++ b/src/views/system/notify/template/NotifyTemplateForm.vue @@ -25,7 +25,7 @@ v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE)" :key="dict.value" :label="dict.label" - :value="parseInt(dict.value)" + :value="dict.value" /> @@ -34,7 +34,7 @@ {{ dict.label }} @@ -81,6 +81,7 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref +/** 打开弹窗 */ const open = async (type: string, id?: number) => { dialogVisible.value = true dialogTitle.value = type @@ -90,7 +91,7 @@ const open = async (type: string, id?: number) => { if (id) { formLoading.value = true try { - formData.value = await NotifyTemplateApi.getNotifyTemplateApi(id) + formData.value = await NotifyTemplateApi.getNotifyTemplate(id) } finally { formLoading.value = false } @@ -107,12 +108,12 @@ const submitForm = async () => { if (!valid) return formLoading.value = true try { - const data = formData.value as NotifyTemplateApi.NotifyTemplateVO + const data = formData.value as unknown as NotifyTemplateApi.NotifyTemplateVO if (formType.value === 'create') { - await NotifyTemplateApi.createNotifyTemplateApi(data) + await NotifyTemplateApi.createNotifyTemplate(data) message.success('新增成功') } else { - await NotifyTemplateApi.updateNotifyTemplateApi(data) + await NotifyTemplateApi.updateNotifyTemplate(data) message.success('修改成功') } dialogVisible.value = false diff --git a/src/views/system/notify/template/NotifyTemplateSendForm.vue b/src/views/system/notify/template/NotifyTemplateSendForm.vue new file mode 100644 index 000000000..9e292a8d8 --- /dev/null +++ b/src/views/system/notify/template/NotifyTemplateSendForm.vue @@ -0,0 +1,127 @@ + + diff --git a/src/views/system/notify/template/index.vue b/src/views/system/notify/template/index.vue index 9d37befb0..6d1938add 100644 --- a/src/views/system/notify/template/index.vue +++ b/src/views/system/notify/template/index.vue @@ -1,8 +1,8 @@ @@ -231,12 +231,8 @@ const sendMsg = async () => { list.value = [...list.value, ...[data]] scrollToBottom() - //ts检查的時候会判断这个组件可能是空的,所以需要进行断言。 - //避免 tab 的数据未清理 - const deleteObj = replySelectRef.value?.deleteObj - if (deleteObj) { - deleteObj() - } + // 发送后清空数据 + replySelectRef.value?.clear() } const loadingMore = () => { @@ -333,6 +329,7 @@ const scrollToBottom = () => { .send-but { float: right; - margin-top: 8px !important; + margin-top: 8px; + margin-bottom: 8px; } diff --git a/src/views/mp/components/wx-reply/components/TabImage.vue b/src/views/mp/components/wx-reply/components/TabImage.vue new file mode 100644 index 000000000..827ef11c2 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabImage.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/TabMusic.vue b/src/views/mp/components/wx-reply/components/TabMusic.vue new file mode 100644 index 000000000..5a50cbf07 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabMusic.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/TabNews.vue b/src/views/mp/components/wx-reply/components/TabNews.vue new file mode 100644 index 000000000..13ae95706 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabNews.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/TabText.vue b/src/views/mp/components/wx-reply/components/TabText.vue new file mode 100644 index 000000000..f6981a730 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabText.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/TabVideo.vue b/src/views/mp/components/wx-reply/components/TabVideo.vue new file mode 100644 index 000000000..c924bc2a9 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabVideo.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/TabVoice.vue b/src/views/mp/components/wx-reply/components/TabVoice.vue new file mode 100644 index 000000000..7bcefced7 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/TabVoice.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/views/mp/components/wx-reply/components/types.ts b/src/views/mp/components/wx-reply/components/types.ts new file mode 100644 index 000000000..d52733340 --- /dev/null +++ b/src/views/mp/components/wx-reply/components/types.ts @@ -0,0 +1,25 @@ +type ReplyType = '' | 'news' | 'image' | 'voice' | 'video' | 'music' | 'text' + +interface ObjData { + accountId: number + type: ReplyType + name: string | null + content: string | null + mediaId: string | null + url: string | null + title: string | null + description: string | null + thumbMediaId: string | null + thumbMediaUrl: string | null + musicUrl: string | null + hqMusicUrl: string | null + introduction: string | null + articles: any[] +} + +enum NewsType { + Published = '1', + Draft = '2' +} + +export { ObjData, NewsType } diff --git a/src/views/mp/components/wx-reply/main.vue b/src/views/mp/components/wx-reply/main.vue index 8e8b3eee5..da523b6cb 100644 --- a/src/views/mp/components/wx-reply/main.vue +++ b/src/views/mp/components/wx-reply/main.vue @@ -8,519 +8,63 @@ ④ 支持发送【视频】消息时,支持新建视频 --> - diff --git a/src/views/mp/autoReply/components/types.ts b/src/views/mp/autoReply/components/types.ts index d4d79ca47..0d78fd85f 100644 --- a/src/views/mp/autoReply/components/types.ts +++ b/src/views/mp/autoReply/components/types.ts @@ -1,5 +1,5 @@ // 消息类型(Follow: 关注时回复;Message: 消息回复;Keyword: 关键词回复) -// 作为tab.name,enum的数字不能随意修改,与api参数相关 +// 作为 tab.name,enum 的数字不能随意修改,与 api 参数相关 export enum MsgType { Follow = 1, Message = 2, @@ -31,6 +31,7 @@ export interface ReplyForm { responseHqMusicUrl?: string } +// TODO @Dhb52:ObjData 这个类名可以在看看,ObjData 有点通用 export interface ObjData { type: ReplyType accountId?: number diff --git a/src/views/mp/autoReply/index.vue b/src/views/mp/autoReply/index.vue index a28d23d5d..2d9b492d3 100644 --- a/src/views/mp/autoReply/index.vue +++ b/src/views/mp/autoReply/index.vue @@ -49,11 +49,12 @@ :loading="loading" :list="list" :msg-type="msgType" - @on-update="(id) => onUpdate(id)" - @on-delete="(id) => onDelete(id)" + @on-update="onUpdate" + @on-delete="onDelete" /> + @@ -70,7 +71,7 @@ (MsgType.Keyword) -// 允许选择的请求消息类型 -const RequestMessageTypes = ['text', 'image', 'voice', 'video', 'shortvideo', 'location', 'link'] -// 遮罩层 -const loading = ref(true) -// 总条数 -const total = ref(0) -// 自动回复列表 -const list = ref([]) - +const msgType = ref(MsgType.Keyword) // 消息类型 +const RequestMessageTypes = ['text', 'image', 'voice', 'video', 'shortvideo', 'location', 'link'] // 允许选择的请求消息类型 +const loading = ref(true) // 遮罩层 +const total = ref(0) // 总条数 +const list = ref([]) // 自动回复列表 +const formRef = ref() // 表单 ref // 查询参数 interface QueryParams { pageNo: number @@ -127,13 +121,9 @@ const queryParams: QueryParams = reactive({ accountId: undefined }) -// 弹出层标题 -const dialogTitle = ref('') -// 是否显示弹出层 -const showFormDialog = ref(false) -// 表单参数 - -const replyForm = ref({}) +const dialogTitle = ref('') // 弹出层标题 +const showFormDialog = ref(false) // 是否显示弹出层 +const replyForm = ref({}) // 表单参数 // 回复消息 const objData = ref({ type: 'text', From 7997614a3ce423a5f8618ff726ea35e8cc83695e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 19 Apr 2023 19:16:14 +0800 Subject: [PATCH 38/60] =?UTF-8?q?REVIEW=20=E5=85=AC=E4=BC=97=E5=8F=B7?= =?UTF-8?q?=E7=9A=84=E6=B6=88=E6=81=AF=E5=9B=9E=E5=A4=8D=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mp/components/wx-reply/components/TabImage.vue | 1 - src/views/mp/components/wx-reply/components/TabMusic.vue | 2 -- src/views/mp/components/wx-reply/components/TabNews.vue | 2 +- src/views/mp/components/wx-reply/components/TabText.vue | 2 -- src/views/mp/components/wx-reply/components/TabVoice.vue | 2 -- src/views/mp/components/wx-reply/main.vue | 1 + 6 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/views/mp/components/wx-reply/components/TabImage.vue b/src/views/mp/components/wx-reply/components/TabImage.vue index 827ef11c2..eecc24cbf 100644 --- a/src/views/mp/components/wx-reply/components/TabImage.vue +++ b/src/views/mp/components/wx-reply/components/TabImage.vue @@ -60,7 +60,6 @@ import { MaterialType, useBeforeUpload } from '@/views/mp/hooks/useUpload' import type { UploadRawFile } from 'element-plus' import { getAccessToken } from '@/utils/auth' import { ObjData } from './types' - const message = useMessage() const UPLOAD_URL = import.meta.env.VITE_API_BASEPATH + '/admin-api/mp/material/upload-temporary' diff --git a/src/views/mp/components/wx-reply/components/TabMusic.vue b/src/views/mp/components/wx-reply/components/TabMusic.vue index 5a50cbf07..2c3b04e53 100644 --- a/src/views/mp/components/wx-reply/components/TabMusic.vue +++ b/src/views/mp/components/wx-reply/components/TabMusic.vue @@ -117,5 +117,3 @@ const selectMaterial = (item: any) => { objData.value.thumbMediaUrl = item.url } - - diff --git a/src/views/mp/components/wx-reply/components/TabNews.vue b/src/views/mp/components/wx-reply/components/TabNews.vue index 13ae95706..bb9272e7f 100644 --- a/src/views/mp/components/wx-reply/components/TabNews.vue +++ b/src/views/mp/components/wx-reply/components/TabNews.vue @@ -18,7 +18,7 @@ {{ newsType === NewsType.Published ? '选择已发布图文' : '选择草稿箱图文' }} - + diff --git a/src/views/mp/components/wx-reply/components/TabText.vue b/src/views/mp/components/wx-reply/components/TabText.vue index f6981a730..bd7b01871 100644 --- a/src/views/mp/components/wx-reply/components/TabText.vue +++ b/src/views/mp/components/wx-reply/components/TabText.vue @@ -25,5 +25,3 @@ const content = computed({ } }) - - diff --git a/src/views/mp/components/wx-reply/components/TabVoice.vue b/src/views/mp/components/wx-reply/components/TabVoice.vue index 7bcefced7..6d40a0527 100644 --- a/src/views/mp/components/wx-reply/components/TabVoice.vue +++ b/src/views/mp/components/wx-reply/components/TabVoice.vue @@ -51,7 +51,6 @@ - diff --git a/src/views/mp/components/wx-location/main.vue b/src/views/mp/components/wx-location/main.vue index 17598136f..7f1333ee6 100644 --- a/src/views/mp/components/wx-location/main.vue +++ b/src/views/mp/components/wx-location/main.vue @@ -1,5 +1,5 @@ diff --git a/src/views/mp/components/wx-reply/components/TabMusic.vue b/src/views/mp/components/wx-reply/components/TabMusic.vue index 2c3b04e53..b19fb592d 100644 --- a/src/views/mp/components/wx-reply/components/TabMusic.vue +++ b/src/views/mp/components/wx-reply/components/TabMusic.vue @@ -1,14 +1,11 @@ diff --git a/src/views/mp/components/wx-reply/components/TabNews.vue b/src/views/mp/components/wx-reply/components/TabNews.vue index bb9272e7f..88a82a538 100644 --- a/src/views/mp/components/wx-reply/components/TabNews.vue +++ b/src/views/mp/components/wx-reply/components/TabNews.vue @@ -1,11 +1,8 @@ diff --git a/src/views/mp/components/wx-reply/components/TabText.vue b/src/views/mp/components/wx-reply/components/TabText.vue index bd7b01871..aac698e83 100644 --- a/src/views/mp/components/wx-reply/components/TabText.vue +++ b/src/views/mp/components/wx-reply/components/TabText.vue @@ -1,15 +1,10 @@ diff --git a/src/views/mp/components/wx-reply/components/TabVoice.vue b/src/views/mp/components/wx-reply/components/TabVoice.vue index 6d40a0527..c4868cf8d 100644 --- a/src/views/mp/components/wx-reply/components/TabVoice.vue +++ b/src/views/mp/components/wx-reply/components/TabVoice.vue @@ -1,12 +1,9 @@ diff --git a/src/views/mp/components/wx-reply/components/types.ts b/src/views/mp/components/wx-reply/components/types.ts index d52733340..3e07d6e55 100644 --- a/src/views/mp/components/wx-reply/components/types.ts +++ b/src/views/mp/components/wx-reply/components/types.ts @@ -1,25 +1,54 @@ -type ReplyType = '' | 'news' | 'image' | 'voice' | 'video' | 'music' | 'text' +enum ReplyType { + News = 'news', + Image = 'image', + Voice = 'voice', + Video = 'video', + Music = 'music', + Text = 'text' +} -interface ObjData { +interface _Reply { accountId: number type: ReplyType - name: string | null - content: string | null - mediaId: string | null - url: string | null - title: string | null - description: string | null - thumbMediaId: string | null - thumbMediaUrl: string | null - musicUrl: string | null - hqMusicUrl: string | null - introduction: string | null - articles: any[] + name?: string | null + content?: string | null + mediaId?: string | null + url?: string | null + title?: string | null + description?: string | null + thumbMediaId?: string | null + thumbMediaUrl?: string | null + musicUrl?: string | null + hqMusicUrl?: string | null + introduction?: string | null + articles?: any[] } +type Reply = _Reply //Partial<_Reply> + enum NewsType { Published = '1', Draft = '2' } -export { ObjData, NewsType } +/** 利用旧的reply[accountId, type]初始化新的Reply */ +const createEmptyReply = (old: Reply | Ref): Reply => { + return { + accountId: unref(old).accountId, + type: unref(old).type, + name: null, + content: null, + mediaId: null, + url: null, + title: null, + description: null, + thumbMediaId: null, + thumbMediaUrl: null, + musicUrl: null, + hqMusicUrl: null, + introduction: null, + articles: [] + } +} + +export { Reply, NewsType, ReplyType, createEmptyReply } diff --git a/src/views/mp/components/wx-reply/index.ts b/src/views/mp/components/wx-reply/index.ts new file mode 100644 index 000000000..d1da217e5 --- /dev/null +++ b/src/views/mp/components/wx-reply/index.ts @@ -0,0 +1,7 @@ +import { Reply, NewsType, ReplyType, createEmptyReply } from './components/types' + +import WxReplySelect from './main.vue' + +export type { Reply } +export { createEmptyReply, NewsType, ReplyType } +export default WxReplySelect diff --git a/src/views/mp/components/wx-reply/main.vue b/src/views/mp/components/wx-reply/main.vue index b00e43458..32a312225 100644 --- a/src/views/mp/components/wx-reply/main.vue +++ b/src/views/mp/components/wx-reply/main.vue @@ -8,24 +8,59 @@ ④ 支持发送【视频】消息时,支持新建视频 --> diff --git a/src/views/mp/components/wx-msg/card.scss b/src/views/mp/components/wx-msg/card.scss index 67ac92191..7fbbe802c 100644 --- a/src/views/mp/components/wx-msg/card.scss +++ b/src/views/mp/components/wx-msg/card.scss @@ -1,25 +1,27 @@ -.avue-card{ - &__item{ +.avue-card { + &__item { margin-bottom: 16px; border: 1px solid #e8e8e8; background-color: #fff; box-sizing: border-box; - color: rgba(0,0,0,.65); + color: rgba(0, 0, 0, 0.65); font-size: 14px; font-variant: tabular-nums; line-height: 1.5; list-style: none; - font-feature-settings: "tnum"; + font-feature-settings: 'tnum'; cursor: pointer; - height:200px; - &:hover{ - border-color: rgba(0,0,0,.09); - box-shadow: 0 2px 8px rgba(0,0,0,.09); + height: 200px; + + &:hover { + border-color: rgba(0, 0, 0, 0.09); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.09); } - &--add{ - border:1px dashed #000; + + &--add { + border: 1px dashed #000; width: 100%; - color: rgba(0,0,0,.45); + color: rgba(0, 0, 0, 0.45); background-color: #fff; border-color: #d9d9d9; border-radius: 2px; @@ -27,74 +29,87 @@ align-items: center; justify-content: center; font-size: 16px; - i{ + + i { margin-right: 10px; } - &:hover{ + + &:hover { color: #40a9ff; background-color: #fff; border-color: #40a9ff; } } } - &__body{ + + &__body { display: flex; padding: 24px; } - &__detail{ - flex:1 + + &__detail { + flex: 1; } - &__avatar{ + + &__avatar { width: 48px; height: 48px; border-radius: 48px; overflow: hidden; margin-right: 12px; - img{ + + img { width: 100%; height: 100%; } } - &__title{ - color: rgba(0,0,0,.85); + + &__title { + color: rgba(0, 0, 0, 0.85); margin-bottom: 12px; font-size: 16px; - &:hover{ - color:#1890ff; + + &:hover { + color: #1890ff; } } - &__info{ - color: rgba(0,0,0,.45); + + &__info { + color: rgba(0, 0, 0, 0.45); display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden; height: 64px; } - &__menu{ + + &__menu { display: flex; - justify-content:space-around; + justify-content: space-around; height: 50px; background: #f7f9fa; - color: rgba(0,0,0,.45); + color: rgba(0, 0, 0, 0.45); text-align: center; line-height: 50px; - &:hover{ - color:#1890ff; + + &:hover { + color: #1890ff; } } } /** joolun 额外加的 */ .avue-comment__main { - flex: unset!important; - border-radius: 5px!important; - margin: 0 8px!important; + flex: unset !important; + border-radius: 5px !important; + margin: 0 8px !important; } + .avue-comment__header { border-top-left-radius: 5px; border-top-right-radius: 5px; } + .avue-comment__body { border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; diff --git a/src/views/mp/components/wx-msg/comment.scss b/src/views/mp/components/wx-msg/comment.scss index 3f1341b20..aaeaccafe 100644 --- a/src/views/mp/components/wx-msg/comment.scss +++ b/src/views/mp/components/wx-msg/comment.scss @@ -1,27 +1,33 @@ /* 来自 https://github.com/nmxiaowei/avue/blob/master/styles/src/element-ui/comment.scss */ -.avue-comment{ +.avue-comment { margin-bottom: 30px; display: flex; align-items: flex-start; - &--reverse{ - flex-direction:row-reverse; - .avue-comment__main{ - &:before,&:after{ + + &--reverse { + flex-direction: row-reverse; + + .avue-comment__main { + &:before, + &:after { left: auto; right: -8px; border-width: 8px 0 8px 8px; } - &:before{ + + &:before { border-left-color: #dedede; } - &:after{ + + &:after { border-left-color: #f8f8f8; margin-right: 1px; margin-left: auto; } } } - &__avatar{ + + &__avatar { width: 48px; height: 48px; border-radius: 50%; @@ -29,7 +35,8 @@ box-sizing: border-box; vertical-align: middle; } - &__header{ + + &__header { padding: 5px 15px; background: #f8f8f8; border-bottom: 1px solid #eee; @@ -37,18 +44,22 @@ align-items: center; justify-content: space-between; } - &__author{ + + &__author { font-weight: 700; font-size: 14px; color: #999; } - &__main{ - flex:1; + + &__main { + flex: 1; margin: 0 20px; position: relative; border: 1px solid #dedede; border-radius: 2px; - &:before,&:after{ + + &:before, + &:after { position: absolute; top: 10px; left: -8px; @@ -56,32 +67,39 @@ width: 0; height: 0; display: block; - content: " "; + content: ' '; border-color: transparent; border-style: solid solid outset; border-width: 8px 8px 8px 0; pointer-events: none; } + &:before { border-right-color: #dedede; z-index: 1; } - &:after{ + + &:after { border-right-color: #f8f8f8; margin-left: 1px; z-index: 2; } } - &__body{ + + &__body { padding: 15px; overflow: hidden; background: #fff; - font-family: Segoe UI,Lucida Grande,Helvetica,Arial,Microsoft YaHei,FreeSans,Arimo,Droid Sans,wenquanyi micro hei,Hiragino Sans GB,Hiragino Sans GB W3,FontAwesome,sans-serif;color: #333; + font-family: Segoe UI, Lucida Grande, Helvetica, Arial, Microsoft YaHei, FreeSans, Arimo, + Droid Sans, wenquanyi micro hei, Hiragino Sans GB, Hiragino Sans GB W3, FontAwesome, + sans-serif; + color: #333; font-size: 14px; } - blockquote{ - margin:0; - font-family: Georgia,Times New Roman,Times,Kai,Kaiti SC,KaiTi,BiauKai,FontAwesome,serif; + + blockquote { + margin: 0; + font-family: Georgia, Times New Roman, Times, Kai, Kaiti SC, KaiTi, BiauKai, FontAwesome, serif; padding: 1px 0 1px 15px; border-left: 4px solid #ddd; } diff --git a/src/views/mp/components/wx-music/main.vue b/src/views/mp/components/wx-music/main.vue index 52555f15f..70f4c58b4 100644 --- a/src/views/mp/components/wx-music/main.vue +++ b/src/views/mp/components/wx-music/main.vue @@ -56,5 +56,5 @@ defineExpose({ diff --git a/src/views/mp/components/wx-reply/components/TabImage.vue b/src/views/mp/components/wx-reply/components/TabImage.vue index 1a82c3aa7..71950e04f 100644 --- a/src/views/mp/components/wx-reply/components/TabImage.vue +++ b/src/views/mp/components/wx-reply/components/TabImage.vue @@ -123,7 +123,7 @@ const selectMaterial = (item) => { .select-item { width: 280px; padding: 10px; - margin: 0 auto 10px auto; + margin: 0 auto 10px; border: 1px solid #eaeaea; .material-img { @@ -131,11 +131,11 @@ const selectMaterial = (item) => { } .item-name { - font-size: 12px; overflow: hidden; + font-size: 12px; + text-align: center; text-overflow: ellipsis; white-space: nowrap; - text-align: center; .item-infos { width: 30%; @@ -149,18 +149,18 @@ const selectMaterial = (item) => { } .col-select { - border: 1px solid rgb(234, 234, 234); - padding: 50px 0px; - height: 160px; width: 49.5%; + height: 160px; + padding: 50px 0; + border: 1px solid rgb(234 234 234); } .col-add { - border: 1px solid rgb(234, 234, 234); - padding: 50px 0px; - height: 160px; - width: 49.5%; float: right; + width: 49.5%; + height: 160px; + padding: 50px 0; + border: 1px solid rgb(234 234 234); .el-upload__tip { line-height: 18px; diff --git a/src/views/mp/components/wx-reply/components/TabNews.vue b/src/views/mp/components/wx-reply/components/TabNews.vue index 88a82a538..ecb5026de 100644 --- a/src/views/mp/components/wx-reply/components/TabNews.vue +++ b/src/views/mp/components/wx-reply/components/TabNews.vue @@ -65,7 +65,7 @@ const onDelete = () => { .select-item { width: 280px; padding: 10px; - margin: 0 auto 10px auto; + margin: 0 auto 10px; border: 1px solid #eaeaea; .ope-row { diff --git a/src/views/mp/components/wx-reply/components/TabVoice.vue b/src/views/mp/components/wx-reply/components/TabVoice.vue index c4868cf8d..5c9f64a72 100644 --- a/src/views/mp/components/wx-reply/components/TabVoice.vue +++ b/src/views/mp/components/wx-reply/components/TabVoice.vue @@ -120,15 +120,15 @@ const selectMaterial = (item: Reply) => { diff --git a/src/views/mp/freePublish/index.vue b/src/views/mp/freePublish/index.vue index 2fda51000..08a202c2a 100644 --- a/src/views/mp/freePublish/index.vue +++ b/src/views/mp/freePublish/index.vue @@ -102,19 +102,45 @@ const handleDelete = async (item: any) => { } diff --git a/src/views/mp/menu/index.vue b/src/views/mp/menu/index.vue index c8ed08358..442e33b5e 100644 --- a/src/views/mp/menu/index.vue +++ b/src/views/mp/menu/index.vue @@ -367,7 +367,6 @@ div { margin-left: 20px; background-color: #e8e7e7; box-sizing: border-box; - box-sizing: border-box; } } From d99f9e98fbfccba07f0582d2fa6eb4266c7da791 Mon Sep 17 00:00:00 2001 From: dhb52 Date: Fri, 21 Apr 2023 23:35:31 +0800 Subject: [PATCH 48/60] =?UTF-8?q?feat:=20mp/menu=20=E6=8B=96=E5=8A=A8?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/menu/components/MenuPreviewer.vue | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/views/mp/menu/components/MenuPreviewer.vue b/src/views/mp/menu/components/MenuPreviewer.vue index aca1c2aec..637c88059 100644 --- a/src/views/mp/menu/components/MenuPreviewer.vue +++ b/src/views/mp/menu/components/MenuPreviewer.vue @@ -4,6 +4,9 @@