diff --git a/docker/nginx.conf b/docker/nginx.conf index d23fe4e..79fa503 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -23,6 +23,14 @@ server { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } + # 后端跨域请求 + location ~/peiqi/ { + proxy_pass http://172.17.0.1:8000; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } error_page 404 404.html; diff --git a/src/api/v1/files.ts b/src/api/v1/files.ts index b3c8c0f..309e70e 100644 --- a/src/api/v1/files.ts +++ b/src/api/v1/files.ts @@ -29,11 +29,6 @@ export const downloadFilesByFileId = (data: any) => { }); }; -/** 系统文件管理---获取所有文件类型 */ -export const getMediaTypeList = () => { - return http.request>('get', `files/private/getMediaTypeList`); -}; - /** 系统文件管理---获取所有文件存储基础路径 */ export const getFilesStoragePath = () => { return http.request>('get', `files/private/getAllFilesStoragePath`); diff --git a/src/api/v1/system/system.ts b/src/api/v1/system/system.ts index f4b5808..78c8120 100644 --- a/src/api/v1/system/system.ts +++ b/src/api/v1/system/system.ts @@ -10,3 +10,8 @@ export const fetchRouterAsync = () => { export const uploadFile = (data: any) => { return http.request>('post', '/files/private/upload', { data }, { headers: { 'Content-Type': 'multipart/form-data' } }); }; + +/** 上传文件 */ +export const uploadImage = (data: any) => { + return http.request>('post', '/files/private/uploadImage', { data }, { headers: { 'Content-Type': 'multipart/form-data' } }); +}; diff --git a/src/components/Upload/UploadDialogImage.vue b/src/components/Upload/UploadDialogImage.vue index 98d9d35..5ed61c8 100644 --- a/src/components/Upload/UploadDialogImage.vue +++ b/src/components/Upload/UploadDialogImage.vue @@ -17,7 +17,7 @@ import { Plus } from '@element-plus/icons-vue'; import { ElMessage, UploadRawFile, UploadRequestOptions } from 'element-plus'; import { onMounted, ref } from 'vue'; import { SystemEnum } from '@/enums/upload'; -import { uploadFile } from '@/api/v1/system/system'; +import { uploadImage } from '@/api/v1/system/system'; import ImageLoading from '@/components/Upload/ImageLoading.vue'; const props = defineProps({ @@ -28,10 +28,7 @@ const emits = defineEmits(['uploadCallback']); const imageSrc = ref(''); -/** - * * 上传时 - * @param options - */ +/* 上传图片 */ const onUpload = async (options: UploadRequestOptions) => { // 整理参数 const file = options.file; @@ -39,14 +36,12 @@ const onUpload = async (options: UploadRequestOptions) => { const data = { file, type }; // 上传文件并返回文件地址 - const result: any = await uploadFile(data); - imageSrc.value = result.data.url; + const result: any = await uploadImage(data); + imageSrc.value = result.data.thUrl; emits('uploadCallback', result); }; -/** - * * 删除图片 - */ +/* 删除图片 */ const onRemoveImage = () => { // 清除图片地址和文件信息 imageSrc.value = ''; @@ -63,9 +58,7 @@ const onRemoveImage = () => { emits('uploadCallback', data); }; -/** - * * 上传之前 - */ +/* 上传之前 */ const beforeUpload = (file: UploadRawFile) => { if (file.size > SystemEnum.IMAGE_SIZE) { ElMessage.error(SystemEnum.IMAGE_MESSAGE); @@ -73,9 +66,7 @@ const beforeUpload = (file: UploadRawFile) => { } }; -/** - * * 初始化图片地址 - */ +/* 初始化图片地址 */ const handleInitiateImageSrc = () => { const value = props.imageUrl; if (value) imageSrc.value = value; @@ -85,17 +76,3 @@ onMounted(() => { handleInitiateImageSrc(); }); - - diff --git a/src/store/system/files.ts b/src/store/system/files.ts index 747930e..c3ec793 100644 --- a/src/store/system/files.ts +++ b/src/store/system/files.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { deleteFiles, fetchAddFiles, getFilesPage, getFilesStoragePath, getMediaTypeList, updateFiles } from '@/api/v1/files'; +import { deleteFiles, fetchAddFiles, getFilesPage, getFilesStoragePath, updateFiles } from '@/api/v1/files'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; @@ -12,8 +12,6 @@ export const useFilesStore = defineStore('filesStore', { return { // 系统文件表列表 datalist: [], - // 所有文件类型 - allMediaTypes: [], // 所有文件存储路径 allFilesStoragePath: [], // 查询表单 @@ -23,7 +21,11 @@ export const useFilesStore = defineStore('filesStore', { // 文件在服务器上的存储路径 filepath: undefined, // 文件的MIME类型 - fileType: undefined, + contentType: undefined, + // 扩展名 + ext: undefined, + // 存储平台 + platform: undefined, // 下载数量 downloadCount: undefined, }, @@ -46,7 +48,6 @@ export const useFilesStore = defineStore('filesStore', { const data = { ...this.pagination, ...this.form }; delete data.pageSizes; delete data.total; - delete data.background; // 获取系统文件表列表 const result = await getFilesPage(data); @@ -74,14 +75,6 @@ export const useFilesStore = defineStore('filesStore', { return storeMessage(result); }, - /** 获取所有文件类型 */ - async loadMediaTypeList() { - const result = await getMediaTypeList(); - if (result.code === 200) { - this.allMediaTypes = result.data; - } - }, - /** 获取所有文件类型 */ async loadFilesStoragePath() { const result = await getFilesStoragePath(); diff --git a/src/store/system/user.ts b/src/store/system/user.ts index 909973b..34e8160 100644 --- a/src/store/system/user.ts +++ b/src/store/system/user.ts @@ -22,6 +22,17 @@ export const useUserStore = defineStore('system-user', { isRemembered: true, // 登录页的免登录存储几天,默认7天 readMeDay: 7, + // 用户修改信息列表 + userinfoForm: { + avatar: '', + username: '', + nickname: '', + email: '', + phone: '', + summary: '', + password: '', + sex: '', + }, }), actions: { /** 登入 */ diff --git a/src/store/types.ts b/src/store/types.ts index 2107833..1a6636b 100644 --- a/src/store/types.ts +++ b/src/store/types.ts @@ -44,4 +44,14 @@ export type userType = { permissions?: Array; isRemembered?: boolean; readMeDay?: number; + userinfoForm?: { + avatar: string; + username: string; + nickname: string; + email: string; + phone: string; + summary: string; + password: string; + sex: string; + }; }; diff --git a/src/views/account-settings/components/profile.vue b/src/views/account-settings/components/profile.vue index 325b735..5342baa 100644 --- a/src/views/account-settings/components/profile.vue +++ b/src/views/account-settings/components/profile.vue @@ -4,14 +4,19 @@ import { sexConstant } from '@/enums/baseConstant'; import { $t } from '@/plugins/i18n'; import { useAdminUserStore } from '@/store/system/adminUser'; import { message } from '@/utils/message'; -import { cropperBlob, handleSubmitImage, isShow, onSearchByUserinfo, rules, uploadAvatarSrc, userInfos } from '@/views/account-settings/utils'; +import { rules } from '@/views/account-settings/utils/columns'; import uploadLine from '~icons/ri/upload-line'; -import { deviceDetection } from '@pureadmin/utils'; +import { createFormData, deviceDetection } from '@pureadmin/utils'; import type { FormInstance } from 'element-plus'; import { onMounted, ref } from 'vue'; +import { useUserStore } from '@/store/system/user'; +import { uploadImage } from '@/api/v1/system/system'; +import { storeToRefs } from 'pinia'; const adminUserStore = useAdminUserStore(); +const userStore = useUserStore(); +const { userinfoForm } = storeToRefs(userStore); // 用户表单Ref const userInfoFormRef = ref(); // 上传图片Ref @@ -20,6 +25,12 @@ const uploadRef = ref(); const cropRef = ref(); // 剪裁完成后头像地址,base64内容 const imgBase64Src = ref(''); +// 剪裁头像是否显示 +const isShow = ref(false); +// 剪裁完成后头像数据 +const cropperBlob = ref(); +// 上传地址路径 +const uploadAvatarSrc = ref(); /** 关闭弹窗 */ const handleClose = () => { @@ -41,16 +52,50 @@ const onChange = (uploadFile: any) => { reader.readAsDataURL(uploadFile.raw); }; +/** 获取用户信息内容 */ +const onSearchByUserinfo = async () => { + const data = await userStore.loadUserinfo(); + userinfoForm.value.summary = data.personDescription; + userinfoForm.value.avatar = data.avatar; + userinfoForm.value.username = data.username; + userinfoForm.value.nickname = data.nickname; + userinfoForm.value.email = data.email; + userinfoForm.value.phone = data.phone; + userinfoForm.value.nickname = data.nickname; + userinfoForm.value.password = data.password; + userinfoForm.value.sex = data.sex; +}; + +/** 修改头像 */ +const handleSubmitImage = async () => { + // 上传头像表单 + const formData = createFormData({ + files: new File([cropperBlob.value], 'avatar'), + type: 'avatar', + }); + + // 上传头像 + const result = await uploadImage(formData); + + // 上传成功后关闭弹窗 + if (result.code === 200) { + uploadAvatarSrc.value = result.data.url; + userinfoForm.value.avatar = result.data.thUrl; + message($t('upload_success'), { type: 'success' }); + isShow.value = false; + } +}; + /** 提交表单 */ const onSubmit = async (formEl: FormInstance) => { await formEl.validate(async (valid) => { if (valid) { // 如果用户修改了头像,将上传的路径赋值进去 const avatar = uploadAvatarSrc.value; - if (avatar) userInfos.avatar = avatar; + if (avatar) userinfoForm.value.avatar = avatar; // 更新用户信息 - const result = await adminUserStore.editUserinfo(userInfos); + const result = await adminUserStore.editUserinfo(userinfoForm.value); if (!result) return; // 重新加载用户信息 @@ -71,9 +116,9 @@ onMounted(() => {

个人信息

- + - + @@ -89,27 +134,27 @@ onMounted(() => { - + - + - + - + - + @@ -117,7 +162,7 @@ onMounted(() => { import { $t } from '@/plugins/i18n'; import { useUserLoginLogStore } from '@/store/monitor/userLoginLog'; -import { columns } from '@/views/account-settings/utils'; +import { columns } from '@/views/account-settings/utils/columns'; import { PureTable } from '@pureadmin/table'; import { deviceDetection } from '@pureadmin/utils'; import { onMounted, reactive } from 'vue'; diff --git a/src/views/account-settings/index.vue b/src/views/account-settings/index.vue index b6d6816..3f89d4c 100644 --- a/src/views/account-settings/index.vue +++ b/src/views/account-settings/index.vue @@ -3,14 +3,18 @@ import Text from '@/components/ReText'; import LaySidebarTopCollapse from '@/layout/components/lay-sidebar/components/SidebarTopCollapse.vue'; import { useDataThemeChange } from '@/layout/hooks/useDataThemeChange'; import { $t } from '@/plugins/i18n'; -import { panes, userInfos } from '@/views/account-settings/utils'; +import { panes } from '@/views/account-settings/utils/columns'; import leftLine from '~icons/ri/arrow-left-s-line'; import { deviceDetection, useGlobal } from '@pureadmin/utils'; import { onBeforeMount, ref } from 'vue'; import { useRouter } from 'vue-router'; +import { useUserStore } from '@/store/system/user'; +import { storeToRefs } from 'pinia'; const router = useRouter(); const isOpen = ref(!deviceDetection()); +const userStore = useUserStore(); +const { userinfoForm } = storeToRefs(userStore); const { $storage } = useGlobal(); const witchPane = ref('profile'); @@ -36,13 +40,13 @@ onBeforeMount(() => {
- +
- {{ userInfos.nickname }} + {{ userinfoForm.nickname }} - {{ userInfos.username }} + {{ userinfoForm.username }}
diff --git a/src/views/account-settings/utils/hooks.tsx b/src/views/account-settings/utils/hooks.tsx deleted file mode 100644 index 9d1e2d4..0000000 --- a/src/views/account-settings/utils/hooks.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { useUserStore } from '@/store/system/user'; -import { reactive, ref } from 'vue'; -import { createFormData } from '@pureadmin/utils'; -import { uploadFile } from '@/api/v1/system/system'; -import { message } from '@/utils/message'; -import { $t } from '@/plugins/i18n'; - -const userStore = useUserStore(); - -// 剪裁完成后头像数据 -export const cropperBlob = ref(); -// 上传地址路径 -export const uploadAvatarSrc = ref(); - -// 剪裁头像是否显示 -export const isShow = ref(false); - -// 用户信息内容 -export const userInfos = reactive({ - avatar: '', - username: '', - nickname: '', - email: '', - phone: '', - summary: '', - password: '', - sex: '', -}); - -/** 获取用户信息内容 */ -export const onSearchByUserinfo = async () => { - const data = await userStore.loadUserinfo(); - userInfos.summary = data.personDescription; - userInfos.avatar = data.avatar; - userInfos.username = data.username; - userInfos.nickname = data.nickname; - userInfos.email = data.email; - userInfos.phone = data.phone; - userInfos.nickname = data.nickname; - userInfos.password = data.password; - userInfos.sex = data.sex; -}; - -/** 修改头像 */ -export const handleSubmitImage = async () => { - // 上传头像表单 - const formData = createFormData({ - files: new File([cropperBlob.value], 'avatar'), - type: 'avatar', - }); - - // 上传头像 - const result = await uploadFile(formData); - - // 上传成功后关闭弹窗 - if (result.code === 200) { - uploadAvatarSrc.value = result.data.filepath; - userInfos.avatar = result.data.url; - message($t('upload_success'), { type: 'success' }); - isShow.value = false; - } -}; diff --git a/src/views/account-settings/utils/index.ts b/src/views/account-settings/utils/index.ts deleted file mode 100644 index d008d53..0000000 --- a/src/views/account-settings/utils/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './hooks'; -export * from './columns'; diff --git a/src/views/configuration/email-template/utils/hooks.tsx b/src/views/configuration/email-template/utils/hooks.tsx index 290b5ae..fd6cabd 100644 --- a/src/views/configuration/email-template/utils/hooks.tsx +++ b/src/views/configuration/email-template/utils/hooks.tsx @@ -21,34 +21,22 @@ export async function onSearch() { /** 添加邮件模板表 */ export function onAdd() { const formRef = ref(); + const formInline = { + templateName: undefined, + emailUser: undefined, + subject: undefined, + isDefault: false, + body: undefined, + type: undefined, + }; addDialog({ title: `${$t('addNew')}${$t('emailTemplate')}`, - props: { - formInline: { - templateName: undefined, - emailUser: undefined, - subject: undefined, - isDefault: false, - body: undefined, - type: undefined, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => - h(EmailTemplateDialog, { - ref: formRef, - formInline: { - templateName: undefined, - emailUser: undefined, - subject: undefined, - isDefault: false, - body: undefined, - type: undefined, - }, - }), + contentRenderer: () => h(EmailTemplateDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { @@ -66,34 +54,22 @@ export function onAdd() { /* 更新邮件模板表 */ export function onUpdate(row: any) { const formRef = ref(); - + const formInline = { + templateName: row.templateName, + emailUser: row.emailUser, + subject: row.subject, + isDefault: row.isDefault, + body: row.body, + type: row.type, + }; + addDialog({ title: `${$t('modify')}${$t('emailTemplate')}`, - props: { - formInline: { - templateName: row.templateName, - emailUser: row.emailUser, - subject: row.subject, - isDefault: row.isDefault, - body: row.body, - type: row.type, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => - h(EmailTemplateDialog, { - ref: formRef, - formInline: { - templateName: row.templateName, - emailUser: row.emailUser, - subject: row.subject, - isDefault: row.isDefault, - body: row.body, - type: row.type, - }, - }), + contentRenderer: () => h(EmailTemplateDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; diff --git a/src/views/configuration/email-user/utils/hooks.tsx b/src/views/configuration/email-user/utils/hooks.tsx index 54a0212..0f2932a 100644 --- a/src/views/configuration/email-user/utils/hooks.tsx +++ b/src/views/configuration/email-user/utils/hooks.tsx @@ -22,24 +22,23 @@ export async function onSearch() { /** 添加邮箱用户发送配置 */ export function onAdd() { + const formInline = { + email: undefined, + password: undefined, + host: undefined, + port: undefined, + smtpAgreement: undefined, + openSSL: true, + isDefault: false, + }; + addDialog({ title: `${$t('addNew')}${$t('emailUsers')}`, - - props: { - formInline: { - email: undefined, - password: undefined, - host: undefined, - port: undefined, - smtpAgreement: undefined, - openSSL: true, - isDefault: false, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(EmailUsersDialog, { ref: formRef }), + contentRenderer: () => h(EmailUsersDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { @@ -56,24 +55,23 @@ export function onAdd() { /* 更新邮箱用户发送配置 */ export function onUpdate(row: any) { + const formInline = { + email: row.email, + password: row.password, + host: row.host, + port: row.port, + smtpAgreement: row.smtpAgreement, + openSSL: row.openSSL, + isDefault: row.isDefault, + }; + addDialog({ title: `${$t('modify')}${$t('emailUsers')}`, - - props: { - formInline: { - email: row.email, - password: row.password, - host: row.host, - port: row.port, - smtpAgreement: row.smtpAgreement, - openSSL: row.openSSL, - isDefault: row.isDefault, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(EmailUsersDialog, { ref: formRef }), + contentRenderer: () => h(EmailUsersDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { diff --git a/src/views/configuration/menu-icon/utils/hooks.tsx b/src/views/configuration/menu-icon/utils/hooks.tsx index 64a67c8..3379ba0 100644 --- a/src/views/configuration/menu-icon/utils/hooks.tsx +++ b/src/views/configuration/menu-icon/utils/hooks.tsx @@ -19,14 +19,15 @@ export async function onSearch() { /** 添加系统菜单图标 */ export function onAdd() { + const formInline = { iconCode: undefined, iconName: undefined }; + addDialog({ title: `${$t('addNew')} ${$t('menuIcon')}`, - - props: { formInline: { confirmText: '' } }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(MenuIconDialog, { ref: formRef }), + contentRenderer: () => h(MenuIconDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { @@ -43,19 +44,15 @@ export function onAdd() { /* 更新系统菜单图标 */ export function onUpdate(row: any) { + const formInline = { iconCode: row.iconCode, iconName: row.iconName }; + addDialog({ title: `${$t('modify')} ${$t('menuIcon')}`, - - props: { - formInline: { - iconCode: row.iconCode, - iconName: row.iconName, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(MenuIconDialog, { ref: formRef }), + contentRenderer: () => h(MenuIconDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { diff --git a/src/views/i18n/i18n-setting/utils/hooks.tsx b/src/views/i18n/i18n-setting/utils/hooks.tsx index 61cbfe9..ec85a98 100644 --- a/src/views/i18n/i18n-setting/utils/hooks.tsx +++ b/src/views/i18n/i18n-setting/utils/hooks.tsx @@ -26,14 +26,15 @@ export const downloadI18nSetting = (type: string) => { /* 上传多语言配置 */ export const updateI18nSetting = (fileType: string) => { const uploadFormRef = ref(); + const form = { type: '', file: undefined, fileType, isAppend: true }; addDialog({ title: $t('update_multilingual'), draggable: true, fullscreenIcon: true, closeOnClickModal: false, - props: { form: { type: undefined, file: undefined, fileType, isAppend: true } }, - contentRenderer: () => h(I18NUploadDialog, { ref: uploadFormRef, form: { type: '', file: undefined, fileType, isAppend: true } }), + props: { form }, + contentRenderer: () => h(I18NUploadDialog, { ref: uploadFormRef, form }), beforeSure: async (done, { options }) => { uploadFormRef.value.formRef.validate(async (valid: any) => { if (!valid) return; @@ -48,13 +49,15 @@ export const updateI18nSetting = (fileType: string) => { /* 行内容添加 打开添加弹窗 */ export const onAdd = () => { + const formInline = { keyName: '', translation: '', typeName: '' }; + addDialog({ title: $t('addMultilingual'), - props: { formInline: { keyName: '', translation: '', typeName: '' } }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(I18nDialog, { ref: formRef, formInline: { keyName: '', translation: '', typeName: '' } }), + contentRenderer: () => h(I18nDialog, { ref: formRef, formInline }), footerButtons: [ { label: $t('cancel'), @@ -102,21 +105,14 @@ export const onAdd = () => { /* 当表格修改时 */ export const onUpdate = (row: any) => { const id = row.id; - + const formInline = { keyName: row.keyName, translation: row.translation, typeName: row.typeName }; addDialog({ title: $t('update_multilingual'), - - props: { - formInline: { keyName: row.keyName, translation: row.translation, typeName: row.typeName }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => - h(I18nDialog, { - ref: formRef, - formInline: { keyName: row.keyName, translation: row.translation, typeName: row.typeName }, - }), + contentRenderer: () => h(I18nDialog, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormProps; formRef.value.ruleFormRef.validate(async (valid: any) => { diff --git a/src/views/i18n/i18n-type-setting/utils/hooks.tsx b/src/views/i18n/i18n-type-setting/utils/hooks.tsx index 2a0c826..7054c61 100644 --- a/src/views/i18n/i18n-type-setting/utils/hooks.tsx +++ b/src/views/i18n/i18n-type-setting/utils/hooks.tsx @@ -17,16 +17,15 @@ export async function onSearch() { /* 添加多语言 */ export function onAdd() { + const formInline = { typeName: '', summary: '', isDefault: false }; + addDialog({ title: `添加多语言类型`, - - props: { - formInline: { typeName: '', summary: '', isDefault: false }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(AddI18nType, { ref: formRef }), + contentRenderer: () => h(AddI18nType, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { @@ -43,20 +42,15 @@ export function onAdd() { /* 更新内容 */ export function onUpdate(row: any) { + const formInline = { typeName: row.typeName, summary: row.summary, isDefault: row.isDefault }; + addDialog({ title: `修改多语言类型`, - - props: { - formInline: { - typeName: row.typeName, - summary: row.summary, - isDefault: row.isDefault, - }, - }, + props: { formInline }, draggable: true, fullscreenIcon: true, closeOnClickModal: false, - contentRenderer: () => h(AddI18nType, { ref: formRef }), + contentRenderer: () => h(AddI18nType, { ref: formRef, formInline }), beforeSure: (done, { options }) => { const form = options.props.formInline as FormItemProps; formRef.value.formRef.validate(async (valid: any) => { diff --git a/src/views/message-manger/message-editing/components/markdown-editor.vue b/src/views/message-manger/message-editing/components/markdown-editor.vue index 0c3376b..e550e99 100644 --- a/src/views/message-manger/message-editing/components/markdown-editor.vue +++ b/src/views/message-manger/message-editing/components/markdown-editor.vue @@ -4,11 +4,7 @@ import 'md-editor-v3/lib/style.css'; import { uploadFile } from '@/api/v1/system/system'; import { formState } from '@/views/message-manger/message-editing/utils'; -/** - * * 上传图片 - * @param files - * @param callback - */ +/* 上传图片 */ const onUploadImg = async (files: any, callback: any) => { // 上传图片等待结果 const res = await Promise.all( @@ -17,6 +13,9 @@ const onUploadImg = async (files: any, callback: any) => { const form = new FormData(); form.append('file', file); form.append('type', 'message'); + + // markdown上传使用普通上传文件的方式 + // md图片和富文本编辑器不能是缩略图,因为看不清楚 resolve(await uploadFile(form)); }); }) diff --git a/src/views/message-manger/message-editing/components/message-editor-from.vue b/src/views/message-manger/message-editing/components/message-editor-from.vue index 55d0e9f..d66e035 100644 --- a/src/views/message-manger/message-editing/components/message-editor-from.vue +++ b/src/views/message-manger/message-editing/components/message-editor-from.vue @@ -163,7 +163,7 @@ onMounted(() => { - + diff --git a/src/views/message-manger/message-editing/components/rich-editor.vue b/src/views/message-manger/message-editing/components/rich-editor.vue index f1fbed9..bbadc46 100644 --- a/src/views/message-manger/message-editing/components/rich-editor.vue +++ b/src/views/message-manger/message-editing/components/rich-editor.vue @@ -27,10 +27,8 @@ editorConfig.MENU_CONF['uploadImage'] = { customInsert(res: any, insertFn) { // res.data.url是后端返回的图片地址,根据实际业务改写 if (res.data.url) { - setTimeout(() => { - // insertFn插入图片进编辑器 - insertFn(res.data.url); - }, 2000); + // insertFn插入图片进编辑器 + insertFn(res.data.url); } }, }; diff --git a/src/views/message-manger/message-editing/utils/hooks.ts b/src/views/message-manger/message-editing/utils/hooks.ts index 05de75a..77f5b65 100644 --- a/src/views/message-manger/message-editing/utils/hooks.ts +++ b/src/views/message-manger/message-editing/utils/hooks.ts @@ -2,7 +2,7 @@ import { reactive, ref } from 'vue'; import type { UploadRawFile, UploadRequestOptions } from 'element-plus'; import { SystemEnum } from '@/enums/upload'; import { message } from '@/utils/message'; -import { uploadFile } from '@/api/v1/system/system'; +import { uploadImage } from '@/api/v1/system/system'; import { useAdminUserStore } from '@/store/system/adminUser'; // 用户信息列表 @@ -36,9 +36,9 @@ export const onSearchUserinfo = async (keyword: string) => { /** 上传时 */ export const onUpload = async (options: UploadRequestOptions) => { const data = { file: options.file, type: 'message' }; - const result: any = await uploadFile(data); - coverUrl.value = result.data.url; - formState.cover = result.data.filepath; + const result: any = await uploadImage(data); + coverUrl.value = result.data.thUrl; + formState.cover = result.data.thUrl; }; /** 上传之前 */ diff --git a/src/views/message-manger/message-send/components/markdown-editor.vue b/src/views/message-manger/message-send/components/markdown-editor.vue index dedfee9..0be5f2f 100644 --- a/src/views/message-manger/message-send/components/markdown-editor.vue +++ b/src/views/message-manger/message-send/components/markdown-editor.vue @@ -1,7 +1,7 @@