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: "操作",