index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <div class="application scroll-y">
  3. <div class="application-head flex">
  4. <div class="manageTitle">角色管理</div>
  5. <div class="flex-wrap">
  6. <Search @clear="clear" @search="search" />
  7. <div v-permission="['new_role_button']">
  8. <el-button size="default" @click="addApp" plain>新增</el-button>
  9. </div>
  10. </div>
  11. </div>
  12. <div class="application-content">
  13. <Table :tableHeader="tableHeader" @btnClick="btnClick" :tableBtnGroup="tableBtnGroup" :tableData="tableData" />
  14. </div>
  15. <!--删除弹框-->
  16. <Dialog :flag="flag" msgTitle="删除角色" type="del" :delName="title" @delRest="delRest" @delRemove="remove" />
  17. <!--新增/编辑-->
  18. <Dialog :flag="editDialogVisible" :msgTitle="editDialogTitle" @submitForm="submitForm(ruleFormRef)" @resetForm="resetForm(ruleFormRef)" :show-flag="true">
  19. <el-form ref="ruleFormRef" :model="ruleForm" label-width="110px" class="demo-ruleForm">
  20. <el-form-item label="角色名称" :rules="[{required: true,message: '请输入角色名称',trigger: 'blur',}]" prop="role_name">
  21. <el-input v-model="ruleForm.role_name" size="default" placeholder="请输入角色名称" />
  22. </el-form-item>
  23. <el-form-item label="角色描述" prop="role_comment">
  24. <el-input v-model="ruleForm.role_comment" size="default" type="textarea" :rows="3" placeholder="请输入角色描述" />
  25. </el-form-item>
  26. <el-form-item label="是否启用" :rules="[{required: true,message: '请选择是否启用',trigger: 'change',}]" prop="role_status">
  27. <el-radio-group v-model="ruleForm.role_status">
  28. <el-radio :label="1">启用</el-radio>
  29. <el-radio :label="2"> 禁用</el-radio>
  30. </el-radio-group>
  31. </el-form-item>
  32. </el-form>
  33. </Dialog>
  34. </div>
  35. </template>
  36. <script setup lang="ts">
  37. import { ref, onBeforeMount } from "vue";
  38. import { ElMessage, FormInstance, FormRules } from "element-plus";
  39. import Table from "@/components/tableTemp/index.vue";
  40. import Search from "@/components/search/index.vue";
  41. import table from "../hooks/useTable";
  42. import * as _ from "lodash";
  43. const router = useRouter();
  44. const ruleFormRef = ref<FormInstance>();
  45. const tableHeader = ref([]);
  46. const tableData = ref([]);
  47. const tableBtnGroup = [
  48. {
  49. name: "编辑",
  50. className: "editBtn",
  51. param: "edit",
  52. is: "role_editing_button",
  53. },
  54. {
  55. name: "查看权限",
  56. className: "editBtn",
  57. param: "auth",
  58. is: "role_authorization_button",
  59. },
  60. {
  61. name: "删除",
  62. className: "delBtn",
  63. param: "del",
  64. is: "role_deletion_button",
  65. },
  66. ];
  67. const flag = ref(false);
  68. const title = ref("");
  69. const dT = ref("add");
  70. const editDialogVisible = ref(false);
  71. const editDialogTitle = ref("新增角色");
  72. const ruleForm = ref<any>({
  73. role_name: "",
  74. role_comment: "",
  75. role_status: "",
  76. });
  77. const searchInfo = ref("");
  78. const rowIndex = ref<any>({});
  79. onBeforeMount(() => {
  80. gueryRole();
  81. });
  82. const gueryRole = async () => {
  83. const res = await table.getTable(DATACONTENT_ID.roleTableNId, [
  84. searchInfo.value,
  85. sessionStorage.getItem("User_Id"),
  86. ]);
  87. tableHeader.value = res.tableHeader.value;
  88. tableData.value = res.tableData.value;
  89. };
  90. const search = (val) => {
  91. searchInfo.value = val;
  92. gueryRole();
  93. };
  94. const clear = () => {
  95. searchInfo.value = "";
  96. gueryRole();
  97. };
  98. const btnClick = (index, row, param) => {
  99. rowIndex.value = _.cloneDeep(row);
  100. if (param == "del") {
  101. flag.value = true;
  102. title.value = row.role_name;
  103. } else if (param == "edit") {
  104. dT.value = "edit";
  105. editDialogVisible.value = true;
  106. editDialogTitle.value = "编辑角色";
  107. ruleForm.value = _.cloneDeep(row);
  108. } else {
  109. router.push({
  110. path: "/userManagement/role/auth",
  111. query: {
  112. role_id: row.role_id,
  113. },
  114. });
  115. }
  116. };
  117. const delRest = () => {
  118. flag.value = false;
  119. };
  120. const remove = async () => {
  121. rowIndex.value.operator_id = sessionStorage.getItem("User_Id");
  122. saveRole(3, rowIndex.value);
  123. flag.value = false;
  124. };
  125. const addApp = () => {
  126. editDialogVisible.value = true;
  127. editDialogTitle.value = "新增角色";
  128. dT.value = "add";
  129. ruleForm.value = {};
  130. };
  131. // 新增/编辑角色
  132. const saveRole = async (event, data) => {
  133. try {
  134. const { code, message } = await table.dataChange(
  135. SERVICE_ID.roleMsgId,
  136. event,
  137. data
  138. );
  139. if (code == 0) {
  140. ElMessage.success(message);
  141. gueryRole();
  142. } else {
  143. ElMessage.error(message);
  144. }
  145. } catch (error) {}
  146. };
  147. const submitForm = async (formEl: FormInstance | undefined) => {
  148. if (!formEl) return;
  149. await formEl.validate((valid, fields) => {
  150. if (valid) {
  151. if (dT.value == "add") {
  152. ruleForm.value.operator_id = sessionStorage.getItem("User_Id");
  153. saveRole(1, ruleForm.value);
  154. } else {
  155. ruleForm.value.operator_id = sessionStorage.getItem("User_Id");
  156. saveRole(2, ruleForm.value);
  157. }
  158. editDialogVisible.value = false;
  159. } else {
  160. console.log("error submit!", fields);
  161. }
  162. });
  163. };
  164. const resetForm = (formEl: FormInstance | undefined) => {
  165. if (!formEl) return;
  166. formEl.resetFields();
  167. editDialogVisible.value = false;
  168. };
  169. </script>
  170. <style lang="scss" scoped>
  171. .application {
  172. &-content {
  173. margin-top: 24px;
  174. height: calc(100% - 56px);
  175. }
  176. }
  177. </style>