1
0

index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. :prev-menu="[
  56. {
  57. key: 'info',
  58. label: '火调信息',
  59. onClick: () => editHandler(row),
  60. },
  61. ]"
  62. :caseId="row.caseId"
  63. v-if="row.caseId"
  64. />
  65. <span class="oper-span" @click="gotoQuery(row.caseId)" v-pdpath="['view']">
  66. 查看
  67. </span>
  68. <span class="oper-span" @click="copy(row.caseId)" v-pdpath="['view']">
  69. 复制
  70. </span>
  71. <span
  72. class="oper-span"
  73. @click="pagging.del(row)"
  74. style="color: var(--primaryColor)"
  75. v-pdpath="['del']"
  76. >
  77. 删除
  78. </span>
  79. </template>
  80. </template>
  81. <template v-else>
  82. <span
  83. class="oper-span"
  84. @click="async () => {
  85. await setFire({...row, isDelete: 0} as any)
  86. pagging.refresh();
  87. }"
  88. style="color: var(--primaryColor)"
  89. >
  90. 恢复
  91. </span>
  92. <span
  93. class="oper-span"
  94. @click="pagging.del(row)"
  95. style="color: var(--primaryColor)"
  96. >
  97. 删除
  98. </span>
  99. </template>
  100. </template>
  101. </List>
  102. </template>
  103. <script setup lang="ts">
  104. import Header from "./header.vue";
  105. import List from "./list.vue";
  106. import { useFirePagging } from "./pagging";
  107. import { Fire, revokeFireTeachs, setFireTeachs, setFire } from "@/app/fire/store/fire";
  108. import { copyCase } from "@/store/case";
  109. import CaseEditMenu from "@/view/case/editMenu.vue";
  110. import { gotoQuery } from "@/view/case/help";
  111. import { confirm } from "@/helper/message";
  112. import { addFire, editFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
  113. import { shareCase } from "@/view/case/quisk";
  114. import { ElMessage } from "element-plus";
  115. const { pagging, isTeached, isRecycle } = useFirePagging();
  116. const copy = async (caseId: number) => {
  117. await copyCase(caseId);
  118. pagging.refresh();
  119. };
  120. // 撤销教学
  121. const revokeTeaching = async (row?: Fire) => {
  122. if (!(await confirm("撤销教学,火调项目将不再显示在教学平台。(火调项目不会删除)"))) {
  123. return;
  124. }
  125. const items = row ? [row] : pagging.state.table.selectRows;
  126. await revokeFireTeachs(items.map(({ id }) => id));
  127. pagging.refresh();
  128. ElMessage.success(
  129. items.map(({ projectSn }) => projectSn).join(",") + "已成功从教学项目撤销"
  130. );
  131. };
  132. const showMessageHandler = (row: Fire) => {
  133. showLeaveMsgList({
  134. projectId: row.id,
  135. onAddLeaveMsg: () => addLeaveMsg({ projectId: row.id }),
  136. });
  137. };
  138. const setTeaching = async () => {
  139. let items = pagging.state.table.selectRows || [];
  140. if (!items.length) {
  141. return ElMessage.error("请先选择操作项");
  142. }
  143. if (
  144. !(await confirm(
  145. "将火调项目设为教学项目后,总队及以下全部队伍均可查看。设置后可在教学平台取消设置。"
  146. ))
  147. ) {
  148. return;
  149. }
  150. await setFireTeachs(items.map(({ id }) => id));
  151. pagging.refresh();
  152. ElMessage.success(
  153. "已成功设置" + items.length + "个火调项目到教学平台,已设置的项目不重复设置。"
  154. );
  155. };
  156. const editHandler = async (row: Fire) => {
  157. (await editFire({ fire: row })) && pagging.refresh();
  158. };
  159. const addHandler = async () => {
  160. (await addFire({})) && pagging.refresh();
  161. };
  162. </script>