| | |
| | | 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(''); |
| | |
| | | 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) |
| | | }; |
| | | } |
| | | |
| | | |
| | |
| | | * 获取租户列表 |
| | | */ |
| | | 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> |
| | | |
| | |
| | | background-image: url("../assets/images/login-background.jpg"); |
| | | background-size: cover; |
| | | } |
| | | |
| | | .title { |
| | | margin: 0px auto 30px auto; |
| | | text-align: center; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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" |
| | | }); |
| | | |
| | | // 租户开关 |
| | |
| | | |
| | | |
| | | 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); |
| | |
| | | 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> |
| | | |
| | |
| | | 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[]; |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | const dialog = reactive<DialogOption>({ |
| | | visible: false, |
| | | title: '' |
| | | visible: false, |
| | | title: '' |
| | | }); |
| | | |
| | | const deptTableRef = ref<ElTableInstance>(); |
| | |
| | | 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> |
| | |
| | | |
| | | |
| | | 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> |
| | |
| | | |
| | | |
| | | 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> |
| | |
| | | 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 |
| | |
| | | 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>(); |
| | |
| | | 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> |
| | |
| | | |
| | | |
| | | 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> |
| | |
| | | |
| | | <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"; |
| | | |
| | |
| | | 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> |
| | |
| | | const daterangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']); |
| | | |
| | | const dialog = reactive<DialogOption>({ |
| | | visible: false, |
| | | title: '' |
| | | visible: false, |
| | | title: '' |
| | | }); |
| | | |
| | | // 默认排序 |
| | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | 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> |
| | | |
| | |
| | | <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> |
| | |
| | | |
| | | /** 数据范围选项*/ |
| | | 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>(); |
| | |
| | | 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: '' |
| | | }); |
| | | |
| | | |
| | |
| | | * 查询角色列表 |
| | | */ |
| | | 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> |
| | |
| | | |
| | | |
| | | const props = defineProps({ |
| | | roleId: { |
| | | type: [Number, String] |
| | | } |
| | | roleId: { |
| | | type: [Number, String] |
| | | } |
| | | }) |
| | | |
| | | const { proxy } = getCurrentInstance() as ComponentInternalInstance; |
| | |
| | | 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> |
| | | |
| | |
| | | </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> |
| | |
| | | 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> |
| | |
| | | </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-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> |
| | |
| | | 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'); |
| | |
| | | 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 } |
| | | ]) |
| | | |
| | | |
| | |
| | | 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(); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | |
| | | * 关闭用户弹窗 |
| | | */ |
| | | 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> |
| | | |
| | |
| | | |
| | | 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> |
| | |
| | | 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> |
| | |
| | | |
| | | /** 提交按钮 */ |
| | | 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); |
| | |
| | | }); |
| | | } |
| | | 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); |
| | | } |
| | | |
| | |
| | | |
| | | // 表单校验 |
| | | 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 = ""; |
| | |
| | | <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"> |
| | |
| | | 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>>([]); |
| | | |
| | |
| | | |
| | | /** 查询参数列表 */ |
| | | 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 () => { |
| | |
| | | } |
| | | |
| | | defineExpose({ |
| | | show, |
| | | show, |
| | | }); |
| | | </script> |
| | |
| | | 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(); |
| | | } |
| | | }) |
| | | |
| | | /** 查询多数据源名称 */ |
| | |
| | | |
| | | /** 查询表集合 */ |
| | | 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> |