index.vue 5.1 KB

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