From d503f9ed0b8ac1c1e472424b608485d9b0546450 Mon Sep 17 00:00:00 2001 From: xiangcongshuai <xiangcongshuai@supervision.ltd> Date: Thu, 4 Jul 2024 10:34:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=92=E8=89=B2=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E6=94=B9=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system.ts | 36 ++++ src/layout/components/tag/index.vue | 1 - .../approval/compontents/RejectApproval.vue | 1 + .../knowledgeCentre/compontents/Details.vue | 2 + .../compontents/SubmitReview.vue | 1 + .../compontents/TransferRecords.vue | 6 +- .../knowledgeCentre/compontents/withdraw.vue | 1 + .../compontents/roleDrawer.vue | 168 ++++++++++++++++++ .../accountManagement/index.vue | 71 +++++++- .../accountManagement/table/accountColumns.ts | 6 +- 10 files changed, 283 insertions(+), 10 deletions(-) create mode 100644 src/views/systemManagement/accountManagement/compontents/roleDrawer.vue diff --git a/src/api/system.ts b/src/api/system.ts index 2094bf6..720bfc3 100644 --- a/src/api/system.ts +++ b/src/api/system.ts @@ -192,3 +192,39 @@ export const deleteDicManage = (data?: object) => { params: data }); }; +/** + * + * @returns 新增角色 + */ +export const createRole = (data?: object) => { + return http.request<Result>("post", "/know-sub/roleManage/save", { + data + }); +}; +/** + * + * @returns 查看角色列表 + */ +export const queryRoleDateList = (data?: object) => { + return http.request<Result>("get", "/know-sub/roleManage/list", { + params: data + }); +}; +/** + * + * @returns 修改角色 + */ +export const updateRole = (data?: object) => { + return http.request<Result>("post", "/know-sub/roleManage/update", { + data + }); +}; +/** + * + * @returns 删除角色 + */ +export const deleteRole = (data?: object) => { + return http.request<Result>("delete", "/know-sub/roleManage/delete", { + params: data + }); +}; diff --git a/src/layout/components/tag/index.vue b/src/layout/components/tag/index.vue index 6825a7d..0fd4329 100644 --- a/src/layout/components/tag/index.vue +++ b/src/layout/components/tag/index.vue @@ -169,7 +169,6 @@ const getTagsWidth = () => { // }); // }; onMounted(() => { - console.log("222", tabs.list); // window.addEventListener("resize", getResizeTabs); }); </script> diff --git a/src/views/knowledgeCentre/approval/compontents/RejectApproval.vue b/src/views/knowledgeCentre/approval/compontents/RejectApproval.vue index 5a909ec..2e4f644 100644 --- a/src/views/knowledgeCentre/approval/compontents/RejectApproval.vue +++ b/src/views/knowledgeCentre/approval/compontents/RejectApproval.vue @@ -48,6 +48,7 @@ const id = ref(""); defineExpose({ open(val1, val2) { dialogVisible.value = true; + reason.value = ""; id.value = val1; todoId.value = val2; } diff --git a/src/views/knowledgeCentre/compontents/Details.vue b/src/views/knowledgeCentre/compontents/Details.vue index e25e239..3979f43 100644 --- a/src/views/knowledgeCentre/compontents/Details.vue +++ b/src/views/knowledgeCentre/compontents/Details.vue @@ -55,6 +55,7 @@ const getDeatils = async id => { const closeDialog = () => { dialogVisible.value = false; }; +const downLoadFile = item => {}; </script> <template> @@ -136,6 +137,7 @@ const closeDialog = () => { <div class="annex"> <div class="annex_item" + @click="downLoadFile(item)" v-for="(item, index) in formData.fileInfoList" :key="index" > diff --git a/src/views/knowledgeCentre/compontents/SubmitReview.vue b/src/views/knowledgeCentre/compontents/SubmitReview.vue index 7d0dd58..bc06020 100644 --- a/src/views/knowledgeCentre/compontents/SubmitReview.vue +++ b/src/views/knowledgeCentre/compontents/SubmitReview.vue @@ -45,6 +45,7 @@ const dialogVisible = ref(false); const reason = ref(""); defineExpose({ open() { + reason.value = ""; dialogVisible.value = true; } }); diff --git a/src/views/knowledgeCentre/compontents/TransferRecords.vue b/src/views/knowledgeCentre/compontents/TransferRecords.vue index c42e2d2..b9758d2 100644 --- a/src/views/knowledgeCentre/compontents/TransferRecords.vue +++ b/src/views/knowledgeCentre/compontents/TransferRecords.vue @@ -17,7 +17,7 @@ defineExpose({ openApproval(row) { dialogVisible.value = true; title.value = row.title; - getDetails(row.knowledgeId, row.flowId); + getDetails(row.knowledgeId, row.flowInstanceId); } }); @@ -30,10 +30,10 @@ const getStatusColor = index => { borderColor: colorList[index] }; }; -const getDetails = async (id, flowId) => { +const getDetails = async (id, flowInstanceId) => { const res: any = await queryKnowledgeFlowRecord({ knowledgeId: id, - flowId + flowInstanceId }); recordList.value = res.data; }; diff --git a/src/views/knowledgeCentre/compontents/withdraw.vue b/src/views/knowledgeCentre/compontents/withdraw.vue index e6a3c2c..181ee23 100644 --- a/src/views/knowledgeCentre/compontents/withdraw.vue +++ b/src/views/knowledgeCentre/compontents/withdraw.vue @@ -49,6 +49,7 @@ const reason = ref(""); const id = ref(""); defineExpose({ open(val) { + reason.value = ""; id.value = val; dialogVisible.value = true; } diff --git a/src/views/systemManagement/accountManagement/compontents/roleDrawer.vue b/src/views/systemManagement/accountManagement/compontents/roleDrawer.vue new file mode 100644 index 0000000..79c2487 --- /dev/null +++ b/src/views/systemManagement/accountManagement/compontents/roleDrawer.vue @@ -0,0 +1,168 @@ +<script setup lang="ts"> +import { onMounted, reactive, ref, watch } from "vue"; +import { FormInstance, FormRules } from "element-plus"; +import { createRole, updateRole } from "@/api/system"; +import { message } from "@/utils/message"; +defineOptions({ + name: "CreateForm" +}); + +const props = defineProps({ + createFlag: { + type: Boolean, + default: false + }, + updateFrom: { + type: Object, + default: () => { + return {}; + } + }, + accountFromType: { + type: String, + default: "" + }, + closeDrawer: { + type: Function + } +}); +const modalVisible = ref(false); + +// 监听 props.message 的变化,并更新 modalVisible +watch( + () => props.createFlag, + newValue => { + modalVisible.value = newValue; // 更新 modalVisible + if (newValue) { + if (props.accountFromType === "edit") { + getFlowDetails(props.updateFrom); + } + } + } +); +const ruleFormRef = ref<FormInstance>(); +const roleForm = reactive({ + id: "", + roleName: "", + mark: "" +}); +const rules = reactive<FormRules>({ + roleName: [{ required: true, message: "请输入", trigger: "blur" }] +}); + +const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + if (props.accountFromType === "edit") { + updateRole(roleForm).then(res => { + if (res.code === 200) { + message("修改成功", { type: "success" }); + props.closeDrawer(); + } + }); + } else { + createRole(roleForm).then(res => { + if (res.code === 200) { + message("新建成功", { type: "success" }); + props.closeDrawer(); + } + }); + } + } else { + console.log("error submit!", fields); + } + }); +}; +const resetForm = (formEl: FormInstance | undefined) => { + if (!formEl) return; + formEl.resetFields(); +}; +const handleDrawerClosed = () => { + props.closeDrawer(); +}; + +const getFlowDetails = (value: any) => { + roleForm.id = props.accountFromType === "edit" ? value.id : ""; + roleForm.roleName = value.roleName; + roleForm.mark = value.remark; +}; +onMounted(() => {}); +</script> + +<template> + <div> + <el-drawer + v-model="modalVisible" + modal-class="drawer_content" + :with-header="false" + @closed="handleDrawerClosed" + > + <div class="drawer_header"> + <span>新增角色</span> + </div> + <div class="drawer_box"> + <el-form + :model="roleForm" + label-width="auto" + :rules="rules" + ref="ruleFormRef" + > + <el-form-item label="角色名称" prop="roleName"> + <el-input + v-model="roleForm.roleName" + autocomplete="off" + placeholder="请输入" + /> + </el-form-item> + + <el-form-item label="备注"> + <el-input v-model="roleForm.mark" type="textarea" /> + </el-form-item> + </el-form> + <div class="drawer_footer"> + <el-button plain @click="resetForm(ruleFormRef)">重置</el-button> + <el-button type="primary" @click="submitForm(ruleFormRef)" + >确定</el-button + > + </div> + </div> + </el-drawer> + </div> +</template> + +<style lang="scss" scoped> +:deep(.el-drawer__body) { + padding: 0 !important; +} + +.drawer_content { + .drawer_header { + box-sizing: border-box; + height: 96px; + padding: 24px; + line-height: 65px; + border-bottom: 1px solid #e9e9e9; + + span { + padding-left: 8px; + font-size: 20px; + border-left: 6px solid #0052d9; + } + } + + .drawer_box { + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: space-between; + height: calc(100vh - 96px); + padding: 24px; + + .drawer_footer { + display: flex; + justify-content: flex-end; + } + } +} +</style> diff --git a/src/views/systemManagement/accountManagement/index.vue b/src/views/systemManagement/accountManagement/index.vue index a5ad8d3..685e618 100644 --- a/src/views/systemManagement/accountManagement/index.vue +++ b/src/views/systemManagement/accountManagement/index.vue @@ -8,11 +8,14 @@ import { getDeptManageList, resetPW, deletePW, - deleteDeptManage + deleteDeptManage, + queryRoleDateList, + deleteRole } from "@/api/system"; import { message } from "@/utils/message"; import accountDrawer from "./compontents/accountDrawer.vue"; import deptDrawer from "./compontents/deptDrawer.vue"; +import roleDrawer from "./compontents/roleDrawer.vue"; defineOptions({ name: "AccountManagement" }); @@ -27,6 +30,7 @@ const accountForm = reactive({ }); const updateFrom = ref({}); const updateDeptFrom = ref({}); +const updateRoleFrom = ref({}); const passwordForm = reactive({ id: "", account: "", @@ -57,7 +61,7 @@ const pagination = reactive({ background: true }); -const dataList = ref([]); +const roleDataList = ref([]); const accountDataList = ref([]); // const deptDataList = ref([]); /** @@ -95,6 +99,20 @@ const getUserTableData = async () => { console.log(res); // dataList.value = res.data; }; +/** + * 角色列表查询 + */ +const getRoleTableData = async () => { + const res: any = await queryRoleDateList({ + roleName: accountForm.userName, + pageNum: pagination.currentPage, + pageSize: pagination.pageSize + }); + if (res.code === 200) { + roleDataList.value = res.data.records; + pagination.total = res.data.total; + } +}; const search = () => { pagination.currentPage = 1; pagination.pageSize = 10; @@ -102,6 +120,8 @@ const search = () => { getUserTableData(); } else if (seachForm.status === "2") { getDeptData(); + } else { + getRoleTableData(); } }; @@ -113,6 +133,7 @@ const reset = () => { }; const createFlag = ref(false); const createDeptFlag = ref(false); +const createRoleFlag = ref(false); const dialogFormVisible = ref(false); const deleteFormVisible = ref(false); @@ -123,6 +144,8 @@ const create = () => { createFlag.value = true; } else if (seachForm.status === "2") { createDeptFlag.value = true; + } else { + createRoleFlag.value = true; } // search(); @@ -139,6 +162,10 @@ const closeDrawer = () => { createDeptFlag.value = false; accountFromType.value = ""; search(); + } else { + createRoleFlag.value = false; + accountFromType.value = ""; + search(); } // if (updateFlag.value) { // updateFlag.value = false; @@ -166,6 +193,10 @@ const handleEdit = async (value: any, type: string) => { createDeptFlag.value = true; accountFromType.value = type; updateDeptFrom.value = value; + } else { + createRoleFlag.value = true; + accountFromType.value = type; + updateRoleFrom.value = value; } }; @@ -232,6 +263,16 @@ const deleteForm = () => { search(); } }); + } else { + deleteRole({ + id: passwordForm.id + }).then(res => { + if (res.code === 200) { + message("删除成功", { type: "success" }); + deleteFormVisible.value = false; + search(); + } + }); } }; const newName = (type: any) => { @@ -252,9 +293,12 @@ const deleteName = (type: any) => { return "角色"; } }; +//角色权限 +const handleRolePermission = row => {}; onMounted(() => { getDeptData(); getUserTableData(); + getRoleTableData(); }); </script> @@ -388,15 +432,28 @@ onMounted(() => { <pure-table showOverflowTooltip alignWhole="center" - :data="dataList" + :data="roleDataList" :columns="roleColumns" adaptive + :pagination="pagination" + @page-current-change="onCurrentChange" :header-cell-style="{ background: 'var(--el-table-row-hover-bg-color)', color: 'var(--el-text-color-primary)' }" > + <template #index="{ index }"> + <span>{{ index + 1 }}</span> + </template> <template #operation="{ row }"> + <el-button link type="primary" @click="handleEdit(row, 'edit')"> + 编辑 + </el-button> + <span>|</span> + <el-button link type="primary" @click="handleRolePermission(row)"> + 角色权限 + </el-button> + <span>|</span> <el-button link type="danger" @click="handleDelete(row)"> 删除 </el-button> @@ -417,6 +474,14 @@ onMounted(() => { :accountFromType="accountFromType" :closeDrawer="closeDrawer" /> + <!-- 角色 --> + <roleDrawer + :createFlag="createRoleFlag" + :updateFrom="updateRoleFrom" + :accountFromType="accountFromType" + :closeDrawer="closeDrawer" + /> + <!-- 账户弹框 --> <el-dialog v-model="dialogFormVisible" diff --git a/src/views/systemManagement/accountManagement/table/accountColumns.ts b/src/views/systemManagement/accountManagement/table/accountColumns.ts index 87e4cdd..14d8451 100644 --- a/src/views/systemManagement/accountManagement/table/accountColumns.ts +++ b/src/views/systemManagement/accountManagement/table/accountColumns.ts @@ -75,15 +75,15 @@ export function useColumns() { const roleColumns: TableColumnList = [ { label: "序号", - prop: "diseaseName" + slot: "index" }, { label: "角色", - prop: "diseaseName" + prop: "roleName" }, { label: "备注", - prop: "diseaseName" + prop: "remark" }, { label: "操作",