feat: 🚀 邮箱用户更新状态

This commit is contained in:
bunny 2024-10-11 10:44:16 +08:00
parent ccf028fcd0
commit 248124c195
25 changed files with 166 additions and 214 deletions

View File

@ -1,30 +1,27 @@
import { http } from '@/api/service/request';
import type { BaseResult, ResultTable } from '@/api/service/types';
/**
* ---
*/
/** 邮箱用户发送配置管理---获取邮箱用户发送配置管理列表 */
export const fetchGetEmailUsersList = (data: any) => {
return http.request<BaseResult<ResultTable>>('get', `emailUsers/getEmailUsersList/${data.currentPage}/${data.pageSize}`, { params: data });
};
/**
* ---
*/
/** 邮箱用户发送配置管理---添加邮箱用户发送配置管理 */
export const fetchAddEmailUsers = (data: any) => {
return http.request<BaseResult<object>>('post', 'emailUsers/addEmailUsers', { data });
};
/**
* ---
*/
/** 邮箱用户发送配置管理---更新邮箱用户发送配置管理 */
export const fetchUpdateEmailUsers = (data: any) => {
return http.request<BaseResult<object>>('put', 'emailUsers/updateEmailUsers', { data });
};
/**
* ---
*/
/** 邮箱用户发送配置管理---更新邮箱用户状态 */
export const fetchUpdateEmailUserStatus = (data: any) => {
return http.request<BaseResult<object>>('put', 'emailUsers/updateEmailUserStatus', { data });
};
/** 邮箱用户发送配置管理---删除邮箱用户发送配置管理 */
export const fetchDeleteEmailUsers = (data: any) => {
return http.request<BaseResult<object>>('delete', 'emailUsers/deleteEmailUsers', { data });
};

View File

@ -1,9 +1,9 @@
import { http } from '@/api/service/request';
import type { BaseResult, ResultTable } from '@/api/service/types';
import type { BaseResult } from '@/api/service/types';
/** 菜单管理-列表 */
export const fetchGetMenusList = (data?: any) => {
return http.request<BaseResult<ResultTable>>('get', `router/getMenusList`, { params: data });
return http.request<BaseResult<any>>('get', `router/getMenusList`, { params: data });
};
/** 菜单管理-添加菜单 */

View File

@ -29,9 +29,7 @@ export const userI18nStore = defineStore('i18nStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取多语言 */
async fetchI18n() {
const result = await fetchGetI18n();
@ -46,9 +44,8 @@ export const userI18nStore = defineStore('i18nStore', {
this.i18n = data;
}
},
/**
* *
*/
/** 获取多语言列表 */
async getI18nMangeList() {
const data = { ...this.pagination, ...this.form };
delete data.pageSizes;
@ -61,25 +58,19 @@ export const userI18nStore = defineStore('i18nStore', {
return pagination(result);
},
/**
* *
*/
/** 添加多语言 */
async addI18n(data: any) {
const result = await fetchAddI18n(data);
return storeMessage(result);
},
/**
* *
*/
/** 更新多语言 */
async updateI18n(data: any) {
const result = await fetchUpdateI18n(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除多语言 */
async deleteI18n(data: any) {
const result = await fetchDeleteI18n(data);
return storeMessage(result);

View File

@ -44,9 +44,7 @@ export const useAdminUserStore = defineStore('adminUserStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取用户信息 */
getAdminUserList: async function () {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -68,43 +66,31 @@ export const useAdminUserStore = defineStore('adminUserStore', {
return result.data;
},
/**
* *
*/
/** 添加用户信息 */
async addAdminUser(data: any) {
const result = await fetchAddAdminUser(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改用户信息 */
async updateAdminUser(data: any) {
const result = await fetchUpdateAdminUser(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除用户信息 */
async deleteAdminUser(data: any) {
const result = await fetchDeleteAdminUser(data);
return storeMessage(result);
},
/**
* *
* @param data
*/
/** 更新用户密码 */
async updateAdminUserPasswordByManager(data: any) {
const result: any = await fetchUpdateUserPasswordByAdmin(data);
return storeMessage(result);
},
/**
* *
* @param data
*/
/** 修改用户状态 */
async updateUserStatusByAdmin(data: any) {
const result = await fetchUpdateUserStatusByAdmin(data);
return storeMessage(result);

View File

@ -36,9 +36,7 @@ export const useDeptStore = defineStore('deptStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取部门 */
async getDeptList() {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -54,34 +52,26 @@ export const useDeptStore = defineStore('deptStore', {
return pagination(result);
},
/**
* *
*/
/** 获取所有部门列表 */
async getAllDeptList() {
const result = await fetchGetAllDeptList();
if (result.code !== 200) return;
this.allDeptList = result.data;
},
/**
* *
*/
/** 添加部门 */
async addDept(data: any) {
const result = await fetchAddDept(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改部门 */
async updateDept(data: any) {
const result = await fetchUpdateDept(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除部门 */
async deleteDept(data: any) {
const result = await fetchDeleteDept(data);
return storeMessage(result);

View File

@ -36,9 +36,7 @@ export const useEmailTemplateStore = defineStore('emailTemplateStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取邮件模板表 */
async getEmailTemplateList() {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -54,25 +52,19 @@ export const useEmailTemplateStore = defineStore('emailTemplateStore', {
return pagination(result);
},
/**
* *
*/
/** 添加邮件模板表 */
async addEmailTemplate(data: any) {
const result = await fetchAddEmailTemplate(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改邮件模板表 */
async updateEmailTemplate(data: any) {
const result = await fetchUpdateEmailTemplate(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除邮件模板表 */
async deleteEmailTemplate(data: any) {
const result = await fetchDeleteEmailTemplate(data);
return storeMessage(result);

View File

@ -1,5 +1,5 @@
import { defineStore } from 'pinia';
import { fetchAddEmailUsers, fetchDeleteEmailUsers, fetchGetEmailUsersList, fetchUpdateEmailUsers } from '@/api/v1/emailUsers';
import { fetchAddEmailUsers, fetchDeleteEmailUsers, fetchGetEmailUsersList, fetchUpdateEmailUsers, fetchUpdateEmailUserStatus } from '@/api/v1/emailUsers';
import { pageSizes } from '@/enums/baseConstant';
import { storeMessage } from '@/utils/message';
import { storePagination } from '@/store/useStorePagination';
@ -56,25 +56,25 @@ export const useEmailUsersStore = defineStore('emailUsersStore', {
return pagination(result);
},
/**
* *
*/
/** 添加邮箱用户发送配置 */
async addEmailUsers(data: any) {
const result = await fetchAddEmailUsers(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改邮箱用户发送配置 */
async updateEmailUsers(data: any) {
const result = await fetchUpdateEmailUsers(data);
return storeMessage(result);
},
/**
* *
*/
/** 更新邮箱用户状态 */
async updateEmailUserStatus(data: any) {
const result = await fetchUpdateEmailUserStatus(data);
return storeMessage(result);
},
/** 删除邮箱用户发送配置 */
async deleteEmailUsers(data: any) {
const result = await fetchDeleteEmailUsers(data);
return storeMessage(result);

View File

@ -36,9 +36,7 @@ export const useFilesStore = defineStore('filesStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取系统文件表 */
async getFilesList() {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -54,25 +52,19 @@ export const useFilesStore = defineStore('filesStore', {
return pagination(result);
},
/**
* *
*/
/** 添加系统文件表 */
async addFiles(data: any) {
const result = await fetchAddFiles(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改系统文件表 */
async updateFiles(data: any) {
const result = await fetchUpdateFiles(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除系统文件表 */
async deleteFiles(data: any) {
const result = await fetchDeleteFiles(data);
return storeMessage(result);

View File

@ -15,16 +15,14 @@ export const userMenuStore = defineStore('menuStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取菜单列表 */
async getMenuList() {
const result = await fetchGetMenusList({ ...this.pagination });
if (result.code !== 200) return false;
// 前端搜索菜单名称
const title = this.form.title;
let newData = result.data;
let newData: Array<any> = result.data;
if (!isAllEmpty(title)) {
newData = newData.filter(item => $t(item.title).includes(title));
}
@ -32,47 +30,32 @@ export const userMenuStore = defineStore('menuStore', {
return true;
},
/**
* *
* @param data
*/
/** 添加菜单 */
async addMenu(data: object) {
const result = await fetchAddMenu(data);
return storeMessage(result);
},
/**
* *
* @param data
*/
/** 更新菜单 */
async updateMenu(data: object) {
const result = await fetchUpdateMenu(data);
return storeMessage(result);
},
/**
* *
* @param data
*/
/** 删除菜单 */
async deletedMenuByIds(data: object) {
const result = await fetchDeletedMenuByIds(data);
return storeMessage(result);
},
/**
* * id获取角色列表
* @param data
*/
/** 根据路由id获取角色列表 */
async getRoleListByRouterId(data: any) {
const result = await fetchGetRoleListByRouterId(data);
if (result.code !== 200) return;
return result.data;
},
/**
* *
* @param data
*/
/** 为路由分配角色 */
async assignRolesToRouter(data: any) {
const result = await fetchAssignRolesToRouter(data);
return storeMessage(result);

View File

@ -36,9 +36,7 @@ export const usePowerStore = defineStore('powerStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取权限 */
async getPowerList() {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -54,42 +52,31 @@ export const usePowerStore = defineStore('powerStore', {
return pagination(result);
},
/**
* *
*/
/** 添加权限 */
async addPower(data: any) {
const result = await fetchAddPower(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改权限 */
async updatePower(data: any) {
const result = await fetchUpdatePower(data);
return storeMessage(result);
},
/**
*
* @param data
*/
/** 批量修改权限父级 */
async updateBatchByPowerWithParentId(data: any) {
const result = await fetchUpdateBatchByPowerWithParentId(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除权限 */
async deletePower(data: any) {
const result = await fetchDeletePower(data);
return storeMessage(result);
},
/**
*
*/
/** 获取所有权限 */
async getAllPowers() {
const result = await fetchGetAllPowers();
if (result.code !== 200) return;

View File

@ -34,9 +34,7 @@ export const useRoleStore = defineStore('roleStore', {
},
getters: {},
actions: {
/**
* *
*/
/** 获取角色 */
async getRoleList() {
// 整理请求参数
const data = { ...this.pagination, ...this.form };
@ -52,9 +50,7 @@ export const useRoleStore = defineStore('roleStore', {
return pagination(result);
},
/**
* *
*/
/** 获取所有角色 */
async getAllRoles() {
const result = await fetchGetAllRoles();
if (result.code !== 200) return;
@ -62,34 +58,25 @@ export const useRoleStore = defineStore('roleStore', {
this.allRoleList = result.data.map(role => ({ key: role.id, label: role.description }));
},
/**
* *
*/
/** 添加角色 */
async addRole(data: any) {
const result = await fetchAddRole(data);
return storeMessage(result);
},
/**
* *
* @param data
*/
/** 为角色分配权限 */
async assignPowersToRole(data: any) {
const result = await fetchAssignPowersToRole(data);
return storeMessage(result);
},
/**
* *
*/
/** 修改角色 */
async updateRole(data: any) {
const result = await fetchUpdateRole(data);
return storeMessage(result);
},
/**
* *
*/
/** 删除角色 */
async deleteRole(data: any) {
const result = await fetchDeleteRole(data);
return storeMessage(result);

View File

@ -37,10 +37,7 @@ export const useUserStore = defineStore({
return false;
},
/**
* *
* @param email
*/
/** 发送邮箱验证码 */
async postEmailCode(email: string) {
const response = await fetchPostEmailCode({ email });
if (response.code === 200) {
@ -52,9 +49,7 @@ export const useUserStore = defineStore({
return false;
},
/**
*
*/
/** 前端登出(不调用接口) */
async logOut() {
// 登出
const result = await fetchLogout();
@ -73,9 +68,7 @@ export const useUserStore = defineStore({
message(result.message, { type: 'error' });
},
/**
* `token`
*/
/** 刷新`token` */
async handRefreshToken(data: any) {
const result = await refreshTokenApi({ ...data, readMeDay: this.readMeDay });
if (result.code === 200) {
@ -86,20 +79,14 @@ export const useUserStore = defineStore({
return false;
},
/**
* * id获取角色列表
* @param data
*/
/** 根据用户id获取角色列表 */
async getRoleListByUserId(data: any) {
const result = await fetchGetRoleListByUserId(data);
if (result.code !== 200) return;
return result.data;
},
/**
* *
* @param data
*/
/** 为用户分配角色 */
async assignRolesToUsers(data: any) {
const result = await fetchAssignRolesToUsers(data);
return storeMessage(result);

View File

@ -148,7 +148,7 @@ onMounted(() => {
</el-form-item>
</el-form>
<PureTableBar :columns="columns" title="用户信息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<PureTableBar :columns="columns" :title="$t('userinfo')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons>
<el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button>
@ -188,12 +188,12 @@ onMounted(() => {
<template #status="{ row, index }">
<el-switch
v-model="row.status"
:active-text="$t('enable')"
:active-value="false"
:inactive-text="$t('disable')"
:inactive-value="true"
:loading="switchLoadMap[index]?.loading"
:style="switchStyle"
active-text="已启用"
inactive-text="已停用"
inline-prompt
@click="updateUserStatus(row, index)"
/>
@ -201,7 +201,9 @@ onMounted(() => {
<!-- 用户性别 -->
<template #sex="{ row }">
<el-tag :type="row.sex === 0 ? 'danger' : null" effect="plain"> {{ row.sex === 1 ? '男' : '女' }}</el-tag>
<el-tag :type="row.sex === 0 ? 'danger' : null" effect="plain">
{{ row.sex === 1 ? $t('man') : $t('female') }}
</el-tag>
</template>
<!-- 创建用户 -->
@ -219,7 +221,7 @@ onMounted(() => {
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<!-- 删除 -->
<el-popconfirm :title="`是否确认删除 ${row.username}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')} ${row.username}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}
@ -233,16 +235,16 @@ onMounted(() => {
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Upload)" :size="size" link type="primary" @click="onUploadAvatar(row)"> 上传头像 </el-button>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Upload)" :size="size" link type="primary" @click="onUploadAvatar(row)"> {{ $t('upload_avatar') }} </el-button>
</el-dropdown-item>
<el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Password)" :size="size" link type="primary" @click="onResetPassword(row)"> 重置密码 </el-button>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Password)" :size="size" link type="primary" @click="onResetPassword(row)"> {{ $t('reset_passwords') }} </el-button>
</el-dropdown-item>
<el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Role)" :size="size" link type="primary" @click="onAssignRolesToUser(row)"> 分配角色 </el-button>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Role)" :size="size" link type="primary" @click="onAssignRolesToUser(row)"> {{ $t('assign_roles') }} </el-button>
</el-dropdown-item>
<el-dropdown-item>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Airplane)" :size="size" link type="primary" @click="onForcedOffline(row)"> 强制下线 </el-button>
<el-button :class="tableSelectButtonClass" :icon="useRenderIcon(Airplane)" :size="size" link type="primary" @click="onForcedOffline(row)"> {{ $t('forced_offline') }} </el-button>
</el-dropdown-item>
</el-dropdown-menu>
</template>

View File

@ -117,7 +117,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)"> {{ $t('add_new') }} </el-button>
<el-popconfirm :title="`是否确认删除 ${row.deptName}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')} ${row.deptName}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -33,7 +33,7 @@ defineExpose({ formRef });
<el-input v-model="form.subject" autocomplete="off" type="text" />
</el-form-item>
<el-form-item :label="$t('emailTemplate_body')" prop="body">
<el-input v-model="form.body" autocomplete="off" type="text" />
<el-input v-model="form.body" :autosize="{ minRows: 2 }" autocomplete="off" type="textarea" />
</el-form-item>
<el-form-item :label="$t('emailTemplate_type')" prop="type">
<el-input v-model="form.type" autocomplete="off" type="text" />

View File

@ -105,9 +105,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd"> {{ $t('add_new') }} </el-button>
<!-- TODO 待完成 -->
<el-popconfirm :title="`是否确认删除 ${row.typeName}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')} ${row.templateName}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -4,6 +4,7 @@ import { FormInstance } from 'element-plus';
import { rules } from '@/views/system/emailUsers/utils/columns';
import { FormProps } from '@/views/system/emailUsers/utils/types';
import { $t } from '@/plugins/i18n';
import { usePublicHooks } from '@/views/hooks';
const props = withDefaults(defineProps<FormProps>(), {
formInline: () => ({
@ -26,6 +27,8 @@ const props = withDefaults(defineProps<FormProps>(), {
const formRef = ref<FormInstance>();
const form = ref(props.formInline);
//
const { switchStyle } = usePublicHooks();
defineExpose({ formRef });
</script>
@ -51,7 +54,7 @@ defineExpose({ formRef });
<el-input v-model="form.smtpAgreement" autocomplete="off" type="text" />
</el-form-item>
<el-form-item :label="$t('emailUsers_isDefault')" prop="isDefault">
<el-input v-model="form.isDefault" autocomplete="off" type="text" />
<el-switch v-model="form.isDefault" :active-text="$t('default')" :active-value="true" :inactive-text="$t('no_default')" :inactive-value="false" :style="switchStyle" inline-prompt />
</el-form-item>
</el-form>
</template>

View File

@ -4,18 +4,21 @@ import { columns } from '@/views/system/emailUsers/utils/columns';
import PureTableBar from '@/components/TableBar/src/bar';
import AddFill from '@iconify-icons/ri/add-circle-line';
import PureTable from '@pureadmin/table';
import { onAdd, onDelete, onSearch, onUpdate } from '@/views/system/emailUsers/utils/hooks';
import { onAdd, onChangeDefault, onDelete, onSearch, onUpdate, switchLoadMap } from '@/views/system/emailUsers/utils/hooks';
import Delete from '@iconify-icons/ep/delete';
import EditPen from '@iconify-icons/ep/edit-pen';
import Refresh from '@iconify-icons/ep/refresh';
import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n';
import { useEmailUsersStore } from '@/store/system/emailUsers.ts';
import { useEmailUsersStore } from '@/store/system/emailUsers';
import { useRenderIcon } from '@/components/CommonIcon/src/hooks';
import { usePublicHooks } from '@/views/hooks';
const tableRef = ref();
const formRef = ref();
const emailUsersStore = useEmailUsersStore();
//
const { switchStyle } = usePublicHooks();
/**
* * 当前页改变时
@ -73,7 +76,7 @@ onMounted(() => {
</el-form-item>
</el-form>
<PureTableBar :columns="columns" title="邮箱用户发送配置管理" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<PureTableBar :columns="columns" :title="$t('email_user_send_config')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons>
<el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button>
</template>
@ -98,6 +101,20 @@ onMounted(() => {
@page-size-change="onPageSizeChange"
@page-current-change="onCurrentPageChange"
>
<template #isDefault="{ row, index }">
<el-switch
v-model="row.isDefault"
:active-text="$t('default')"
:active-value="true"
:inactive-text="$t('no_default')"
:inactive-value="false"
:loading="switchLoadMap[index]?.loading"
:style="switchStyle"
inline-prompt
@click="onChangeDefault(row, index)"
/>
</template>
<template #createUser="{ row }">
<el-button link type="primary" @click="selectUserinfo(row.createUser)">{{ $t('table.createUser') }} </el-button>
</template>
@ -108,9 +125,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd"> {{ $t('add_new') }} </el-button>
<!-- TODO 待完成 -->
<el-popconfirm :title="`是否确认删除 ${row.typeName}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')}${row.email}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -5,7 +5,6 @@ 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' },
// 邮件模板
@ -19,7 +18,7 @@ export const columns: TableColumnList = [
// 邮箱协议
{ label: $t('emailUsers_smtpAgreement'), prop: 'smtpAgreement' },
// 是否为默认邮件
{ label: $t('emailUsers_isDefault'), prop: 'isDefault' },
{ label: $t('emailUsers_isDefault'), prop: 'isDefault', slot: '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 },
@ -31,16 +30,12 @@ export const columns: TableColumnList = [
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' }],
});

View File

@ -1,12 +1,14 @@
import { addDialog } from '@/components/BaseDialog/index';
import EmailUsersDialog from '@/views/system/emailUsers/email-users-dialog.vue';
import { useEmailUsersStore } from '@/store/system/emailUsers.ts';
import { useEmailUsersStore } from '@/store/system/emailUsers';
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();
// 用户是否停用加载集合
export const switchLoadMap = ref({});
const emailUsersStore = useEmailUsersStore();
/**
@ -110,3 +112,47 @@ export const onDelete = async (row: any) => {
await emailUsersStore.deleteEmailUsers([id]);
await onSearch();
};
/**
* *
* @param row
* @param index
*/
export const onChangeDefault = async (row: any, index: number) => {
// 点击时开始loading加载
switchLoadMap.value[index] = Object.assign({}, switchLoadMap.value[index], {
loading: true,
});
// 是否确认修改弹窗内容
const confirm = await messageBox({
title: $t('confirm_update_status'),
showMessage: false,
confirmMessage: undefined,
cancelMessage: $t('cancel'),
});
// 如果不修改将值恢复到之前状态
if (!confirm) {
row.isDefault = !row.isDefault;
switchLoadMap.value[index] = Object.assign({}, switchLoadMap.value[index], {
loading: false,
});
return;
}
// 修改用户状态
const result = await emailUsersStore.updateEmailUserStatus({ id: row.id, isDefault: row.isDefault });
if (!result) {
row.isDefault = !row.isDefault;
switchLoadMap.value[index] = Object.assign({}, switchLoadMap.value[index], {
loading: false,
});
return;
}
await onSearch();
switchLoadMap.value[index] = Object.assign({}, switchLoadMap.value[index], {
loading: false,
});
};

View File

@ -12,6 +12,7 @@ import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n';
import { useFilesStore } from '@/store/system/files.ts';
import { useRenderIcon } from '@/components/CommonIcon/src/hooks';
import { FormInstance } from 'element-plus';
const tableRef = ref();
const formRef = ref();
@ -38,7 +39,7 @@ const onPageSizeChange = async (value: number) => {
* 重置表单
* @param formEl
*/
const resetForm = async formEl => {
const resetForm = async (formEl: FormInstance) => {
if (!formEl) return;
formEl.resetFields();
await onSearch();
@ -105,7 +106,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-popconfirm :title="`是否确认删除 ${row.filename}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')} ${row.filename}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -74,12 +74,12 @@ onMounted(() => {
<template #visible="{ row, index }">
<el-switch
v-model="row.visible"
:active-text="$t('show')"
:active-value="true"
:inactive-text="$t('hidden')"
:inactive-value="false"
:loading="switchLoadMap[index]?.loading"
:style="switchStyle"
active-text="显示"
inactive-text="隐藏"
inline-prompt
@click="onchangeVisible(row, index)"
/>
@ -96,7 +96,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-button v-show="row.menuType !== 3" :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)"> {{ $t('add_new') }} </el-button>
<el-popconfirm :title="`是否确认删除菜单名称为${$t(row.title)}的这条数据${row?.children?.length > 0 ? '注意下级菜单也会一并删除,请谨慎操作' : ''}`" @confirm="handleDelete(row)">
<el-popconfirm :title="`${$t('delete')} ${$t(row.title)}的这条数据${row?.children?.length > 0 ? '注意下级菜单也会一并删除,请谨慎操作' : ''}`" @confirm="handleDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -120,7 +120,7 @@ onMounted(() => {
<template #operation="{ row }">
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-popconfirm :title="`是否确认删除 ${row.iconName}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')}${row.iconName}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -134,7 +134,7 @@ onMounted(() => {
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd(row.id)"> {{ $t('add_new') }} </el-button>
<!-- 删除 -->
<el-popconfirm :title="`是否确认删除 ${row.powerName}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')}${row.powerName}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}

View File

@ -125,7 +125,7 @@ onMounted(() => {
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
<!-- 删除 -->
<el-popconfirm :title="`是否确认删除 ${row.roleCode}数据`" @confirm="onDelete(row)">
<el-popconfirm :title="`${$t('delete')}${row.roleCode}?`" @confirm="onDelete(row)">
<template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }}