Merge branch 'master' of http://192.168.1.22:3000/frontend/pqs-9100_client
# Conflicts: # frontend/src/views/home/components/tree.vue
This commit is contained in:
@@ -23,7 +23,7 @@ export const updatePqDev = (params: Device.ResPqDev) => {
|
|||||||
|
|
||||||
//删除被检设备
|
//删除被检设备
|
||||||
export const deletePqDev = (params: string[]) => {
|
export const deletePqDev = (params: string[]) => {
|
||||||
return http.delete(`/pqDev/delete`, params)
|
return http.post(`/pqDev/delete`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
//导出被检设备
|
//导出被检设备
|
||||||
|
|||||||
35
frontend/src/api/monitor/interface/index.ts
Normal file
35
frontend/src/api/monitor/interface/index.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
import type { ReqPage,ResPage } from '@/api/interface'
|
||||||
|
|
||||||
|
// 被检设备模块
|
||||||
|
export namespace Monitor {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电能质量指标字典数据表格分页查询参数
|
||||||
|
*/
|
||||||
|
export interface ReqPqMonParams extends ReqPage{
|
||||||
|
id: string; // 装置序号id 必填
|
||||||
|
devType?: string; // 设备名称
|
||||||
|
createTime?:string; //创建时间
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被检设备新增、修改、根据id查询返回的对象
|
||||||
|
*/
|
||||||
|
export interface ResPqMon {
|
||||||
|
id: string; //监测点ID
|
||||||
|
code: string; //默认与谐波系统监测点ID相同
|
||||||
|
devId: string; //所属设备ID
|
||||||
|
name: string; //所属母线
|
||||||
|
num: number; //监测点序号
|
||||||
|
pt: number; //PT变比
|
||||||
|
ct: number; //CT变比
|
||||||
|
ptType:string; //接线方式,字典表
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 被检设备表格查询分页返回的对象;
|
||||||
|
*/
|
||||||
|
export interface ResPqMonPage extends ResPage<ResPqMon> {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
29
frontend/src/api/monitor/monitor.ts
Normal file
29
frontend/src/api/monitor/monitor.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import type { Monitor } from './interface'
|
||||||
|
import { ADMIN as rePrefix } from '@/api/config/serviceName'
|
||||||
|
import http from '@/api'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name 被检设备管理模块
|
||||||
|
*/
|
||||||
|
|
||||||
|
//获取被检设备
|
||||||
|
export const getPqMonList = (params: Monitor.ReqPqMonParams) => {
|
||||||
|
return http.post(`/pqMon/list`, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
//添加被检设备
|
||||||
|
export const addPqMon = (params: Monitor.ResPqMon) => {
|
||||||
|
return http.post(`/pqMon/add`, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
//编辑被检设备
|
||||||
|
export const updatePqMon = (params: Monitor.ResPqMon) => {
|
||||||
|
return http.put(`/pqMon/update`, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
//删除被检设备
|
||||||
|
export const deletePqMon = (params: string[]) => {
|
||||||
|
return http.post(`/pqMon/delete`, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -12,11 +12,16 @@ export namespace Role {
|
|||||||
|
|
||||||
//角色接口
|
//角色接口
|
||||||
export interface RoleBO {
|
export interface RoleBO {
|
||||||
id?: string; //角色类型ID
|
id: string; //角色类型ID
|
||||||
name: string; //角色类型名称
|
name: string; //角色类型名称
|
||||||
code: string; //角色代码
|
code: string; //角色代码
|
||||||
type: number; //角色类型
|
type: number; //角色类型
|
||||||
remark:string; //角色描述
|
remark?:string; //角色描述
|
||||||
|
state:number;
|
||||||
|
createBy?:string; //
|
||||||
|
createTime?: string; // 创建时间
|
||||||
|
updateBy?: string; //
|
||||||
|
updateTime?: string; // 更新时间
|
||||||
}
|
}
|
||||||
|
|
||||||
//角色+资源
|
//角色+资源
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ResPage } from '@/api/interface'
|
import type { ResPage } from '@/api/interface'
|
||||||
import { Role } from './interface'
|
import type { Role } from './interface'
|
||||||
import { ADMIN as rePrefix } from '@/api/config/serviceName'
|
import { ADMIN as rePrefix } from '@/api/config/serviceName'
|
||||||
import http from '@/api'
|
import http from '@/api'
|
||||||
|
|
||||||
@@ -8,7 +8,7 @@ import http from '@/api'
|
|||||||
*/
|
*/
|
||||||
// 获取角色列表
|
// 获取角色列表
|
||||||
export const getRoleList = (params: Role.ReqRoleParams) => {
|
export const getRoleList = (params: Role.ReqRoleParams) => {
|
||||||
return http.post<ResPage<Role.RoleBO>>(`/role/list`, params)
|
return http.get(`/sysRole/list`, params)
|
||||||
|
|
||||||
// return http.post<ResPage<Role.ResRoleList>>(`/RoleList_Post`, params)
|
// return http.post<ResPage<Role.ResRoleList>>(`/RoleList_Post`, params)
|
||||||
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/list`, params)
|
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/list`, params)
|
||||||
@@ -16,17 +16,17 @@ export const getRoleList = (params: Role.ReqRoleParams) => {
|
|||||||
|
|
||||||
// 新增角色
|
// 新增角色
|
||||||
export const addRole = (params: Role.RoleBO) => {
|
export const addRole = (params: Role.RoleBO) => {
|
||||||
return http.post(`/role/add`, params)
|
return http.post(`/sysRole/add`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑角色
|
// 编辑角色
|
||||||
export const editRole = (params: Role.RoleBO) => {
|
export const editRole = (params: Role.RoleBO) => {
|
||||||
return http.post(`/role/edit`, params)
|
return http.put(`/sysRole/edit`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除角色
|
// 删除角色
|
||||||
export const deleteRole = (params: { id: string[] }) => {
|
export const deleteRole = (params: { id: string[] }) => {
|
||||||
return http.post(`/role/del`, params)
|
return http.post(`/sysRole/del`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -35,60 +35,3 @@ export const editRoleAndPermission = (params: Role.ReqRoleAndPermission) => {
|
|||||||
return http.post(`/role/edit_RoleAndPermission`, params)
|
return http.post(`/role/edit_RoleAndPermission`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// // 获取树形用户列表
|
|
||||||
// export const getRoleTreeList = (params: Role.ReqRoleParams) => {
|
|
||||||
// return http.post<ResPage<Role.ResRoleList>>(`${rePrefix}/role/tree/list`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export const addRole = (params: { id: string ; rolename: string;status: number; describe:string; }) => {
|
|
||||||
// return http.post(`/RoleList_Add`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 批量添加角色
|
|
||||||
// export const BatchAddRole = (params: FormData) => {
|
|
||||||
// return http.post(`${rePrefix}/role/import`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 切换角色状态
|
|
||||||
// export const changeRoleStatus = (params: { id: string; status: number }) => {
|
|
||||||
// return http.post(`${rePrefix}/role/change`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 重置用户密码
|
|
||||||
// export const resetUserPassWord = (params: { id: string }) => {
|
|
||||||
// return http.post(`${rePrefix}/role/rest_password`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 导出角色数据
|
|
||||||
// export const exportRoleInfo = (params: Role.ReqRoleParams) => {
|
|
||||||
// return http.download(`${rePrefix}/role/export`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 获取角色状态字典
|
|
||||||
// export const getRoleStatus = () => {
|
|
||||||
// return http.get<Role.ResStatus[]>(`${rePrefix}/role/status`)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 获取用户性别字典
|
|
||||||
// export const getUserGender = () => {
|
|
||||||
// return http.get<User.ResGender[]>(`${rePrefix}/user/gender`)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 获取角色权限列表
|
|
||||||
// export const getRoleDepartment = () => {
|
|
||||||
// return http.get<Role.ResPermissionList[]>(`${rePrefix}/role/permission`)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 获取用户角色字典
|
|
||||||
// export const getUserRole = () => {
|
|
||||||
// return http.get<User.ResRole[]>(`${rePrefix}/user/role`)
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export const updateDictData = (params: Dict.ResDictData) => {
|
|||||||
|
|
||||||
//删除字典数据
|
//删除字典数据
|
||||||
export const deleteDictData = (params: string[]) => {
|
export const deleteDictData = (params: string[]) => {
|
||||||
return http.delete(`/dictData/delete`, params)
|
return http.post(`/dictData/delete`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getDicDataById = (params: string) => {
|
export const getDicDataById = (params: string) => {
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ export const updateDictPq = (params: Dict.ResDictPq) => {
|
|||||||
|
|
||||||
//删除字典类型
|
//删除字典类型
|
||||||
export const deleteDictPq = (params: string[]) => {
|
export const deleteDictPq = (params: string[]) => {
|
||||||
return http.delete(`/dictPq/delete`, params)
|
return http.post(`/dictPq/delete`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export const addDictTree = (params: Dict.ResDictTree) => {
|
|||||||
|
|
||||||
//编辑字典类型
|
//编辑字典类型
|
||||||
export const updateDictTree = (params: Dict.ResDictTree) => {
|
export const updateDictTree = (params: Dict.ResDictTree) => {
|
||||||
return http.post(`/dictTree/update`, params)
|
return http.put(`/dictTree/update`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
//删除字典类型
|
//删除字典类型
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export const updateDictType = (params: Dict.ResDictType) => {
|
|||||||
|
|
||||||
//删除字典类型
|
//删除字典类型
|
||||||
export const deleteDictType = (params: string[]) => {
|
export const deleteDictType = (params: string[]) => {
|
||||||
return http.delete(`/dictType/delete`, params)
|
return http.post(`/dictType/delete`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
//导出字典类型
|
//导出字典类型
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export namespace User {
|
|||||||
*/
|
*/
|
||||||
export interface ReqUserParams extends ReqPage{
|
export interface ReqUserParams extends ReqPage{
|
||||||
id: string; // 装置序号用户ID 必填
|
id: string; // 装置序号用户ID 必填
|
||||||
name: string; //用户名(别名)
|
name?: string; //用户名(别名)
|
||||||
loginTime?: string;//最后一次登录时间
|
loginTime?: string;//最后一次登录时间
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,8 +44,19 @@ export namespace User {
|
|||||||
createTime?: string;//创建时间
|
createTime?: string;//创建时间
|
||||||
updateBy?: string;//更新用户
|
updateBy?: string;//更新用户
|
||||||
updateTime?: string;//更新时间
|
updateTime?: string;//更新时间
|
||||||
|
roleIds?: string[]; //
|
||||||
|
roleNames?:string[]; //
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 用户接口
|
||||||
|
export interface ResPassWordUser {
|
||||||
|
id: string; //用户ID,作为唯一标识
|
||||||
|
oldPassword: string; //密码
|
||||||
|
newPassword: string; //新密码
|
||||||
|
surePassword:string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户表格查询分页返回的对象;
|
* 用户表格查询分页返回的对象;
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
import type { Role } from './../role/interface/index';
|
||||||
import type { ResPage } from '@/api/interface'
|
import type { ResPage } from '@/api/interface'
|
||||||
import type { User } from './interface'
|
import type { User} from './interface'
|
||||||
import { ADMIN as rePrefix } from '@/api/config/serviceName'
|
import { ADMIN as rePrefix } from '@/api/config/serviceName'
|
||||||
import http from '@/api'
|
import http from '@/api'
|
||||||
|
|
||||||
@@ -8,50 +9,33 @@ import http from '@/api'
|
|||||||
*/
|
*/
|
||||||
// 获取用户列表
|
// 获取用户列表
|
||||||
export const getUserList = (params: User.ReqUserParams) => {
|
export const getUserList = (params: User.ReqUserParams) => {
|
||||||
return http.post(`/user/list`, params)
|
return http.post(`/sysUser/list`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取树形用户列表
|
|
||||||
// export const getUserTreeList = (params: User.ReqUserParams) => {
|
|
||||||
// return http.post<ResPage<User.ResUserList>>(`${rePrefix}/user/tree/list`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 新增用户
|
// 新增用户
|
||||||
export const addUser = (params: User.ResUser) => {
|
export const addUser = (params: User.ResUser) => {
|
||||||
return http.post(`/user/add`, params)
|
return http.post(`/sysUser/add`, params)
|
||||||
}
|
|
||||||
|
|
||||||
// 批量添加用户
|
|
||||||
export const BatchAddUser = (params: User.ReqUserParams) => {
|
|
||||||
return http.post(`$/user/import`, params)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 编辑用户
|
// 编辑用户
|
||||||
export const updateUser = (params: User.ResUser) => {
|
export const updateUser = (params: User.ResUser) => {
|
||||||
return http.post(`/user/update`, params)
|
return http.put(`/sysUser/update`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除用户
|
// 删除用户
|
||||||
export const deleteUser = (params: string[] ) => {
|
export const deleteUser = (params: string[] ) => {
|
||||||
return http.post(`/user/delete`, params)
|
return http.post(`/sysUser/delete`, params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换用户状态
|
|
||||||
// export const changeUserStatus = (params: { id: string; status: number }) => {
|
|
||||||
// return http.post(`${rePrefix}/user/change`, params)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 重置用户密码
|
// 获取角色列表
|
||||||
// export const resetUserPassWord = (params: { id: string }) => {
|
export const getRoleList = () => {
|
||||||
// return http.post(`${rePrefix}/user/rest_password`, params)
|
return http.get<Role.RoleBO>(`/sysRole/simpleList`)
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 导出用户数据
|
//修改密码
|
||||||
export const exportUserInfo = (params: User.ReqUserParams) => {
|
export const updatePassWord = (params: User.ResPassWordUser) => {
|
||||||
return http.download(`${rePrefix}/user/export`, params)
|
return http.put(`/sysUser/updatePassword`,params)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取用户状态字典
|
|
||||||
// export const getUserStatus = () => {
|
|
||||||
// return http.get<User.ResStatus[]>(`${rePrefix}/user/status`)
|
|
||||||
// }
|
|
||||||
|
|||||||
@@ -138,40 +138,42 @@ const updateDateRange = () => {
|
|||||||
} else if (timeUnit.value === '周') {
|
} else if (timeUnit.value === '周') {
|
||||||
startDate.value = getStartOfWeek(today.value)
|
startDate.value = getStartOfWeek(today.value)
|
||||||
endDate.value = getEndOfWeek(today.value)
|
endDate.value = getEndOfWeek(today.value)
|
||||||
console.log(endDate.value.toLocaleDateString())
|
//console.log(endDate.value.toLocaleDateString())
|
||||||
} else if (timeUnit.value === '月') {
|
} else if (timeUnit.value === '月') {
|
||||||
// 获取本月的开始和结束日期
|
// 获取本月的开始和结束日期
|
||||||
startDate.value = new Date(today.value.getFullYear(), today.value.getMonth(), 1);
|
startDate.value = new Date(today.value.getFullYear(), today.value.getMonth(), 1);
|
||||||
endDate.value = new Date(today.value.getFullYear(), today.value.getMonth() + 1, 0);
|
endDate.value = new Date(today.value.getFullYear(), today.value.getMonth() + 1, 0);
|
||||||
|
|
||||||
// 确保结束日期不超过今天
|
// // 确保结束日期不超过今天
|
||||||
if (endDate.value > today.value) {
|
// if (endDate.value > today.value) {
|
||||||
endDate.value = new Date(today.value);
|
// endDate.value = new Date(today.value);
|
||||||
endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
||||||
}
|
// }
|
||||||
|
|
||||||
} else if (timeUnit.value === '季度') {
|
} else if (timeUnit.value === '季度') {
|
||||||
const quarter = Math.floor(today.value.getMonth() / 3);
|
const quarter = Math.floor(today.value.getMonth() / 3);
|
||||||
startDate.value = new Date(today.value.getFullYear(), quarter * 3, 1);
|
startDate.value = new Date(today.value.getFullYear(), quarter * 3, 1);
|
||||||
endDate.value = new Date(today.value.getFullYear(), quarter * 3 + 3, 0);
|
endDate.value = new Date(today.value.getFullYear(), quarter * 3 + 3, 0);
|
||||||
|
|
||||||
// 确保结束日期不超过今天
|
// // 确保结束日期不超过今天
|
||||||
if (endDate.value > today.value) {
|
// if (endDate.value > today.value) {
|
||||||
endDate.value = new Date(today.value);
|
// endDate.value = new Date(today.value);
|
||||||
endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
||||||
}
|
// }
|
||||||
|
|
||||||
} else if (timeUnit.value === '年') {
|
} else if (timeUnit.value === '年') {
|
||||||
startDate.value = new Date(today.value.getFullYear(), 0, 1);
|
startDate.value = new Date(today.value.getFullYear(), 0, 1);
|
||||||
endDate.value = new Date(today.value.getFullYear(), 11, 31);
|
endDate.value = new Date(today.value.getFullYear(), 11, 31);
|
||||||
|
|
||||||
// 确保结束日期不超过今天
|
// // 确保结束日期不超过今天
|
||||||
if (endDate.value > today.value) {
|
// if (endDate.value > today.value) {
|
||||||
endDate.value = new Date(today.value);
|
// console.log("1111")
|
||||||
endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
// endDate.value = new Date(today.value);
|
||||||
}
|
// endDate.value.setHours(23, 59, 59, 999); // 设置结束时间为今天的23:59:59.999
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const getStartOfWeek = (date: Date) => {
|
const getStartOfWeek = (date: Date) => {
|
||||||
@@ -192,8 +194,8 @@ const getEndOfWeek = (date: Date) => {
|
|||||||
today.setHours(23, 59, 59, 999); // 设置今天的结束时间(23:59:59.999)
|
today.setHours(23, 59, 59, 999); // 设置今天的结束时间(23:59:59.999)
|
||||||
|
|
||||||
// 返回不超过今天的结束时间
|
// 返回不超过今天的结束时间
|
||||||
return endOfWeek > today ? today : endOfWeek;
|
//return endOfWeek > today ? today : endOfWeek;
|
||||||
//return endOfWeek
|
return endOfWeek
|
||||||
}
|
}
|
||||||
const prevPeriod = () => {
|
const prevPeriod = () => {
|
||||||
const prevStartDate = new Date(startDate.value)
|
const prevStartDate = new Date(startDate.value)
|
||||||
@@ -206,8 +208,13 @@ const prevPeriod = () => {
|
|||||||
prevStartDate.setDate(prevStartDate.getDate() - 7)
|
prevStartDate.setDate(prevStartDate.getDate() - 7)
|
||||||
prevEndDate.setDate(prevEndDate.getDate() - 7)
|
prevEndDate.setDate(prevEndDate.getDate() - 7)
|
||||||
} else if (timeUnit.value === '月') {
|
} else if (timeUnit.value === '月') {
|
||||||
|
|
||||||
|
|
||||||
prevStartDate.setMonth(prevStartDate.getMonth() - 1)
|
prevStartDate.setMonth(prevStartDate.getMonth() - 1)
|
||||||
prevEndDate.setMonth(prevEndDate.getMonth() - 1)
|
prevEndDate.setMonth(prevEndDate.getMonth() - 1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else if (timeUnit.value === '季度') {
|
} else if (timeUnit.value === '季度') {
|
||||||
prevStartDate.setMonth(prevStartDate.getMonth() - 3)
|
prevStartDate.setMonth(prevStartDate.getMonth() - 3)
|
||||||
prevEndDate.setMonth(prevEndDate.getMonth() - 3)
|
prevEndDate.setMonth(prevEndDate.getMonth() - 3)
|
||||||
@@ -251,6 +258,7 @@ const nextPeriod = () => {
|
|||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const updateNextButtonStatus = () => {
|
const updateNextButtonStatus = () => {
|
||||||
|
//console.log(endDate.value)
|
||||||
// 更新下一个按钮的禁用状态
|
// 更新下一个按钮的禁用状态
|
||||||
const maxDate = new Date() // 假设最新日期为今天
|
const maxDate = new Date() // 假设最新日期为今天
|
||||||
// 将 maxDate 设置为当天的开始时间
|
// 将 maxDate 设置为当天的开始时间
|
||||||
@@ -263,6 +271,7 @@ const updateNextButtonStatus = () => {
|
|||||||
emitDateChange() // 变化时也发出更新事件
|
emitDateChange() // 变化时也发出更新事件
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 限制开始日期不能选择超过当前日期
|
// 限制开始日期不能选择超过当前日期
|
||||||
const disableStartDate = (date: Date) => {
|
const disableStartDate = (date: Date) => {
|
||||||
return date > today.value
|
return date > today.value
|
||||||
|
|||||||
@@ -1,40 +1,28 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- 基础信息弹出框 -->
|
<!-- 基础信息弹出框 -->
|
||||||
<el-dialog :model-value="dialogVisible" :title="title" v-bind="dialogSmall" @close="handleCancel" width="500" draggable>
|
<el-dialog :model-value="dialogVisible" :title="dialogTitle" v-bind="dialogSmall" @close="close" >
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
<el-form :model="data"
|
<el-form :model="formContent"
|
||||||
ref='formRuleRef'
|
ref='formRuleRef'
|
||||||
:rules='rules'
|
:rules='rules'
|
||||||
>
|
>
|
||||||
<el-form-item label="名称" prop='name' :label-width="100">
|
<el-form-item label="名称" prop='name' :label-width="100">
|
||||||
<el-input v-model="data.name" placeholder="请输入名称" autocomplete="off" />
|
<el-input v-model="formContent.name" placeholder="请输入名称" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="编码" prop='code' :label-width="100">
|
<el-form-item label="编码" prop='code' :label-width="100">
|
||||||
<el-input v-model="data.code" placeholder="请输入编码" autocomplete="off" />
|
<el-input v-model="formContent.code" placeholder="请输入编码" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="类型" prop='type' :label-width="100">
|
|
||||||
<el-select v-model="data.type" placeholder="请选择类型" autocomplete="off">
|
|
||||||
<el-option
|
|
||||||
v-for="item in dictStore.getDictData('roleType')"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.code"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="描述" prop='remark' :label-width="100">
|
<el-form-item label="描述" prop='remark' :label-width="100">
|
||||||
<el-input v-model="data.remark" :rows="2" type="textarea" placeholder="请输入备注" autocomplete="off" />
|
<el-input v-model="formContent.remark" :rows="2" type="textarea" placeholder="请输入备注" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="handleCancel">取消</el-button>
|
<el-button @click="close()">取消</el-button>
|
||||||
<el-button type="primary" @click="handleOK">
|
<el-button type="primary" @click="save()">
|
||||||
保存
|
保存
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
@@ -44,32 +32,52 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { FormInstance,FormItemRule } from 'element-plus'
|
import{ ElMessage, type FormInstance,type FormItemRule } from 'element-plus'
|
||||||
import { ProTableInstance } from '@/components/ProTable/interface'
|
import type { ProTableInstance } from '@/components/ProTable/interface'
|
||||||
import { ref,computed } from 'vue'
|
import { ref,computed, Ref } from 'vue'
|
||||||
import { Role } from '@/api/role/interface'
|
import { type Role } from '@/api/role/interface'
|
||||||
import {dialogSmall} from '@/utils/elementBind'
|
import {dialogSmall} from '@/utils/elementBind'
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import {
|
import {addRole,editRole,} from '@/api/role/role'
|
||||||
addRole,
|
|
||||||
editRole,
|
|
||||||
} from '@/api/role/role'
|
|
||||||
|
|
||||||
const dictStore = useDictStore()
|
const dictStore = useDictStore()
|
||||||
|
// 定义弹出组件元信息
|
||||||
|
const dialogFormRef = ref()
|
||||||
|
|
||||||
const {dialogVisible,title,data,openType,getTableList} = defineProps<{
|
function useMetaInfo() {
|
||||||
dialogVisible:boolean;
|
const dialogVisible = ref(false)
|
||||||
title:string;
|
const titleType = ref('add')
|
||||||
openType:string;
|
const formContent = ref<Role.RoleBO>({
|
||||||
getTableList:Function;
|
id: '', //角色类型ID
|
||||||
data:{
|
name: '', //角色类型名称
|
||||||
id?: string; //角色类型ID
|
code: '', //角色代码
|
||||||
name: string; //角色类型名称
|
type: 2, //角色类型
|
||||||
code: string; //角色代码
|
remark:'', //角色描述
|
||||||
type: number;
|
state:1,
|
||||||
remark:string; //角色描述
|
})
|
||||||
|
return { dialogVisible, titleType, formContent }
|
||||||
|
}
|
||||||
|
|
||||||
|
const { dialogVisible, titleType, formContent } = useMetaInfo()
|
||||||
|
|
||||||
|
|
||||||
|
// 清空formContent
|
||||||
|
const resetFormContent = () => {
|
||||||
|
formContent.value = {
|
||||||
|
id: '', //角色类型ID
|
||||||
|
name: '', //角色类型名称
|
||||||
|
code: '', //角色代码
|
||||||
|
type: 2, //角色类型
|
||||||
|
remark:'', //角色描述
|
||||||
|
state:1,
|
||||||
}
|
}
|
||||||
}>();
|
}
|
||||||
|
|
||||||
|
let dialogTitle = computed(() => {
|
||||||
|
return titleType.value === 'add' ? '新增角色' : '编辑角色'
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//定义规则
|
//定义规则
|
||||||
@@ -80,59 +88,61 @@
|
|||||||
code: [{ required: true, message: '编码必填!', trigger: 'blur' }],
|
code: [{ required: true, message: '编码必填!', trigger: 'blur' }],
|
||||||
})
|
})
|
||||||
|
|
||||||
const emit = defineEmits<{
|
|
||||||
(e:'update:visible',value:boolean):void;
|
// 关闭弹窗
|
||||||
}>();
|
const close = () => {
|
||||||
|
dialogVisible.value = false
|
||||||
const handleCancel = () => {
|
// 清空dialogForm中的值
|
||||||
emit('update:visible',false)
|
resetFormContent()
|
||||||
|
// 重置表单
|
||||||
|
dialogFormRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleOK = () => {
|
// 保存数据
|
||||||
|
const save = () => {
|
||||||
ElMessage.info('角色数据提交')
|
|
||||||
try {
|
try {
|
||||||
formRuleRef.value?.validate((valid: boolean) => {
|
dialogFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
// 将表单数据转为json,发送到后端
|
if (formContent.value.id) {
|
||||||
// let confirmFormData = JSON.parse(JSON.stringify(form.value))
|
const result = await editRole(formContent.value);
|
||||||
// console.log(confirmFormData)
|
if(result.code != 'A0000'){
|
||||||
if(openType === "add")
|
ElMessage.error({ message: result.message})
|
||||||
{
|
}else{
|
||||||
addRole(data).then(res => {
|
ElMessage.success({ message: `${dialogTitle.value}成功!` })
|
||||||
// if(res.code === "200")
|
}
|
||||||
// {
|
} else {
|
||||||
ElMessage.success(res.message)
|
const result = await addRole(formContent.value);
|
||||||
getTableList()
|
if(result.code != 'A0000'){
|
||||||
// }
|
ElMessage.error({ message: result.message})
|
||||||
// else
|
}else{
|
||||||
// ElMessage.error(res.message)
|
ElMessage.success({ message: `${dialogTitle.value}成功!` })
|
||||||
})
|
}
|
||||||
|
}
|
||||||
|
close()
|
||||||
|
// 刷新表格
|
||||||
|
await props.refreshTable!()
|
||||||
}
|
}
|
||||||
|
})
|
||||||
if(openType === "edit")
|
} catch (err) {
|
||||||
{
|
console.error('验证过程中出现错误', err)
|
||||||
editRole(data).then(res => {
|
}
|
||||||
// if(res.code === "200")
|
|
||||||
// {
|
|
||||||
ElMessage.success(res.message)
|
|
||||||
getTableList()
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// ElMessage.error(res.message)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
emit('update:visible',false)
|
|
||||||
} else {
|
|
||||||
ElMessage.error('表单验证失败!')
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
} catch (error) {
|
|
||||||
console.error('验证过程中发生错误', error)
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
// 打开弹窗,可能是新增,也可能是编辑
|
||||||
|
const open = async (sign: string, data: Role.RoleBO) => {
|
||||||
|
titleType.value = sign
|
||||||
|
dialogVisible.value = true
|
||||||
|
if (data.id) {
|
||||||
|
formContent.value = { ...data }
|
||||||
|
} else {
|
||||||
|
resetFormContent()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对外映射
|
||||||
|
defineExpose({ open })
|
||||||
|
const props = defineProps<{
|
||||||
|
refreshTable: (() => Promise<void>) | undefined;
|
||||||
|
}>()
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -4,14 +4,12 @@
|
|||||||
ref='proTable'
|
ref='proTable'
|
||||||
:columns='columns'
|
:columns='columns'
|
||||||
:request-api="getTableList"
|
:request-api="getTableList"
|
||||||
:data-callback="dataCallback"
|
|
||||||
>
|
>
|
||||||
<!-- :requestApi="getRoleList" -->
|
<!-- :requestApi="getRoleList" -->
|
||||||
<!-- 表格 header 按钮 -->
|
<!-- 表格 header 按钮 -->
|
||||||
<template #tableHeader='scope'>
|
<template #tableHeader='scope'>
|
||||||
<el-button type='primary' :icon='CirclePlus' @click="openDrawer('新增角色')">新增</el-button>
|
<el-button type='primary' :icon='CirclePlus' @click="openDrawer('新增角色')">新增</el-button>
|
||||||
<el-button type='primary' :icon='Download' plain>导出数据</el-button>
|
<el-button type='danger' :icon='Delete' plain :disabled='!scope.isSelected'
|
||||||
<el-button type='danger' :icon='Delete' plain :disabled='!scope.isSelected'
|
|
||||||
@click='batchDelete(scope.selectedListIds)'>
|
@click='batchDelete(scope.selectedListIds)'>
|
||||||
批量删除
|
批量删除
|
||||||
</el-button>
|
</el-button>
|
||||||
@@ -25,41 +23,20 @@
|
|||||||
|
|
||||||
</ProTable>
|
</ProTable>
|
||||||
</div>
|
</div>
|
||||||
<rolePopup
|
<RolePopup :refresh-table='proTable?.getTableList' ref='rolePopup' />
|
||||||
:dialogVisible=rolePopupVisible
|
|
||||||
:title=rolePopupTitle
|
|
||||||
:data=rolePopupData
|
|
||||||
:openType=openType
|
|
||||||
:getTableList="proTable?.getTableList || (() => {})"
|
|
||||||
@update:visible='rolePopupVisible = $event'
|
|
||||||
/>
|
|
||||||
<!-- :proTable="proTable || {} as ProTableInstance" -->
|
|
||||||
<permissionUnit
|
|
||||||
:dialogVisible=permissionUnitVisible
|
|
||||||
:title=permissionUnitTitle
|
|
||||||
:data=permissionUnitData
|
|
||||||
@update:visible='permissionUnitVisible = $event'
|
|
||||||
/>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang='tsx' name='useRole'>
|
<script setup lang='tsx' name='useRole'>
|
||||||
import { Role } from '@/api/role/interface'
|
import { type Role } from '@/api/role/interface'
|
||||||
import { useHandleData } from '@/hooks/useHandleData'
|
import { useHandleData } from '@/hooks/useHandleData'
|
||||||
import { useDownload } from '@/hooks/useDownload'
|
|
||||||
import { useAuthButtons } from '@/hooks/useAuthButtons'
|
|
||||||
import ProTable from '@/components/ProTable/index.vue'
|
import ProTable from '@/components/ProTable/index.vue'
|
||||||
import rolePopup from './components/rolePopup.vue'
|
import type{ ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
|
||||||
import permissionUnit from './components/permissionUnit.vue'
|
|
||||||
import ImportExcel from '@/components/ImportExcel/index.vue'
|
|
||||||
import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
|
|
||||||
|
|
||||||
import { CirclePlus, Delete, EditPen, Share, Download, Upload, View, Refresh } from '@element-plus/icons-vue'
|
import { CirclePlus, Delete, EditPen, Share, Download, Upload, View, Refresh } from '@element-plus/icons-vue'
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import {
|
import {getRoleList,deleteRole} from '@/api/role/role'
|
||||||
getRoleList,
|
import RolePopup from './components/rolePopup.vue'
|
||||||
deleteRole,
|
import { reactive, ref } from 'vue'
|
||||||
} from '@/api/role/role'
|
|
||||||
import { deleteUser } from '@/api/user/user'
|
|
||||||
|
|
||||||
|
|
||||||
const { rolePopupVisible, permissionUnitVisible, rolePopupTitle, permissionUnitTitle, rolePopupData, permissionUnitData } = useCount()
|
const { rolePopupVisible, permissionUnitVisible, rolePopupTitle, permissionUnitTitle, rolePopupData, permissionUnitData } = useCount()
|
||||||
@@ -77,24 +54,11 @@ function useCount() {
|
|||||||
|
|
||||||
const dictStore = useDictStore()
|
const dictStore = useDictStore()
|
||||||
let openType = ''
|
let openType = ''
|
||||||
|
const rolePopup = ref()
|
||||||
|
|
||||||
// ProTable 实例
|
// ProTable 实例
|
||||||
const proTable = ref<ProTableInstance>()
|
const proTable = ref<ProTableInstance>()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total 这些字段,可以在这里进行处理成这些字段
|
|
||||||
// 或者直接去 hooks/useTable.ts 文件中把字段改为你后端对应的就行
|
|
||||||
const dataCallback = (data: any) => {
|
|
||||||
return {
|
|
||||||
records: data.list,
|
|
||||||
total: data.total,
|
|
||||||
current: data.pageNum,
|
|
||||||
size: data.pageSize,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果你想在请求之前对当前请求参数做一些操作,可以自定义如下函数:params 为当前所有的请求参数(包括分页),最后返回请求列表接口
|
// 如果你想在请求之前对当前请求参数做一些操作,可以自定义如下函数:params 为当前所有的请求参数(包括分页),最后返回请求列表接口
|
||||||
// 默认不做操作就直接在 ProTable 组件上绑定 :requestApi="getUserList"
|
// 默认不做操作就直接在 ProTable 组件上绑定 :requestApi="getUserList"
|
||||||
const getTableList = (params: any) => {
|
const getTableList = (params: any) => {
|
||||||
@@ -105,9 +69,6 @@ const getTableList = (params: any) => {
|
|||||||
return getRoleList(newParams)
|
return getRoleList(newParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 页面按钮权限(按钮权限既可以使用 hooks,也可以直接使用 v-auth 指令,指令适合直接绑定在按钮上,hooks 适合根据按钮权限显示不同的内容)
|
|
||||||
const { BUTTONS } = useAuthButtons()
|
|
||||||
|
|
||||||
// 表格配置项
|
// 表格配置项
|
||||||
const columns = reactive<ColumnProps<Role.RoleBO>[]>([
|
const columns = reactive<ColumnProps<Role.RoleBO>[]>([
|
||||||
{ type: 'selection', fixed: 'left', width: 70 },
|
{ type: 'selection', fixed: 'left', width: 70 },
|
||||||
@@ -124,19 +85,16 @@ const columns = reactive<ColumnProps<Role.RoleBO>[]>([
|
|||||||
search: { el: 'input' },
|
search: { el: 'input' },
|
||||||
minWidth: 180,
|
minWidth: 180,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
prop: 'type',
|
|
||||||
label: '类型',
|
|
||||||
enum: dictStore.getDictData('roleType'),
|
|
||||||
fieldNames: { label: 'label', value: 'code' },
|
|
||||||
search: { el: 'select' },
|
|
||||||
minWidth: 180,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
prop: 'remark',
|
prop: 'remark',
|
||||||
label: '描述',
|
label: '描述',
|
||||||
minWidth: 380,
|
minWidth: 380,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
prop: 'state',
|
||||||
|
label: '状态',
|
||||||
|
minWidth: 100,
|
||||||
|
},
|
||||||
{ prop: 'operation', label: '操作', fixed: 'right', width: 330 },
|
{ prop: 'operation', label: '操作', fixed: 'right', width: 330 },
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -156,74 +114,10 @@ const batchDelete = async (id: string[]) => {
|
|||||||
proTable.value?.getTableList()
|
proTable.value?.getTableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换角色状态
|
|
||||||
const changeStatus = async (row: Role.RoleBO) => {
|
|
||||||
// await useHandleData(changeRoleStatus, {
|
|
||||||
// id: row.id,
|
|
||||||
// status: row.status == 1 ? 0 : 1,
|
|
||||||
// }, `切换【${row.rolename}】角色状态`)
|
|
||||||
// proTable.value?.getTableList()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 导出角色列表
|
|
||||||
//const downloadFile = async () => {
|
|
||||||
// ElMessageBox.confirm('确认导出角色数据?', '温馨提示', { dictType: 'warning' }).then(() =>
|
|
||||||
// useDownload(exportRoleInfo, '角色列表', proTable.value?.searchParam),
|
|
||||||
// )
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 批量添加角色
|
|
||||||
const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
|
|
||||||
const batchAdd = () => {
|
|
||||||
// const params = {
|
|
||||||
// title: '角色',
|
|
||||||
// tempApi: exportRoleInfo,
|
|
||||||
// importApi: BatchAddRole,
|
|
||||||
// getTableList: proTable.value?.getTableList,
|
|
||||||
// }
|
|
||||||
// dialogRef.value?.acceptParams(params)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 打开 drawer(新增、查看、编辑)
|
// 打开 drawer(新增、查看、编辑)
|
||||||
const openDrawer = (title: string, row: Partial<Role.RoleBO> = {}) => {
|
const openDrawer = (titleType: string, row: Partial<Role.RoleBO> = {}) => {
|
||||||
if (title === '新增角色' || title === '编辑角色') {
|
rolePopup.value?.open(titleType, row)
|
||||||
if (title === '新增角色')
|
|
||||||
openType = 'add'
|
|
||||||
else if (title === '编辑角色')
|
|
||||||
openType = 'edit'
|
|
||||||
|
|
||||||
rolePopupVisible.value = true
|
|
||||||
rolePopupTitle.value = title
|
|
||||||
|
|
||||||
const safeRow: Role.RoleBO = {
|
|
||||||
id: row.id || '',
|
|
||||||
name: row.name || '',
|
|
||||||
code: row.code || '',
|
|
||||||
type: row.type || 0,
|
|
||||||
remark: row.remark || '',
|
|
||||||
}
|
|
||||||
|
|
||||||
rolePopupData.value = safeRow
|
|
||||||
|
|
||||||
} else if (title === '设置权限') {
|
|
||||||
permissionUnitVisible.value = true
|
|
||||||
permissionUnitTitle.value = title
|
|
||||||
|
|
||||||
const safeRow: Role.RoleBO = {
|
|
||||||
id: row.id || '',
|
|
||||||
name: row.name || '',
|
|
||||||
code: row.code || '',
|
|
||||||
type: row.type || 0,
|
|
||||||
remark: row.remark || '',
|
|
||||||
}
|
|
||||||
|
|
||||||
permissionUnitData.value = safeRow
|
|
||||||
|
|
||||||
// if (row.permissionList)
|
|
||||||
// {
|
|
||||||
// permissionUnitData.value = row.permissionList;
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
142
frontend/src/views/authority/user/components/passWordPopup.vue
Normal file
142
frontend/src/views/authority/user/components/passWordPopup.vue
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
<template>
|
||||||
|
<!-- 基础信息弹出框 -->
|
||||||
|
<el-dialog v-model='dialogVisible' :title="dialogTitle" v-bind="dialogSmall" @close="close">
|
||||||
|
<div>
|
||||||
|
<el-form :model="formContent"
|
||||||
|
ref='dialogFormRef'
|
||||||
|
:rules='rules'
|
||||||
|
>
|
||||||
|
<el-form-item label="原密码" prop='oldPassword' :label-width="100">
|
||||||
|
<el-input type="oldPassword" v-model="formContent.oldPassword" show-password placeholder="请输入原密码" autocomplete="off" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="新密码" prop='newPassword' :label-width="100">
|
||||||
|
<el-input type="newPassword" v-model="formContent.newPassword" show-password placeholder="请输入新密码" autocomplete="off" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="确认密码" prop='surePassword' :label-width="100">
|
||||||
|
<el-input type="surePassword" v-model="formContent.surePassword" show-password placeholder="请再次输入确认密码" autocomplete="off" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="close()">取消</el-button>
|
||||||
|
<el-button type="primary" @click="save()">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, type Ref } from 'vue'
|
||||||
|
import {dialogSmall} from '@/utils/elementBind'
|
||||||
|
import { ElMessage, type FormInstance,type FormItemRule } from 'element-plus'
|
||||||
|
import {updatePassWord} from '@/api/user/user'
|
||||||
|
// 使用 dayjs 库格式化
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
import { type User } from '@/api/user/interface';
|
||||||
|
|
||||||
|
// 定义弹出组件元信息
|
||||||
|
const dialogFormRef = ref()
|
||||||
|
const dialogTitle = ref('修改密码')
|
||||||
|
const surePassword = ref('')
|
||||||
|
function useMetaInfo() {
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const formContent = ref<User.ResPassWordUser>({
|
||||||
|
id: '', //用户ID,作为唯一标识
|
||||||
|
oldPassword: '',//密码
|
||||||
|
newPassword:'',//
|
||||||
|
surePassword:'',
|
||||||
|
})
|
||||||
|
return { dialogVisible, formContent }
|
||||||
|
}
|
||||||
|
|
||||||
|
const { dialogVisible, formContent } = useMetaInfo()
|
||||||
|
// 清空formContent
|
||||||
|
const resetFormContent = () => {
|
||||||
|
formContent.value = {
|
||||||
|
id: '', //用户ID,作为唯一标识
|
||||||
|
oldPassword: '',//密码
|
||||||
|
newPassword:'',//
|
||||||
|
surePassword:'',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//定义规则
|
||||||
|
const formRuleRef = ref<FormInstance>()
|
||||||
|
// 定义规则
|
||||||
|
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
|
||||||
|
oldPassword: [
|
||||||
|
{ required: true, message: '原密码必填!', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
newPassword: [
|
||||||
|
{ required: true, message: '新密码必填!', trigger: 'blur' },
|
||||||
|
{ pattern: /^(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).{8,16}$/, message: '密码长度为8-16,需包含特殊字符', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
surePassword: [
|
||||||
|
{ required: true, message: '确认密码必填!', trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule: FormItemRule, value: string, callback: Function) => {
|
||||||
|
console.log('1111')
|
||||||
|
if (value !== formContent.value.newPassword) {
|
||||||
|
callback(new Error('两次输入的密码不一致!'));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
const close = () => {
|
||||||
|
dialogVisible.value = false
|
||||||
|
// 清空dialogForm中的值
|
||||||
|
resetFormContent()
|
||||||
|
// 重置表单
|
||||||
|
dialogFormRef.value?.resetFields()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存数据
|
||||||
|
const save = () => {
|
||||||
|
try {
|
||||||
|
dialogFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
if (valid) {
|
||||||
|
if (formContent.value.id) {
|
||||||
|
const result = await updatePassWord(formContent.value);
|
||||||
|
if(result.code != 'A0000'){
|
||||||
|
ElMessage.error({ message: String(result.data)})
|
||||||
|
}else{
|
||||||
|
ElMessage.success({ message: `${dialogTitle.value}成功!` })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close()
|
||||||
|
// 刷新表格
|
||||||
|
await props.refreshTable!()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
console.error('验证过程中出现错误', err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开弹窗是编辑
|
||||||
|
const open = async ( data: User.ResPassWordUser) => {
|
||||||
|
dialogVisible.value = true
|
||||||
|
if (data.id) {
|
||||||
|
formContent.value = { ...data }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对外映射
|
||||||
|
defineExpose({ open })
|
||||||
|
const props = defineProps<{
|
||||||
|
refreshTable: (() => Promise<void>) | undefined;
|
||||||
|
}>()
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<el-dialog v-model='dialogVisible' :title="dialogTitle" v-bind="dialogSmall" @close="close">
|
<el-dialog v-model='dialogVisible' :title="dialogTitle" v-bind="dialogSmall" @close="close">
|
||||||
<div>
|
<div>
|
||||||
<el-form :model="formContent"
|
<el-form :model="formContent"
|
||||||
ref='formRuleRef'
|
ref='dialogFormRef'
|
||||||
:rules='rules'
|
:rules='rules'
|
||||||
>
|
>
|
||||||
<el-form-item label="用户名" prop='name' :label-width="100">
|
<el-form-item label="用户名" prop='name' :label-width="100">
|
||||||
@@ -12,24 +12,26 @@
|
|||||||
<el-form-item label="登录名" prop='loginName' :label-width="100">
|
<el-form-item label="登录名" prop='loginName' :label-width="100">
|
||||||
<el-input v-model="formContent.loginName" placeholder="请输入登录名" autocomplete="off" />
|
<el-input v-model="formContent.loginName" placeholder="请输入登录名" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="密码" prop='password' :label-width="100">
|
<el-form-item label="密码" prop='password' :label-width="100" v-if="IsPasswordShow">
|
||||||
<el-input type="password" v-model="formContent.password" placeholder="请输入密码" autocomplete="off" />
|
<el-input type="password" v-model="formContent.password" show-password placeholder="请输入密码" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label='角色' :label-width='100' prop='roles'>
|
||||||
|
<el-select v-model="formContent.roleIds" multiple placeholder="请选择角色">
|
||||||
|
<el-option
|
||||||
|
v-for="item in roleList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="手机号码" prop='phone' :label-width="100">
|
<el-form-item label="手机号码" prop='phone' :label-width="100">
|
||||||
<el-input v-model="formContent.phone" placeholder="请输入手机号码" autocomplete="off" />
|
<el-input v-model="formContent.phone" placeholder="请输入手机号码" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="邮箱地址" prop='email' :label-width="100">
|
<el-form-item label="邮箱地址" prop='email' :label-width="100">
|
||||||
<el-input v-model="formContent.email" placeholder="请输入邮箱地址" autocomplete="off" />
|
<el-input v-model="formContent.email" placeholder="请输入邮箱地址" autocomplete="off" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="最后一次登录时间" prop='loginTime' :label-width="100">
|
|
||||||
<el-input v-model="formContent.loginTime" placeholder="请输入最后一次登录时间" autocomplete="off" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="登录错误次数" prop='loginErrorTimes' :label-width="100">
|
|
||||||
<el-input v-model="formContent.loginErrorTimes" placeholder="请输入登录错误次数" autocomplete="off" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="用户密码错误锁定时间" prop='lockTime' :label-width="100">
|
|
||||||
<el-input v-model="formContent.lockTime" placeholder="请输入用户密码错误锁定时间" autocomplete="off" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@@ -50,14 +52,18 @@
|
|||||||
import { ElMessage, type FormInstance,type FormItemRule } from 'element-plus'
|
import { ElMessage, type FormInstance,type FormItemRule } from 'element-plus'
|
||||||
import {
|
import {
|
||||||
addUser,
|
addUser,
|
||||||
updateUser
|
updateUser,
|
||||||
} from '@/api/user/user'
|
} from '@/api/user/user'
|
||||||
// 使用 dayjs 库格式化
|
// 使用 dayjs 库格式化
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { type User } from '@/api/user/interface';
|
import { type User } from '@/api/user/interface';
|
||||||
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
|
import { type Role } from '@/api/role/interface';
|
||||||
|
const dictStore = useDictStore()
|
||||||
// 定义弹出组件元信息
|
// 定义弹出组件元信息
|
||||||
const dialogFormRef = ref()
|
const dialogFormRef = ref()
|
||||||
|
const IsPasswordShow = ref(false)
|
||||||
|
const roleList = ref<Role.RoleBO[]>([])
|
||||||
function useMetaInfo() {
|
function useMetaInfo() {
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const titleType = ref('add')
|
const titleType = ref('add')
|
||||||
@@ -71,6 +77,7 @@
|
|||||||
loginTime: '',//最后一次登录时间
|
loginTime: '',//最后一次登录时间
|
||||||
loginErrorTimes: 0,//登录错误次数
|
loginErrorTimes: 0,//登录错误次数
|
||||||
lockTime: '', //用户密码错误锁定时间
|
lockTime: '', //用户密码错误锁定时间
|
||||||
|
state: 1, //
|
||||||
})
|
})
|
||||||
return { dialogVisible, titleType, formContent }
|
return { dialogVisible, titleType, formContent }
|
||||||
}
|
}
|
||||||
@@ -88,6 +95,7 @@
|
|||||||
loginTime: '',//最后一次登录时间
|
loginTime: '',//最后一次登录时间
|
||||||
loginErrorTimes: 0,//登录错误次数
|
loginErrorTimes: 0,//登录错误次数
|
||||||
lockTime: '', //用户密码错误锁定时间
|
lockTime: '', //用户密码错误锁定时间
|
||||||
|
state: 1, //
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,10 +108,13 @@
|
|||||||
const formRuleRef = ref<FormInstance>()
|
const formRuleRef = ref<FormInstance>()
|
||||||
//定义校验规则
|
//定义校验规则
|
||||||
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
|
const rules: Ref<Record<string, Array<FormItemRule>>> = ref({
|
||||||
name: [{ required: true, message: '名称必填!', trigger: 'blur' }],
|
name: [{ required: true, message: '名称必填!', trigger: 'blur' },
|
||||||
loginName: [{ required: true, message: '登录名必填!', trigger: 'blur' }],
|
// 指定正则,此处是数字正则
|
||||||
password: [{ required: true, message: '密码必填!', trigger: 'blur' }],
|
{ pattern: /^[A-Za-z\u4e00-\u9fa5]{1,16}$/, message: '名称需1~16位的英文或汉字', trigger: 'blur' }],
|
||||||
loginErrorTimes: [{ required: true, message: '登录错误次数必填!', trigger: 'blur' }],
|
loginName: [{ required: true, message: '登录名必填!', trigger: 'blur' },
|
||||||
|
{ pattern: /^[a-zA-Z_.]{1}[a-zA-Z0-9_.]{2,15}$/, message: '登录名需2-15位的字母数字符号', trigger: 'blur' }],
|
||||||
|
password: [{ required: true, message: '密码必填!', trigger: 'blur' },
|
||||||
|
{ pattern: /^(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).{8,16}$/, message: '密码长度为8-16,需包含特殊字符', trigger: 'blur' }],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@@ -121,7 +132,6 @@
|
|||||||
try {
|
try {
|
||||||
dialogFormRef.value?.validate(async (valid: boolean) => {
|
dialogFormRef.value?.validate(async (valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
formContent.value.lockTime = dayjs(formContent.value.lockTime).format('YYYY-MM-DD');
|
|
||||||
if (formContent.value.id) {
|
if (formContent.value.id) {
|
||||||
const result = await updateUser(formContent.value);
|
const result = await updateUser(formContent.value);
|
||||||
if(result.code != 'A0000'){
|
if(result.code != 'A0000'){
|
||||||
@@ -148,12 +158,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 打开弹窗,可能是新增,也可能是编辑
|
// 打开弹窗,可能是新增,也可能是编辑
|
||||||
const open = (sign: string, data: User.ResUser) => {
|
const open = async (sign: string, data: User.ResUser,roleParams: Role.RoleBO[]) => {
|
||||||
|
// 获取角色列表
|
||||||
|
roleList.value = roleParams
|
||||||
titleType.value = sign
|
titleType.value = sign
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
if (data.id) {
|
if (data.id) {
|
||||||
|
IsPasswordShow.value = false
|
||||||
formContent.value = { ...data }
|
formContent.value = { ...data }
|
||||||
} else {
|
} else {
|
||||||
|
IsPasswordShow.value = true
|
||||||
resetFormContent()
|
resetFormContent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,33 +18,45 @@
|
|||||||
<template #operation='scope'>
|
<template #operation='scope'>
|
||||||
<el-button type='primary' link :icon='EditPen' @click="openDialog('edit', scope.row)">编辑</el-button>
|
<el-button type='primary' link :icon='EditPen' @click="openDialog('edit', scope.row)">编辑</el-button>
|
||||||
<el-button type='primary' link :icon='Delete' @click='handleDelete(scope.row)'>删除</el-button>
|
<el-button type='primary' link :icon='Delete' @click='handleDelete(scope.row)'>删除</el-button>
|
||||||
|
<el-button type='primary' link :icon='Delete' @click='EditPassWord(scope.row)'>修改密码</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</ProTable>
|
</ProTable>
|
||||||
</div>
|
</div>
|
||||||
<UserPopup :refresh-table='proTable?.getTableList' ref='userPopup' />
|
<UserPopup :refresh-table='proTable?.getTableList' ref='userPopup' />
|
||||||
|
|
||||||
|
<PassWordPopup :refresh-table='proTable?.getTableList' ref='passWordPopup' />
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang='tsx' name='useRole'>
|
<script setup lang='tsx' name='useRole'>
|
||||||
import TimeControl from '@/components/TimeControl/index.vue'
|
import TimeControl from '@/components/TimeControl/index.vue'
|
||||||
import { type User } from '@/api/user/interface'
|
import { type User } from '@/api/user/interface'
|
||||||
import { useHandleData } from '@/hooks/useHandleData'
|
import { useHandleData } from '@/hooks/useHandleData'
|
||||||
import { useDownload } from '@/hooks/useDownload'
|
|
||||||
import { useAuthButtons } from '@/hooks/useAuthButtons'
|
|
||||||
import ProTable from '@/components/ProTable/index.vue'
|
import ProTable from '@/components/ProTable/index.vue'
|
||||||
import UserPopup from './components/userPopup.vue'
|
import UserPopup from './components/userPopup.vue'
|
||||||
|
import PassWordPopup from './components/passWordPopup.vue'
|
||||||
import ImportExcel from '@/components/ImportExcel/index.vue'
|
import ImportExcel from '@/components/ImportExcel/index.vue'
|
||||||
import { type ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
|
import { type ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
|
||||||
import { CirclePlus, Delete, EditPen} from '@element-plus/icons-vue'
|
import { CirclePlus, Delete, EditPen} from '@element-plus/icons-vue'
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import {getUserList, deleteUser,} from '@/api/user/user'
|
import {getUserList, deleteUser,getRoleList} from '@/api/user/user'
|
||||||
import { reactive, ref } from 'vue'
|
import { onMounted, reactive, ref } from 'vue'
|
||||||
|
import { type Role } from '@/api/role/interface'
|
||||||
|
const roleList = ref<Role.RoleBO[]>([])
|
||||||
const dictStore = useDictStore()
|
const dictStore = useDictStore()
|
||||||
const userPopup = ref()
|
const userPopup = ref()
|
||||||
|
const passWordPopup = ref()
|
||||||
// ProTable 实例
|
// ProTable 实例
|
||||||
const proTable = ref<ProTableInstance>()
|
const proTable = ref<ProTableInstance>()
|
||||||
|
|
||||||
|
|
||||||
|
// 初始化时获取角色列表
|
||||||
|
onMounted(async () => {
|
||||||
|
const response = await getRoleList()
|
||||||
|
roleList.value = response.data as unknown as Role.RoleBO[]
|
||||||
|
})
|
||||||
|
|
||||||
// 如果你想在请求之前对当前请求参数做一些操作,可以自定义如下函数:params 为当前所有的请求参数(包括分页),最后返回请求列表接口
|
// 如果你想在请求之前对当前请求参数做一些操作,可以自定义如下函数:params 为当前所有的请求参数(包括分页),最后返回请求列表接口
|
||||||
// 默认不做操作就直接在 ProTable 组件上绑定 :requestApi="getUserList"
|
// 默认不做操作就直接在 ProTable 组件上绑定 :requestApi="getUserList"
|
||||||
const getTableList = (params: any) => {
|
const getTableList = (params: any) => {
|
||||||
@@ -54,8 +66,6 @@
|
|||||||
return getUserList(newParams)
|
return getUserList(newParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 表格配置项
|
// 表格配置项
|
||||||
const columns = reactive<ColumnProps<User.ResUser>[]>([
|
const columns = reactive<ColumnProps<User.ResUser>[]>([
|
||||||
{ type: 'selection', fixed: 'left', width: 70 },
|
{ type: 'selection', fixed: 'left', width: 70 },
|
||||||
@@ -69,22 +79,30 @@
|
|||||||
{
|
{
|
||||||
prop: 'loginName',
|
prop: 'loginName',
|
||||||
label: '登录名',
|
label: '登录名',
|
||||||
minWidth: 180,
|
minWidth: 150,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'password',
|
prop: 'roleNames',
|
||||||
label: '密码',
|
label: '角色',
|
||||||
minWidth: 180,
|
minWidth: 250,
|
||||||
|
render: (scope) => {
|
||||||
|
const roleNames = scope.row.roleNames;
|
||||||
|
const roleArray = Array.isArray(roleNames) ? roleNames : [roleNames];
|
||||||
|
if (roleArray.length > 1) {
|
||||||
|
return roleArray.join(', ');
|
||||||
|
}
|
||||||
|
return roleArray[0] || ''; // 添加默认值
|
||||||
},
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
prop: 'phone',
|
prop: 'phone',
|
||||||
label: '手机号',
|
label: '手机号',
|
||||||
minWidth: 180,
|
minWidth: 150,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'email',
|
prop: 'email',
|
||||||
label: '邮箱',
|
label: '邮箱',
|
||||||
minWidth: 180,
|
minWidth: 150,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'loginTime',
|
prop: 'loginTime',
|
||||||
@@ -105,19 +123,56 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'loginErrorTimes',
|
prop: 'state',
|
||||||
label: '登录错误次数',
|
label: '状态',
|
||||||
minWidth: 180,
|
minWidth: 100,
|
||||||
},
|
enum: dictStore.getDictData('state'),
|
||||||
{
|
fieldNames: { label: 'label', value: 'code' },
|
||||||
prop: 'lockTime',
|
render: (scope: { row: { state: any } }) => {
|
||||||
label: '用户密码错误锁定时间',
|
const { tagType, tagText } = getTagTypeAndText(scope.row.state);
|
||||||
minWidth: 180,
|
return (<el-tag type={tagType}>{tagText}</el-tag>);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{ prop: 'operation', label: '操作', fixed: 'right', width: 330 },
|
{ prop: 'operation', label: '操作', fixed: 'right', width: 330 },
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
// 提取出生成 tag 的逻辑
|
||||||
|
const getTagTypeAndText = (state: number) => {
|
||||||
|
let tagType = 'danger'; // 默认标签类型为 'danger'
|
||||||
|
let tagText = '';
|
||||||
|
|
||||||
|
switch(state) {
|
||||||
|
case 1:
|
||||||
|
tagType = 'success'; // 正常
|
||||||
|
tagText = '正常';
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
tagType = 'warning'; // 锁定
|
||||||
|
tagText = '锁定';
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
tagType = 'info'; // 待审核
|
||||||
|
tagText = '待审核';
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
tagType = 'default'; // 休眠
|
||||||
|
tagText = '休眠';
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
tagType = 'warning'; // 密码过期
|
||||||
|
tagText = '密码过期';
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
tagType = 'danger'; // 删除
|
||||||
|
tagText = '删除';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return { tagType, tagText };
|
||||||
|
}
|
||||||
|
|
||||||
// 处理日期变化的回调函数
|
// 处理日期变化的回调函数
|
||||||
const startDate = ref('')
|
const startDate = ref('')
|
||||||
const endDate = ref('')
|
const endDate = ref('')
|
||||||
@@ -128,17 +183,17 @@ const handleDateChange = (startDateTemp: string, endDateTemp: string) => {
|
|||||||
|
|
||||||
// 打开 drawer(新增、编辑)
|
// 打开 drawer(新增、编辑)
|
||||||
const openDialog = (titleType: string, row: Partial<User.ResUser> = {}) => {
|
const openDialog = (titleType: string, row: Partial<User.ResUser> = {}) => {
|
||||||
userPopup.value?.open(titleType, row)
|
userPopup.value?.open(titleType, row,roleList.value)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除用户信息
|
// 删除用户信息
|
||||||
const handleDelete = async (params: User.ResUser) => {
|
const handleDelete = async (params: User.ResUser) => {
|
||||||
await useHandleData(deleteUser, { id: [params.id] }, `删除【${params.name}】用户`)
|
await useHandleData(deleteUser, [params.id] , `删除【${params.name}】用户`)
|
||||||
proTable.value?.getTableList()
|
proTable.value?.getTableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量删除角色信息
|
// 批量删除用户信息
|
||||||
const batchDelete = async (id: string[]) => {
|
const batchDelete = async (id: string[]) => {
|
||||||
await useHandleData(deleteUser, { id }, '删除所选用户信息')
|
await useHandleData(deleteUser, { id }, '删除所选用户信息')
|
||||||
proTable.value?.clearSelection()
|
proTable.value?.clearSelection()
|
||||||
@@ -146,7 +201,11 @@ const openDialog = (titleType: string, row: Partial<User.ResUser> = {}) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 修改密码
|
||||||
|
const EditPassWord = async (row: User.ResPassWordUser) => {
|
||||||
|
passWordPopup.value?.open(row)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -114,8 +114,6 @@ defineExpose({ getTreeData })
|
|||||||
.tree_container {
|
.tree_container {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
width: 100%;
|
|
||||||
overflow-x: auto;
|
|
||||||
|
|
||||||
.el-tree {
|
.el-tree {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|||||||
@@ -1,163 +1,218 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig">
|
<el-dialog :title="dialogTitle" v-model='dialogVisible' @close="close" v-bind="dialogBig">
|
||||||
<el-divider >设备台账信息</el-divider>
|
<el-tabs type="border-card">
|
||||||
<div class="form-grid">
|
<el-tab-pane label="设备台账信息">
|
||||||
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false">
|
<div class="form-grid">
|
||||||
<el-row :gutter="24" >
|
<el-form :model='formContent' ref='dialogFormRef' :rules='rules' :disabled="false">
|
||||||
<el-col :span="8">
|
<el-row :gutter="24" >
|
||||||
<el-form-item label="设备名称" prop="name">
|
<el-col :span="8">
|
||||||
<el-input v-model='formContent.name' placeholder="请输入设备名称"/>
|
<el-form-item label="设备名称" prop="name">
|
||||||
</el-form-item>
|
<el-input v-model='formContent.name' placeholder="请输入设备名称"/>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
<el-col :span="8">
|
</el-col>
|
||||||
<el-form-item label='设备类型' prop='devType'>
|
<el-col :span="8">
|
||||||
<el-select v-model="formContent.devType" clearable placeholder="请选择设备类型">
|
<el-form-item label='设备类型' prop='devType'>
|
||||||
<el-option
|
<el-select v-model="formContent.devType" clearable placeholder="请选择设备类型">
|
||||||
v-for="item in dictStore.getDictData('Dev_Type')"
|
<el-option
|
||||||
:key="item.id"
|
v-for="item in dictStore.getDictData('Dev_Type')"
|
||||||
:label="item.name"
|
:key="item.id"
|
||||||
:value="item.code"
|
:label="item.name"
|
||||||
/>
|
:value="item.code"
|
||||||
</el-select>
|
/>
|
||||||
</el-form-item>
|
</el-select>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
<el-col :span="8">
|
</el-col>
|
||||||
<el-form-item label="设备通道数" prop="devChns">
|
<el-col :span="8">
|
||||||
<el-select v-model="formContent.devChns" clearable placeholder="请选择设备通道数">
|
<el-form-item label='通讯协议' prop='protocol'>
|
||||||
<el-option
|
<el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议">
|
||||||
v-for="item in dictStore.getDictData('Dev_Chns')"
|
<el-option
|
||||||
:key="item.id"
|
v-for="item in dictStore.getDictData('Event_Type')"
|
||||||
:label="item.name"
|
:key="item.id"
|
||||||
:value="item.code"
|
:label="item.name"
|
||||||
/>
|
:value="item.code"
|
||||||
</el-select>
|
/>
|
||||||
</el-form-item>
|
</el-select>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
</el-row>
|
</el-col>
|
||||||
<el-row :gutter="24" >
|
|
||||||
<el-col :span="8">
|
</el-row>
|
||||||
<el-form-item label="额定电压(V)" prop="devVolt">
|
<el-row :gutter="24" >
|
||||||
<el-select v-model="formContent.devVolt" clearable placeholder="请选择额定电压">
|
<el-col :span="8">
|
||||||
<el-option
|
<el-form-item label="设备通道数" prop="devChns">
|
||||||
v-for="item in dictStore.getDictData('Dev_Volt')"
|
<el-select v-model="formContent.devChns" clearable placeholder="请选择设备通道数">
|
||||||
:key="item.id"
|
<el-option
|
||||||
:label="item.name"
|
v-for="item in dictStore.getDictData('Dev_Chns')"
|
||||||
:value="item.code"
|
:key="item.id"
|
||||||
/>
|
:label="item.name"
|
||||||
</el-select>
|
:value="item.code"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-col>
|
</el-select>
|
||||||
<el-col :span="8">
|
</el-form-item>
|
||||||
<el-form-item label="额定电流(A)" prop="devCurr" >
|
</el-col>
|
||||||
<el-select v-model="formContent.devCurr" clearable placeholder="请选择额定电流">
|
<el-col :span="8">
|
||||||
<el-option
|
<el-form-item label="额定电压(V)" prop="devVolt">
|
||||||
v-for="item in dictStore.getDictData('Dev_Curr')"
|
<el-select v-model="formContent.devVolt" clearable placeholder="请选择额定电压">
|
||||||
:key="item.id"
|
<el-option
|
||||||
:label="item.name"
|
v-for="item in dictStore.getDictData('Dev_Volt')"
|
||||||
:value="item.code"
|
:key="item.id"
|
||||||
/>
|
:label="item.name"
|
||||||
</el-select>
|
:value="item.code"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-col>
|
</el-select>
|
||||||
<el-col :span="8">
|
</el-form-item>
|
||||||
<el-form-item label='生产厂家' prop='manufacturer'>
|
</el-col>
|
||||||
<el-select v-model="formContent.manufacturer" clearable placeholder="请选择生产厂家">
|
<el-col :span="8">
|
||||||
<el-option
|
<el-form-item label="额定电流(A)" prop="devCurr" >
|
||||||
v-for="item in dictStore.getDictData('Dev_Manufacturers')"
|
<el-select v-model="formContent.devCurr" clearable placeholder="请选择额定电流">
|
||||||
:key="item.id"
|
<el-option
|
||||||
:label="item.name"
|
v-for="item in dictStore.getDictData('Dev_Curr')"
|
||||||
:value="item.code"
|
:key="item.id"
|
||||||
/>
|
:label="item.name"
|
||||||
</el-select>
|
:value="item.code"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-col>
|
</el-select>
|
||||||
</el-row>
|
</el-form-item>
|
||||||
<el-row :gutter="24" >
|
</el-col>
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="生产日期" prop="createDate">
|
</el-row>
|
||||||
<el-date-picker
|
<el-row :gutter="24" >
|
||||||
v-model="formContent.createDate"
|
<el-col :span="8">
|
||||||
placeholder="请选择生产日期"
|
<el-form-item label='生产厂家' prop='manufacturer'>
|
||||||
:disabled-date="disabledDate"
|
<el-select v-model="formContent.manufacturer" clearable placeholder="请选择生产厂家">
|
||||||
/>
|
<el-option
|
||||||
|
v-for="item in dictStore.getDictData('Dev_Manufacturers')"
|
||||||
</el-form-item>
|
:key="item.id"
|
||||||
</el-col>
|
:label="item.name"
|
||||||
<el-col :span="8">
|
:value="item.code"
|
||||||
<el-form-item label="出厂编号" prop="createId" placeholder="请输入出厂编号">
|
/>
|
||||||
<el-input v-model="formContent.createId" />
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="固件版本" prop="hardwareVersion">
|
<el-form-item label="生产日期" prop="createDate">
|
||||||
<el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/>
|
<el-date-picker
|
||||||
</el-form-item>
|
v-model="formContent.createDate"
|
||||||
</el-col>
|
placeholder="请选择生产日期"
|
||||||
<el-col :span="8">
|
:disabled-date="disabledDate"
|
||||||
<el-form-item label="软件版本" prop="softwareVersion">
|
/>
|
||||||
<el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
<el-col :span="8">
|
||||||
<el-row :gutter="24" >
|
<el-form-item label="出厂编号" prop="createId" placeholder="请输入出厂编号">
|
||||||
<el-col :span="8">
|
<el-input v-model="formContent.createId" />
|
||||||
<el-form-item label='通讯协议' prop='protocol'>
|
</el-form-item>
|
||||||
<el-select v-model="formContent.protocol" clearable placeholder="请选择通讯协议">
|
</el-col>
|
||||||
<el-option
|
</el-row>
|
||||||
v-for="item in dictStore.getDictData('Event_Type')"
|
<el-row :gutter="24" >
|
||||||
:key="item.id"
|
<el-col :span="8">
|
||||||
:label="item.name"
|
<el-form-item label="固件版本" prop="hardwareVersion">
|
||||||
:value="item.code"
|
<el-input v-model="formContent.hardwareVersion" placeholder="请输入固件版本"/>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-select>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
</el-col>
|
<el-form-item label="软件版本" prop="softwareVersion">
|
||||||
<el-col :span="8">
|
<el-input v-model="formContent.softwareVersion" placeholder="请输入软件版本"/>
|
||||||
<el-form-item label="IP地址" prop="ip">
|
</el-form-item>
|
||||||
<!-- <el-input v-model='formContent.ip'/> -->
|
</el-col>
|
||||||
<IPAddress v-model:value="formContent.ip"/>
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label='设备模式' prop='pattern'>
|
||||||
</el-col>
|
<el-input v-model='formContent.pattern' disabled/>
|
||||||
<el-col :span="8">
|
</el-form-item>
|
||||||
<el-form-item label="端口号" prop="port" placeholder="请输入端口号">
|
</el-col>
|
||||||
<el-input v-model="formContent.port" />
|
</el-row>
|
||||||
</el-form-item>
|
<el-row :gutter="24" >
|
||||||
</el-col>
|
<el-col :span="8">
|
||||||
<el-col :span="8">
|
<el-form-item label="IP地址" prop="ip">
|
||||||
<el-form-item label='是否加密' prop='encryption'>
|
<IPAddress v-model:value="formContent.ip"/>
|
||||||
<el-select v-model="formContent.encryption" clearable placeholder="请选择是否加密">
|
</el-form-item>
|
||||||
<el-option label="是" :value="1"></el-option>
|
</el-col>
|
||||||
<el-option label="否" :value="0"></el-option>
|
<el-col :span="8">
|
||||||
</el-select>
|
<el-form-item label="端口号" prop="port" placeholder="请输入端口号">
|
||||||
</el-form-item>
|
<el-input v-model="formContent.port" />
|
||||||
</el-col>
|
</el-form-item>
|
||||||
</el-row>
|
</el-col>
|
||||||
<el-row :gutter="24" >
|
</el-row>
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label='设备模式' prop='pattern'>
|
<el-row :gutter="24" >
|
||||||
<el-input v-model='formContent.pattern' disabled/>
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label='是否加密' prop='encryption'>
|
||||||
</el-col>
|
<el-select v-model="formContent.encryption" clearable placeholder="请选择是否加密" @change="handleEncryptionChange">
|
||||||
</el-row>
|
<el-option label="是" :value="1"></el-option>
|
||||||
<el-row :gutter="24" v-if="true">
|
<el-option label="否" :value="0"></el-option>
|
||||||
<el-col :span="8">
|
</el-select>
|
||||||
<el-form-item label='样品编号' prop='sampleID' clearable placeholder="请输入样品编号">
|
</el-form-item>
|
||||||
<el-input v-model='formContent.sampleID' />
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="8" v-if="IsPasswordShow">
|
||||||
</el-col>
|
<el-form-item label='识别码' prop='series' clearable placeholder="请输入识别码">
|
||||||
<el-col :span="8">
|
<el-input v-model='formContent.series' show-password/>
|
||||||
<el-form-item label='送样日期' prop='arrivedDate' >
|
</el-form-item>
|
||||||
<el-date-picker
|
</el-col>
|
||||||
v-model="formContent.arrivedDate"
|
<el-col :span="8" v-if="IsPasswordShow">
|
||||||
placeholder="请选择送样日期"
|
<el-form-item label='密钥' prop='devKey' clearable placeholder="请输入密钥">
|
||||||
:disabled-date="disabledDate"
|
<el-input v-model='formContent.devKey' show-password/>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
</el-col>
|
</el-row>
|
||||||
</el-row>
|
<el-row :gutter="24" v-if="DevIsShow">
|
||||||
</el-form>
|
<el-col :span="8">
|
||||||
</div>
|
<el-form-item label='样品编号' prop='sampleID' clearable placeholder="请输入样品编号">
|
||||||
|
<el-input v-model='formContent.sampleID' />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label='送样日期' prop='arrivedDate' >
|
||||||
|
<el-date-picker
|
||||||
|
v-model="formContent.arrivedDate"
|
||||||
|
placeholder="请选择送样日期"
|
||||||
|
:disabled-date="disabledDate"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="24" v-if="MonIsShow">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label='所属地市' prop='cityName' clearable placeholder="请输入所属地市">
|
||||||
|
<el-input v-model='formContent.cityName' />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label='所属供电公司' prop='gDName' clearable placeholder="请输入所属供电公司">
|
||||||
|
<el-input v-model='formContent.gDName' />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label='所属电站' prop='subName' clearable placeholder="请输入所属电站">
|
||||||
|
<el-input v-model='formContent.subName' />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="监测点台账信息" v-if="MonIsShow">
|
||||||
|
<div class='table-box' ref='popupBaseView'>
|
||||||
|
<ProTable
|
||||||
|
ref='proTable'
|
||||||
|
:columns='columns'
|
||||||
|
:request-api='getPqMonList'
|
||||||
|
>
|
||||||
|
<!-- 表格 header 按钮 -->
|
||||||
|
<template #tableHeader='scope'>
|
||||||
|
<el-button type='primary' :icon='CirclePlus' >新增</el-button>
|
||||||
|
<el-button type='danger' :icon='Delete' plain :disabled='!scope.isSelected'>批量删除</el-button>
|
||||||
|
</template>
|
||||||
|
<!-- 表格操作 -->
|
||||||
|
<template #operation>
|
||||||
|
<el-button type='primary' link :icon='EditPen'>复制</el-button>
|
||||||
|
<el-button type='primary' link :icon='EditPen'>编辑</el-button>
|
||||||
|
<el-button type='primary' link :icon='Delete'>删除</el-button>
|
||||||
|
</template>
|
||||||
|
</ProTable>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
</el-tabs>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div >
|
<div >
|
||||||
<el-button @click='close()'>取 消</el-button>
|
<el-button @click='close()'>取 消</el-button>
|
||||||
@@ -175,11 +230,18 @@
|
|||||||
import { type Device } from '@/api/device/interface'
|
import { type Device } from '@/api/device/interface'
|
||||||
import { ElMessage, type FormItemRule } from 'element-plus'
|
import { ElMessage, type FormItemRule } from 'element-plus'
|
||||||
import { addPqDev, updatePqDev } from '@/api/device/device.ts'
|
import { addPqDev, updatePqDev } from '@/api/device/device.ts'
|
||||||
import { computed, type Ref, ref } from 'vue';
|
import { computed, reactive, type Ref, ref } from 'vue';
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import { CirclePlus, Delete } from '@element-plus/icons-vue'
|
import { CirclePlus, Delete ,EditPen} from '@element-plus/icons-vue'
|
||||||
// 使用 dayjs 库格式化
|
// 使用 dayjs 库格式化
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
|
import {getPqMonList,deletePqMon,} from '@/api/monitor/monitor.ts'
|
||||||
|
import { type ColumnProps } from '@/components/ProTable/interface'
|
||||||
|
import { type Monitor } from '@/api/monitor/interface'
|
||||||
|
import { el } from 'element-plus/es/locale'
|
||||||
|
const MonIsShow = ref(false)
|
||||||
|
const DevIsShow = ref(false)
|
||||||
|
const IsPasswordShow = ref(false)
|
||||||
const dictStore = useDictStore()
|
const dictStore = useDictStore()
|
||||||
// 定义弹出组件元信息
|
// 定义弹出组件元信息
|
||||||
const dialogFormRef = ref()
|
const dialogFormRef = ref()
|
||||||
@@ -317,11 +379,28 @@
|
|||||||
const open = (sign: string, data: Device.ResPqDev) => {
|
const open = (sign: string, data: Device.ResPqDev) => {
|
||||||
titleType.value = sign
|
titleType.value = sign
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
|
|
||||||
|
|
||||||
|
if(data.encryption === 1){
|
||||||
|
handleEncryptionChange(1)
|
||||||
|
}else{
|
||||||
|
handleEncryptionChange(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.pattern == '比对式')
|
||||||
|
{
|
||||||
|
MonIsShow.value = true
|
||||||
|
DevIsShow.value = false
|
||||||
|
}else{
|
||||||
|
MonIsShow.value = false
|
||||||
|
DevIsShow.value = true
|
||||||
|
}
|
||||||
|
|
||||||
if (data.id) {
|
if (data.id) {
|
||||||
|
|
||||||
formContent.value = { ...data }
|
formContent.value = { ...data }
|
||||||
} else {
|
} else {
|
||||||
resetFormContent()
|
resetFormContent()
|
||||||
|
handleEncryptionChange(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,5 +411,55 @@
|
|||||||
}>()
|
}>()
|
||||||
|
|
||||||
|
|
||||||
|
const handleEncryptionChange = (value: number) => {
|
||||||
|
// 根据是否加密来显示或隐藏识别码和密钥
|
||||||
|
if(value === 1){
|
||||||
|
IsPasswordShow.value = true
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
IsPasswordShow.value = false
|
||||||
|
formContent.value.series = ''
|
||||||
|
formContent.value.devKey = ''
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果选择"是",则显示;否则隐藏
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格配置项
|
||||||
|
const columns = reactive<ColumnProps<Monitor.ResPqMon>[]>([
|
||||||
|
{ type: 'selection', fixed: 'left', width: 70 },
|
||||||
|
{ type: 'index', fixed: 'left', width: 70, label: '序号' },
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: '所属母线',
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: '被检通道',
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: 'PT变比',
|
||||||
|
width: 110,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: 'CT变比',
|
||||||
|
width: 130,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: '接线方式',
|
||||||
|
width: 130,
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: '',
|
||||||
|
label: '谐波系统监测点ID',
|
||||||
|
minWidth: 250,
|
||||||
|
},
|
||||||
|
{ prop: 'operation', label: '操作', fixed: 'right', width: 200 },
|
||||||
|
])
|
||||||
</script>
|
</script>
|
||||||
@@ -40,7 +40,7 @@ import DevicePopup from '@/views/machine/device/components/devicePopup.vue'
|
|||||||
import { CirclePlus, Delete, EditPen, Download, Upload } from '@element-plus/icons-vue'
|
import { CirclePlus, Delete, EditPen, Download, Upload } from '@element-plus/icons-vue'
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import {getPqDevList, deletePqDev, exportPqDev, downloadTemplate,importPqDev} from '@/api/device/device.ts'
|
import {getPqDevList, deletePqDev, exportPqDev, downloadTemplate,importPqDev} from '@/api/device/device.ts'
|
||||||
import { reactive, ref } from 'vue'
|
import { onMounted, reactive, ref } from 'vue'
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { ElMessageBox } from 'element-plus'
|
||||||
|
|
||||||
const dictStore = useDictStore()
|
const dictStore = useDictStore()
|
||||||
@@ -56,6 +56,7 @@ const getTableList = (params: any) => {
|
|||||||
return getPqDevList(newParams)
|
return getPqDevList(newParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 表格配置项
|
// 表格配置项
|
||||||
const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
||||||
{ type: 'selection', fixed: 'left', width: 70 },
|
{ type: 'selection', fixed: 'left', width: 70 },
|
||||||
@@ -77,22 +78,17 @@ const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
|||||||
prop: 'devChns',
|
prop: 'devChns',
|
||||||
label: '设备通道数',
|
label: '设备通道数',
|
||||||
minWidth: 110,
|
minWidth: 110,
|
||||||
enum: dictStore.getDictData('Dev_Chns'),
|
|
||||||
fieldNames: { label: 'name', value: 'code' },
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'devVolt',
|
prop: 'devVolt',
|
||||||
label: '额定电压(V)',
|
label: '额定电压(V)',
|
||||||
minWidth: 130,
|
minWidth: 130,
|
||||||
enum: dictStore.getDictData('Dev_Volt'),
|
|
||||||
fieldNames: { label: 'name', value: 'code' },
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'devCurr',
|
prop: 'devCurr',
|
||||||
label: '额定电流(A)',
|
label: '额定电流(A)',
|
||||||
minWidth: 130,
|
minWidth: 130,
|
||||||
enum: dictStore.getDictData('Dev_Curr'),
|
|
||||||
fieldNames: { label: 'name', value: 'code' },
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prop: 'manufacturer',
|
prop: 'manufacturer',
|
||||||
@@ -137,7 +133,7 @@ const handleDateChange = (startDateTemp: string, endDateTemp: string) => {
|
|||||||
// 打开 drawer(新增、编辑)
|
// 打开 drawer(新增、编辑)
|
||||||
const openDialog = (titleType: string, row: Partial<Device.ResPqDev> = {}) => {
|
const openDialog = (titleType: string, row: Partial<Device.ResPqDev> = {}) => {
|
||||||
devicePopup.value?.open(titleType, row)
|
devicePopup.value?.open(titleType, row)
|
||||||
|
console.log(columns)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量删除设备
|
// 批量删除设备
|
||||||
|
|||||||
@@ -52,7 +52,7 @@
|
|||||||
<el-form-item label='数据统计类型' :label-width='140' prop='statMethod'>
|
<el-form-item label='数据统计类型' :label-width='140' prop='statMethod'>
|
||||||
<el-select v-model="selectedStatMethods" multiple placeholder="请选择数据统计类型">
|
<el-select v-model="selectedStatMethods" multiple placeholder="请选择数据统计类型">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in dictStore.getDictData('stat_Method')"
|
v-for="item in dictStore.getDictData('Stat_Method')"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code"
|
:value="item.code"
|
||||||
|
|||||||
@@ -125,7 +125,7 @@
|
|||||||
prop: 'statMethod',
|
prop: 'statMethod',
|
||||||
label: '数据统计类型',
|
label: '数据统计类型',
|
||||||
width: 250,
|
width: 250,
|
||||||
enum: dictStore.getDictData('stat_Method'),
|
enum: dictStore.getDictData('Stat_Method'),
|
||||||
fieldNames: { label: 'name', value: 'code' },
|
fieldNames: { label: 'name', value: 'code' },
|
||||||
render: (scope) => {
|
render: (scope) => {
|
||||||
// 假设 statMethod 是一个数组,包含多个 'code' 值
|
// 假设 statMethod 是一个数组,包含多个 'code' 值
|
||||||
@@ -141,14 +141,14 @@
|
|||||||
// 查找与每个 code 值匹配的 name,然后拼接成逗号分割的字符串
|
// 查找与每个 code 值匹配的 name,然后拼接成逗号分割的字符串
|
||||||
//console.log('codeArray',codeArray)
|
//console.log('codeArray',codeArray)
|
||||||
const names = codeArray.map(code => {
|
const names = codeArray.map(code => {
|
||||||
const dictItem = dictStore.getDictData('Event_Type').find(item => item.code === code);
|
const dictItem = dictStore.getDictData('Stat_Method').find(item => item.code === code);
|
||||||
return dictItem ? dictItem.name : ''; // 如果找到匹配的项,返回对应的 name
|
return dictItem ? dictItem.name : ''; // 如果找到匹配的项,返回对应的 name
|
||||||
});
|
});
|
||||||
//console.log('names',names)
|
//console.log('names',names)
|
||||||
return names.join(', '); // 用逗号连接所有的 name
|
return names.join(', '); // 用逗号连接所有的 name
|
||||||
}
|
}
|
||||||
// 查找单个 code 对应的 name
|
// 查找单个 code 对应的 name
|
||||||
const dictItem = dictStore.getDictData('Event_Type').find(item => item.code === codeArray[0]);
|
const dictItem = dictStore.getDictData('Stat_Method').find(item => item.code === codeArray[0]);
|
||||||
return dictItem ? dictItem.name : ''; // 如果找到匹配的项,返回对应的 name
|
return dictItem ? dictItem.name : ''; // 如果找到匹配的项,返回对应的 name
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user