UserPrivilegeCourse.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div>
  3. <div class="tw-bg-white tw-p-5 tw-rounded-xl tw-mb-5">
  4. <a-switch v-model:checked="checked" @click="toggleAll" /> 全部课程
  5. <div class="tw-float-right tw-flex tw-gap-2">
  6. <a-button @click="handleDeletePrivilege" :danger="true">删除</a-button>
  7. <a-button @click="showModal">添加</a-button>
  8. </div>
  9. </div>
  10. <div class="tw-bg-white tw-p-5 tw-rounded-xl">
  11. <a-table
  12. row-key="courseId"
  13. :columns="columns"
  14. :data-source="data"
  15. :row-selection="rowSelection"
  16. :pagination="{
  17. pageSize: pageSize,
  18. current: pageNo,
  19. total: totalElements,
  20. showTotal: (total: number) => `总数:${total}`,
  21. onChange: (pageNoChanged: number, pageSizeChanged: number) => {
  22. pageNo = pageNoChanged;
  23. pageSize = pageSizeChanged;
  24. }
  25. }"
  26. >
  27. </a-table>
  28. </div>
  29. <a-modal
  30. v-model:visible="visible"
  31. title="信息页"
  32. @ok="handleOk"
  33. ok-text="确定"
  34. cancel-text="取消"
  35. >
  36. <a-form layout="inline">
  37. <a-form-item label="科目名称">
  38. <a-input v-model:value="userObj.name"></a-input>
  39. </a-form-item>
  40. <!-- <a-form-item label="状态">
  41. <a-radio-group v-model:value="userObj.enable">
  42. <a-radio :value="true">启用</a-radio>
  43. <a-radio :value="false">禁用</a-radio>
  44. </a-radio-group>
  45. </a-form-item> -->
  46. <a-button @click="fetchData2" class="query-btn">查询</a-button>
  47. </a-form>
  48. <div class="tw-bg-white tw-py-5 tw-rounded-xl">
  49. <a-table
  50. row-key="id"
  51. :columns="columns2"
  52. :data-source="data2"
  53. :row-selection="rowSelection2"
  54. :pagination="{
  55. pageSize: pageSize2,
  56. current: pageNo2,
  57. total: totalElements2,
  58. showTotal: (total: number) => `总数:${total}`,
  59. onChange: (pageNoChanged: number, pageSizeChanged: number) => {
  60. pageNo2 = pageNoChanged;
  61. pageSize2 = pageSizeChanged;
  62. }
  63. }"
  64. >
  65. <template #enable="{ text }">
  66. <a>{{ $filters.booleanEnableDisableFilter(text) }}</a>
  67. </template>
  68. </a-table>
  69. </div>
  70. </a-modal>
  71. </div>
  72. </template>
  73. <script setup lang="ts">
  74. import {
  75. addListForUserPrivilege,
  76. deleteListForUserPrivilege,
  77. getToAddListForUserPrivilege,
  78. getUserPrivilegegDefaultAll,
  79. getUserPrivilegegList,
  80. modifyUserPrivilegegDefaultAll,
  81. } from "@/api/userManagementPage";
  82. import { useMainStore } from "@/store";
  83. import { message } from "ant-design-vue";
  84. import { watch, onMounted, reactive } from "vue-demi";
  85. import { useRoute } from "vue-router";
  86. const PRIVI_TYPE = "COURSE";
  87. const store = useMainStore();
  88. const route = useRoute();
  89. const userId = +route.params.userId;
  90. let checked = $ref(false);
  91. async function toggleAll() {
  92. await modifyUserPrivilegegDefaultAll({
  93. enabled: checked,
  94. type: PRIVI_TYPE,
  95. userId,
  96. });
  97. message.success({ content: "修改成功" });
  98. await search();
  99. }
  100. let data = $ref([]);
  101. let pageSize = $ref(10);
  102. let pageNo = $ref(1);
  103. let totalElements = $ref(0);
  104. async function search() {
  105. await fetchData();
  106. }
  107. watch(() => [pageNo, pageSize], fetchData);
  108. async function fetchData() {
  109. const res0 = await getUserPrivilegegDefaultAll({
  110. userId,
  111. type: PRIVI_TYPE,
  112. });
  113. checked = res0.data;
  114. const res = await getUserPrivilegegList({
  115. ptype: PRIVI_TYPE,
  116. userId,
  117. pageSize,
  118. pageNo,
  119. });
  120. // console.log(res);
  121. data = res.data.content;
  122. pageNo = res.data.pageNo;
  123. pageSize = res.data.pageSize;
  124. totalElements = res.data.totalElements;
  125. }
  126. const columns = [
  127. {
  128. title: "科目ID",
  129. dataIndex: "courseId",
  130. width: 150,
  131. },
  132. {
  133. title: "科目编码",
  134. dataIndex: "courseCode",
  135. },
  136. {
  137. title: "科目名称",
  138. dataIndex: "courseName",
  139. },
  140. ];
  141. onMounted(async () => {
  142. await search();
  143. });
  144. let visible = $ref<boolean>(false);
  145. const showModal = () => {
  146. Object.assign(userObj, initUser);
  147. visible = true;
  148. };
  149. const initUser = {
  150. code: "",
  151. name: "",
  152. enable: true,
  153. rootOrgId: store.userInfo.rootOrgId,
  154. };
  155. const userObj = reactive({ ...initUser });
  156. function checkEmpty(selectIds: number[]): boolean {
  157. if (selectIds && selectIds.length > 0) {
  158. return false;
  159. } else {
  160. message.warn({ content: "请先选择行" });
  161. return true;
  162. }
  163. }
  164. async function handleDeletePrivilege() {
  165. if (checkEmpty(selectIds)) return;
  166. await deleteListForUserPrivilege({
  167. type: PRIVI_TYPE,
  168. userId,
  169. refIds: selectIds,
  170. });
  171. await search();
  172. message.success({ content: "操作成功" });
  173. }
  174. let selectIds = $ref<number[]>([]);
  175. const rowSelection = {
  176. onChange: (selectedRowKeys: (string | number)[]) => {
  177. console.log(`selectedRowKeys: ${selectedRowKeys}`);
  178. selectIds = selectedRowKeys as number[];
  179. },
  180. };
  181. /** <Modal> */
  182. let data2 = $ref([]);
  183. let pageSize2 = $ref(10);
  184. let pageNo2 = $ref(1);
  185. let totalElements2 = $ref(0);
  186. const columns2 = [
  187. {
  188. title: "科目编码",
  189. dataIndex: "code",
  190. width: 150,
  191. },
  192. {
  193. title: "科目名称",
  194. dataIndex: "name",
  195. },
  196. {
  197. title: "状态",
  198. dataIndex: "enable",
  199. slots: { customRender: "enable" },
  200. },
  201. ];
  202. watch(() => [pageNo2, pageSize2], fetchData2);
  203. async function fetchData2() {
  204. const res = await getToAddListForUserPrivilege({
  205. ptype: PRIVI_TYPE,
  206. rootOrgId: store.userInfo.rootOrgId,
  207. userId,
  208. name: userObj.name,
  209. // enable: userObj.enable,
  210. pageSize,
  211. pageNo,
  212. });
  213. // console.log(res);
  214. data2 = res.data.content;
  215. pageNo2 = res.data.pageNo;
  216. pageSize2 = res.data.pageSize;
  217. totalElements2 = res.data.totalElements;
  218. }
  219. let selectIds2 = $ref<number[]>([]);
  220. const rowSelection2 = {
  221. onChange: (selectedRowKeys: (string | number)[]) => {
  222. console.log(`selectedRowKeys: ${selectedRowKeys}`);
  223. selectIds2 = selectedRowKeys as number[];
  224. },
  225. };
  226. function checkEmpty2(selectIds: number[]): boolean {
  227. if (selectIds2 && selectIds2.length > 0) {
  228. return false;
  229. } else {
  230. message.warn({ content: "请先选择行" });
  231. return true;
  232. }
  233. }
  234. async function handleOk() {
  235. if (checkEmpty2(selectIds2)) return;
  236. await addListForUserPrivilege({
  237. type: PRIVI_TYPE,
  238. userId,
  239. refIds: selectIds2,
  240. });
  241. await search();
  242. visible = false;
  243. message.success({ content: "操作成功" });
  244. }
  245. /** </Modal> */
  246. </script>