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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -148,7 +148,7 @@ onMounted(() => {
</el-form-item> </el-form-item>
</el-form> </el-form>
<PureTableBar :columns="columns" title="用户信息" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch"> <PureTableBar :columns="columns" :title="$t('userinfo')" @fullscreen="tableRef.setAdaptive()" @refresh="onSearch">
<template #buttons> <template #buttons>
<el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button> <el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button>
@ -188,12 +188,12 @@ onMounted(() => {
<template #status="{ row, index }"> <template #status="{ row, index }">
<el-switch <el-switch
v-model="row.status" v-model="row.status"
:active-text="$t('enable')"
:active-value="false" :active-value="false"
:inactive-text="$t('disable')"
:inactive-value="true" :inactive-value="true"
:loading="switchLoadMap[index]?.loading" :loading="switchLoadMap[index]?.loading"
:style="switchStyle" :style="switchStyle"
active-text="已启用"
inactive-text="已停用"
inline-prompt inline-prompt
@click="updateUserStatus(row, index)" @click="updateUserStatus(row, index)"
/> />
@ -201,7 +201,9 @@ onMounted(() => {
<!-- 用户性别 --> <!-- 用户性别 -->
<template #sex="{ row }"> <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> </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-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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}
@ -233,16 +235,16 @@ onMounted(() => {
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item> <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-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-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-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-item>
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>

View File

@ -117,7 +117,7 @@ onMounted(() => {
<template #operation="{ row }"> <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(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-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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

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

View File

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

View File

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

View File

@ -4,18 +4,21 @@ import { columns } from '@/views/system/emailUsers/utils/columns';
import PureTableBar from '@/components/TableBar/src/bar'; import PureTableBar from '@/components/TableBar/src/bar';
import AddFill from '@iconify-icons/ri/add-circle-line'; import AddFill from '@iconify-icons/ri/add-circle-line';
import PureTable from '@pureadmin/table'; 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 Delete from '@iconify-icons/ep/delete';
import EditPen from '@iconify-icons/ep/edit-pen'; import EditPen from '@iconify-icons/ep/edit-pen';
import Refresh from '@iconify-icons/ep/refresh'; import Refresh from '@iconify-icons/ep/refresh';
import { selectUserinfo } from '@/components/Table/Userinfo/columns'; import { selectUserinfo } from '@/components/Table/Userinfo/columns';
import { $t } from '@/plugins/i18n'; 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 { useRenderIcon } from '@/components/CommonIcon/src/hooks';
import { usePublicHooks } from '@/views/hooks';
const tableRef = ref(); const tableRef = ref();
const formRef = ref(); const formRef = ref();
const emailUsersStore = useEmailUsersStore(); const emailUsersStore = useEmailUsersStore();
//
const { switchStyle } = usePublicHooks();
/** /**
* * 当前页改变时 * * 当前页改变时
@ -73,7 +76,7 @@ onMounted(() => {
</el-form-item> </el-form-item>
</el-form> </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> <template #buttons>
<el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button> <el-button :icon="useRenderIcon(AddFill)" type="primary" @click="onAdd"> {{ $t('add_new') }}</el-button>
</template> </template>
@ -98,6 +101,20 @@ onMounted(() => {
@page-size-change="onPageSizeChange" @page-size-change="onPageSizeChange"
@page-current-change="onCurrentPageChange" @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 }"> <template #createUser="{ row }">
<el-button link type="primary" @click="selectUserinfo(row.createUser)">{{ $t('table.createUser') }} </el-button> <el-button link type="primary" @click="selectUserinfo(row.createUser)">{{ $t('table.createUser') }} </el-button>
</template> </template>
@ -108,9 +125,7 @@ onMounted(() => {
<template #operation="{ row }"> <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(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> <el-popconfirm :title="`${$t('delete')}${row.email}?`" @confirm="onDelete(row)">
<!-- TODO 待完成 -->
<el-popconfirm :title="`是否确认删除 ${row.typeName}数据`" @confirm="onDelete(row)">
<template #reference> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -5,7 +5,6 @@ import { $t } from '@/plugins/i18n';
export const columns: TableColumnList = [ export const columns: TableColumnList = [
{ type: 'selection', align: 'left' }, { type: 'selection', align: 'left' },
{ type: 'index', index: (index: number) => index + 1, label: '序号', width: 60 }, { type: 'index', index: (index: number) => index + 1, label: '序号', width: 60 },
{ label: $t('id'), prop: 'id' },
// 邮箱 // 邮箱
{ label: $t('emailUsers_email'), prop: 'email' }, { label: $t('emailUsers_email'), prop: 'email' },
// 邮件模板 // 邮件模板
@ -19,7 +18,7 @@ export const columns: TableColumnList = [
// 邮箱协议 // 邮箱协议
{ label: $t('emailUsers_smtpAgreement'), prop: 'smtpAgreement' }, { 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.updateTime'), prop: 'updateTime', sortable: true, width: 160 },
{ label: $t('table.createTime'), prop: 'createTime', 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.createUser'), prop: 'createUser', slot: 'createUser', width: 90 },
@ -31,16 +30,12 @@ export const columns: TableColumnList = [
export const rules = reactive({ export const rules = reactive({
// 邮箱 // 邮箱
email: [{ required: true, message: `${$t('input')}${$t('emailUsers_email')}`, trigger: 'blur' }], 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' }], password: [{ required: true, message: `${$t('input')}${$t('emailUsers_password')}`, trigger: 'blur' }],
// Host地址 // Host地址
host: [{ required: true, message: `${$t('input')}${$t('emailUsers_host')}`, trigger: 'blur' }], host: [{ required: true, message: `${$t('input')}${$t('emailUsers_host')}`, trigger: 'blur' }],
// 端口号 // 端口号
port: [{ required: true, message: `${$t('input')}${$t('emailUsers_port')}`, 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' }], isDefault: [{ required: true, message: `${$t('input')}${$t('emailUsers_isDefault')}`, trigger: 'blur' }],
}); });

View File

@ -1,12 +1,14 @@
import { addDialog } from '@/components/BaseDialog/index'; import { addDialog } from '@/components/BaseDialog/index';
import EmailUsersDialog from '@/views/system/emailUsers/email-users-dialog.vue'; 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 { h, ref } from 'vue';
import { messageBox } from '@/utils/message'; import { messageBox } from '@/utils/message';
import type { FormItemProps } from '@/views/system/emailUsers/utils/types'; import type { FormItemProps } from '@/views/system/emailUsers/utils/types';
import { $t } from '@/plugins/i18n'; import { $t } from '@/plugins/i18n';
export const formRef = ref(); export const formRef = ref();
// 用户是否停用加载集合
export const switchLoadMap = ref({});
const emailUsersStore = useEmailUsersStore(); const emailUsersStore = useEmailUsersStore();
/** /**
@ -110,3 +112,47 @@ export const onDelete = async (row: any) => {
await emailUsersStore.deleteEmailUsers([id]); await emailUsersStore.deleteEmailUsers([id]);
await onSearch(); 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 { $t } from '@/plugins/i18n';
import { useFilesStore } from '@/store/system/files.ts'; import { useFilesStore } from '@/store/system/files.ts';
import { useRenderIcon } from '@/components/CommonIcon/src/hooks'; import { useRenderIcon } from '@/components/CommonIcon/src/hooks';
import { FormInstance } from 'element-plus';
const tableRef = ref(); const tableRef = ref();
const formRef = ref(); const formRef = ref();
@ -38,7 +39,7 @@ const onPageSizeChange = async (value: number) => {
* 重置表单 * 重置表单
* @param formEl * @param formEl
*/ */
const resetForm = async formEl => { const resetForm = async (formEl: FormInstance) => {
if (!formEl) return; if (!formEl) return;
formEl.resetFields(); formEl.resetFields();
await onSearch(); await onSearch();
@ -105,7 +106,7 @@ onMounted(() => {
<template #operation="{ row }"> <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(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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -74,12 +74,12 @@ onMounted(() => {
<template #visible="{ row, index }"> <template #visible="{ row, index }">
<el-switch <el-switch
v-model="row.visible" v-model="row.visible"
:active-text="$t('show')"
:active-value="true" :active-value="true"
:inactive-text="$t('hidden')"
:inactive-value="false" :inactive-value="false"
:loading="switchLoadMap[index]?.loading" :loading="switchLoadMap[index]?.loading"
:style="switchStyle" :style="switchStyle"
active-text="显示"
inactive-text="隐藏"
inline-prompt inline-prompt
@click="onchangeVisible(row, index)" @click="onchangeVisible(row, index)"
/> />
@ -96,7 +96,7 @@ onMounted(() => {
<template #operation="{ row }"> <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(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-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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}

View File

@ -120,7 +120,7 @@ onMounted(() => {
<template #operation="{ row }"> <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(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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $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(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-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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $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-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> <template #reference>
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary"> <el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
{{ $t('delete') }} {{ $t('delete') }}