index.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <script setup lang="ts">
  2. defineOptions({
  3. // name 作为一种规范最好必须写上并且和路由的name保持一致
  4. name: "users"
  5. });
  6. import { ref, reactive } from "vue";
  7. import { ElMessageBox, ElMessage } from "element-plus";
  8. import { Search } from "@element-plus/icons-vue";
  9. import addPerson from "./components/addPerson.vue";
  10. import addUsers from "./components/addUsers.vue";
  11. import editPerson from "./components/editPerson.vue";
  12. import { postPageGroup, postDelUserGroup } from "@/api/userGroup";
  13. import UserPageTable from "@/components/UserPageTable/index.vue";
  14. import pngcaret from "@/assets/icon-png/caret-right-small.svg";
  15. // 新增用户组
  16. const addUsersRef = ref();
  17. const addUsersShow = ref(false);
  18. // 新增人员
  19. const addPersonRef = ref();
  20. const addPersonShow = ref(false);
  21. // 编辑
  22. const editPersonRef = ref();
  23. const editPersonShow = ref(false);
  24. // table表格
  25. const UserTable = ref();
  26. const tableData = [
  27. {
  28. date: "2016-05-03",
  29. name: "Tom",
  30. address: "No. 189"
  31. },
  32. {
  33. date: "2016-05-02",
  34. name: "Tom",
  35. address: "No. 189"
  36. },
  37. {
  38. date: "2016-05-04",
  39. name: "Tom",
  40. address: "No. 189"
  41. },
  42. {
  43. date: "2016-05-01",
  44. name: "Tom",
  45. address: "No. 189"
  46. }
  47. ];
  48. const rolesList = reactive({
  49. data: [],
  50. rolesName: "",
  51. params: {
  52. pageNumber: 1,
  53. pageSize: 10,
  54. groupName: ""
  55. }
  56. });
  57. const load = () => {
  58. rolesList.params.pageSize += 10;
  59. postPageGroupApi();
  60. };
  61. // 用户组分页
  62. const postPageGroupApi = async () => {
  63. const { code, data } = await postPageGroup(rolesList.params);
  64. if (code === 200) {
  65. rolesList.data = [];
  66. data.records.forEach((item, index) => {
  67. rolesList.data.push({
  68. ...item,
  69. id: index + 1
  70. });
  71. });
  72. }
  73. };
  74. postPageGroupApi();
  75. // 查看角色组
  76. const bgColor = ref(null);
  77. const lookRoles = item => {
  78. console.log("111", item);
  79. bgColor.value = item.id;
  80. rolesList.rolesName = item.groupName;
  81. UserTable.value.handleNodeClick(item, "group");
  82. console.log(UserTable.value);
  83. };
  84. // 标签选择
  85. const activeName = ref("first");
  86. const handleClick = (tab, event) => {
  87. console.log(tab, event);
  88. };
  89. // 删除用户组
  90. const postDelUserGroupApi = async row => {
  91. const { code } = await postDelUserGroup(row);
  92. if (code === 200) {
  93. postPageGroupApi();
  94. ElMessage({
  95. type: "success",
  96. message: "删除成功"
  97. });
  98. }
  99. };
  100. const deleteUsers = row => {
  101. console.log(row);
  102. ElMessageBox.confirm(
  103. `角色删除不能恢复,是否确认删除用户组【${row.groupName}】吗`,
  104. "确定删除该用户组吗?",
  105. {
  106. confirmButtonText: "确定",
  107. cancelButtonText: "取消",
  108. type: "warning"
  109. }
  110. ).then(() => {
  111. postDelUserGroupApi(row);
  112. });
  113. };
  114. const AddUsersPerson = () => {
  115. addPersonRef.value.open();
  116. };
  117. const addUsersList = () => {
  118. addUsersRef.value.open();
  119. };
  120. // 配置角色
  121. const changeUsers = item => {
  122. addUsersRef.value.open(item);
  123. };
  124. // 编辑
  125. const editUsers = row => {
  126. editPersonRef.value.open(row);
  127. };
  128. // 删除用户
  129. const deltetePerson = row => {
  130. ElMessageBox.confirm(
  131. `用户删除不能恢复,是否确认删除用户【${row.name}】吗`,
  132. "确定删除该用户吗?",
  133. {
  134. confirmButtonText: "确定",
  135. cancelButtonText: "取消",
  136. type: "warning"
  137. }
  138. )
  139. .then(() => {
  140. ElMessage({
  141. type: "success",
  142. message: "删除成功"
  143. });
  144. })
  145. .catch(() => {
  146. ElMessage({
  147. message: "取消删除"
  148. });
  149. });
  150. };
  151. </script>
  152. <template>
  153. <div class="flex w-full h-full">
  154. <!-- 添加成员 -->
  155. <addPerson ref="addPersonRef" v-model="addPersonShow" />
  156. <!-- 添加用户组 -->
  157. <addUsers
  158. ref="addUsersRef"
  159. v-model="addUsersShow"
  160. @handleClick="postPageGroupApi"
  161. />
  162. <!-- 编辑 -->
  163. <editPerson
  164. ref="editPersonRef"
  165. v-model="editPersonShow"
  166. @handleClick="postPageGroupApi"
  167. />
  168. <!-- 主体内容 -->
  169. <div class="box-left">
  170. <div class="w-[100%]">
  171. <div>
  172. <el-input
  173. v-model="rolesList.params.groupName"
  174. placeholder="搜索姓名"
  175. class="mb-2"
  176. clearable
  177. style="max-width: 300px"
  178. :prefix-icon="Search"
  179. @change="postPageGroupApi"
  180. />
  181. </div>
  182. </div>
  183. <div
  184. v-infinite-scroll="load"
  185. infinite-scroll-immediate="false"
  186. class="h-2/3 w-[100%] overflow-auto infinite-list"
  187. >
  188. <div
  189. v-for="item in rolesList.data"
  190. :key="item.id"
  191. class="w-[100%] flex justify-between items-center"
  192. >
  193. <pngcaret class="mr-1 mt-2" />
  194. <div
  195. :class="[
  196. 'w-[100%] flex justify-between items-center mt-2 cursor-pointer',
  197. { 'roles-bg': bgColor === item.id }
  198. ]"
  199. >
  200. <div
  201. class="flex justify-between items-center'"
  202. @click="lookRoles(item)"
  203. >
  204. <span class="">{{ item.groupName }}</span>
  205. </div>
  206. <div class="flex justify-between items-center">
  207. <el-dropdown trigger="click">
  208. <span>
  209. <el-icon><Operation /></el-icon>
  210. </span>
  211. <template #dropdown>
  212. <el-dropdown-menu class="setting">
  213. <el-dropdown-item @click="editUsers(item)">
  214. 编辑
  215. </el-dropdown-item>
  216. <el-dropdown-item @click="changeUsers(item)">
  217. 配置角色
  218. </el-dropdown-item>
  219. <el-dropdown-item>
  220. <el-link type="danger" @click="deleteUsers(item)"
  221. >删除</el-link
  222. >
  223. </el-dropdown-item>
  224. </el-dropdown-menu>
  225. </template>
  226. </el-dropdown>
  227. </div>
  228. </div>
  229. </div>
  230. </div>
  231. <el-divider />
  232. <el-button type="primary" class="addRole" plain @click="addUsersList()"
  233. >新增用户组</el-button
  234. >
  235. </div>
  236. <!-- <div v-if="rolesList.rolesName" class="box-right"> -->
  237. <div class="box-right">
  238. <h3>{{ rolesList.rolesName }}</h3>
  239. <!-- <div class="flex justify-between mb-3">
  240. <el-input
  241. placeholder="搜索医生姓名"
  242. class="mb-2"
  243. style="max-width: 300px"
  244. :prefix-icon="Search"
  245. />
  246. <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
  247. </div>
  248. <el-table :data="tableData" style="width: 100%">
  249. <el-table-column prop="date" label="姓名" />
  250. <el-table-column prop="name" label="工号" />
  251. <el-table-column prop="address" label="性别" />
  252. <el-table-column prop="address" label="年龄" />
  253. <el-table-column prop="address" label="职称" />
  254. <el-table-column prop="address" label="部门" />
  255. <el-table-column label="操作">
  256. <template #default="{ row }">
  257. <el-dropdown trigger="click" class="mr-2">
  258. <el-text type="danger" @click="deltetePerson(row)">
  259. 移除
  260. </el-text>
  261. </el-dropdown>
  262. </template>
  263. </el-table-column>
  264. </el-table> -->
  265. <UserPageTable ref="UserTable">
  266. <template #add-button>
  267. <el-button type="primary" @click="AddUsersPerson">添加成员</el-button>
  268. </template>
  269. <template #actions="{ row }">
  270. <el-dropdown trigger="click" class="mr-2">
  271. <el-text type="danger" @click="deltetePerson(row)"> 移除 </el-text>
  272. </el-dropdown>
  273. </template>
  274. </UserPageTable>
  275. </div>
  276. </div>
  277. </template>
  278. <style lang="scss" scoped>
  279. .box-left {
  280. position: relative;
  281. width: 25%;
  282. // border: 1px solid red;
  283. height: 100%;
  284. padding: 10px 20px;
  285. border-right: 1px solid #999;
  286. }
  287. .box-right {
  288. width: 70%;
  289. height: 100%;
  290. padding: 10px 20px;
  291. }
  292. .addRole {
  293. position: absolute;
  294. bottom: 70px;
  295. width: calc(100% - 50px);
  296. }
  297. .userName {
  298. background-color: #022bbd80;
  299. }
  300. .infinite-list {
  301. -ms-overflow-style: none; /* IE和Edge */
  302. scrollbar-width: none; /* Firefox */
  303. // border: 1px solid red;
  304. }
  305. /* 隐藏滚动条 */
  306. .infinite-list::-webkit-scrollbar {
  307. display: none; /* 对于 Webkit 浏览器(Chrome, Safari等) */
  308. }
  309. // ::v-deep .el-dropdown {
  310. // line-height: 1;
  311. // }
  312. // ::v-deep .el-tree-node__expand-icon {
  313. // line-height: 10px;
  314. // border: 1px solid red;
  315. // }
  316. .roles-bg {
  317. color: #0052d9;
  318. background-color: #0053d91a;
  319. }
  320. .roles-text {
  321. font-size: 14px;
  322. // font-family: PingFangSC-Regular;
  323. font-weight: 400;
  324. line-height: 22px;
  325. color: #000000e6;
  326. letter-spacing: 0;
  327. }
  328. </style>