index.vue 3.9 KB

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