update 修改代码缩进格式
This commit is contained in:
		| @ -56,19 +56,19 @@ const userStore = useUserStore(); | ||||
| const router = useRouter(); | ||||
|  | ||||
| const loginForm = ref<LoginData>({ | ||||
|     tenantId: "000000", | ||||
|     username: 'admin', | ||||
|     password: 'admin123', | ||||
|     rememberMe: false, | ||||
|     code: '', | ||||
|     uuid: '' | ||||
|   tenantId: "000000", | ||||
|   username: 'admin', | ||||
|   password: 'admin123', | ||||
|   rememberMe: false, | ||||
|   code: '', | ||||
|   uuid: '' | ||||
| }); | ||||
|  | ||||
| const loginRules: ElFormRules = { | ||||
|     tenantId: [{ required: true, trigger: "blur", message: "请输入您的租户编号" }], | ||||
|     username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }], | ||||
|     password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }], | ||||
|     code: [{ required: true, trigger: 'change', message: '请输入验证码' }] | ||||
|   tenantId: [{ required: true, trigger: "blur", message: "请输入您的租户编号" }], | ||||
|   username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }], | ||||
|   password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }], | ||||
|   code: [{ required: true, trigger: 'change', message: '请输入验证码' }] | ||||
| }; | ||||
|  | ||||
| const codeUrl = ref(''); | ||||
| @ -87,64 +87,64 @@ const loginRef = ref(ElForm); | ||||
| const tenantList = ref<TenantVO[]>([]); | ||||
|  | ||||
| const handleLogin = () => { | ||||
|     loginRef.value.validate(async (valid:boolean, fields: any) => { | ||||
|         if (valid) { | ||||
|             loading.value = true; | ||||
|             // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码 | ||||
|             if (loginForm.value.rememberMe) { | ||||
|                 Cookies.set("tenantId", loginForm.value.tenantId, { expires: 30 }); | ||||
|                 Cookies.set('username', loginForm.value.username, { expires: 30 }); | ||||
|                 Cookies.set('password', String(encrypt(loginForm.value.password)), { expires: 30 }); | ||||
|                 Cookies.set('rememberMe', String(loginForm.value.rememberMe), { expires: 30 }); | ||||
|             } else { | ||||
|                 // 否则移除 | ||||
|                 Cookies.remove("tenantId"); | ||||
|                 Cookies.remove('username'); | ||||
|                 Cookies.remove('password'); | ||||
|                 Cookies.remove('rememberMe'); | ||||
|             } | ||||
|             // 调用action的登录方法 | ||||
|             // prittier-ignore | ||||
|             const [err] = await to(userStore.login(loginForm.value)); | ||||
|             if (!err) { | ||||
|                 await router.push({ path: redirect.value || '/' }); | ||||
|             } else { | ||||
|                 loading.value = false; | ||||
|                 // 重新获取验证码 | ||||
|                 if (captchaEnabled.value) { | ||||
|                     await getCode(); | ||||
|                 } | ||||
|             } | ||||
|         } else { | ||||
|             console.log('error submit!', fields); | ||||
|   loginRef.value.validate(async (valid: boolean, fields: any) => { | ||||
|     if (valid) { | ||||
|       loading.value = true; | ||||
|       // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码 | ||||
|       if (loginForm.value.rememberMe) { | ||||
|         Cookies.set("tenantId", loginForm.value.tenantId, { expires: 30 }); | ||||
|         Cookies.set('username', loginForm.value.username, { expires: 30 }); | ||||
|         Cookies.set('password', String(encrypt(loginForm.value.password)), { expires: 30 }); | ||||
|         Cookies.set('rememberMe', String(loginForm.value.rememberMe), { expires: 30 }); | ||||
|       } else { | ||||
|         // 否则移除 | ||||
|         Cookies.remove("tenantId"); | ||||
|         Cookies.remove('username'); | ||||
|         Cookies.remove('password'); | ||||
|         Cookies.remove('rememberMe'); | ||||
|       } | ||||
|       // 调用action的登录方法 | ||||
|       // prittier-ignore | ||||
|       const [err] = await to(userStore.login(loginForm.value)); | ||||
|       if (!err) { | ||||
|         await router.push({ path: redirect.value || '/' }); | ||||
|       } else { | ||||
|         loading.value = false; | ||||
|         // 重新获取验证码 | ||||
|         if (captchaEnabled.value) { | ||||
|           await getCode(); | ||||
|         } | ||||
|     }); | ||||
|       } | ||||
|     } else { | ||||
|       console.log('error submit!', fields); | ||||
|     } | ||||
|   }); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * 获取验证码 | ||||
|  */ | ||||
| const getCode = async () => { | ||||
|     const res = await getCodeImg(); | ||||
|     const { data } = res; | ||||
|     captchaEnabled.value = data.captchaEnabled === undefined ? true : data.captchaEnabled; | ||||
|     if (captchaEnabled.value) { | ||||
|         codeUrl.value = 'data:image/gif;base64,' + data.img; | ||||
|         loginForm.value.uuid = data.uuid; | ||||
|     } | ||||
|   const res = await getCodeImg(); | ||||
|   const { data } = res; | ||||
|   captchaEnabled.value = data.captchaEnabled === undefined ? true : data.captchaEnabled; | ||||
|   if (captchaEnabled.value) { | ||||
|     codeUrl.value = 'data:image/gif;base64,' + data.img; | ||||
|     loginForm.value.uuid = data.uuid; | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const getCookie = () => { | ||||
|     const tenantId = Cookies.get("tenantId"); | ||||
|     const username = Cookies.get('username'); | ||||
|     const password = Cookies.get('password'); | ||||
|     const rememberMe = Cookies.get('rememberMe'); | ||||
|     loginForm.value = { | ||||
|         tenantId: tenantId === undefined ? loginForm.value.tenantId : tenantId, | ||||
|         username: username === undefined ? loginForm.value.username : username, | ||||
|         password: password === undefined ? loginForm.value.password : (decrypt(password) as string), | ||||
|         rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) | ||||
|     }; | ||||
|   const tenantId = Cookies.get("tenantId"); | ||||
|   const username = Cookies.get('username'); | ||||
|   const password = Cookies.get('password'); | ||||
|   const rememberMe = Cookies.get('rememberMe'); | ||||
|   loginForm.value = { | ||||
|     tenantId: tenantId === undefined ? loginForm.value.tenantId : tenantId, | ||||
|     username: username === undefined ? loginForm.value.username : username, | ||||
|     password: password === undefined ? loginForm.value.password : (decrypt(password) as string), | ||||
|     rememberMe: rememberMe === undefined ? false : Boolean(rememberMe) | ||||
|   }; | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -152,20 +152,20 @@ const getCookie = () => { | ||||
|  * 获取租户列表 | ||||
|  */ | ||||
| const initTenantList = async () => { | ||||
|     const { data } = await getTenantList(); | ||||
|     tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled; | ||||
|     if (tenantEnabled.value) { | ||||
|         tenantList.value = data.voList; | ||||
|         if (tenantList.value != null && tenantList.value.length !== 0) { | ||||
|             loginForm.value.tenantId = tenantList.value[0].tenantId; | ||||
|         } | ||||
|   const { data } = await getTenantList(); | ||||
|   tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled; | ||||
|   if (tenantEnabled.value) { | ||||
|     tenantList.value = data.voList; | ||||
|     if (tenantList.value != null && tenantList.value.length !== 0) { | ||||
|       loginForm.value.tenantId = tenantList.value[0].tenantId; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getCode(); | ||||
|     initTenantList(); | ||||
|     getCookie(); | ||||
|   getCode(); | ||||
|   initTenantList(); | ||||
|   getCookie(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -178,6 +178,7 @@ onMounted(() => { | ||||
|   background-image: url("../assets/images/login-background.jpg"); | ||||
|   background-size: cover; | ||||
| } | ||||
|  | ||||
| .title { | ||||
|   margin: 0px auto 30px auto; | ||||
|   text-align: center; | ||||
| @ -189,32 +190,39 @@ onMounted(() => { | ||||
|   background: #ffffff; | ||||
|   width: 400px; | ||||
|   padding: 25px 25px 5px 25px; | ||||
|  | ||||
|   .el-input { | ||||
|     height: 40px; | ||||
|  | ||||
|     input { | ||||
|       height: 40px; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .input-icon { | ||||
|     height: 39px; | ||||
|     width: 14px; | ||||
|     margin-left: 0px; | ||||
|   } | ||||
| } | ||||
|  | ||||
| .login-tip { | ||||
|   font-size: 13px; | ||||
|   text-align: center; | ||||
|   color: #bfbfbf; | ||||
| } | ||||
|  | ||||
| .login-code { | ||||
|   width: 33%; | ||||
|   height: 40px; | ||||
|   float: right; | ||||
|  | ||||
|   img { | ||||
|     cursor: pointer; | ||||
|     vertical-align: middle; | ||||
|   } | ||||
| } | ||||
|  | ||||
| .el-login-footer { | ||||
|   height: 40px; | ||||
|   line-height: 40px; | ||||
| @ -223,10 +231,11 @@ onMounted(() => { | ||||
|   width: 100%; | ||||
|   text-align: center; | ||||
|   color: #fff; | ||||
|   font-family: Arial,serif; | ||||
|   font-family: Arial, serif; | ||||
|   font-size: 12px; | ||||
|   letter-spacing: 1px; | ||||
| } | ||||
|  | ||||
| .login-code-img { | ||||
|   height: 40px; | ||||
|   padding-left: 12px; | ||||
|  | ||||
| @ -63,13 +63,13 @@ import { to } from 'await-to-js'; | ||||
| const router = useRouter(); | ||||
|  | ||||
| const registerForm = ref<RegisterForm>({ | ||||
|     tenantId: "", | ||||
|     username: "", | ||||
|     password: "", | ||||
|     confirmPassword: "", | ||||
|     code: "", | ||||
|     uuid: "", | ||||
|     userType: "sys_user" | ||||
|   tenantId: "", | ||||
|   username: "", | ||||
|   password: "", | ||||
|   confirmPassword: "", | ||||
|   code: "", | ||||
|   uuid: "", | ||||
|   userType: "sys_user" | ||||
| }); | ||||
|  | ||||
| // 租户开关 | ||||
| @ -77,30 +77,30 @@ const tenantEnabled = ref(true); | ||||
|  | ||||
|  | ||||
| const equalToPassword = (rule: any, value: string, callback: any) => { | ||||
|     if (registerForm.value.password !== value) { | ||||
|         callback(new Error("两次输入的密码不一致")); | ||||
|     } else { | ||||
|         callback(); | ||||
|     } | ||||
|   if (registerForm.value.password !== value) { | ||||
|     callback(new Error("两次输入的密码不一致")); | ||||
|   } else { | ||||
|     callback(); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| const registerRules: ElFormRules = { | ||||
|     tenantId: [ | ||||
|         { required: true, trigger: "blur", message: "请输入您的租户编号" } | ||||
|     ], | ||||
|     username: [ | ||||
|         { required: true, trigger: "blur", message: "请输入您的账号" }, | ||||
|         { min: 2, max: 20, message: "用户账号长度必须介于 2 和 20 之间", trigger: "blur" } | ||||
|     ], | ||||
|     password: [ | ||||
|         { required: true, trigger: "blur", message: "请输入您的密码" }, | ||||
|         { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" } | ||||
|     ], | ||||
|     confirmPassword: [ | ||||
|         { required: true, trigger: "blur", message: "请再次输入您的密码" }, | ||||
|         { required: true, validator: equalToPassword, trigger: "blur" } | ||||
|     ], | ||||
|     code: [{ required: true, trigger: "change", message: "请输入验证码" }] | ||||
|   tenantId: [ | ||||
|     { required: true, trigger: "blur", message: "请输入您的租户编号" } | ||||
|   ], | ||||
|   username: [ | ||||
|     { required: true, trigger: "blur", message: "请输入您的账号" }, | ||||
|     { min: 2, max: 20, message: "用户账号长度必须介于 2 和 20 之间", trigger: "blur" } | ||||
|   ], | ||||
|   password: [ | ||||
|     { required: true, trigger: "blur", message: "请输入您的密码" }, | ||||
|     { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" } | ||||
|   ], | ||||
|   confirmPassword: [ | ||||
|     { required: true, trigger: "blur", message: "请再次输入您的密码" }, | ||||
|     { required: true, validator: equalToPassword, trigger: "blur" } | ||||
|   ], | ||||
|   code: [{ required: true, trigger: "change", message: "请输入验证码" }] | ||||
| }; | ||||
| const codeUrl = ref(""); | ||||
| const loading = ref(false); | ||||
| @ -110,50 +110,50 @@ const registerRef = ref(ElForm); | ||||
| const tenantList = ref<TenantVO[]>([]); | ||||
|  | ||||
| const handleRegister = () => { | ||||
|     registerRef.value.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             loading.value = true; | ||||
|             const [err] = await to(register(registerForm.value)); | ||||
|             if (!err) { | ||||
|                 const username = registerForm.value.username; | ||||
|                 await ElMessageBox.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", "系统提示", { | ||||
|                     dangerouslyUseHTMLString: true, | ||||
|                     type: "success", | ||||
|                 }); | ||||
|                 await router.push("/login"); | ||||
|             } else { | ||||
|                 loading.value = false; | ||||
|                 if (captchaEnabled) { | ||||
|                     getCode(); | ||||
|                 } | ||||
|             } | ||||
|   registerRef.value.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       loading.value = true; | ||||
|       const [err] = await to(register(registerForm.value)); | ||||
|       if (!err) { | ||||
|         const username = registerForm.value.username; | ||||
|         await ElMessageBox.alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", "系统提示", { | ||||
|           dangerouslyUseHTMLString: true, | ||||
|           type: "success", | ||||
|         }); | ||||
|         await router.push("/login"); | ||||
|       } else { | ||||
|         loading.value = false; | ||||
|         if (captchaEnabled) { | ||||
|           getCode(); | ||||
|         } | ||||
|     }); | ||||
|       } | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| const getCode = async () => { | ||||
|     const { data } = await getCodeImg(); | ||||
|     captchaEnabled.value = data.captchaEnabled === undefined ? true : data.captchaEnabled; | ||||
|     if (captchaEnabled.value) { | ||||
|         codeUrl.value = "data:image/gif;base64," + data.img; | ||||
|         registerForm.value.uuid = data.uuid; | ||||
|     } | ||||
|   const { data } = await getCodeImg(); | ||||
|   captchaEnabled.value = data.captchaEnabled === undefined ? true : data.captchaEnabled; | ||||
|   if (captchaEnabled.value) { | ||||
|     codeUrl.value = "data:image/gif;base64," + data.img; | ||||
|     registerForm.value.uuid = data.uuid; | ||||
|   } | ||||
| } | ||||
|  | ||||
| const initTenantList = async () => { | ||||
|     const { data } = await getTenantList(); | ||||
|     tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled; | ||||
|     if (tenantEnabled.value) { | ||||
|         tenantList.value = data.voList; | ||||
|         if (tenantList.value != null && tenantList.value.length !== 0) { | ||||
|             registerForm.value.tenantId = tenantList.value[0].tenantId; | ||||
|         } | ||||
|   const { data } = await getTenantList(); | ||||
|   tenantEnabled.value = data.tenantEnabled === undefined ? true : data.tenantEnabled; | ||||
|   if (tenantEnabled.value) { | ||||
|     tenantList.value = data.voList; | ||||
|     if (tenantList.value != null && tenantList.value.length !== 0) { | ||||
|       registerForm.value.tenantId = tenantList.value[0].tenantId; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getCode(); | ||||
|     initTenantList(); | ||||
|   getCode(); | ||||
|   initTenantList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
|  | ||||
| @ -135,9 +135,9 @@ import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } | ||||
| import { DeptForm, DeptQuery, DeptVO } from "@/api/system/dept/types"; | ||||
|  | ||||
| interface DeptOptionsType { | ||||
|     deptId: number | string; | ||||
|     deptName: string; | ||||
|     children: DeptOptionsType[]; | ||||
|   deptId: number | string; | ||||
|   deptName: string; | ||||
|   children: DeptOptionsType[]; | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -152,8 +152,8 @@ const isExpandAll = ref(true) | ||||
|  | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const deptTableRef = ref<ElTableInstance>(); | ||||
| @ -161,137 +161,137 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
| const deptFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const initFormData: DeptForm = { | ||||
|     deptId: undefined, | ||||
|     parentId: undefined, | ||||
|     deptName: undefined, | ||||
|     orderNum: 0, | ||||
|     leader: undefined, | ||||
|     phone: undefined, | ||||
|     email: undefined, | ||||
|     status: "0" | ||||
|   deptId: undefined, | ||||
|   parentId: undefined, | ||||
|   deptName: undefined, | ||||
|   orderNum: 0, | ||||
|   leader: undefined, | ||||
|   phone: undefined, | ||||
|   email: undefined, | ||||
|   status: "0" | ||||
| } | ||||
| const data = reactive<PageData<DeptForm, DeptQuery>>({ | ||||
|     form: {...initFormData}, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         deptName: undefined, | ||||
|         status: undefined | ||||
|     }, | ||||
|     rules: { | ||||
|         parentId: [{ required: true, message: "上级部门不能为空", trigger: "blur" }], | ||||
|         deptName: [{ required: true, message: "部门名称不能为空", trigger: "blur" }], | ||||
|         orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }], | ||||
|         email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], | ||||
|         phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] | ||||
|     }, | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     deptName: undefined, | ||||
|     status: undefined | ||||
|   }, | ||||
|   rules: { | ||||
|     parentId: [{ required: true, message: "上级部门不能为空", trigger: "blur" }], | ||||
|     deptName: [{ required: true, message: "部门名称不能为空", trigger: "blur" }], | ||||
|     orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }], | ||||
|     email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], | ||||
|     phone: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] | ||||
|   }, | ||||
| }) | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs<PageData<DeptForm, DeptQuery>>(data) | ||||
|  | ||||
| /** 查询菜单列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listDept(queryParams.value); | ||||
|     const data = proxy?.handleTree<DeptVO>(res.data, "deptId") | ||||
|     if (data) { | ||||
|         deptList.value = data | ||||
|     } | ||||
|     loading.value = false | ||||
|   loading.value = true; | ||||
|   const res = await listDept(queryParams.value); | ||||
|   const data = proxy?.handleTree<DeptVO>(res.data, "deptId") | ||||
|   if (data) { | ||||
|     deptList.value = data | ||||
|   } | ||||
|   loading.value = false | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset() | ||||
|     dialog.visible = false | ||||
|   reset() | ||||
|   dialog.visible = false | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = {...initFormData}; | ||||
|     deptFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   deptFormRef.value?.resetFields(); | ||||
| } | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery() | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery() | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = (row?: DeptVO) => { | ||||
|     listDept().then(res => { | ||||
|         const data = proxy?.handleTree<DeptOptionsType>(res.data, "deptId"); | ||||
|         if (data) { | ||||
|             deptOptions.value = data | ||||
|             dialog.visible = true; | ||||
|             dialog.title = "添加部门"; | ||||
|             nextTick(() => { | ||||
|                 reset(); | ||||
|                 if (row && row.deptId) { | ||||
|                     form.value.parentId = row?.deptId; | ||||
|                 } | ||||
|             }) | ||||
|   listDept().then(res => { | ||||
|     const data = proxy?.handleTree<DeptOptionsType>(res.data, "deptId"); | ||||
|     if (data) { | ||||
|       deptOptions.value = data | ||||
|       dialog.visible = true; | ||||
|       dialog.title = "添加部门"; | ||||
|       nextTick(() => { | ||||
|         reset(); | ||||
|         if (row && row.deptId) { | ||||
|           form.value.parentId = row?.deptId; | ||||
|         } | ||||
|     }) | ||||
|       }) | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| /** 展开/折叠操作 */ | ||||
| const handleToggleExpandAll = () => { | ||||
|     isExpandAll.value = !isExpandAll.value; | ||||
|     toggleExpandAll(deptList.value, isExpandAll.value) | ||||
|   isExpandAll.value = !isExpandAll.value; | ||||
|   toggleExpandAll(deptList.value, isExpandAll.value) | ||||
| } | ||||
| /** 展开/折叠所有 */ | ||||
| const toggleExpandAll = (data: DeptVO[], status: boolean) => { | ||||
|     data.forEach((item) => { | ||||
|         deptTableRef.value?.toggleRowExpansion(item, status) | ||||
|         if(item.children && item.children.length > 0) toggleExpandAll(item.children, status) | ||||
|     }) | ||||
|   data.forEach((item) => { | ||||
|     deptTableRef.value?.toggleRowExpansion(item, status) | ||||
|     if (item.children && item.children.length > 0) toggleExpandAll(item.children, status) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = async (row: DeptVO) => { | ||||
|     const res = await getDept(row.deptId); | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改部门"; | ||||
|     await nextTick(async () => { | ||||
|       reset(); | ||||
|       form.value = res.data | ||||
|       const response = await listDeptExcludeChild(row.deptId); | ||||
|       const data = proxy?.handleTree < DeptOptionsType > (response.data, "deptId") | ||||
|       if (data) { | ||||
|         deptOptions.value = data; | ||||
|         if (data.length === 0) { | ||||
|           const noResultsOptions: DeptOptionsType = { | ||||
|             deptId: res.data.parentId, | ||||
|             deptName: res.data.parentName, | ||||
|             children: [] | ||||
|           }; | ||||
|           deptOptions.value.push(noResultsOptions); | ||||
|         } | ||||
|   const res = await getDept(row.deptId); | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改部门"; | ||||
|   await nextTick(async () => { | ||||
|     reset(); | ||||
|     form.value = res.data | ||||
|     const response = await listDeptExcludeChild(row.deptId); | ||||
|     const data = proxy?.handleTree<DeptOptionsType>(response.data, "deptId") | ||||
|     if (data) { | ||||
|       deptOptions.value = data; | ||||
|       if (data.length === 0) { | ||||
|         const noResultsOptions: DeptOptionsType = { | ||||
|           deptId: res.data.parentId, | ||||
|           deptName: res.data.parentName, | ||||
|           children: [] | ||||
|         }; | ||||
|         deptOptions.value.push(noResultsOptions); | ||||
|       } | ||||
|     }) | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     deptFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.deptId ? await updateDept(form.value) : await addDept(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|         } | ||||
|     }) | ||||
|   deptFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.deptId ? await updateDept(form.value) : await addDept(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row: DeptVO) => { | ||||
|     await proxy?.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?'); | ||||
|     await delDept(row.deptId); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   await proxy?.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?'); | ||||
|   await delDept(row.deptId); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -159,154 +159,154 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| // 数据标签回显样式 | ||||
| const listClassOptions = ref<Array<{ value: string, label: string }>>([ | ||||
|     { value: "default", label: "默认" }, | ||||
|     { value: "primary", label: "主要" }, | ||||
|     { value: "success", label: "成功" }, | ||||
|     { value: "info", label: "信息" }, | ||||
|     { value: "warning", label: "警告" }, | ||||
|     { value: "danger", label: "危险" } | ||||
|   { value: "default", label: "默认" }, | ||||
|   { value: "primary", label: "主要" }, | ||||
|   { value: "success", label: "成功" }, | ||||
|   { value: "info", label: "信息" }, | ||||
|   { value: "warning", label: "警告" }, | ||||
|   { value: "danger", label: "危险" } | ||||
| ]); | ||||
|  | ||||
| const initFormData: DictDataForm = { | ||||
|     dictCode: undefined, | ||||
|     dictLabel: '', | ||||
|     dictValue: '', | ||||
|     cssClass: '', | ||||
|     listClass: "default", | ||||
|     dictSort: 0, | ||||
|     status: "0", | ||||
|     remark: '' | ||||
|   dictCode: undefined, | ||||
|   dictLabel: '', | ||||
|   dictValue: '', | ||||
|   cssClass: '', | ||||
|   listClass: "default", | ||||
|   dictSort: 0, | ||||
|   status: "0", | ||||
|   remark: '' | ||||
| } | ||||
| const data = reactive<PageData<DictDataForm, DictDataQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         dictName: '', | ||||
|         dictType: '', | ||||
|         status: '', | ||||
|         dictLabel: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         dictLabel: [{ required: true, message: "数据标签不能为空", trigger: "blur" }], | ||||
|         dictValue: [{ required: true, message: "数据键值不能为空", trigger: "blur" }], | ||||
|         dictSort: [{ required: true, message: "数据顺序不能为空", trigger: "blur" }] | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     dictName: '', | ||||
|     dictType: '', | ||||
|     status: '', | ||||
|     dictLabel: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     dictLabel: [{ required: true, message: "数据标签不能为空", trigger: "blur" }], | ||||
|     dictValue: [{ required: true, message: "数据键值不能为空", trigger: "blur" }], | ||||
|     dictSort: [{ required: true, message: "数据顺序不能为空", trigger: "blur" }] | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询字典类型详细 */ | ||||
| const getTypes = async (dictId: string | number) => { | ||||
|     const { data } = await getType(dictId); | ||||
|     queryParams.value.dictType = data.dictType; | ||||
|     defaultDictType.value = data.dictType; | ||||
|     getList(); | ||||
|   const { data } = await getType(dictId); | ||||
|   queryParams.value.dictType = data.dictType; | ||||
|   defaultDictType.value = data.dictType; | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| /** 查询字典类型列表 */ | ||||
| const getTypeList = async () => { | ||||
|     const res = await getDictOptionselect() | ||||
|     typeOptions.value = res.data; | ||||
|   const res = await getDictOptionselect() | ||||
|   typeOptions.value = res.data; | ||||
| } | ||||
| /** 查询字典数据列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listData(queryParams.value); | ||||
|     dataList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listData(queryParams.value); | ||||
|   dataList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     dialog.visible = false; | ||||
|     reset(); | ||||
|   dialog.visible = false; | ||||
|   reset(); | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = { ...initFormData }; | ||||
|     dataFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   dataFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 返回按钮操作 */ | ||||
| const handleClose = () => { | ||||
|     const obj = { path: "/system/dict" }; | ||||
|     proxy?.$tab.closeOpenPage(obj); | ||||
|   const obj = { path: "/system/dict" }; | ||||
|   proxy?.$tab.closeOpenPage(obj); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     queryParams.value.dictType = defaultDictType.value; | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   queryParams.value.dictType = defaultDictType.value; | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加字典数据"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         form.value.dictType = queryParams.value.dictType; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加字典数据"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     form.value.dictType = queryParams.value.dictType; | ||||
|   }) | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: DictDataVO[]) => { | ||||
|     ids.value = selection.map(item => item.dictCode); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.dictCode); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: DictDataVO) => { | ||||
|     const dictCode = row?.dictCode || ids.value[0]; | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改字典数据"; | ||||
|     nextTick(async () => { | ||||
|         const res =  await getData(dictCode); | ||||
|         reset(); | ||||
|         form.value = res.data; | ||||
|     }) | ||||
|   const dictCode = row?.dictCode || ids.value[0]; | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改字典数据"; | ||||
|   nextTick(async () => { | ||||
|     const res = await getData(dictCode); | ||||
|     reset(); | ||||
|     form.value = res.data; | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     dataFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.dictCode ? await updateData(form.value) : await addData(form.value); | ||||
|             useDictStore().removeDict(queryParams.value.dictType); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|   dataFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.dictCode ? await updateData(form.value) : await addData(form.value); | ||||
|       useDictStore().removeDict(queryParams.value.dictType); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|  | ||||
|         } | ||||
|     }); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: DictDataVO) => { | ||||
|     const dictCodes = row?.dictCode || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?'); | ||||
|     await delData(dictCodes); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|     useDictStore().removeDict(queryParams.value.dictType); | ||||
|   const dictCodes = row?.dictCode || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?'); | ||||
|   await delData(dictCodes); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
|   useDictStore().removeDict(queryParams.value.dictType); | ||||
|  | ||||
| } | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download("system/dict/data/export", { | ||||
|         ...queryParams.value | ||||
|     }, `dict_data_${new Date().getTime()}.xlsx`); | ||||
|   proxy?.download("system/dict/data/export", { | ||||
|     ...queryParams.value | ||||
|   }, `dict_data_${new Date().getTime()}.xlsx`); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getTypes(route.params && route.params.dictId as string); | ||||
|     getTypeList(); | ||||
|   getTypes(route.params && route.params.dictId as string); | ||||
|   getTypeList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -144,123 +144,123 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: DictTypeForm = { | ||||
|     dictId: undefined, | ||||
|     dictName: '', | ||||
|     dictType: '', | ||||
|     status: "0", | ||||
|     remark: '' | ||||
|   dictId: undefined, | ||||
|   dictName: '', | ||||
|   dictType: '', | ||||
|   status: "0", | ||||
|   remark: '' | ||||
| } | ||||
| const data = reactive<PageData<DictTypeForm, DictTypeQuery>>({ | ||||
|     form: {...initFormData}, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         dictName: '', | ||||
|         dictType: '', | ||||
|         status: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         dictName: [{ required: true, message: "字典名称不能为空", trigger: "blur" }], | ||||
|         dictType: [{ required: true, message: "字典类型不能为空", trigger: "blur" }] | ||||
|     }, | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     dictName: '', | ||||
|     dictType: '', | ||||
|     status: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     dictName: [{ required: true, message: "字典名称不能为空", trigger: "blur" }], | ||||
|     dictType: [{ required: true, message: "字典类型不能为空", trigger: "blur" }] | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询字典类型列表 */ | ||||
| const getList = () => { | ||||
|     loading.value = true; | ||||
|     listType(proxy?.addDateRange(queryParams.value, dateRange.value)).then(res => { | ||||
|         typeList.value = res.rows; | ||||
|         total.value = res.total; | ||||
|         loading.value = false; | ||||
|     }); | ||||
|   loading.value = true; | ||||
|   listType(proxy?.addDateRange(queryParams.value, dateRange.value)).then(res => { | ||||
|     typeList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   }); | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset(); | ||||
|     dialog.visible = false; | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = {...initFormData}; | ||||
|     dictFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   dictFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     dateRange.value = ['', '']; | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   dateRange.value = ['', '']; | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加字典类型"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加字典类型"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|   }) | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: DictTypeVO[]) =>  { | ||||
|     ids.value = selection.map(item => item.dictId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
| const handleSelectionChange = (selection: DictTypeVO[]) => { | ||||
|   ids.value = selection.map(item => item.dictId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: DictTypeVO) => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改字典类型"; | ||||
|     const dictId = row?.dictId || ids.value[0]; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         const res = await getType(dictId); | ||||
|         form.value = res.data; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改字典类型"; | ||||
|   const dictId = row?.dictId || ids.value[0]; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     const res = await getType(dictId); | ||||
|     form.value = res.data; | ||||
|   }) | ||||
|  | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     dictFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.dictId ? await updateType(form.value) : await addType(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             getList(); | ||||
|         } | ||||
|     }); | ||||
|   dictFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.dictId ? await updateType(form.value) : await addType(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: DictTypeVO) => { | ||||
|     const dictIds = row?.dictId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?'); | ||||
|     await delType(dictIds); | ||||
|     getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const dictIds = row?.dictId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?'); | ||||
|   await delType(dictIds); | ||||
|   getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download("system/dict/type/export", { | ||||
|         ...queryParams.value | ||||
|     }, `dict_${new Date().getTime()}.xlsx`); | ||||
|   proxy?.download("system/dict/type/export", { | ||||
|     ...queryParams.value | ||||
|   }, `dict_${new Date().getTime()}.xlsx`); | ||||
| } | ||||
| /** 刷新缓存按钮操作 */ | ||||
| const handleRefreshCache = async () => { | ||||
|     await refreshCache(); | ||||
|     proxy?.$modal.msgSuccess("刷新成功"); | ||||
|     useDictStore().cleanDict(); | ||||
|   await refreshCache(); | ||||
|   proxy?.$modal.msgSuccess("刷新成功"); | ||||
|   useDictStore().cleanDict(); | ||||
| } | ||||
|  | ||||
| onMounted(()=>{ | ||||
|     getList(); | ||||
| onMounted(() => { | ||||
|   getList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -266,9 +266,9 @@ import { MenuForm, MenuQuery, MenuVO } from '@/api/system/menu/types'; | ||||
| import { MenuTypeEnum } from '@/enums/MenuTypeEnum'; | ||||
|  | ||||
| interface MenuOptionsType { | ||||
|     menuId: number; | ||||
|     menuName: string; | ||||
|     children: MenuOptionsType[] | undefined; | ||||
|   menuId: number; | ||||
|   menuName: string; | ||||
|   children: MenuOptionsType[] | undefined; | ||||
| } | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance | ||||
| @ -281,36 +281,36 @@ const menuOptions = ref<MenuOptionsType[]>([]) | ||||
| const isExpandAll = ref(false) | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
| const menuFormRef = ref<ElFormInstance>(); | ||||
| const initFormData = { | ||||
|     path: '', | ||||
|     menuId: undefined, | ||||
|     parentId: 0, | ||||
|     menuName: '', | ||||
|     icon: '', | ||||
|     menuType: MenuTypeEnum.M, | ||||
|     orderNum: 1, | ||||
|     isFrame: "1", | ||||
|     isCache: "0", | ||||
|     visible: "0", | ||||
|     status: "0" | ||||
|   path: '', | ||||
|   menuId: undefined, | ||||
|   parentId: 0, | ||||
|   menuName: '', | ||||
|   icon: '', | ||||
|   menuType: MenuTypeEnum.M, | ||||
|   orderNum: 1, | ||||
|   isFrame: "1", | ||||
|   isCache: "0", | ||||
|   visible: "0", | ||||
|   status: "0" | ||||
| } | ||||
| const data = reactive<PageData<MenuForm, MenuQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     queryParams: { | ||||
|         menuName: undefined, | ||||
|         status: undefined | ||||
|     }, | ||||
|     rules: { | ||||
|         menuName: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }], | ||||
|         orderNum: [{ required: true, message: "菜单顺序不能为空", trigger: "blur" }], | ||||
|         path: [{ required: true, message: "路由地址不能为空", trigger: "blur" }] | ||||
|     }, | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     menuName: undefined, | ||||
|     status: undefined | ||||
|   }, | ||||
|   rules: { | ||||
|     menuName: [{ required: true, message: "菜单名称不能为空", trigger: "blur" }], | ||||
|     orderNum: [{ required: true, message: "菜单顺序不能为空", trigger: "blur" }], | ||||
|     path: [{ required: true, message: "路由地址不能为空", trigger: "blur" }] | ||||
|   }, | ||||
| }) | ||||
|  | ||||
| const menuTableRef = ref<ElTableInstance>(); | ||||
| @ -318,99 +318,99 @@ const menuTableRef = ref<ElTableInstance>(); | ||||
| const { queryParams, form, rules } = toRefs<PageData<MenuForm, MenuQuery>>(data) | ||||
| /** 查询菜单列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true | ||||
|     const res = await listMenu(queryParams.value); | ||||
|     const data = proxy?.handleTree<MenuVO>(res.data, "menuId") | ||||
|     if (data) { | ||||
|         menuList.value = data | ||||
|     } | ||||
|     loading.value = false | ||||
|   loading.value = true | ||||
|   const res = await listMenu(queryParams.value); | ||||
|   const data = proxy?.handleTree<MenuVO>(res.data, "menuId") | ||||
|   if (data) { | ||||
|     menuList.value = data | ||||
|   } | ||||
|   loading.value = false | ||||
| } | ||||
| /** 查询菜单下拉树结构 */ | ||||
| const getTreeselect = async () => { | ||||
|     menuOptions.value = [] | ||||
|     const response = await listMenu(); | ||||
|     const menu: MenuOptionsType = { menuId: 0, menuName: "主类目", children: [] } | ||||
|     menu.children = proxy?.handleTree<MenuOptionsType>(response.data, "menuId") | ||||
|     menuOptions.value.push(menu) | ||||
|   menuOptions.value = [] | ||||
|   const response = await listMenu(); | ||||
|   const menu: MenuOptionsType = { menuId: 0, menuName: "主类目", children: [] } | ||||
|   menu.children = proxy?.handleTree<MenuOptionsType>(response.data, "menuId") | ||||
|   menuOptions.value.push(menu) | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset() | ||||
|     dialog.visible = false | ||||
|   reset() | ||||
|   dialog.visible = false | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = { ...initFormData }; | ||||
|     menuFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   menuFormRef.value?.resetFields(); | ||||
| } | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = (row?: MenuVO) => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加菜单"; | ||||
|     getTreeselect(); | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         row && row.menuId ? form.value.parentId = row.menuId : form.value.parentId = 0; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加菜单"; | ||||
|   getTreeselect(); | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     row && row.menuId ? form.value.parentId = row.menuId : form.value.parentId = 0; | ||||
|   }) | ||||
|  | ||||
| } | ||||
| /** 展开/折叠操作 */ | ||||
| const handleToggleExpandAll = () => { | ||||
|     isExpandAll.value = !isExpandAll.value; | ||||
|     toggleExpandAll(menuList.value, isExpandAll.value) | ||||
|   isExpandAll.value = !isExpandAll.value; | ||||
|   toggleExpandAll(menuList.value, isExpandAll.value) | ||||
| } | ||||
| /** 展开/折叠所有 */ | ||||
| const toggleExpandAll = (data: MenuVO[], status: boolean) => { | ||||
|     data.forEach((item: MenuVO) => { | ||||
|         menuTableRef.value?.toggleRowExpansion(item, status) | ||||
|         if (item.children && item.children.length > 0) toggleExpandAll(item.children, status) | ||||
|     }) | ||||
|   data.forEach((item: MenuVO) => { | ||||
|     menuTableRef.value?.toggleRowExpansion(item, status) | ||||
|     if (item.children && item.children.length > 0) toggleExpandAll(item.children, status) | ||||
|   }) | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = async (row: MenuVO) => { | ||||
|     await getTreeselect(); | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改菜单"; | ||||
|     await nextTick(async () => { | ||||
|         if (row.menuId) { | ||||
|             const { data } = await getMenu(row.menuId); | ||||
|             reset(); | ||||
|             form.value = data; | ||||
|         } | ||||
|     }) | ||||
|   await getTreeselect(); | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改菜单"; | ||||
|   await nextTick(async () => { | ||||
|     if (row.menuId) { | ||||
|       const { data } = await getMenu(row.menuId); | ||||
|       reset(); | ||||
|       form.value = data; | ||||
|     } | ||||
|   }) | ||||
|  | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     menuFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.menuId ? await updateMenu(form.value) : await addMenu(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|         } | ||||
|     }) | ||||
|   menuFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.menuId ? await updateMenu(form.value) : await addMenu(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row: MenuVO) => { | ||||
|     await proxy?.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?'); | ||||
|     await delMenu(row.menuId); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   await proxy?.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?'); | ||||
|   await delMenu(row.menuId); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -139,111 +139,111 @@ const noticeFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: NoticeForm = { | ||||
|     noticeId: undefined, | ||||
|     noticeTitle: '', | ||||
|     noticeType: '', | ||||
|     noticeContent: '', | ||||
|     status: "0", | ||||
|     remark: '', | ||||
|     createByName: '' | ||||
|   noticeId: undefined, | ||||
|   noticeTitle: '', | ||||
|   noticeType: '', | ||||
|   noticeContent: '', | ||||
|   status: "0", | ||||
|   remark: '', | ||||
|   createByName: '' | ||||
| } | ||||
| const data = reactive<PageData<NoticeForm, NoticeQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         noticeTitle: '', | ||||
|         createByName: '', | ||||
|         status: '', | ||||
|         noticeType: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         noticeTitle: [{ required: true, message: "公告标题不能为空", trigger: "blur" }], | ||||
|         noticeType: [{ required: true, message: "公告类型不能为空", trigger: "change" }] | ||||
|     }, | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     noticeTitle: '', | ||||
|     createByName: '', | ||||
|     status: '', | ||||
|     noticeType: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     noticeTitle: [{ required: true, message: "公告标题不能为空", trigger: "blur" }], | ||||
|     noticeType: [{ required: true, message: "公告类型不能为空", trigger: "change" }] | ||||
|   }, | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询公告列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listNotice(queryParams.value); | ||||
|     noticeList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listNotice(queryParams.value); | ||||
|   noticeList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset(); | ||||
|     dialog.visible = false; | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = { ...initFormData }; | ||||
|     noticeFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   noticeFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: NoticeVO[]) => { | ||||
|     ids.value = selection.map(item => item.noticeId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.noticeId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加公告"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加公告"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|   }) | ||||
| } | ||||
| /**修改按钮操作 */ | ||||
| const handleUpdate = (row?: NoticeVO) => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改公告"; | ||||
|     nextTick(async () => { | ||||
|         const noticeId = row?.noticeId || ids.value[0]; | ||||
|         reset(); | ||||
|         const { data } = await getNotice(noticeId); | ||||
|         form.value = data; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改公告"; | ||||
|   nextTick(async () => { | ||||
|     const noticeId = row?.noticeId || ids.value[0]; | ||||
|     reset(); | ||||
|     const { data } = await getNotice(noticeId); | ||||
|     form.value = data; | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     noticeFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.noticeId ? await updateNotice(form.value) : await addNotice(form.value); | ||||
|             proxy?.$modal.msgSuccess("修改成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|         } | ||||
|     }); | ||||
|   noticeFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.noticeId ? await updateNotice(form.value) : await addNotice(form.value); | ||||
|       proxy?.$modal.msgSuccess("修改成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: NoticeVO) => { | ||||
|     const noticeIds = row?.noticeId || ids.value | ||||
|     await proxy?.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?'); | ||||
|     await delNotice(noticeIds); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const noticeIds = row?.noticeId || ids.value | ||||
|   await proxy?.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?'); | ||||
|   await delNotice(noticeIds); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -133,12 +133,12 @@ | ||||
|  | ||||
| <script setup name="OssConfig" lang="ts"> | ||||
| import { | ||||
|     listOssConfig, | ||||
|     getOssConfig, | ||||
|     delOssConfig, | ||||
|     addOssConfig, | ||||
|     updateOssConfig, | ||||
|     changeOssConfigStatus | ||||
|   listOssConfig, | ||||
|   getOssConfig, | ||||
|   delOssConfig, | ||||
|   addOssConfig, | ||||
|   updateOssConfig, | ||||
|   changeOssConfigStatus | ||||
| } from "@/api/system/ossConfig"; | ||||
| import { OssConfigForm, OssConfigQuery, OssConfigVO } from "@/api/system/ossConfig/types"; | ||||
|  | ||||
| @ -159,189 +159,189 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
| const ossConfigFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| // 列显隐信息 | ||||
| const columns = ref<FieldOption[]>([ | ||||
|     { key: 0, label: `主建`, visible: true }, | ||||
|     { key: 1, label: `配置key`, visible: false }, | ||||
|     { key: 2, label: `访问站点`, visible: true }, | ||||
|     { key: 3, label: `自定义域名`, visible: true }, | ||||
|     { key: 4, label: `桶名称`, visible: true }, | ||||
|     { key: 5, label: `前缀`, visible: true }, | ||||
|     { key: 6, label: `域`, visible: true }, | ||||
|     { key: 7, label: `桶权限类型`, visible: true }, | ||||
|     { key: 8, label: `状态`, visible: true } | ||||
|   { key: 0, label: `主建`, visible: true }, | ||||
|   { key: 1, label: `配置key`, visible: false }, | ||||
|   { key: 2, label: `访问站点`, visible: true }, | ||||
|   { key: 3, label: `自定义域名`, visible: true }, | ||||
|   { key: 4, label: `桶名称`, visible: true }, | ||||
|   { key: 5, label: `前缀`, visible: true }, | ||||
|   { key: 6, label: `域`, visible: true }, | ||||
|   { key: 7, label: `桶权限类型`, visible: true }, | ||||
|   { key: 8, label: `状态`, visible: true } | ||||
| ]); | ||||
|  | ||||
|  | ||||
| const initFormData: OssConfigForm = { | ||||
|     ossConfigId: undefined, | ||||
|     configKey: '', | ||||
|     accessKey: '', | ||||
|     secretKey: '', | ||||
|     bucketName: '', | ||||
|     prefix: '', | ||||
|     endpoint: '', | ||||
|     domain: '', | ||||
|     isHttps: "N", | ||||
|     accessPolicy: "1", | ||||
|     region: '', | ||||
|     status: "1", | ||||
|     remark: '', | ||||
|   ossConfigId: undefined, | ||||
|   configKey: '', | ||||
|   accessKey: '', | ||||
|   secretKey: '', | ||||
|   bucketName: '', | ||||
|   prefix: '', | ||||
|   endpoint: '', | ||||
|   domain: '', | ||||
|   isHttps: "N", | ||||
|   accessPolicy: "1", | ||||
|   region: '', | ||||
|   status: "1", | ||||
|   remark: '', | ||||
| } | ||||
| const data = reactive<PageData<OssConfigForm, OssConfigQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     // 查询参数 | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         configKey: '', | ||||
|         bucketName: '', | ||||
|         status: '', | ||||
|     }, | ||||
|     rules: { | ||||
|         configKey: [{ required: true, message: "configKey不能为空", trigger: "blur" },], | ||||
|         accessKey: [ | ||||
|             { required: true, message: "accessKey不能为空", trigger: "blur" }, | ||||
|             { | ||||
|                 min: 2, | ||||
|                 max: 200, | ||||
|                 message: "accessKey长度必须介于 2 和 100 之间", | ||||
|                 trigger: "blur", | ||||
|             }, | ||||
|         ], | ||||
|         secretKey: [ | ||||
|             { required: true, message: "secretKey不能为空", trigger: "blur" }, | ||||
|             { | ||||
|                 min: 2, | ||||
|                 max: 100, | ||||
|                 message: "secretKey长度必须介于 2 和 100 之间", | ||||
|                 trigger: "blur", | ||||
|             }, | ||||
|         ], | ||||
|         bucketName: [ | ||||
|             { required: true, message: "bucketName不能为空", trigger: "blur" }, | ||||
|             { | ||||
|                 min: 2, | ||||
|                 max: 100, | ||||
|                 message: "bucketName长度必须介于 2 和 100 之间", | ||||
|                 trigger: "blur", | ||||
|             }, | ||||
|         ], | ||||
|         endpoint: [ | ||||
|             { required: true, message: "endpoint不能为空", trigger: "blur" }, | ||||
|             { | ||||
|                 min: 2, | ||||
|                 max: 100, | ||||
|                 message: "endpoint名称长度必须介于 2 和 100 之间", | ||||
|                 trigger: "blur", | ||||
|             }, | ||||
|         ], | ||||
|         accessPolicy: [{ required: true, message: "accessPolicy不能为空", trigger: "blur" }] | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   // 查询参数 | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     configKey: '', | ||||
|     bucketName: '', | ||||
|     status: '', | ||||
|   }, | ||||
|   rules: { | ||||
|     configKey: [{ required: true, message: "configKey不能为空", trigger: "blur" },], | ||||
|     accessKey: [ | ||||
|       { required: true, message: "accessKey不能为空", trigger: "blur" }, | ||||
|       { | ||||
|         min: 2, | ||||
|         max: 200, | ||||
|         message: "accessKey长度必须介于 2 和 100 之间", | ||||
|         trigger: "blur", | ||||
|       }, | ||||
|     ], | ||||
|     secretKey: [ | ||||
|       { required: true, message: "secretKey不能为空", trigger: "blur" }, | ||||
|       { | ||||
|         min: 2, | ||||
|         max: 100, | ||||
|         message: "secretKey长度必须介于 2 和 100 之间", | ||||
|         trigger: "blur", | ||||
|       }, | ||||
|     ], | ||||
|     bucketName: [ | ||||
|       { required: true, message: "bucketName不能为空", trigger: "blur" }, | ||||
|       { | ||||
|         min: 2, | ||||
|         max: 100, | ||||
|         message: "bucketName长度必须介于 2 和 100 之间", | ||||
|         trigger: "blur", | ||||
|       }, | ||||
|     ], | ||||
|     endpoint: [ | ||||
|       { required: true, message: "endpoint不能为空", trigger: "blur" }, | ||||
|       { | ||||
|         min: 2, | ||||
|         max: 100, | ||||
|         message: "endpoint名称长度必须介于 2 和 100 之间", | ||||
|         trigger: "blur", | ||||
|       }, | ||||
|     ], | ||||
|     accessPolicy: [{ required: true, message: "accessPolicy不能为空", trigger: "blur" }] | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询对象存储配置列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listOssConfig(queryParams.value); | ||||
|     ossConfigList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listOssConfig(queryParams.value); | ||||
|   ossConfigList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     dialog.visible = false; | ||||
|     reset(); | ||||
|   dialog.visible = false; | ||||
|   reset(); | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = { ...initFormData }; | ||||
|     ossConfigFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   ossConfigFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 选择条数  */ | ||||
| const handleSelectionChange = (selection: OssConfigVO[]) => { | ||||
|     ids.value = selection.map(item => item.ossConfigId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.ossConfigId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加对象存储配置"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加对象存储配置"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|   }) | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: OssConfigVO) => { | ||||
|     loading.value = true; | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改对象存储配置"; | ||||
|     const ossConfigId = row?.ossConfigId || ids.value[0]; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         const res = await getOssConfig(ossConfigId); | ||||
|         loading.value = false; | ||||
|         form.value = res.data; | ||||
|     }) | ||||
|   loading.value = true; | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改对象存储配置"; | ||||
|   const ossConfigId = row?.ossConfigId || ids.value[0]; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     const res = await getOssConfig(ossConfigId); | ||||
|     loading.value = false; | ||||
|     form.value = res.data; | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     ossConfigFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             buttonLoading.value = true; | ||||
|             if (form.value.ossConfigId) { | ||||
|                 await updateOssConfig(form.value).finally(() => buttonLoading.value = false); | ||||
|             } else { | ||||
|                 await addOssConfig(form.value).finally(() => buttonLoading.value = false); | ||||
|             } | ||||
|             proxy?.$modal.msgSuccess("新增成功"); | ||||
|             dialog.visible = false; | ||||
|             getList(); | ||||
|         } | ||||
|     }); | ||||
|   ossConfigFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       buttonLoading.value = true; | ||||
|       if (form.value.ossConfigId) { | ||||
|         await updateOssConfig(form.value).finally(() => buttonLoading.value = false); | ||||
|       } else { | ||||
|         await addOssConfig(form.value).finally(() => buttonLoading.value = false); | ||||
|       } | ||||
|       proxy?.$modal.msgSuccess("新增成功"); | ||||
|       dialog.visible = false; | ||||
|       getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| /** 状态修改  */ | ||||
| const  handleStatusChange = async (row: OssConfigVO) => { | ||||
|     let text = row.status === "0" ? "启用" : "停用"; | ||||
|     try { | ||||
|         await proxy?.$modal.confirm('确认要"' + text + '""' + row.configKey + '"配置吗?'); | ||||
|         await changeOssConfigStatus(row.ossConfigId, row.status, row.configKey); | ||||
|         getList() | ||||
|         proxy?.$modal.msgSuccess(text + "成功"); | ||||
|     } catch { return } finally { | ||||
|         row.status = row.status === "0" ? "1" : "0"; | ||||
|     } | ||||
| const handleStatusChange = async (row: OssConfigVO) => { | ||||
|   let text = row.status === "0" ? "启用" : "停用"; | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('确认要"' + text + '""' + row.configKey + '"配置吗?'); | ||||
|     await changeOssConfigStatus(row.ossConfigId, row.status, row.configKey); | ||||
|     getList() | ||||
|     proxy?.$modal.msgSuccess(text + "成功"); | ||||
|   } catch { return } finally { | ||||
|     row.status = row.status === "0" ? "1" : "0"; | ||||
|   } | ||||
|  | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: OssConfigVO) => { | ||||
|     const ossConfigIds = row?.ossConfigId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除OSS配置编号为"' + ossConfigIds + '"的数据项?'); | ||||
|     loading.value = true; | ||||
|     await delOssConfig(ossConfigIds).finally(() => loading.value = false); | ||||
|     getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const ossConfigIds = row?.ossConfigId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除OSS配置编号为"' + ossConfigIds + '"的数据项?'); | ||||
|   loading.value = true; | ||||
|   await delOssConfig(ossConfigIds).finally(() => loading.value = false); | ||||
|   getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
|  | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -154,8 +154,8 @@ const previewListResource = ref(true); | ||||
| const daterangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| // 默认排序 | ||||
| @ -165,175 +165,175 @@ const ossFormRef = ref<ElFormInstance>(); | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const initFormData = { | ||||
|     file: undefined, | ||||
|   file: undefined, | ||||
| } | ||||
| const data = reactive<PageData<OssForm, OssQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     // 查询参数 | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         fileName: '', | ||||
|         originalName: '', | ||||
|         fileSuffix: '', | ||||
|         createTime: '', | ||||
|         service: '', | ||||
|         orderByColumn: defaultSort.value.prop, | ||||
|         isAsc: defaultSort.value.order | ||||
|     }, | ||||
|     rules: { | ||||
|         file: [ | ||||
|             { required: true, message: "文件不能为空", trigger: "blur" } | ||||
|         ] | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   // 查询参数 | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     fileName: '', | ||||
|     originalName: '', | ||||
|     fileSuffix: '', | ||||
|     createTime: '', | ||||
|     service: '', | ||||
|     orderByColumn: defaultSort.value.prop, | ||||
|     isAsc: defaultSort.value.order | ||||
|   }, | ||||
|   rules: { | ||||
|     file: [ | ||||
|       { required: true, message: "文件不能为空", trigger: "blur" } | ||||
|     ] | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询OSS对象存储列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await proxy?.getConfigKey("sys.oss.previewListResource"); | ||||
|     previewListResource.value = res?.msg === undefined ? true : res.msg === 'true'; | ||||
|     const response = await listOss(proxy?.addDateRange(queryParams.value, daterangeCreateTime.value, "CreateTime")); | ||||
|     ossList.value = response.rows; | ||||
|     total.value = response.total; | ||||
|     loading.value = false; | ||||
|     showTable.value = true; | ||||
|   loading.value = true; | ||||
|   const res = await proxy?.getConfigKey("sys.oss.previewListResource"); | ||||
|   previewListResource.value = res?.msg === undefined ? true : res.msg === 'true'; | ||||
|   const response = await listOss(proxy?.addDateRange(queryParams.value, daterangeCreateTime.value, "CreateTime")); | ||||
|   ossList.value = response.rows; | ||||
|   total.value = response.total; | ||||
|   loading.value = false; | ||||
|   showTable.value = true; | ||||
| } | ||||
| function checkFileSuffix(fileSuffix: string[]) { | ||||
|     let arr = ["png", "jpg", "jpeg"]; | ||||
|     return arr.some(type => { | ||||
|         return fileSuffix.indexOf(type) > -1; | ||||
|     }); | ||||
|   let arr = ["png", "jpg", "jpeg"]; | ||||
|   return arr.some(type => { | ||||
|     return fileSuffix.indexOf(type) > -1; | ||||
|   }); | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| function cancel() { | ||||
|     dialog.visible = false; | ||||
|     reset(); | ||||
|   dialog.visible = false; | ||||
|   reset(); | ||||
| } | ||||
| /** 表单重置 */ | ||||
| function reset() { | ||||
|     form.value = { ...initFormData }; | ||||
|     ossFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   ossFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| function handleQuery() { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| function resetQuery() { | ||||
|     showTable.value = false; | ||||
|     daterangeCreateTime.value = ['', '']; | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     queryParams.value.orderByColumn = defaultSort.value.prop; | ||||
|     queryParams.value.isAsc = defaultSort.value.order; | ||||
|     handleQuery(); | ||||
|   showTable.value = false; | ||||
|   daterangeCreateTime.value = ['', '']; | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   queryParams.value.orderByColumn = defaultSort.value.prop; | ||||
|   queryParams.value.isAsc = defaultSort.value.order; | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 选择条数  */ | ||||
| function handleSelectionChange(selection: OssVO[]) { | ||||
|     ids.value = selection.map(item => item.ossId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.ossId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 设置列的排序为我们自定义的排序 */ | ||||
| const handleHeaderClass = ({ column }: any): any => { | ||||
|     column.order = column.multiOrder | ||||
|   column.order = column.multiOrder | ||||
| } | ||||
| /** 点击表头进行排序 */ | ||||
| const handleHeaderCLick = (column: any) => { | ||||
|     if (column.sortable !== 'custom') { | ||||
|         return | ||||
|     } | ||||
|     switch (column.multiOrder) { | ||||
|         case 'descending': | ||||
|             column.multiOrder = 'ascending'; | ||||
|             break; | ||||
|         case 'ascending': | ||||
|             column.multiOrder = ''; | ||||
|             break; | ||||
|         default: | ||||
|             column.multiOrder = 'descending'; | ||||
|             break; | ||||
|     } | ||||
|     handleOrderChange(column.property, column.multiOrder) | ||||
|   if (column.sortable !== 'custom') { | ||||
|     return | ||||
|   } | ||||
|   switch (column.multiOrder) { | ||||
|     case 'descending': | ||||
|       column.multiOrder = 'ascending'; | ||||
|       break; | ||||
|     case 'ascending': | ||||
|       column.multiOrder = ''; | ||||
|       break; | ||||
|     default: | ||||
|       column.multiOrder = 'descending'; | ||||
|       break; | ||||
|   } | ||||
|   handleOrderChange(column.property, column.multiOrder) | ||||
| } | ||||
| const handleOrderChange = (prop: string, order: string) => { | ||||
|     let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(",") : []; | ||||
|     let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(",") : []; | ||||
|     let propIndex = orderByArr.indexOf(prop) | ||||
|     if (propIndex !== -1) { | ||||
|         if (order) { | ||||
|             //排序里已存在 只修改排序 | ||||
|             isAscArr[propIndex] = order; | ||||
|         } else { | ||||
|             //如果order为null 则删除排序字段和属性 | ||||
|             isAscArr.splice(propIndex, 1);//删除排序 | ||||
|             orderByArr.splice(propIndex, 1);//删除属性 | ||||
|         } | ||||
|   let orderByArr = queryParams.value.orderByColumn ? queryParams.value.orderByColumn.split(",") : []; | ||||
|   let isAscArr = queryParams.value.isAsc ? queryParams.value.isAsc.split(",") : []; | ||||
|   let propIndex = orderByArr.indexOf(prop) | ||||
|   if (propIndex !== -1) { | ||||
|     if (order) { | ||||
|       //排序里已存在 只修改排序 | ||||
|       isAscArr[propIndex] = order; | ||||
|     } else { | ||||
|         //排序里不存在则新增排序 | ||||
|         orderByArr.push(prop); | ||||
|         isAscArr.push(order); | ||||
|       //如果order为null 则删除排序字段和属性 | ||||
|       isAscArr.splice(propIndex, 1);//删除排序 | ||||
|       orderByArr.splice(propIndex, 1);//删除属性 | ||||
|     } | ||||
|     //合并排序 | ||||
|     queryParams.value.orderByColumn = orderByArr.join(","); | ||||
|     queryParams.value.isAsc = isAscArr.join(","); | ||||
|     getList(); | ||||
|   } else { | ||||
|     //排序里不存在则新增排序 | ||||
|     orderByArr.push(prop); | ||||
|     isAscArr.push(order); | ||||
|   } | ||||
|   //合并排序 | ||||
|   queryParams.value.orderByColumn = orderByArr.join(","); | ||||
|   queryParams.value.isAsc = isAscArr.join(","); | ||||
|   getList(); | ||||
| } | ||||
| /** 任务日志列表查询 */ | ||||
| const handleOssConfig = () => { | ||||
|     router.push('/system/oss-config/index') | ||||
|   router.push('/system/oss-config/index') | ||||
| } | ||||
| /** 文件按钮操作 */ | ||||
| const handleFile = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "上传文件"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         type.value = 0; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "上传文件"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     type.value = 0; | ||||
|   }) | ||||
| } | ||||
| /** 图片按钮操作 */ | ||||
| const handleImage = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "上传图片"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         type.value = 1; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "上传图片"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     type.value = 1; | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     dialog.visible = false; | ||||
|     getList(); | ||||
|   dialog.visible = false; | ||||
|   getList(); | ||||
| } | ||||
| /** 下载按钮操作 */ | ||||
| const handleDownload = (row: OssVO) => { | ||||
|     proxy?.$download.oss(row.ossId) | ||||
|   proxy?.$download.oss(row.ossId) | ||||
| } | ||||
| /** 用户状态修改  */ | ||||
| const handlePreviewListResource = async (preview: boolean) => { | ||||
|     let text = preview ? "启用" : "停用"; | ||||
|     try { | ||||
|       await proxy?.$modal.confirm('确认要"' + text + '""预览列表图片"配置吗?'); | ||||
|       await proxy?.updateConfigByKey("sys.oss.previewListResource", preview); | ||||
|       getList() | ||||
|       proxy?.$modal.msgSuccess(text + "成功"); | ||||
|     } catch { return } | ||||
|   let text = preview ? "启用" : "停用"; | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('确认要"' + text + '""预览列表图片"配置吗?'); | ||||
|     await proxy?.updateConfigByKey("sys.oss.previewListResource", preview); | ||||
|     getList() | ||||
|     proxy?.$modal.msgSuccess(text + "成功"); | ||||
|   } catch { return } | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: OssVO) => { | ||||
|     const ossIds = row?.ossId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除OSS对象存储编号为"' + ossIds + '"的数据项?'); | ||||
|     loading.value = true; | ||||
|     await delOss(ossIds).finally(() => loading.value = false); | ||||
|     getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const ossIds = row?.ossId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除OSS对象存储编号为"' + ossIds + '"的数据项?'); | ||||
|   loading.value = true; | ||||
|   await delOss(ossIds).finally(() => loading.value = false); | ||||
|   getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -125,117 +125,117 @@ const postFormRef = ref<ElFormInstance>(); | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: PostForm = { | ||||
|     postId: undefined, | ||||
|     postCode: '', | ||||
|     postName: '', | ||||
|     postSort: 0, | ||||
|     status: "0", | ||||
|     remark: '' | ||||
|   postId: undefined, | ||||
|   postCode: '', | ||||
|   postName: '', | ||||
|   postSort: 0, | ||||
|   status: "0", | ||||
|   remark: '' | ||||
| } | ||||
|  | ||||
| const data = reactive<PageData<PostForm, PostQuery>>({ | ||||
|     form: {...initFormData}, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         postCode: '', | ||||
|         postName: '', | ||||
|         status: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         postName: [{ required: true, message: "岗位名称不能为空", trigger: "blur" }], | ||||
|         postCode: [{ required: true, message: "岗位编码不能为空", trigger: "blur" }], | ||||
|         postSort: [{ required: true, message: "岗位顺序不能为空", trigger: "blur" }], | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     postCode: '', | ||||
|     postName: '', | ||||
|     status: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     postName: [{ required: true, message: "岗位名称不能为空", trigger: "blur" }], | ||||
|     postCode: [{ required: true, message: "岗位编码不能为空", trigger: "blur" }], | ||||
|     postSort: [{ required: true, message: "岗位顺序不能为空", trigger: "blur" }], | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs<PageData<PostForm, PostQuery>>(data); | ||||
|  | ||||
| /** 查询岗位列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listPost(queryParams.value); | ||||
|     postList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listPost(queryParams.value); | ||||
|   postList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset(); | ||||
|     dialog.visible = false; | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
| /** 表单重置 */ | ||||
| const reset = () => { | ||||
|     form.value = {...initFormData}; | ||||
|     postFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   postFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: PostVO[]) => { | ||||
|     ids.value = selection.map(item => item.postId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.postId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加岗位"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加岗位"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|   }) | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: PostVO) => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改岗位"; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         const postId = row?.postId || ids.value[0]; | ||||
|         const res = await getPost(postId); | ||||
|         form.value = res.data; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改岗位"; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     const postId = row?.postId || ids.value[0]; | ||||
|     const res = await getPost(postId); | ||||
|     form.value = res.data; | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     postFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.postId ? await updatePost(form.value) : await addPost(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|         } | ||||
|     }); | ||||
|   postFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.postId ? await updatePost(form.value) : await addPost(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: PostVO) => { | ||||
|     const postIds = row?.postId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?'); | ||||
|     await delPost(postIds); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const postIds = row?.postId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?'); | ||||
|   await delPost(postIds); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
| } | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download("system/post/export", { | ||||
|         ...queryParams.value | ||||
|     }, `post_${new Date().getTime()}.xlsx`); | ||||
|   proxy?.download("system/post/export", { | ||||
|     ...queryParams.value | ||||
|   }, `post_${new Date().getTime()}.xlsx`); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -86,64 +86,64 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
| const selectRef = ref<InstanceType<typeof SelectUser>>(); | ||||
|  | ||||
| const queryParams = reactive<UserQuery>({ | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     roleId: route.params.roleId as string, | ||||
|     userName: undefined, | ||||
|     phonenumber: undefined, | ||||
|   pageNum: 1, | ||||
|   pageSize: 10, | ||||
|   roleId: route.params.roleId as string, | ||||
|   userName: undefined, | ||||
|   phonenumber: undefined, | ||||
| }); | ||||
|  | ||||
| /** 查询授权用户列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await allocatedUserList(queryParams); | ||||
|     userList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await allocatedUserList(queryParams); | ||||
|   userList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| // 返回按钮 | ||||
| const handleClose = () => { | ||||
|     const obj = { path: "/system/role" }; | ||||
|     proxy?.$tab.closeOpenPage(obj); | ||||
|   const obj = { path: "/system/role" }; | ||||
|   proxy?.$tab.closeOpenPage(obj); | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery=() => { | ||||
|     queryParams.pageNum = 1; | ||||
|     getList(); | ||||
| const handleQuery = () => { | ||||
|   queryParams.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery=() =>{ | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
| const resetQuery = () => { | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| // 多选框选中数据 | ||||
| const handleSelectionChange = (selection: UserVO[]) =>{ | ||||
|     userIds.value = selection.map(item => item.userId); | ||||
|     multiple.value = !selection.length; | ||||
| const handleSelectionChange = (selection: UserVO[]) => { | ||||
|   userIds.value = selection.map(item => item.userId); | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 打开授权用户表弹窗 */ | ||||
| const openSelectUser = () => { | ||||
|     selectRef.value.show(); | ||||
|   selectRef.value?.show(); | ||||
| } | ||||
| /** 取消授权按钮操作 */ | ||||
| const cancelAuthUser = async (row: UserVO) => { | ||||
|     await proxy?.$modal.confirm('确认要取消该用户"' + row.userName + '"角色吗?'); | ||||
|     await authUserCancel({ userId: row.userId, roleId: queryParams.roleId }); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("取消授权成功"); | ||||
|   await proxy?.$modal.confirm('确认要取消该用户"' + row.userName + '"角色吗?'); | ||||
|   await authUserCancel({ userId: row.userId, roleId: queryParams.roleId }); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("取消授权成功"); | ||||
| } | ||||
| /** 批量取消授权按钮操作 */ | ||||
| const cancelAuthUserAll = async () => { | ||||
|     const roleId = queryParams.roleId; | ||||
|     const uIds = userIds.value.join(","); | ||||
|     await proxy?.$modal.confirm("是否取消选中用户授权数据项?"); | ||||
|     await authUserCancelAll({ roleId: roleId, userIds: uIds }); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("取消授权成功"); | ||||
|   const roleId = queryParams.roleId; | ||||
|   const uIds = userIds.value.join(","); | ||||
|   await proxy?.$modal.confirm("是否取消选中用户授权数据项?"); | ||||
|   await authUserCancelAll({ roleId: roleId, userIds: uIds }); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("取消授权成功"); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
|  | ||||
| @ -121,7 +121,7 @@ | ||||
|         <el-form-item label="状态"> | ||||
|           <el-radio-group v-model="form.status"> | ||||
|             <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ | ||||
|                 dict.label | ||||
|               dict.label | ||||
|             }}</el-radio> | ||||
|           </el-radio-group> | ||||
|         </el-form-item> | ||||
| @ -221,11 +221,11 @@ const openDataScope = ref(false) | ||||
|  | ||||
| /** 数据范围选项*/ | ||||
| const dataScopeOptions = ref([ | ||||
|     { value: "1", label: "全部数据权限" }, | ||||
|     { value: "2", label: "自定数据权限" }, | ||||
|     { value: "3", label: "本部门数据权限" }, | ||||
|     { value: "4", label: "本部门及以下数据权限" }, | ||||
|     { value: "5", label: "仅本人数据权限" } | ||||
|   { value: "1", label: "全部数据权限" }, | ||||
|   { value: "2", label: "自定数据权限" }, | ||||
|   { value: "3", label: "本部门数据权限" }, | ||||
|   { value: "4", label: "本部门及以下数据权限" }, | ||||
|   { value: "5", label: "仅本人数据权限" } | ||||
| ]) | ||||
|  | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
| @ -235,40 +235,40 @@ const menuRef = ref<ElTreeInstance>(); | ||||
| const deptRef = ref<ElTreeInstance>(); | ||||
|  | ||||
| const initForm: RoleForm = { | ||||
|     roleId: undefined, | ||||
|     roleSort: 1, | ||||
|     status: '0', | ||||
|     roleName: '', | ||||
|     roleKey: '', | ||||
|     menuCheckStrictly: true, | ||||
|     deptCheckStrictly: true, | ||||
|     remark: '', | ||||
|     dataScope: '1', | ||||
|     menuIds: [], | ||||
|     deptIds: [], | ||||
|   roleId: undefined, | ||||
|   roleSort: 1, | ||||
|   status: '0', | ||||
|   roleName: '', | ||||
|   roleKey: '', | ||||
|   menuCheckStrictly: true, | ||||
|   deptCheckStrictly: true, | ||||
|   remark: '', | ||||
|   dataScope: '1', | ||||
|   menuIds: [], | ||||
|   deptIds: [], | ||||
| } | ||||
|  | ||||
| const data = reactive<PageData<RoleForm, RoleQuery>>({ | ||||
|     form: {...initForm}, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         roleName: '', | ||||
|         roleKey: '', | ||||
|         status: '', | ||||
|     }, | ||||
|     rules: { | ||||
|         roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }], | ||||
|         roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }], | ||||
|         roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }] | ||||
|     } | ||||
|   form: { ...initForm }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     roleName: '', | ||||
|     roleKey: '', | ||||
|     status: '', | ||||
|   }, | ||||
|   rules: { | ||||
|     roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }], | ||||
|     roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }], | ||||
|     roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }] | ||||
|   } | ||||
| }) | ||||
| const { form, queryParams, rules } = toRefs(data) | ||||
|  | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
|  | ||||
| @ -276,241 +276,241 @@ const dialog = reactive<DialogOption>({ | ||||
|  * 查询角色列表 | ||||
|  */ | ||||
| const getList = () => { | ||||
|     loading.value = true | ||||
|     listRole(proxy?.addDateRange(queryParams.value, dateRange.value)).then(res => { | ||||
|         roleList.value = res.rows | ||||
|         total.value = res.total | ||||
|         loading.value = false | ||||
|     }) | ||||
|   loading.value = true | ||||
|   listRole(proxy?.addDateRange(queryParams.value, dateRange.value)).then(res => { | ||||
|     roleList.value = res.rows | ||||
|     total.value = res.total | ||||
|     loading.value = false | ||||
|   }) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * 搜索按钮操作 | ||||
|  */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| /** 重置 */ | ||||
| const resetQuery = () => { | ||||
|     dateRange.value = ['', ''] | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   dateRange.value = ['', ''] | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /**删除按钮操作 */ | ||||
| const handleDelete = async (row?: RoleVO) => { | ||||
|     const roleids = row?.roleId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除角色编号为' + roleids + '数据项目'); | ||||
|     await delRole(roleids); | ||||
|     getList(); | ||||
|     proxy?.$modal.msgSuccess('删除成功'); | ||||
|   const roleids = row?.roleId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除角色编号为' + roleids + '数据项目'); | ||||
|   await delRole(roleids); | ||||
|   getList(); | ||||
|   proxy?.$modal.msgSuccess('删除成功'); | ||||
| } | ||||
|  | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download("system/role/export", { | ||||
|         ...queryParams.value, | ||||
|     }, `role_${new Date().getTime()}.xlsx`) | ||||
|   proxy?.download("system/role/export", { | ||||
|     ...queryParams.value, | ||||
|   }, `role_${new Date().getTime()}.xlsx`) | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: RoleVO[]) => { | ||||
|     ids.value = selection.map((item: RoleVO) => item.roleId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map((item: RoleVO) => item.roleId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
|  | ||||
| /** 角色状态修改 */ | ||||
| const handleStatusChange = async (row: RoleVO) => { | ||||
|     let text = row.status === "0" ? "启用" : "停用"; | ||||
|     try { | ||||
|         await proxy?.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?'); | ||||
|         await changeRoleStatus(row.roleId, row.status); | ||||
|         proxy?.$modal.msgSuccess(text + "成功"); | ||||
|     } catch { | ||||
|         row.status = row.status === "0" ? "1" : "0"; | ||||
|     } | ||||
|   let text = row.status === "0" ? "启用" : "停用"; | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?'); | ||||
|     await changeRoleStatus(row.roleId, row.status); | ||||
|     proxy?.$modal.msgSuccess(text + "成功"); | ||||
|   } catch { | ||||
|     row.status = row.status === "0" ? "1" : "0"; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** 分配用户 */ | ||||
| const handleAuthUser = (row: RoleVO) => { | ||||
|     router.push("/system/role-auth/user/" + row.roleId); | ||||
|   router.push("/system/role-auth/user/" + row.roleId); | ||||
| } | ||||
|  | ||||
| /** 查询菜单树结构 */ | ||||
| const getMenuTreeselect = async () => { | ||||
|     const res = await menuTreeselect(); | ||||
|     menuOptions.value = res.data; | ||||
|   const res = await menuTreeselect(); | ||||
|   menuOptions.value = res.data; | ||||
| } | ||||
| /** 所有部门节点数据 */ | ||||
| const getDeptAllCheckedKeys = (): any => { | ||||
|     // 目前被选中的部门节点 | ||||
|     let checkedKeys = deptRef.value?.getCheckedKeys(); | ||||
|     // 半选中的部门节点 | ||||
|     let halfCheckedKeys = deptRef.value?.getHalfCheckedKeys(); | ||||
|     if(halfCheckedKeys) { | ||||
|       checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys); | ||||
|     } | ||||
|     return checkedKeys | ||||
|   // 目前被选中的部门节点 | ||||
|   let checkedKeys = deptRef.value?.getCheckedKeys(); | ||||
|   // 半选中的部门节点 | ||||
|   let halfCheckedKeys = deptRef.value?.getHalfCheckedKeys(); | ||||
|   if (halfCheckedKeys) { | ||||
|     checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys); | ||||
|   } | ||||
|   return checkedKeys | ||||
| } | ||||
| /** 重置新增的表单以及其他数据  */ | ||||
| const reset = () => { | ||||
|     menuRef.value?.setCheckedKeys([]); | ||||
|     menuExpand.value = false | ||||
|     menuNodeAll.value = false | ||||
|     deptExpand.value = true | ||||
|     deptNodeAll.value = false | ||||
|     form.value = { ...initForm }; | ||||
|     roleFormRef.value?.resetFields(); | ||||
|   menuRef.value?.setCheckedKeys([]); | ||||
|   menuExpand.value = false | ||||
|   menuNodeAll.value = false | ||||
|   deptExpand.value = true | ||||
|   deptNodeAll.value = false | ||||
|   form.value = { ...initForm }; | ||||
|   roleFormRef.value?.resetFields(); | ||||
|  | ||||
| } | ||||
|  | ||||
| /** 添加角色 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加角色"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         getMenuTreeselect(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加角色"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     getMenuTreeselect(); | ||||
|   }) | ||||
| } | ||||
| /** 修改角色 */ | ||||
| const handleUpdate = async (row?: RoleVO) => { | ||||
|     const roleId = row?.roleId || ids.value[0] | ||||
|     const roleMenu = getRoleMenuTreeselect(roleId) | ||||
|     const { data } = await getRole(roleId); | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改角色"; | ||||
|     await nextTick(() => { | ||||
|       reset(); | ||||
|       Object.assign(form.value, data); | ||||
|       form.value.roleSort = Number(form.value.roleSort); | ||||
|       nextTick(async () => { | ||||
|         const res = await roleMenu; | ||||
|         let checkedKeys = res.checkedKeys; | ||||
|         checkedKeys.forEach((v) => { | ||||
|           nextTick(() => { | ||||
|             menuRef.value?.setChecked(v, true, false); | ||||
|           }) | ||||
|   const roleId = row?.roleId || ids.value[0] | ||||
|   const roleMenu = getRoleMenuTreeselect(roleId) | ||||
|   const { data } = await getRole(roleId); | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改角色"; | ||||
|   await nextTick(() => { | ||||
|     reset(); | ||||
|     Object.assign(form.value, data); | ||||
|     form.value.roleSort = Number(form.value.roleSort); | ||||
|     nextTick(async () => { | ||||
|       const res = await roleMenu; | ||||
|       let checkedKeys = res.checkedKeys; | ||||
|       checkedKeys.forEach((v) => { | ||||
|         nextTick(() => { | ||||
|           menuRef.value?.setChecked(v, true, false); | ||||
|         }) | ||||
|       }) | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
| /** 根据角色ID查询菜单树结构 */ | ||||
| const getRoleMenuTreeselect = (roleId: string | number) => { | ||||
|     return roleMenuTreeselect(roleId).then((res): RoleMenuTree => { | ||||
|         menuOptions.value = res.data.menus; | ||||
|         return res.data; | ||||
|     }) | ||||
|   return roleMenuTreeselect(roleId).then((res): RoleMenuTree => { | ||||
|     menuOptions.value = res.data.menus; | ||||
|     return res.data; | ||||
|   }) | ||||
| } | ||||
| /** 根据角色ID查询部门树结构 */ | ||||
| const getRoleDeptTreeSelect = async (roleId: string | number) => { | ||||
|     const res = await deptTreeSelect(roleId); | ||||
|     deptOptions.value = res.data.depts; | ||||
|     return res.data; | ||||
|   const res = await deptTreeSelect(roleId); | ||||
|   deptOptions.value = res.data.depts; | ||||
|   return res.data; | ||||
| } | ||||
| /** 树权限(展开/折叠)*/ | ||||
| const handleCheckedTreeExpand = (value: boolean, type: string) => { | ||||
|     if (type == "menu") { | ||||
|         let treeList = menuOptions.value; | ||||
|         for (let i = 0; i < treeList.length; i++) { | ||||
|           if (menuRef.value) { | ||||
|             menuRef.value.store.nodesMap[treeList[i].id].expanded = value; | ||||
|           } | ||||
|         } | ||||
|     } else if (type == "dept") { | ||||
|         let treeList = deptOptions.value; | ||||
|         for (let i = 0; i < treeList.length; i++) { | ||||
|             if (deptRef.value) { | ||||
|               deptRef.value.store.nodesMap[treeList[i].id].expanded = value; | ||||
|             } | ||||
|         } | ||||
|   if (type == "menu") { | ||||
|     let treeList = menuOptions.value; | ||||
|     for (let i = 0; i < treeList.length; i++) { | ||||
|       if (menuRef.value) { | ||||
|         menuRef.value.store.nodesMap[treeList[i].id].expanded = value; | ||||
|       } | ||||
|     } | ||||
|   } else if (type == "dept") { | ||||
|     let treeList = deptOptions.value; | ||||
|     for (let i = 0; i < treeList.length; i++) { | ||||
|       if (deptRef.value) { | ||||
|         deptRef.value.store.nodesMap[treeList[i].id].expanded = value; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| /** 树权限(全选/全不选) */ | ||||
| const handleCheckedTreeNodeAll = (value: any, type: string) => { | ||||
|     if (type == "menu") { | ||||
|         menuRef.value?.setCheckedNodes(value ? menuOptions.value as any : []); | ||||
|     } else if (type == "dept") { | ||||
|         deptRef.value?.setCheckedNodes(value ? deptOptions.value as any : []); | ||||
|     } | ||||
|   if (type == "menu") { | ||||
|     menuRef.value?.setCheckedNodes(value ? menuOptions.value as any : []); | ||||
|   } else if (type == "dept") { | ||||
|     deptRef.value?.setCheckedNodes(value ? deptOptions.value as any : []); | ||||
|   } | ||||
| } | ||||
| /** 树权限(父子联动) */ | ||||
| const handleCheckedTreeConnect = (value: any, type: string) => { | ||||
|     if (type == "menu") { | ||||
|         form.value.menuCheckStrictly = value; | ||||
|     } else if (type == "dept") { | ||||
|         form.value.deptCheckStrictly = value; | ||||
|     } | ||||
|   if (type == "menu") { | ||||
|     form.value.menuCheckStrictly = value; | ||||
|   } else if (type == "dept") { | ||||
|     form.value.deptCheckStrictly = value; | ||||
|   } | ||||
| } | ||||
| /** 所有菜单节点数据 */ | ||||
| const getMenuAllCheckedKeys = (): any => { | ||||
|     // 目前被选中的菜单节点 | ||||
|     let checkedKeys = menuRef.value?.getCheckedKeys(); | ||||
|     // 半选中的菜单节点 | ||||
|     let halfCheckedKeys = menuRef.value?.getHalfCheckedKeys(); | ||||
|     if (halfCheckedKeys) { | ||||
|       checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys); | ||||
|     } | ||||
|     return checkedKeys; | ||||
|   // 目前被选中的菜单节点 | ||||
|   let checkedKeys = menuRef.value?.getCheckedKeys(); | ||||
|   // 半选中的菜单节点 | ||||
|   let halfCheckedKeys = menuRef.value?.getHalfCheckedKeys(); | ||||
|   if (halfCheckedKeys) { | ||||
|     checkedKeys?.unshift.apply(checkedKeys, halfCheckedKeys); | ||||
|   } | ||||
|   return checkedKeys; | ||||
| } | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     roleFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.menuIds = getMenuAllCheckedKeys() | ||||
|             form.value.roleId ? await updateRole(form.value) : await addRole(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功") | ||||
|             dialog.visible = false | ||||
|             getList() | ||||
|         } | ||||
|     }) | ||||
|   roleFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.menuIds = getMenuAllCheckedKeys() | ||||
|       form.value.roleId ? await updateRole(form.value) : await addRole(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功") | ||||
|       dialog.visible = false | ||||
|       getList() | ||||
|     } | ||||
|   }) | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset() | ||||
|     dialog.visible = false; | ||||
|   reset() | ||||
|   dialog.visible = false; | ||||
| } | ||||
| /** 选择角色权限范围触发 */ | ||||
| const dataScopeSelectChange = (value: string) => { | ||||
|     if (value !== "2") { | ||||
|         deptRef.value?.setCheckedKeys([]) | ||||
|     } | ||||
|   if (value !== "2") { | ||||
|     deptRef.value?.setCheckedKeys([]) | ||||
|   } | ||||
| } | ||||
| /** 分配数据权限操作 */ | ||||
| const handleDataScope = async (row: RoleVO) => { | ||||
|     const roleDeptTreeselect = getRoleDeptTreeSelect(row.roleId); | ||||
|     const response = await getRole(row.roleId); | ||||
|     Object.assign(form.value, response.data); | ||||
|     openDataScope.value = true; | ||||
|     dialog.title = "分配数据权限"; | ||||
|     await nextTick(async () => { | ||||
|       const res = await roleDeptTreeselect; | ||||
|       await nextTick(() => { | ||||
|         if (deptRef.value) { | ||||
|           deptRef.value.setCheckedKeys(res.checkedKeys); | ||||
|         } | ||||
|       }) | ||||
|   const roleDeptTreeselect = getRoleDeptTreeSelect(row.roleId); | ||||
|   const response = await getRole(row.roleId); | ||||
|   Object.assign(form.value, response.data); | ||||
|   openDataScope.value = true; | ||||
|   dialog.title = "分配数据权限"; | ||||
|   await nextTick(async () => { | ||||
|     const res = await roleDeptTreeselect; | ||||
|     await nextTick(() => { | ||||
|       if (deptRef.value) { | ||||
|         deptRef.value.setCheckedKeys(res.checkedKeys); | ||||
|       } | ||||
|     }) | ||||
|   }) | ||||
| } | ||||
| /** 提交按钮(数据权限) */ | ||||
| const submitDataScope = async () => { | ||||
|     if (form.value.roleId) { | ||||
|         form.value.deptIds = getDeptAllCheckedKeys(); | ||||
|         await dataScope(form.value); | ||||
|         proxy?.$modal.msgSuccess("修改成功"); | ||||
|         openDataScope.value = false; | ||||
|         getList(); | ||||
|     } | ||||
|   if (form.value.roleId) { | ||||
|     form.value.deptIds = getDeptAllCheckedKeys(); | ||||
|     await dataScope(form.value); | ||||
|     proxy?.$modal.msgSuccess("修改成功"); | ||||
|     openDataScope.value = false; | ||||
|     getList(); | ||||
|   } | ||||
| } | ||||
| /** 取消按钮(数据权限)*/ | ||||
| const cancelDataScope = () => { | ||||
|     dataScopeRef.value?.resetFields(); | ||||
|     form.value = {...initForm}; | ||||
|     openDataScope.value = false; | ||||
|   dataScopeRef.value?.resetFields(); | ||||
|   form.value = { ...initForm }; | ||||
|   openDataScope.value = false; | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -50,9 +50,9 @@ import { UserQuery } from '@/api/system/user/types'; | ||||
|  | ||||
|  | ||||
| const props = defineProps({ | ||||
|     roleId: { | ||||
|         type: [Number, String] | ||||
|     } | ||||
|   roleId: { | ||||
|     type: [Number, String] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||
| @ -64,68 +64,68 @@ const total = ref(0); | ||||
| const userIds = ref<Array<string | number>>([]); | ||||
|  | ||||
| const queryParams = reactive<UserQuery>({ | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     roleId: undefined, | ||||
|     userName: undefined, | ||||
|     phonenumber: undefined | ||||
|   pageNum: 1, | ||||
|   pageSize: 10, | ||||
|   roleId: undefined, | ||||
|   userName: undefined, | ||||
|   phonenumber: undefined | ||||
| }) | ||||
|  | ||||
| const tableRef = ref<ElTableInstance>(); | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const show = () => { | ||||
|     queryParams.roleId = props.roleId; | ||||
|     getList(); | ||||
|     visible.value = true; | ||||
|   queryParams.roleId = props.roleId; | ||||
|   getList(); | ||||
|   visible.value = true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * 选择行 | ||||
|  */ | ||||
| const clickRow = (row: any) => { | ||||
|     // ele的bug | ||||
|     tableRef.value?.toggleRowSelection(row); | ||||
|   // ele的bug | ||||
|   tableRef.value?.toggleRowSelection(row); | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: UserVO[]) => { | ||||
|     userIds.value = selection.map((item: UserVO) => item.userId); | ||||
|   userIds.value = selection.map((item: UserVO) => item.userId); | ||||
| } | ||||
|  | ||||
| /** 查询数据 */ | ||||
| const getList = async () => { | ||||
|     const res = await unallocatedUserList(queryParams); | ||||
|     userList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|   const res = await unallocatedUserList(queryParams); | ||||
|   userList.value = res.rows; | ||||
|   total.value = res.total; | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     getList(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| const emit = defineEmits(["ok"]); | ||||
| /**选择授权用户操作 */ | ||||
| const handleSelectUser = async () => { | ||||
|     const roleId = queryParams.roleId; | ||||
|     const ids = userIds.value.join(','); | ||||
|     if (ids == "") { | ||||
|         proxy?.$modal.msgError('请选择要分配的用户'); | ||||
|         return; | ||||
|     } | ||||
|     await authUserSelectAll({ roleId, userIds: ids }); | ||||
|     proxy?.$modal.msgSuccess('分配成功'); | ||||
|     emit('ok'); | ||||
|     visible.value = false; | ||||
|   const roleId = queryParams.roleId; | ||||
|   const ids = userIds.value.join(','); | ||||
|   if (ids == "") { | ||||
|     proxy?.$modal.msgError('请选择要分配的用户'); | ||||
|     return; | ||||
|   } | ||||
|   await authUserSelectAll({ roleId, userIds: ids }); | ||||
|   proxy?.$modal.msgSuccess('分配成功'); | ||||
|   emit('ok'); | ||||
|   visible.value = false; | ||||
| } | ||||
| // 暴露 | ||||
| defineExpose({ | ||||
|     show, | ||||
|   show, | ||||
| }); | ||||
| </script> | ||||
|  | ||||
|  | ||||
| @ -82,7 +82,7 @@ | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
|  | ||||
|       <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-card> | ||||
|     <!-- 添加或修改租户对话框 --> | ||||
|     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> | ||||
| @ -162,192 +162,192 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
| const tenantFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: TenantForm = { | ||||
|     id: undefined, | ||||
|     tenantId: undefined, | ||||
|     contactUserName: '', | ||||
|     contactPhone: '', | ||||
|     username: '', | ||||
|     password: '', | ||||
|     companyName: '', | ||||
|     licenseNumber: '', | ||||
|     domain: '', | ||||
|     address: '', | ||||
|     intro: '', | ||||
|     remark: '', | ||||
|     packageId: '', | ||||
|     expireTime: '', | ||||
|     accountCount: 0, | ||||
|     status: '0', | ||||
|   id: undefined, | ||||
|   tenantId: undefined, | ||||
|   contactUserName: '', | ||||
|   contactPhone: '', | ||||
|   username: '', | ||||
|   password: '', | ||||
|   companyName: '', | ||||
|   licenseNumber: '', | ||||
|   domain: '', | ||||
|   address: '', | ||||
|   intro: '', | ||||
|   remark: '', | ||||
|   packageId: '', | ||||
|   expireTime: '', | ||||
|   accountCount: 0, | ||||
|   status: '0', | ||||
| } | ||||
| const data = reactive<PageData<TenantForm, TenantQuery>>({ | ||||
|     form: {...initFormData}, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         tenantId: '', | ||||
|         contactUserName: '', | ||||
|         contactPhone: '', | ||||
|         companyName: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         id: [{ required: true, message: "id不能为空", trigger: "blur" }], | ||||
|         tenantId: [{ required: true, message: "租户编号不能为空", trigger: "blur" }], | ||||
|         contactUserName: [{ required: true, message: "联系人不能为空", trigger: "blur" }], | ||||
|         contactPhone: [{ required: true, message: "联系电话不能为空", trigger: "blur" }], | ||||
|         companyName: [{ required: true, message: "企业名称不能为空", trigger: "blur" }], | ||||
|         username: [ | ||||
|             { required: true, message: "用户名不能为空", trigger: "blur" }, | ||||
|             { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } | ||||
|         ], | ||||
|         password: [ | ||||
|             { required: true, message: "密码不能为空", trigger: "blur" }, | ||||
|             { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' } | ||||
|         ] | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     tenantId: '', | ||||
|     contactUserName: '', | ||||
|     contactPhone: '', | ||||
|     companyName: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     id: [{ required: true, message: "id不能为空", trigger: "blur" }], | ||||
|     tenantId: [{ required: true, message: "租户编号不能为空", trigger: "blur" }], | ||||
|     contactUserName: [{ required: true, message: "联系人不能为空", trigger: "blur" }], | ||||
|     contactPhone: [{ required: true, message: "联系电话不能为空", trigger: "blur" }], | ||||
|     companyName: [{ required: true, message: "企业名称不能为空", trigger: "blur" }], | ||||
|     username: [ | ||||
|       { required: true, message: "用户名不能为空", trigger: "blur" }, | ||||
|       { min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' } | ||||
|     ], | ||||
|     password: [ | ||||
|       { required: true, message: "密码不能为空", trigger: "blur" }, | ||||
|       { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' } | ||||
|     ] | ||||
|   } | ||||
| }); | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs(data); | ||||
|  | ||||
| /** 查询所有租户套餐 */ | ||||
| const getTenantPackage = async () => { | ||||
|     const res = await selectTenantPackage() | ||||
|     packageList.value = res.data; | ||||
|   const res = await selectTenantPackage() | ||||
|   packageList.value = res.data; | ||||
| } | ||||
|  | ||||
| /** 查询租户列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listTenant(queryParams.value); | ||||
|     tenantList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listTenant(queryParams.value); | ||||
|   tenantList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
|  | ||||
| // 租户套餐状态修改 | ||||
| const handleStatusChange = async (row: TenantVO) => { | ||||
|     let text = row.status === "0" ? "启用" : "停用"; | ||||
|     try { | ||||
|         await proxy?.$modal.confirm('确认要"' + text + '""' + row.companyName + '"租户吗?'); | ||||
|         await changeTenantStatus(row.id, row.tenantId, row.status); | ||||
|         proxy?.$modal.msgSuccess(text + "成功"); | ||||
|     } catch { | ||||
|         row.status = row.status === "0" ? "1" : "0"; | ||||
|     } | ||||
|   let text = row.status === "0" ? "启用" : "停用"; | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('确认要"' + text + '""' + row.companyName + '"租户吗?'); | ||||
|     await changeTenantStatus(row.id, row.tenantId, row.status); | ||||
|     proxy?.$modal.msgSuccess(text + "成功"); | ||||
|   } catch { | ||||
|     row.status = row.status === "0" ? "1" : "0"; | ||||
|   } | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| // 取消按钮 | ||||
| const cancel = () => { | ||||
|     reset(); | ||||
|     dialog.visible = false; | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
|  | ||||
| // 表单重置 | ||||
| const reset = () => { | ||||
|     form.value = {...initFormData}; | ||||
|     tenantFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   tenantFormRef.value?.resetFields(); | ||||
| } | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
|  | ||||
| // 多选框选中数据 | ||||
| const handleSelectionChange = (selection: TenantVO[]) => { | ||||
|     ids.value = selection.map(item => item.id); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.id); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
|  | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "添加租户"; | ||||
|     nextTick(() => { | ||||
|         reset(); | ||||
|         getTenantPackage(); | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "添加租户"; | ||||
|   nextTick(() => { | ||||
|     reset(); | ||||
|     getTenantPackage(); | ||||
|   }) | ||||
| } | ||||
|  | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: TenantVO) => { | ||||
|     loading.value = true; | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改租户"; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         await getTenantPackage(); | ||||
|         const _id = row?.id || ids.value[0]; | ||||
|         const res = await getTenant(_id); | ||||
|         loading.value = false; | ||||
|         Object.assign(form.value, res.data) | ||||
|     }) | ||||
|   loading.value = true; | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改租户"; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     await getTenantPackage(); | ||||
|     const _id = row?.id || ids.value[0]; | ||||
|     const res = await getTenant(_id); | ||||
|     loading.value = false; | ||||
|     Object.assign(form.value, res.data) | ||||
|   }) | ||||
| } | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     tenantFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             buttonLoading.value = true; | ||||
|             if (form.value.id) { | ||||
|                 await updateTenant(form.value).finally(() => buttonLoading.value = false); | ||||
|             } else { | ||||
|                 await addTenant(form.value).finally(() => buttonLoading.value = false); | ||||
|             } | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             getList(); | ||||
|         } | ||||
|     }); | ||||
|   tenantFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       buttonLoading.value = true; | ||||
|       if (form.value.id) { | ||||
|         await updateTenant(form.value).finally(() => buttonLoading.value = false); | ||||
|       } else { | ||||
|         await addTenant(form.value).finally(() => buttonLoading.value = false); | ||||
|       } | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       getList(); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: TenantVO) => { | ||||
|     const _ids = row?.id || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除租户编号为"' + _ids + '"的数据项?') | ||||
|     loading.value = true; | ||||
|     await delTenant(_ids).finally(() => loading.value = false); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   const _ids = row?.id || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除租户编号为"' + _ids + '"的数据项?') | ||||
|   loading.value = true; | ||||
|   await delTenant(_ids).finally(() => loading.value = false); | ||||
|   await getList(); | ||||
|   proxy?.$modal.msgSuccess("删除成功"); | ||||
|  | ||||
|  | ||||
| } | ||||
|  | ||||
| /** 同步租户套餐按钮操作 */ | ||||
| const handleSyncTenantPackage = async (row: TenantVO) => { | ||||
|     try { | ||||
|         await proxy?.$modal.confirm('是否确认同步租户套餐租户编号为"' + row.tenantId + '"的数据项?'); | ||||
|         loading.value = true; | ||||
|         await syncTenantPackage(row.tenantId, row.packageId); | ||||
|         await getList(); | ||||
|         proxy?.$modal.msgSuccess("同步成功"); | ||||
|     } catch {return} finally { | ||||
|         loading.value = false; | ||||
|     } | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('是否确认同步租户套餐租户编号为"' + row.tenantId + '"的数据项?'); | ||||
|     loading.value = true; | ||||
|     await syncTenantPackage(row.tenantId, row.packageId); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("同步成功"); | ||||
|   } catch { return } finally { | ||||
|     loading.value = false; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download('system/tenant/export', { | ||||
|         ...queryParams.value | ||||
|     }, `tenant_${new Date().getTime()}.xlsx`) | ||||
|   proxy?.download('system/tenant/export', { | ||||
|     ...queryParams.value | ||||
|   }, `tenant_${new Date().getTime()}.xlsx`) | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|   getList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -61,7 +61,7 @@ | ||||
|         </el-table-column> | ||||
|       </el-table> | ||||
|  | ||||
|       <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-card> | ||||
|  | ||||
|     <!-- 添加或修改租户套餐对话框 --> | ||||
|  | ||||
| @ -211,7 +211,7 @@ | ||||
|             <el-form-item label="状态"> | ||||
|               <el-radio-group v-model="form.status"> | ||||
|                 <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ | ||||
|                     dict.label }}</el-radio> | ||||
|                   dict.label }}</el-radio> | ||||
|               </el-radio-group> | ||||
|             </el-form-item> | ||||
|           </el-col> | ||||
| @ -317,7 +317,7 @@ const ids = ref<Array<number | string>>([]); | ||||
| const single = ref(true); | ||||
| const multiple = ref(true); | ||||
| const total = ref(0); | ||||
| const dateRange = ref<[DateModelType, DateModelType]>(['','']); | ||||
| const dateRange = ref<[DateModelType, DateModelType]>(['', '']); | ||||
| const deptName = ref(''); | ||||
| const deptOptions = ref<DeptVO[]>([]); | ||||
| const initPassword = ref('123456'); | ||||
| @ -325,28 +325,28 @@ const postOptions = ref<PostVO[]>([]); | ||||
| const roleOptions = ref<RoleVO[]>([]); | ||||
| /*** 用户导入参数 */ | ||||
| const upload = reactive<ImportOption>({ | ||||
|     // 是否显示弹出层(用户导入) | ||||
|     open: false, | ||||
|     // 弹出层标题(用户导入) | ||||
|     title: "", | ||||
|     // 是否禁用上传 | ||||
|     isUploading: false, | ||||
|     // 是否更新已经存在的用户数据 | ||||
|     updateSupport: 0, | ||||
|     // 设置上传的请求头部 | ||||
|     headers: { Authorization: "Bearer " + getToken() }, | ||||
|     // 上传的地址 | ||||
|     url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData" | ||||
|   // 是否显示弹出层(用户导入) | ||||
|   open: false, | ||||
|   // 弹出层标题(用户导入) | ||||
|   title: "", | ||||
|   // 是否禁用上传 | ||||
|   isUploading: false, | ||||
|   // 是否更新已经存在的用户数据 | ||||
|   updateSupport: 0, | ||||
|   // 设置上传的请求头部 | ||||
|   headers: { Authorization: "Bearer " + getToken() }, | ||||
|   // 上传的地址 | ||||
|   url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData" | ||||
| }) | ||||
| // 列显隐信息 | ||||
| const columns = ref<FieldOption[]>([ | ||||
|     { key: 0, label: `用户编号`, visible: false }, | ||||
|     { key: 1, label: `用户名称`, visible: true }, | ||||
|     { key: 2, label: `用户昵称`, visible: true }, | ||||
|     { key: 3, label: `部门`, visible: true }, | ||||
|     { key: 4, label: `手机号码`, visible: true }, | ||||
|     { key: 5, label: `状态`, visible: true }, | ||||
|     { key: 6, label: `创建时间`, visible: true } | ||||
|   { key: 0, label: `用户编号`, visible: false }, | ||||
|   { key: 1, label: `用户名称`, visible: true }, | ||||
|   { key: 2, label: `用户昵称`, visible: true }, | ||||
|   { key: 3, label: `部门`, visible: true }, | ||||
|   { key: 4, label: `手机号码`, visible: true }, | ||||
|   { key: 5, label: `状态`, visible: true }, | ||||
|   { key: 6, label: `创建时间`, visible: true } | ||||
| ]) | ||||
|  | ||||
|  | ||||
| @ -356,243 +356,243 @@ const userFormRef = ref<ElFormInstance>(); | ||||
| const uploadRef = ref<ElUploadInstance>(); | ||||
|  | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '' | ||||
|   visible: false, | ||||
|   title: '' | ||||
| }); | ||||
|  | ||||
| const initFormData: UserForm = { | ||||
|     userId: undefined, | ||||
|     deptId: undefined, | ||||
|     userName: '', | ||||
|     nickName: undefined, | ||||
|     password: '', | ||||
|     phonenumber: undefined, | ||||
|     email: undefined, | ||||
|     sex: undefined, | ||||
|     status: "0", | ||||
|     remark: '', | ||||
|     postIds: [], | ||||
|     roleIds: [] | ||||
|   userId: undefined, | ||||
|   deptId: undefined, | ||||
|   userName: '', | ||||
|   nickName: undefined, | ||||
|   password: '', | ||||
|   phonenumber: undefined, | ||||
|   email: undefined, | ||||
|   sex: undefined, | ||||
|   status: "0", | ||||
|   remark: '', | ||||
|   postIds: [], | ||||
|   roleIds: [] | ||||
| } | ||||
| const data = reactive<PageData<UserForm, UserQuery>>({ | ||||
|     form: { ...initFormData }, | ||||
|     queryParams: { | ||||
|         pageNum: 1, | ||||
|         pageSize: 10, | ||||
|         userName: '', | ||||
|         phonenumber: '', | ||||
|         status: '', | ||||
|         deptId: '' | ||||
|     }, | ||||
|     rules: { | ||||
|         userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }], | ||||
|         nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], | ||||
|         password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }], | ||||
|         email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], | ||||
|         phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] | ||||
|     } | ||||
|   form: { ...initFormData }, | ||||
|   queryParams: { | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     userName: '', | ||||
|     phonenumber: '', | ||||
|     status: '', | ||||
|     deptId: '' | ||||
|   }, | ||||
|   rules: { | ||||
|     userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }], | ||||
|     nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], | ||||
|     password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }], | ||||
|     email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], | ||||
|     phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| const { queryParams, form, rules } = toRefs<PageData<UserForm, UserQuery>>(data) | ||||
|  | ||||
| /** 通过条件过滤节点  */ | ||||
| const filterNode = (value: string, data: any) => { | ||||
|     if (!value) return true | ||||
|     return data.label.indexOf(value) !== -1 | ||||
|   if (!value) return true | ||||
|   return data.label.indexOf(value) !== -1 | ||||
| } | ||||
| /** 根据名称筛选部门树 */ | ||||
| watchEffect( | ||||
|     () => {deptTreeRef.value?.filter(deptName.value);}, | ||||
|     { | ||||
|         flush: 'post' // watchEffect会在DOM挂载或者更新之前就会触发,此属性控制在DOM元素更新后运行 | ||||
|     } | ||||
|   () => { deptTreeRef.value?.filter(deptName.value); }, | ||||
|   { | ||||
|     flush: 'post' // watchEffect会在DOM挂载或者更新之前就会触发,此属性控制在DOM元素更新后运行 | ||||
|   } | ||||
| ); | ||||
|  | ||||
| /** 查询部门下拉树结构 */ | ||||
| const getTreeSelect = async () => { | ||||
|     const res = await api.deptTreeSelect(); | ||||
|     deptOptions.value = res.data; | ||||
|   const res = await api.deptTreeSelect(); | ||||
|   deptOptions.value = res.data; | ||||
| }; | ||||
|  | ||||
| /** 查询用户列表 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await api.listUser(proxy?.addDateRange(queryParams.value, dateRange.value)); | ||||
|     loading.value = false; | ||||
|     userList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|   loading.value = true; | ||||
|   const res = await api.listUser(proxy?.addDateRange(queryParams.value, dateRange.value)); | ||||
|   loading.value = false; | ||||
|   userList.value = res.rows; | ||||
|   total.value = res.total; | ||||
| } | ||||
|  | ||||
| /** 节点单击事件 */ | ||||
| const handleNodeClick = (data: DeptVO) => { | ||||
|     queryParams.value.deptId = data.id; | ||||
|     handleQuery() | ||||
|   queryParams.value.deptId = data.id; | ||||
|   handleQuery() | ||||
| } | ||||
|  | ||||
|  | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1 | ||||
|     getList() | ||||
|   queryParams.value.pageNum = 1 | ||||
|   getList() | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     dateRange.value = ['',''] | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     queryParams.value.pageNum = 1; | ||||
|     queryParams.value.deptId = undefined; | ||||
|     deptTreeRef.value?.setCurrentKey(undefined); | ||||
|     handleQuery(); | ||||
|   dateRange.value = ['', ''] | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   queryParams.value.deptId = undefined; | ||||
|   deptTreeRef.value?.setCurrentKey(undefined); | ||||
|   handleQuery(); | ||||
| } | ||||
|  | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: UserVO) => { | ||||
|     const userIds = row?.userId || ids.value; | ||||
|     const [err] = await to(proxy?.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?') as any); | ||||
|     if (!err) { | ||||
|         await api.delUser(userIds); | ||||
|         await getList(); | ||||
|         proxy?.$modal.msgSuccess("删除成功"); | ||||
|     } | ||||
|   const userIds = row?.userId || ids.value; | ||||
|   const [err] = await to(proxy?.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?') as any); | ||||
|   if (!err) { | ||||
|     await api.delUser(userIds); | ||||
|     await getList(); | ||||
|     proxy?.$modal.msgSuccess("删除成功"); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** 用户状态修改  */ | ||||
| const handleStatusChange = async (row: UserVO) => { | ||||
|     let text = row.status === "0" ? "启用" : "停用" | ||||
|     try { | ||||
|         await proxy?.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?'); | ||||
|         await api.changeUserStatus(row.userId, row.status); | ||||
|         proxy?.$modal.msgSuccess(text + "成功"); | ||||
|     } catch (err) { | ||||
|         row.status = row.status === "0" ? "1" : "0"; | ||||
|     } | ||||
|   let text = row.status === "0" ? "启用" : "停用" | ||||
|   try { | ||||
|     await proxy?.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?'); | ||||
|     await api.changeUserStatus(row.userId, row.status); | ||||
|     proxy?.$modal.msgSuccess(text + "成功"); | ||||
|   } catch (err) { | ||||
|     row.status = row.status === "0" ? "1" : "0"; | ||||
|   } | ||||
| } | ||||
| /** 跳转角色分配 */ | ||||
| const handleAuthRole = (row: UserVO) => { | ||||
|     const userId = row.userId; | ||||
|     router.push("/system/user-auth/role/" + userId); | ||||
|   const userId = row.userId; | ||||
|   router.push("/system/user-auth/role/" + userId); | ||||
| } | ||||
|  | ||||
| /** 重置密码按钮操作 */ | ||||
| const handleResetPwd = async (row: UserVO) => { | ||||
|     const [err, res] = await to(ElMessageBox.prompt('请输入"' + row.userName + '"的新密码', "提示", { | ||||
|         confirmButtonText: "确定", | ||||
|         cancelButtonText: "取消", | ||||
|         closeOnClickModal: false, | ||||
|         inputPattern: /^.{5,20}$/, | ||||
|         inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", | ||||
|     })) | ||||
|     if (!err) { | ||||
|         await api.resetUserPwd(row.userId, res.value); | ||||
|         proxy?.$modal.msgSuccess("修改成功,新密码是:" + res.value); | ||||
|     } | ||||
|   const [err, res] = await to(ElMessageBox.prompt('请输入"' + row.userName + '"的新密码', "提示", { | ||||
|     confirmButtonText: "确定", | ||||
|     cancelButtonText: "取消", | ||||
|     closeOnClickModal: false, | ||||
|     inputPattern: /^.{5,20}$/, | ||||
|     inputErrorMessage: "用户密码长度必须介于 5 和 20 之间", | ||||
|   })) | ||||
|   if (!err) { | ||||
|     await api.resetUserPwd(row.userId, res.value); | ||||
|     proxy?.$modal.msgSuccess("修改成功,新密码是:" + res.value); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** 选择条数  */ | ||||
| const handleSelectionChange = (selection: UserVO[]) => { | ||||
|     ids.value = selection.map((item) => item.userId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map((item) => item.userId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
|  | ||||
| /** 导入按钮操作 */ | ||||
| const handleImport = () => { | ||||
|     upload.title = "用户导入"; | ||||
|     upload.open = true; | ||||
|   upload.title = "用户导入"; | ||||
|   upload.open = true; | ||||
| } | ||||
| /** 导出按钮操作 */ | ||||
| const handleExport = () => { | ||||
|     proxy?.download("system/user/export", { | ||||
|         ...queryParams.value, | ||||
|     }, `user_${new Date().getTime()}.xlsx`); | ||||
|   proxy?.download("system/user/export", { | ||||
|     ...queryParams.value, | ||||
|   }, `user_${new Date().getTime()}.xlsx`); | ||||
| }; | ||||
| /** 下载模板操作 */ | ||||
| const importTemplate = () => { | ||||
|     proxy?.download("system/user/importTemplate", { | ||||
|     }, `user_template_${new Date().getTime()}.xlsx`); | ||||
|   proxy?.download("system/user/importTemplate", { | ||||
|   }, `user_template_${new Date().getTime()}.xlsx`); | ||||
| } | ||||
|  | ||||
| /**文件上传中处理 */ | ||||
| const handleFileUploadProgress = () => { | ||||
|     upload.isUploading = true; | ||||
|   upload.isUploading = true; | ||||
| } | ||||
| /** 文件上传成功处理 */ | ||||
| const handleFileSuccess = (response: any, file: UploadFile) => { | ||||
|     upload.open = false; | ||||
|     upload.isUploading = false; | ||||
|     uploadRef.value?.handleRemove(file); | ||||
|     ElMessageBox.alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); | ||||
|     getList(); | ||||
|   upload.open = false; | ||||
|   upload.isUploading = false; | ||||
|   uploadRef.value?.handleRemove(file); | ||||
|   ElMessageBox.alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); | ||||
|   getList(); | ||||
| } | ||||
|  | ||||
| /** 提交上传文件 */ | ||||
| function submitFileForm() { | ||||
|     uploadRef.value?.submit(); | ||||
|   uploadRef.value?.submit(); | ||||
| } | ||||
|  | ||||
| /** 初始化部门数据 */ | ||||
| const initTreeData = async () => { | ||||
|     // 判断部门的数据是否存在,存在不获取,不存在则获取 | ||||
|     if (deptOptions.value === undefined) { | ||||
|         const { data } = await treeselect(); | ||||
|         deptOptions.value = data; | ||||
|     } | ||||
|   // 判断部门的数据是否存在,存在不获取,不存在则获取 | ||||
|   if (deptOptions.value === undefined) { | ||||
|     const { data } = await treeselect(); | ||||
|     deptOptions.value = data; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /** 重置操作表单 */ | ||||
| const reset = () => { | ||||
|     form.value = { ...initFormData }; | ||||
|     userFormRef.value?.resetFields(); | ||||
|   form.value = { ...initFormData }; | ||||
|   userFormRef.value?.resetFields(); | ||||
| } | ||||
| /** 取消按钮 */ | ||||
| const cancel = () => { | ||||
|     reset(); | ||||
|     dialog.visible = false; | ||||
|   reset(); | ||||
|   dialog.visible = false; | ||||
| } | ||||
|  | ||||
| /** 新增按钮操作 */ | ||||
| const handleAdd = () => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "新增用户"; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         await initTreeData(); | ||||
|         const { data } = await api.getUser(); | ||||
|         postOptions.value = data.posts; | ||||
|         roleOptions.value = data.roles; | ||||
|         form.value.password = initPassword.value; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "新增用户"; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     await initTreeData(); | ||||
|     const { data } = await api.getUser(); | ||||
|     postOptions.value = data.posts; | ||||
|     roleOptions.value = data.roles; | ||||
|     form.value.password = initPassword.value; | ||||
|   }) | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleUpdate = (row?: UserForm) => { | ||||
|     dialog.visible = true; | ||||
|     dialog.title = "修改用户"; | ||||
|     nextTick(async () => { | ||||
|         reset(); | ||||
|         await initTreeData(); | ||||
|         const userId = row?.userId || ids.value[0] | ||||
|         const { data } = await api.getUser(userId) | ||||
|         Object.assign(form.value, data.user); | ||||
|         postOptions.value = data.posts; | ||||
|         roleOptions.value = data.roles; | ||||
|         form.value.postIds = data.postIds; | ||||
|         form.value.roleIds = data.roleIds; | ||||
|         form.value.password = ""; | ||||
|     }) | ||||
|   dialog.visible = true; | ||||
|   dialog.title = "修改用户"; | ||||
|   nextTick(async () => { | ||||
|     reset(); | ||||
|     await initTreeData(); | ||||
|     const userId = row?.userId || ids.value[0] | ||||
|     const { data } = await api.getUser(userId) | ||||
|     Object.assign(form.value, data.user); | ||||
|     postOptions.value = data.posts; | ||||
|     roleOptions.value = data.roles; | ||||
|     form.value.postIds = data.postIds; | ||||
|     form.value.roleIds = data.roleIds; | ||||
|     form.value.password = ""; | ||||
|   }) | ||||
|  | ||||
| } | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|     userFormRef.value?.validate(async (valid: boolean) => { | ||||
|         if (valid) { | ||||
|             form.value.userId ? await api.updateUser(form.value) : await api.addUser(form.value); | ||||
|             proxy?.$modal.msgSuccess("操作成功"); | ||||
|             dialog.visible = false; | ||||
|             await getList(); | ||||
|         } | ||||
|     }) | ||||
|   userFormRef.value?.validate(async (valid: boolean) => { | ||||
|     if (valid) { | ||||
|       form.value.userId ? await api.updateUser(form.value) : await api.addUser(form.value); | ||||
|       proxy?.$modal.msgSuccess("操作成功"); | ||||
|       dialog.visible = false; | ||||
|       await getList(); | ||||
|     } | ||||
|   }) | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -600,23 +600,23 @@ const submitForm = () => { | ||||
|  * 关闭用户弹窗 | ||||
|  */ | ||||
| const closeDialog = () => { | ||||
|     dialog.visible = false; | ||||
|     resetForm(); | ||||
|   dialog.visible = false; | ||||
|   resetForm(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * 重置表单 | ||||
|  */ | ||||
| const resetForm = () => { | ||||
|     userFormRef.value?.resetFields(); | ||||
|     userFormRef.value?.clearValidate(); | ||||
|   userFormRef.value?.resetFields(); | ||||
|   userFormRef.value?.clearValidate(); | ||||
|  | ||||
|     form.value.id = undefined; | ||||
|     form.value.status = '1'; | ||||
|   form.value.id = undefined; | ||||
|   form.value.status = '1'; | ||||
| } | ||||
| onMounted(() => { | ||||
|     getTreeSelect() // 初始化部门数据 | ||||
|     getList() // 初始化列表数据 | ||||
|   getTreeSelect() // 初始化部门数据 | ||||
|   getList() // 初始化列表数据 | ||||
| }); | ||||
| </script> | ||||
|  | ||||
|  | ||||
| @ -70,22 +70,22 @@ import { getUserProfile } from "@/api/system/user"; | ||||
|  | ||||
| const activeTab = ref("userinfo"); | ||||
| const state = ref<Record<string, any>>({ | ||||
|     user: {}, | ||||
|     roleGroup: '', | ||||
|     postGroup: '' | ||||
|   user: {}, | ||||
|   roleGroup: '', | ||||
|   postGroup: '' | ||||
| }); | ||||
|  | ||||
| const userForm = ref({}); | ||||
|  | ||||
| const getUser = async () => { | ||||
|     const res = await getUserProfile(); | ||||
|     state.value.user = res.data.user; | ||||
|     userForm.value = { ...res.data.user } | ||||
|     state.value.roleGroup = res.data.roleGroup; | ||||
|     state.value.postGroup = res.data.postGroup; | ||||
|   const res = await getUserProfile(); | ||||
|   state.value.user = res.data.user; | ||||
|   userForm.value = { ...res.data.user } | ||||
|   state.value.roleGroup = res.data.roleGroup; | ||||
|   state.value.postGroup = res.data.postGroup; | ||||
| }; | ||||
|  | ||||
| onMounted(() => { | ||||
|     getUser(); | ||||
|   getUser(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
| @ -34,16 +34,16 @@ | ||||
| import { propTypes } from "@/utils/propTypes"; | ||||
|  | ||||
| const prop = defineProps({ | ||||
|     info: propTypes.any.def({}) | ||||
|   info: propTypes.any.def({}) | ||||
| }); | ||||
|  | ||||
| const infoForm = computed(() => prop.info) | ||||
|  | ||||
| // 表单校验 | ||||
| const rules = ref({ | ||||
|     tableName: [{ required: true, message: "请输入表名称", trigger: "blur" }], | ||||
|     tableComment: [{ required: true, message: "请输入表描述", trigger: "blur" }], | ||||
|     className: [{ required: true, message: "请输入实体类名称", trigger: "blur" }], | ||||
|     functionAuthor: [{ required: true, message: "请输入作者", trigger: "blur" }] | ||||
|   tableName: [{ required: true, message: "请输入表名称", trigger: "blur" }], | ||||
|   tableComment: [{ required: true, message: "请输入表描述", trigger: "blur" }], | ||||
|   className: [{ required: true, message: "请输入实体类名称", trigger: "blur" }], | ||||
|   functionAuthor: [{ required: true, message: "请输入作者", trigger: "blur" }] | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -135,8 +135,8 @@ const genInfo = ref<InstanceType<typeof GenInfoForm>>(); | ||||
|  | ||||
| /** 提交按钮 */ | ||||
| const submitForm = () => { | ||||
|   const basicForm = basicInfo.value.$refs.basicInfoForm; | ||||
|   const genForm = genInfo.value.$refs.genInfoForm; | ||||
|   const basicForm = basicInfo.value?.$refs.basicInfoForm; | ||||
|   const genForm = genInfo.value?.$refs.genInfoForm; | ||||
|  | ||||
|   Promise.all([basicForm, genForm].map(getFormPromise)).then(async res => { | ||||
|     const validateResult = res.every(item => !!item); | ||||
| @ -167,7 +167,7 @@ const getFormPromise = (form: any) => { | ||||
|   }); | ||||
| } | ||||
| const close = () => { | ||||
|   const obj = {path: "/tool/gen", query: {t: Date.now(), pageNum: route.query.pageNum}}; | ||||
|   const obj = { path: "/tool/gen", query: { t: Date.now(), pageNum: route.query.pageNum } }; | ||||
|   proxy?.$tab.closeOpenPage(obj); | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -246,11 +246,11 @@ const table = computed(() => props.tables); | ||||
|  | ||||
| // 表单校验 | ||||
| const rules = ref({ | ||||
|   tplCategory: [{required: true, message: "请选择生成模板", trigger: "blur"}], | ||||
|   packageName: [{required: true, message: "请输入生成包路径", trigger: "blur"}], | ||||
|   moduleName: [{required: true, message: "请输入生成模块名", trigger: "blur"}], | ||||
|   businessName: [{required: true, message: "请输入生成业务名", trigger: "blur"}], | ||||
|   functionName: [{required: true, message: "请输入生成功能名", trigger: "blur"}] | ||||
|   tplCategory: [{ required: true, message: "请选择生成模板", trigger: "blur" }], | ||||
|   packageName: [{ required: true, message: "请输入生成包路径", trigger: "blur" }], | ||||
|   moduleName: [{ required: true, message: "请输入生成模块名", trigger: "blur" }], | ||||
|   businessName: [{ required: true, message: "请输入生成业务名", trigger: "blur" }], | ||||
|   functionName: [{ required: true, message: "请输入生成功能名", trigger: "blur" }] | ||||
| }); | ||||
| const subSelectChange = () => { | ||||
|   infoForm.value.subTableFkName = ""; | ||||
|  | ||||
| @ -26,7 +26,7 @@ | ||||
|         <el-table-column prop="createTime" label="创建时间"></el-table-column> | ||||
|         <el-table-column prop="updateTime" label="更新时间"></el-table-column> | ||||
|       </el-table> | ||||
|       <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||
|     </el-row> | ||||
|     <template #footer> | ||||
|       <div class="dialog-footer"> | ||||
| @ -51,11 +51,11 @@ const tableRef = ref<ElTableInstance>(); | ||||
| const queryFormRef = ref<ElFormInstance>(); | ||||
|  | ||||
| const queryParams = reactive<DbTableQuery>({ | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     dataName: '', | ||||
|     tableName: '', | ||||
|     tableComment: '' | ||||
|   pageNum: 1, | ||||
|   pageSize: 10, | ||||
|   dataName: '', | ||||
|   tableName: '', | ||||
|   tableComment: '' | ||||
| }); | ||||
| const dataNameList = ref<Array<string>>([]); | ||||
|  | ||||
| @ -63,53 +63,53 @@ const emit = defineEmits(["ok"]); | ||||
|  | ||||
| /** 查询参数列表 */ | ||||
| const show = (dataName: string) => { | ||||
|     getDataNameList(); | ||||
|     if(dataName){ | ||||
|       queryParams.dataName = dataName; | ||||
|     } else { | ||||
|       queryParams.dataName = 'master'; | ||||
|     } | ||||
|     getList(); | ||||
|     visible.value = true; | ||||
|   getDataNameList(); | ||||
|   if (dataName) { | ||||
|     queryParams.dataName = dataName; | ||||
|   } else { | ||||
|     queryParams.dataName = 'master'; | ||||
|   } | ||||
|   getList(); | ||||
|   visible.value = true; | ||||
| } | ||||
| /** 单击选择行 */ | ||||
| const clickRow = (row: DbTableVO) => { | ||||
|     // ele bug | ||||
|     tableRef.value?.toggleRowSelection(row); | ||||
|   // ele bug | ||||
|   tableRef.value?.toggleRowSelection(row); | ||||
| } | ||||
| /** 多选框选中数据 */ | ||||
| const handleSelectionChange = (selection: DbTableVO[]) => { | ||||
|     tables.value = selection.map(item => item.tableName); | ||||
|   tables.value = selection.map(item => item.tableName); | ||||
| } | ||||
| /** 查询表数据 */ | ||||
| const getList = async () => { | ||||
|     const res = await listDbTable(queryParams); | ||||
|     dbTableList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|   const res = await listDbTable(queryParams); | ||||
|   dbTableList.value = res.rows; | ||||
|   total.value = res.total; | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 导入按钮操作 */ | ||||
| const handleImportTable = async () => { | ||||
|     const tableNames = tables.value.join(","); | ||||
|     if (tableNames == "") { | ||||
|         proxy?.$modal.msgError("请选择要导入的表"); | ||||
|         return; | ||||
|     } | ||||
|     const res = await importTable({ tables: tableNames, dataName: queryParams.dataName }); | ||||
|     proxy?.$modal.msgSuccess(res.msg); | ||||
|     if (res.code === 200) { | ||||
|         visible.value = false; | ||||
|         emit("ok"); | ||||
|     } | ||||
|   const tableNames = tables.value.join(","); | ||||
|   if (tableNames == "") { | ||||
|     proxy?.$modal.msgError("请选择要导入的表"); | ||||
|     return; | ||||
|   } | ||||
|   const res = await importTable({ tables: tableNames, dataName: queryParams.dataName }); | ||||
|   proxy?.$modal.msgSuccess(res.msg); | ||||
|   if (res.code === 200) { | ||||
|     visible.value = false; | ||||
|     emit("ok"); | ||||
|   } | ||||
| } | ||||
| /** 查询多数据源名称 */ | ||||
| const getDataNameList = async () => { | ||||
| @ -118,6 +118,6 @@ const getDataNameList = async () => { | ||||
| } | ||||
|  | ||||
| defineExpose({ | ||||
|     show, | ||||
|   show, | ||||
| }); | ||||
| </script> | ||||
|  | ||||
| @ -136,31 +136,31 @@ const queryFormRef = ref<ElFormInstance>(); | ||||
| const importRef = ref<InstanceType<typeof ImportTable>>(); | ||||
|  | ||||
| const queryParams = ref<TableQuery>({ | ||||
|     pageNum: 1, | ||||
|     pageSize: 10, | ||||
|     tableName: '', | ||||
|     tableComment: '', | ||||
|     dataName: "" | ||||
|   pageNum: 1, | ||||
|   pageSize: 10, | ||||
|   tableName: '', | ||||
|   tableComment: '', | ||||
|   dataName: "" | ||||
| }) | ||||
|  | ||||
| const preview = ref <any>({ | ||||
|     data: {}, | ||||
|     activeName: 'domain.java' | ||||
| const preview = ref<any>({ | ||||
|   data: {}, | ||||
|   activeName: 'domain.java' | ||||
| }) | ||||
| const dialog = reactive<DialogOption>({ | ||||
|     visible: false, | ||||
|     title: '代码预览' | ||||
|   visible: false, | ||||
|   title: '代码预览' | ||||
| }); | ||||
|  | ||||
| onActivated(() => { | ||||
|     const time = route.query.t; | ||||
|     if (time != null && time != uniqueId.value) { | ||||
|         uniqueId.value = time as string; | ||||
|         queryParams.value.pageNum = Number(route.query.pageNum); | ||||
|         dateRange.value = ['', '']; | ||||
|         queryFormRef.value?.resetFields(); | ||||
|         getList(); | ||||
|     } | ||||
|   const time = route.query.t; | ||||
|   if (time != null && time != uniqueId.value) { | ||||
|     uniqueId.value = time as string; | ||||
|     queryParams.value.pageNum = Number(route.query.pageNum); | ||||
|     dateRange.value = ['', '']; | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     getList(); | ||||
|   } | ||||
| }) | ||||
|  | ||||
| /** 查询多数据源名称 */ | ||||
| @ -171,81 +171,81 @@ const getDataNameList = async () => { | ||||
|  | ||||
| /** 查询表集合 */ | ||||
| const getList = async () => { | ||||
|     loading.value = true; | ||||
|     const res = await listTable(proxy?.addDateRange(queryParams.value, dateRange.value)); | ||||
|     tableList.value = res.rows; | ||||
|     total.value = res.total; | ||||
|     loading.value = false; | ||||
|   loading.value = true; | ||||
|   const res = await listTable(proxy?.addDateRange(queryParams.value, dateRange.value)); | ||||
|   tableList.value = res.rows; | ||||
|   total.value = res.total; | ||||
|   loading.value = false; | ||||
| } | ||||
| /** 搜索按钮操作 */ | ||||
| const handleQuery = () => { | ||||
|     queryParams.value.pageNum = 1; | ||||
|     getList(); | ||||
|   queryParams.value.pageNum = 1; | ||||
|   getList(); | ||||
| } | ||||
| /** 生成代码操作 */ | ||||
| const handleGenTable = async (row?: TableVO) => { | ||||
|     const tbIds = row?.tableId || ids.value; | ||||
|     if (tbIds == "") { | ||||
|         proxy?.$modal.msgError('请选择要生成的数据'); | ||||
|         return; | ||||
|     } | ||||
|     if (row?.genType === "1") { | ||||
|         await genCode(row.tableId); | ||||
|         proxy?.$modal.msgSuccess('成功生成到自定义路径:' + row.genPath); | ||||
|     } else { | ||||
|         proxy?.$download.zip('/tool/gen/batchGenCode?tableIdStr=' + tbIds, 'ruoyi.zip'); | ||||
|     } | ||||
|   const tbIds = row?.tableId || ids.value; | ||||
|   if (tbIds == "") { | ||||
|     proxy?.$modal.msgError('请选择要生成的数据'); | ||||
|     return; | ||||
|   } | ||||
|   if (row?.genType === "1") { | ||||
|     await genCode(row.tableId); | ||||
|     proxy?.$modal.msgSuccess('成功生成到自定义路径:' + row.genPath); | ||||
|   } else { | ||||
|     proxy?.$download.zip('/tool/gen/batchGenCode?tableIdStr=' + tbIds, 'ruoyi.zip'); | ||||
|   } | ||||
| } | ||||
| /** 同步数据库操作 */ | ||||
| const handleSynchDb = async (row: TableVO) => { | ||||
|     const tableId = row.tableId; | ||||
|     await proxy?.$modal.confirm('确认要强制同步"' + row.tableName + '"表结构吗?'); | ||||
|     await synchDb(tableId); | ||||
|     proxy?.$modal.msgSuccess('同步成功'); | ||||
|   const tableId = row.tableId; | ||||
|   await proxy?.$modal.confirm('确认要强制同步"' + row.tableName + '"表结构吗?'); | ||||
|   await synchDb(tableId); | ||||
|   proxy?.$modal.msgSuccess('同步成功'); | ||||
| } | ||||
| /** 打开导入表弹窗 */ | ||||
| const openImportTable = () => { | ||||
|     importRef.value.show(queryParams.value.dataName); | ||||
|   importRef.value?.show(queryParams.value.dataName); | ||||
| } | ||||
| /** 重置按钮操作 */ | ||||
| const resetQuery = () => { | ||||
|     dateRange.value = ['', '']; | ||||
|     queryFormRef.value?.resetFields(); | ||||
|     handleQuery(); | ||||
|   dateRange.value = ['', '']; | ||||
|   queryFormRef.value?.resetFields(); | ||||
|   handleQuery(); | ||||
| } | ||||
| /** 预览按钮 */ | ||||
| const handlePreview = async (row: TableVO) => { | ||||
|     const res = await previewTable(row.tableId); | ||||
|     preview.value.data = res.data; | ||||
|     dialog.visible = true; | ||||
|     preview.value.activeName = 'domain.java'; | ||||
|   const res = await previewTable(row.tableId); | ||||
|   preview.value.data = res.data; | ||||
|   dialog.visible = true; | ||||
|   preview.value.activeName = 'domain.java'; | ||||
| } | ||||
| /** 复制代码成功 */ | ||||
| const copyTextSuccess = () => { | ||||
|     proxy?.$modal.msgSuccess('复制成功'); | ||||
|   proxy?.$modal.msgSuccess('复制成功'); | ||||
| } | ||||
| // 多选框选中数据 | ||||
| const handleSelectionChange = (selection: TableVO[]) => { | ||||
|     ids.value = selection.map(item => item.tableId); | ||||
|     single.value = selection.length != 1; | ||||
|     multiple.value = !selection.length; | ||||
|   ids.value = selection.map(item => item.tableId); | ||||
|   single.value = selection.length != 1; | ||||
|   multiple.value = !selection.length; | ||||
| } | ||||
| /** 修改按钮操作 */ | ||||
| const handleEditTable = (row?: TableVO) => { | ||||
|     const tableId = row?.tableId || ids.value[0]; | ||||
|     router.push({ path: '/tool/gen-edit/index/' + tableId, query: { pageNum: queryParams.value.pageNum } }); | ||||
|   const tableId = row?.tableId || ids.value[0]; | ||||
|   router.push({ path: '/tool/gen-edit/index/' + tableId, query: { pageNum: queryParams.value.pageNum } }); | ||||
| } | ||||
| /** 删除按钮操作 */ | ||||
| const handleDelete = async (row?: TableVO) => { | ||||
|     const tableIds = row?.tableId || ids.value; | ||||
|     await proxy?.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?'); | ||||
|     await delTable(tableIds); | ||||
|     getList(); | ||||
|     proxy?.$modal.msgSuccess('删除成功'); | ||||
|   const tableIds = row?.tableId || ids.value; | ||||
|   await proxy?.$modal.confirm('是否确认删除表编号为"' + tableIds + '"的数据项?'); | ||||
|   await delTable(tableIds); | ||||
|   getList(); | ||||
|   proxy?.$modal.msgSuccess('删除成功'); | ||||
| } | ||||
|  | ||||
| onMounted(() => { | ||||
|     getList(); | ||||
|     getDataNameList(); | ||||
|   getList(); | ||||
|   getDataNameList(); | ||||
| }) | ||||
| </script> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 LiuHao
					LiuHao