From ccf028fcd04d4f5b532a03fc9ea6645aab75cc3f Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Thu, 10 Oct 2024 16:55:47 +0800 Subject: [PATCH] =?UTF-8?q?page:=20=F0=9F=93=84=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=82=AE=E7=AE=B1=E5=92=8C=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/v1/emailTemplate.ts | 30 +++++ src/api/v1/emailUsers.ts | 30 +++++ src/components/AnimateSelector/index.ts | 4 +- src/components/Auth/index.ts | 2 +- src/components/BaseDialog/SimpleDialog.vue | 5 +- src/components/BaseDialog/index.vue | 2 +- src/components/CropperPreview/src/index.vue | 7 +- src/components/MyCol/index.ts | 50 +++---- src/components/Perms/index.ts | 2 +- src/components/Perms/src/perms.tsx | 32 +++-- src/components/error/403.vue | 51 +------ src/components/error/404.vue | 42 +----- src/components/error/500.vue | 51 +------ src/store/system/emailTemplate.ts | 81 ++++++++++++ src/store/system/emailUsers.ts | 83 ++++++++++++ .../emailTemplate/email-template-dialog.vue | 42 ++++++ src/views/system/emailTemplate/index.vue | 122 +++++++++++++++++ .../system/emailTemplate/utils/columns.ts | 33 +++++ src/views/system/emailTemplate/utils/hooks.ts | 106 +++++++++++++++ src/views/system/emailTemplate/utils/types.ts | 16 +++ .../system/emailUsers/email-users-dialog.vue | 57 ++++++++ src/views/system/emailUsers/index.vue | 125 ++++++++++++++++++ src/views/system/emailUsers/utils/columns.ts | 46 +++++++ src/views/system/emailUsers/utils/hooks.ts | 112 ++++++++++++++++ src/views/system/emailUsers/utils/types.ts | 22 +++ 25 files changed, 966 insertions(+), 187 deletions(-) create mode 100644 src/api/v1/emailTemplate.ts create mode 100644 src/api/v1/emailUsers.ts create mode 100644 src/store/system/emailTemplate.ts create mode 100644 src/store/system/emailUsers.ts create mode 100644 src/views/system/emailTemplate/email-template-dialog.vue create mode 100644 src/views/system/emailTemplate/index.vue create mode 100644 src/views/system/emailTemplate/utils/columns.ts create mode 100644 src/views/system/emailTemplate/utils/hooks.ts create mode 100644 src/views/system/emailTemplate/utils/types.ts create mode 100644 src/views/system/emailUsers/email-users-dialog.vue create mode 100644 src/views/system/emailUsers/index.vue create mode 100644 src/views/system/emailUsers/utils/columns.ts create mode 100644 src/views/system/emailUsers/utils/hooks.ts create mode 100644 src/views/system/emailUsers/utils/types.ts diff --git a/src/api/v1/emailTemplate.ts b/src/api/v1/emailTemplate.ts new file mode 100644 index 0000000..eeafafd --- /dev/null +++ b/src/api/v1/emailTemplate.ts @@ -0,0 +1,30 @@ +import { http } from '@/api/service/request'; +import type { BaseResult, ResultTable } from '@/api/service/types'; + +/** + * 邮件模板表---获取邮件模板表列表 + */ +export const fetchGetEmailTemplateList = (data: any) => { + return http.request>('get', `emailTemplate/getEmailTemplateList/${data.currentPage}/${data.pageSize}`, { params: data }); +}; + +/** + * 邮件模板表---添加邮件模板表 + */ +export const fetchAddEmailTemplate = (data: any) => { + return http.request>('post', 'emailTemplate/addEmailTemplate', { data }); +}; + +/** + * 邮件模板表---更新邮件模板表 + */ +export const fetchUpdateEmailTemplate = (data: any) => { + return http.request>('put', 'emailTemplate/updateEmailTemplate', { data }); +}; + +/** + * 邮件模板表---删除邮件模板表 + */ +export const fetchDeleteEmailTemplate = (data: any) => { + return http.request>('delete', 'emailTemplate/deleteEmailTemplate', { data }); +}; diff --git a/src/api/v1/emailUsers.ts b/src/api/v1/emailUsers.ts new file mode 100644 index 0000000..9221bf7 --- /dev/null +++ b/src/api/v1/emailUsers.ts @@ -0,0 +1,30 @@ +import { http } from '@/api/service/request'; +import type { BaseResult, ResultTable } from '@/api/service/types'; + +/** + * 邮箱用户发送配置管理---获取邮箱用户发送配置管理列表 + */ +export const fetchGetEmailUsersList = (data: any) => { + return http.request>('get', `emailUsers/getEmailUsersList/${data.currentPage}/${data.pageSize}`, { params: data }); +}; + +/** + * 邮箱用户发送配置管理---添加邮箱用户发送配置管理 + */ +export const fetchAddEmailUsers = (data: any) => { + return http.request>('post', 'emailUsers/addEmailUsers', { data }); +}; + +/** + * 邮箱用户发送配置管理---更新邮箱用户发送配置管理 + */ +export const fetchUpdateEmailUsers = (data: any) => { + return http.request>('put', 'emailUsers/updateEmailUsers', { data }); +}; + +/** + * 邮箱用户发送配置管理---删除邮箱用户发送配置管理 + */ +export const fetchDeleteEmailUsers = (data: any) => { + return http.request>('delete', 'emailUsers/deleteEmailUsers', { data }); +}; diff --git a/src/components/AnimateSelector/index.ts b/src/components/AnimateSelector/index.ts index 87c9008..296b07d 100644 --- a/src/components/AnimateSelector/index.ts +++ b/src/components/AnimateSelector/index.ts @@ -1,5 +1,5 @@ -import { withInstall } from "@pureadmin/utils"; -import reAnimateSelector from "./src/index.vue"; +import { withInstall } from '@pureadmin/utils'; +import reAnimateSelector from './src/index.vue'; /** [animate.css](https://animate.style/) 选择器组件 */ export const ReAnimateSelector = withInstall(reAnimateSelector); diff --git a/src/components/Auth/index.ts b/src/components/Auth/index.ts index 975ed2c..71f325f 100644 --- a/src/components/Auth/index.ts +++ b/src/components/Auth/index.ts @@ -1,4 +1,4 @@ -import auth from "./src/auth"; +import auth from './src/auth'; const Auth = auth; diff --git a/src/components/BaseDialog/SimpleDialog.vue b/src/components/BaseDialog/SimpleDialog.vue index 06e70e7..292b9ce 100644 --- a/src/components/BaseDialog/SimpleDialog.vue +++ b/src/components/BaseDialog/SimpleDialog.vue @@ -1,5 +1,6 @@ + + diff --git a/src/views/system/emailTemplate/index.vue b/src/views/system/emailTemplate/index.vue new file mode 100644 index 0000000..5bf58d6 --- /dev/null +++ b/src/views/system/emailTemplate/index.vue @@ -0,0 +1,122 @@ + + + diff --git a/src/views/system/emailTemplate/utils/columns.ts b/src/views/system/emailTemplate/utils/columns.ts new file mode 100644 index 0000000..abaacd0 --- /dev/null +++ b/src/views/system/emailTemplate/utils/columns.ts @@ -0,0 +1,33 @@ +import { reactive } from 'vue'; +import { $t } from '@/plugins/i18n'; + +// 表格列 +export const columns: TableColumnList = [ + { type: 'selection', align: 'left' }, + { type: 'index', index: (index: number) => index + 1, label: '序号', width: 60 }, + // 模板名称 + { label: $t('emailTemplate_templateName'), prop: 'templateName' }, + // 主题 + { label: $t('emailTemplate_subject'), prop: 'subject' }, + // 邮件内容 + { label: $t('emailTemplate_body'), prop: 'body' }, + // 邮件类型 + { label: $t('emailTemplate_type'), prop: 'type' }, + { label: $t('table.updateTime'), prop: 'updateTime', sortable: true, width: 160 }, + { label: $t('table.createTime'), prop: 'createTime', sortable: true, width: 160 }, + { label: $t('table.createUser'), prop: 'createUser', slot: 'createUser', width: 90 }, + { label: $t('table.updateUser'), prop: 'updateUser', slot: 'updateUser', width: 90 }, + { label: $t('table.operation'), fixed: 'right', width: 210, slot: 'operation' }, +]; + +// 添加规则 +export const rules = reactive({ + // 模板名称 + templateName: [{ required: true, message: `${$t('input')}${$t('emailTemplate_templateName')}`, trigger: 'blur' }], + // 主题 + subject: [{ required: true, message: `${$t('input')}${$t('emailTemplate_subject')}`, trigger: 'blur' }], + // 邮件内容 + body: [{ required: true, message: `${$t('input')}${$t('emailTemplate_body')}`, trigger: 'blur' }], + // 邮件类型 + type: [{ required: true, message: `${$t('input')}${$t('emailTemplate_type')}`, trigger: 'blur' }], +}); diff --git a/src/views/system/emailTemplate/utils/hooks.ts b/src/views/system/emailTemplate/utils/hooks.ts new file mode 100644 index 0000000..de55845 --- /dev/null +++ b/src/views/system/emailTemplate/utils/hooks.ts @@ -0,0 +1,106 @@ +import { addDialog } from '@/components/BaseDialog/index'; +import EmailTemplateDialog from '@/views/system/emailTemplate/email-template-dialog.vue'; +import { useEmailTemplateStore } from '@/store/system/emailTemplate.ts'; +import { h, ref } from 'vue'; +import { messageBox } from '@/utils/message'; +import type { FormItemProps } from '@/views/system/emailTemplate/utils/types'; +import { $t } from '@/plugins/i18n'; + +export const formRef = ref(); +const emailTemplateStore = useEmailTemplateStore(); + +/** + * * 搜索初始化邮件模板表 + */ +export async function onSearch() { + emailTemplateStore.loading = true; + await emailTemplateStore.getEmailTemplateList(); + emailTemplateStore.loading = false; +} + +/** + * * 添加邮件模板表 + */ +export function onAdd() { + addDialog({ + title: `${$t('add_new')}${$t('emailTemplate')}`, + width: '30%', + props: { + formInline: { + templateName: undefined, + subject: undefined, + body: undefined, + type: undefined, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(EmailTemplateDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await emailTemplateStore.addEmailTemplate(form); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 更新邮件模板表 + * @param row + */ +export function onUpdate(row: any) { + addDialog({ + title: `${$t('modify')}${$t('emailTemplate')}`, + width: '30%', + props: { + formInline: { + templateName: row.templateName, + subject: row.subject, + body: row.body, + type: row.type, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(EmailTemplateDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await emailTemplateStore.updateEmailTemplate({ ...form, id: row.id }); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 删除邮件模板表 + */ +export const onDelete = async (row: any) => { + const id = row.id; + + // 是否确认删除 + const result = await messageBox({ + title: $t('confirm_delete'), + showMessage: false, + confirmMessage: undefined, + cancelMessage: $t('cancel_delete'), + }); + if (!result) return; + + // 删除数据 + await emailTemplateStore.deleteEmailTemplate([id]); + await onSearch(); +}; diff --git a/src/views/system/emailTemplate/utils/types.ts b/src/views/system/emailTemplate/utils/types.ts new file mode 100644 index 0000000..7c6292f --- /dev/null +++ b/src/views/system/emailTemplate/utils/types.ts @@ -0,0 +1,16 @@ +// 添加或者修改表单元素 +export interface FormItemProps { + // 模板名称 + templateName: string; + // 主题 + subject: string; + // 邮件内容 + body: string; + // 邮件类型 + type: string; +} + +// 添加或修改表单Props +export interface FormProps { + formInline: FormItemProps; +} diff --git a/src/views/system/emailUsers/email-users-dialog.vue b/src/views/system/emailUsers/email-users-dialog.vue new file mode 100644 index 0000000..9043d70 --- /dev/null +++ b/src/views/system/emailUsers/email-users-dialog.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/system/emailUsers/index.vue b/src/views/system/emailUsers/index.vue new file mode 100644 index 0000000..026f698 --- /dev/null +++ b/src/views/system/emailUsers/index.vue @@ -0,0 +1,125 @@ + + + diff --git a/src/views/system/emailUsers/utils/columns.ts b/src/views/system/emailUsers/utils/columns.ts new file mode 100644 index 0000000..dd1f4a0 --- /dev/null +++ b/src/views/system/emailUsers/utils/columns.ts @@ -0,0 +1,46 @@ +import { reactive } from 'vue'; +import { $t } from '@/plugins/i18n'; + +// 表格列 +export const columns: TableColumnList = [ + { type: 'selection', align: 'left' }, + { type: 'index', index: (index: number) => index + 1, label: '序号', width: 60 }, + { label: $t('id'), prop: 'id' }, + // 邮箱 + { label: $t('emailUsers_email'), prop: 'email' }, + // 邮件模板 + { label: $t('emailUsers_emailTemplate'), prop: 'emailTemplate' }, + // 密码 + { label: $t('emailUsers_password'), prop: 'password' }, + // Host地址 + { label: $t('emailUsers_host'), prop: 'host' }, + // 端口号 + { label: $t('emailUsers_port'), prop: 'port' }, + // 邮箱协议 + { label: $t('emailUsers_smtpAgreement'), prop: 'smtpAgreement' }, + // 是否为默认邮件 + { label: $t('emailUsers_isDefault'), prop: 'isDefault' }, + { label: $t('table.updateTime'), prop: 'updateTime', sortable: true, width: 160 }, + { label: $t('table.createTime'), prop: 'createTime', sortable: true, width: 160 }, + { label: $t('table.createUser'), prop: 'createUser', slot: 'createUser', width: 90 }, + { label: $t('table.updateUser'), prop: 'updateUser', slot: 'updateUser', width: 90 }, + { label: $t('table.operation'), fixed: 'right', width: 210, slot: 'operation' }, +]; + +// 添加规则 +export const rules = reactive({ + // 邮箱 + email: [{ required: true, message: `${$t('input')}${$t('emailUsers_email')}`, trigger: 'blur' }], + // 邮件模板 + emailTemplate: [{ required: true, message: `${$t('input')}${$t('emailUsers_emailTemplate')}`, trigger: 'blur' }], + // 密码 + password: [{ required: true, message: `${$t('input')}${$t('emailUsers_password')}`, trigger: 'blur' }], + // Host地址 + host: [{ required: true, message: `${$t('input')}${$t('emailUsers_host')}`, trigger: 'blur' }], + // 端口号 + port: [{ required: true, message: `${$t('input')}${$t('emailUsers_port')}`, trigger: 'blur' }], + // 邮箱协议 + smtpAgreement: [{ required: true, message: `${$t('input')}${$t('emailUsers_smtpAgreement')}`, trigger: 'blur' }], + // 是否为默认邮件 + isDefault: [{ required: true, message: `${$t('input')}${$t('emailUsers_isDefault')}`, trigger: 'blur' }], +}); diff --git a/src/views/system/emailUsers/utils/hooks.ts b/src/views/system/emailUsers/utils/hooks.ts new file mode 100644 index 0000000..b8baa33 --- /dev/null +++ b/src/views/system/emailUsers/utils/hooks.ts @@ -0,0 +1,112 @@ +import { addDialog } from '@/components/BaseDialog/index'; +import EmailUsersDialog from '@/views/system/emailUsers/email-users-dialog.vue'; +import { useEmailUsersStore } from '@/store/system/emailUsers.ts'; +import { h, ref } from 'vue'; +import { messageBox } from '@/utils/message'; +import type { FormItemProps } from '@/views/system/emailUsers/utils/types'; +import { $t } from '@/plugins/i18n'; + +export const formRef = ref(); +const emailUsersStore = useEmailUsersStore(); + +/** + * * 搜索初始化邮箱用户发送配置 + */ +export async function onSearch() { + emailUsersStore.loading = true; + await emailUsersStore.getEmailUsersList(); + emailUsersStore.loading = false; +} + +/** + * * 添加邮箱用户发送配置 + */ +export function onAdd() { + addDialog({ + title: `${$t('add_new')}${$t('emailUsers')}`, + width: '30%', + props: { + formInline: { + email: undefined, + emailTemplate: undefined, + password: undefined, + host: undefined, + port: undefined, + smtpAgreement: undefined, + isDefault: undefined, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(EmailUsersDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await emailUsersStore.addEmailUsers(form); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 更新邮箱用户发送配置 + * @param row + */ +export function onUpdate(row: any) { + addDialog({ + title: `${$t('modify')}${$t('emailUsers')}`, + width: '30%', + props: { + formInline: { + email: row.email, + emailTemplate: row.emailTemplate, + password: row.password, + host: row.host, + port: row.port, + smtpAgreement: row.smtpAgreement, + isDefault: row.isDefault, + }, + }, + draggable: true, + fullscreenIcon: true, + closeOnClickModal: false, + contentRenderer: () => h(EmailUsersDialog, { ref: formRef }), + beforeSure: (done, { options }) => { + const form = options.props.formInline as FormItemProps; + formRef.value.formRef.validate(async (valid: any) => { + if (!valid) return; + + const result = await emailUsersStore.updateEmailUsers({ ...form, id: row.id }); + if (!result) return; + done(); + await onSearch(); + }); + }, + }); +} + +/** + * * 删除邮箱用户发送配置 + */ +export const onDelete = async (row: any) => { + const id = row.id; + + // 是否确认删除 + const result = await messageBox({ + title: $t('confirm_delete'), + showMessage: false, + confirmMessage: undefined, + cancelMessage: $t('cancel_delete'), + }); + if (!result) return; + + // 删除数据 + await emailUsersStore.deleteEmailUsers([id]); + await onSearch(); +}; diff --git a/src/views/system/emailUsers/utils/types.ts b/src/views/system/emailUsers/utils/types.ts new file mode 100644 index 0000000..93041f8 --- /dev/null +++ b/src/views/system/emailUsers/utils/types.ts @@ -0,0 +1,22 @@ +// 添加或者修改表单元素 +export interface FormItemProps { + // 邮箱 + email: string; + // 邮件模板 + emailTemplate: number; + // 密码 + password: string; + // Host地址 + host: string; + // 端口号 + port: number; + // 邮箱协议 + smtpAgreement: string; + // 是否为默认邮件 + isDefault: boolean; +} + +// 添加或修改表单Props +export interface FormProps { + formInline: FormItemProps; +}