index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class="application account 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. <el-button size="default" @click="addApp" plain>新增</el-button>
  8. </div>
  9. </div>
  10. <div class="application-content flex">
  11. <div class="box account-tree">
  12. <el-tree :data="data" :props="defaultProps" node-key="user_group_id" default-expand-all @node-click="handleNodeClick" />
  13. </div>
  14. <Table class="account-table" btnGroupWidth="250px" :tableHeader="tableHeader" @btnClick="btnClick" :tableBtnGroup="tableBtnGroup" :tableData="tableData" />
  15. </div>
  16. <!--删除弹框-->
  17. <Dialog :flag="flag" msgTitle="删除账号" type="del" :delName="title" @delRest="delRest" @delRemove="remove" />
  18. <!--新增/编辑-->
  19. <Dialog :flag="editDialogVisible" :msgTitle="editDialogTitle" @submitForm="submitForm(ruleFormRef)" @resetForm="resetForm(ruleFormRef)" :show-flag="true">
  20. <el-form ref="ruleFormRef" :model="ruleForm" label-width="110px" class="demo-ruleForm">
  21. <el-form-item label="账号名称" prop="user_name">
  22. <el-input :disabled="dT == 'edit'" v-model="ruleForm.user_name" size="default" placeholder="请输入账号名称" />
  23. </el-form-item>
  24. <el-form-item label="账号密码" prop="user_pwd">
  25. <el-input v-model="ruleForm.user_pwd" type="password" show-password size="default" placeholder="请输入账号名称" />
  26. </el-form-item>
  27. <el-form-item label="账号描述" prop="user_comment">
  28. <el-input v-model="ruleForm.user_comment" size="default" type="textarea" :rows="3" placeholder="请输入账号描述" />
  29. </el-form-item>
  30. <el-form-item label="是否启用" prop="user_status">
  31. <el-radio-group v-model="ruleForm.user_status">
  32. <el-radio :label="1">启用</el-radio>
  33. <el-radio :label="2"> 禁用</el-radio>
  34. </el-radio-group>
  35. </el-form-item>
  36. </el-form>
  37. </Dialog>
  38. </div>
  39. </template>
  40. <script setup lang="ts">
  41. import { ref, reactive, onBeforeMount } from "vue";
  42. import { ElMessage, FormInstance, FormRules } from "element-plus";
  43. import Table from "@/components/tableTemp/index.vue";
  44. import Search from "@/components/search/index.vue";
  45. import Dialog from "@/components/dialog/index.vue";
  46. import { translateDataToTreeAll } from "@/utils/validate";
  47. import { GeneralDataReception, Query } from "@/api/dataIntegration";
  48. import * as _ from "lodash";
  49. import MD5 from "blueimp-md5";
  50. import table from "../hooks/useTable";
  51. const router = useRouter();
  52. const ruleFormRef = ref<FormInstance>();
  53. const tableHeader = ref<any>([]);
  54. const tableData = ref<any>([]);
  55. const tableBtnGroup = <any>[
  56. {
  57. name: "编辑",
  58. className: "editBtn",
  59. param: "edit",
  60. },
  61. {
  62. name: "查看权限",
  63. className: "editBtn",
  64. param: "auth",
  65. },
  66. {
  67. name: "删除",
  68. className: "delBtn",
  69. param: "del",
  70. },
  71. ];
  72. const flag = ref(false);
  73. const title = ref("");
  74. const dT = ref("add");
  75. const editDialogVisible = ref(false);
  76. const editDialogTitle = ref("新增账号");
  77. const ruleForm = ref<any>({
  78. user_name: "",
  79. user_comment: "",
  80. user_status: "",
  81. user_pwd: "",
  82. });
  83. const rowIndex = ref<any>({});
  84. const data = ref<any>([]);
  85. const msgId = ref(null);
  86. const msgType = ref("all");
  87. const PageIndex = ref(1);
  88. const searchInfo = ref("");
  89. //获取用户组
  90. const getGroup = async () => {
  91. const { code, returnData } = await Query({
  92. id: DATACONTENT_ID.accountGroupTableId,
  93. dataContent: [""],
  94. });
  95. if (code == 0 && returnData.listValues) {
  96. const dataObj = {
  97. user_group_id: -1,
  98. up_user_group_id: -2,
  99. user_group_name: "全部用户组",
  100. children: translateDataToTreeAll(
  101. returnData.listValues,
  102. "up_user_group_id",
  103. "user_group_id"
  104. ),
  105. };
  106. data.value = [dataObj];
  107. } else {
  108. const dataObj = {
  109. user_group_id: -1,
  110. up_user_group_id: -2,
  111. user_group_name: "全部用户组",
  112. children: [],
  113. };
  114. data.value = [dataObj];
  115. }
  116. };
  117. //获取table
  118. const accountList = async () => {
  119. let result: any = null;
  120. if (msgType.value == "all") {
  121. result = await Query({
  122. id: DATACONTENT_ID.accountTableId,
  123. needPage: PageIndex.value,
  124. dataContent: [searchInfo.value],
  125. });
  126. } else {
  127. result = await Query({
  128. id: DATACONTENT_ID.accountGroupDetailsId,
  129. dataContent: [msgId.value],
  130. needPage: PageIndex.value,
  131. });
  132. }
  133. const { code, returnData, message } = result;
  134. if (code == 0) {
  135. const { columnSet, listValues } = returnData;
  136. tableHeader.value = columnSet;
  137. tableData.value = listValues;
  138. } else {
  139. ElMessage.error(message);
  140. }
  141. };
  142. // 回到第一页
  143. const pageInit = () => {
  144. PageIndex.value = 1;
  145. tableHeader.value = [];
  146. tableData.value = [];
  147. accountList();
  148. };
  149. //增删改
  150. const dataChange = async (event, data) => {
  151. const { code, message } = await table.dataChange(
  152. SERVICE_ID.accountScId,
  153. event,
  154. data
  155. );
  156. if (code == 0) {
  157. ElMessage.success(message);
  158. pageInit();
  159. } else {
  160. ElMessage.error(message);
  161. }
  162. };
  163. onBeforeMount(() => {
  164. getGroup();
  165. accountList();
  166. });
  167. const handleNodeClick = (data) => {
  168. tableHeader.value = [];
  169. tableData.value = [];
  170. if (data.user_group_id != -1 && data.up_user_group_id != -2) {
  171. PageIndex.value = 1;
  172. msgType.value = "cld";
  173. msgId.value = data.user_group_id;
  174. accountList();
  175. } else {
  176. msgType.value = "all";
  177. clear();
  178. }
  179. };
  180. const defaultProps = {
  181. children: "children",
  182. label: "user_group_name",
  183. };
  184. const search = (val) => {
  185. searchInfo.value = val;
  186. pageInit();
  187. };
  188. const clear = () => {
  189. searchInfo.value = "";
  190. pageInit();
  191. };
  192. const btnClick = (index, row, param) => {
  193. rowIndex.value = row;
  194. if (param == "del") {
  195. flag.value = true;
  196. title.value = row.user_name;
  197. } else if (param == "edit") {
  198. dT.value = "edit";
  199. editDialogVisible.value = true;
  200. editDialogTitle.value = "编辑账号";
  201. ruleForm.value = _.cloneDeep(row);
  202. } else {
  203. router.push({
  204. path: "/userManagement/account/accountAuth",
  205. query: {
  206. id: row.user_id,
  207. },
  208. });
  209. }
  210. };
  211. const delRest = () => {
  212. flag.value = false;
  213. };
  214. const remove = () => {
  215. dataChange(3, rowIndex.value);
  216. flag.value = false;
  217. };
  218. const addApp = () => {
  219. editDialogVisible.value = true;
  220. editDialogTitle.value = "新增账号";
  221. dT.value = "add";
  222. ruleForm.value = {};
  223. };
  224. const submitForm = async (formEl: FormInstance | undefined) => {
  225. if (!formEl) return;
  226. await formEl.validate((valid, fields) => {
  227. if (valid) {
  228. ruleForm.value.user_pwd = MD5(ruleForm.value.user_pwd);
  229. if (dT.value == "add") {
  230. dataChange(1, ruleForm.value);
  231. } else {
  232. dataChange(2, ruleForm.value);
  233. }
  234. editDialogVisible.value = false;
  235. } else {
  236. console.log("error submit!", fields);
  237. }
  238. });
  239. };
  240. const resetForm = (formEl: FormInstance | undefined) => {
  241. if (!formEl) return;
  242. formEl.resetFields();
  243. editDialogVisible.value = false;
  244. };
  245. </script>
  246. <style lang="scss" scoped>
  247. .application {
  248. &-content {
  249. margin-top: 24px;
  250. height: calc(100% - 56px);
  251. }
  252. }
  253. .account {
  254. &-tree {
  255. width: 488px;
  256. margin-right: 24px;
  257. }
  258. &-table {
  259. flex: 1;
  260. }
  261. }
  262. </style>