index.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <Header :pagging="pagging" :isTeached="isTeached" />
  3. <List :pagging="pagging" :checkPerm="isTeached ? 'cancel' : 'teach'">
  4. <template v-slot:tableCtrl>
  5. <template v-if="isTeached">
  6. <el-button
  7. type="primary"
  8. @click="revokeTeaching()"
  9. v-pdpath="'cancel'"
  10. :class="{ disable: !pagging.state.table.selectRows.length }"
  11. >
  12. 撤销教学
  13. </el-button>
  14. </template>
  15. <template v-else>
  16. <el-button type="primary" @click="addHandler" v-pdpath="'add'">
  17. 新增火调项目
  18. </el-button>
  19. <el-button
  20. type="primary"
  21. @click="setTeaching"
  22. v-pdpath="'teach'"
  23. :class="{ disable: !pagging.state.table.selectRows.length }"
  24. >
  25. 设为教学项目
  26. </el-button>
  27. </template>
  28. </template>
  29. <template v-slot:appendColumn v-if="!isTeached">
  30. <el-table-column label="教学项目" v-slot:default="{ row }: { row: Fire }">
  31. {{ row.isTeached ? "是" : "否" }}
  32. </el-table-column>
  33. </template>
  34. <template v-slot:rowCtrl="{ row }: { row: Fire }">
  35. <template v-if="isTeached">
  36. <span class="oper-span" @click="gotoQuery(row.caseId)" v-pdpath="['view']">
  37. 查看
  38. </span>
  39. <span
  40. class="oper-span"
  41. @click="showMessageHandler(row)"
  42. v-pdpath="['message:look']"
  43. >留言
  44. </span>
  45. </template>
  46. <template v-else>
  47. <CaseEditMenu
  48. :prev-menu="[
  49. {
  50. key: 'info',
  51. label: '火调信息',
  52. onClick: () => editHandler(row),
  53. },
  54. ]"
  55. :caseId="row.caseId"
  56. v-if="row.caseId"
  57. />
  58. <span class="oper-span" @click="gotoQuery(row.caseId)" v-pdpath="['view']">
  59. 查看
  60. </span>
  61. <span
  62. class="oper-span"
  63. @click="pagging.del(row)"
  64. style="color: var(--primaryColor)"
  65. v-pdpath="['del']"
  66. >
  67. 删除
  68. </span>
  69. </template>
  70. </template>
  71. </List>
  72. </template>
  73. <script setup lang="ts">
  74. import Header from "./header.vue";
  75. import List from "./list.vue";
  76. import { useFirePagging } from "./pagging";
  77. import { Fire, revokeFireTeachs, setFireTeachs } from "@/app/fire/store/fire";
  78. import CaseEditMenu from "@/view/case/editMenu.vue";
  79. import { gotoQuery } from "@/view/case/help";
  80. import { confirm } from "@/helper/message";
  81. import { addFire, editFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
  82. import { shareCase } from "@/view/case/quisk";
  83. import { ElMessage } from "element-plus";
  84. const { pagging, isTeached } = useFirePagging();
  85. // 撤销教学
  86. const revokeTeaching = async (row?: Fire) => {
  87. if (!(await confirm("撤销教学,火调项目将不再显示在教学平台。(火调项目不会删除)"))) {
  88. return;
  89. }
  90. const items = row ? [row] : pagging.state.table.selectRows;
  91. await revokeFireTeachs(items.map(({ id }) => id));
  92. pagging.refresh();
  93. ElMessage.success(
  94. items.map(({ projectSn }) => projectSn).join(",") + "已成功从教学项目撤销"
  95. );
  96. };
  97. const showMessageHandler = (row: Fire) => {
  98. showLeaveMsgList({
  99. projectId: row.id,
  100. onAddLeaveMsg: () => addLeaveMsg({ projectId: row.id }),
  101. });
  102. };
  103. const setTeaching = async () => {
  104. let items = pagging.state.table.selectRows || [];
  105. if (!items.length) {
  106. return ElMessage.error("请先选择操作项");
  107. }
  108. if (
  109. !(await confirm(
  110. "将火调项目设为教学项目后,总队及以下全部队伍均可查看。设置后可在教学平台取消设置。"
  111. ))
  112. ) {
  113. return;
  114. }
  115. await setFireTeachs(items.map(({ id }) => id));
  116. pagging.refresh();
  117. ElMessage.success(
  118. "已成功设置" + items.length + "个火调项目到教学平台,已设置的项目不重复设置。"
  119. );
  120. };
  121. const editHandler = async (row: Fire) => {
  122. (await editFire({ fire: row })) && pagging.refresh();
  123. };
  124. const addHandler = async () => {
  125. (await addFire({})) && pagging.refresh();
  126. };
  127. </script>