sceneContent.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <el-table
  3. class="mybody-head"
  4. :data="pagging.state.table.rows"
  5. ref="tableRef"
  6. tooltip-effect="dark"
  7. style="width: 100%;height: 250px;"
  8. :height="250"
  9. size="large"
  10. @selection-change="changeSelection"
  11. >
  12. <!-- -1 计算失败 0 计算中 1 计算成功并可以外网访问,不能编辑 2计算成功只能内网,能编辑 -->
  13. <el-table-column type="selection" :selectable="selectable" width="55" />
  14. <!-- <el-table-column label="序号" width="70" v-slot:default="{ $index }">
  15. <div style="text-align: center">
  16. {{ pagging.state.pag.size * (pagging.state.pag.currentPage - 1) + $index + 1 }}
  17. </div>
  18. </el-table-column> -->
  19. <el-table-column label="场景标题" prop="sceneName"></el-table-column>
  20. <el-table-column label="S/N码" prop="snCode"></el-table-column>
  21. <!-- <el-table-column label="浏览数量" prop="viewCount"></el-table-column> -->
  22. <el-table-column label="拍摄时间" prop="createTime" v-slot:default="{ row }">
  23. {{ row.createTime.substr(0, 16) }}
  24. </el-table-column>
  25. <el-table-column label="状态" v-slot:default="{ row }: { row: QuoteScene }">
  26. {{ row.statusString }}
  27. </el-table-column>
  28. <!-- <el-table-column label="所属架构" prop="deptName"></el-table-column> -->
  29. <!-- <el-table-column label="操作" v-slot:default="{ row }: { row: QuoteScene }">
  30. <span
  31. class="oper-span"
  32. v-pdpath="['view']"
  33. @click="openSceneUrl(row, OpenType.query)"
  34. v-if="row.status === QuoteSceneStatus.SUCCESS"
  35. >
  36. 查看
  37. </span>
  38. <span
  39. class="oper-span"
  40. v-pdpath="['edit']"
  41. @click="openSceneUrl(row, OpenType.edit)"
  42. v-if="row.status === QuoteSceneStatus.SUCCESS"
  43. >
  44. 编辑
  45. </span>
  46. <span
  47. v-if="
  48. [SceneType.SWSS, SceneType.SWYDSS].includes(row.type) &&
  49. [QuoteSceneStatus.SUCCESS].includes(row.status) &&
  50. row.location === LocationEnum.Scene_Location_PointCloud
  51. "
  52. v-pdpath="['gen']"
  53. class="oper-span"
  54. @click="genMeshScene(row)"
  55. >
  56. 生成obj
  57. </span>
  58. <span
  59. v-if="
  60. ![SceneType.SWSSMX, SceneType.SWYDMX].includes(row.type) &&
  61. row.status !== QuoteSceneStatus.RUN
  62. "
  63. class="oper-span delBtn"
  64. v-pdscene="row"
  65. @click="delSceneHandler(row)"
  66. v-pdpath="'del'"
  67. >
  68. 删除
  69. </span>
  70. <span
  71. class="oper-span"
  72. @click="sceneDownloadHandler(row)"
  73. v-pdpath="['download']"
  74. v-if="row.num && row.status === QuoteSceneStatus.SUCCESS"
  75. >
  76. 下载
  77. </span>
  78. </el-table-column> -->
  79. </el-table>
  80. </template>
  81. <script setup lang="ts">
  82. import {
  83. QuoteScene,
  84. QuoteSceneStatus,
  85. delQuoteScene,
  86. SceneType,
  87. genMeshScene,
  88. LocationEnum,
  89. } from "@/store/scene";
  90. import { getSceneListTree } from "@/store/case";
  91. import { QuoteSceneStatusDesc } from "@/constant/scene";
  92. import { OpenType, openSceneUrl } from "../case/help";
  93. import { confirm } from "@/helper/message";
  94. import { router } from "@/router";
  95. import { sceneDownload } from "./quisk";
  96. import { useScenePaggingParams, ScenePagging } from "./pagging";
  97. import { QuiskExpose } from "@/helper/mount";
  98. import { onMounted, ref, watch, watchEffect, computed, nextTick } from "vue";
  99. import {
  100. getCaseSceneList,
  101. getCaseScenes,
  102. getSceneKey,
  103. replaceCaseScenes,
  104. setCaseaddOrUpdate,
  105. } from "@/store/case";
  106. // const params = useScenePaggingParams();
  107. const props = defineProps<{ pagging: ScenePagging, numList: Array<string> }>();
  108. const caseId = computed(() => (router.currentRoute.value?.params?.caseId));
  109. const tableRef = ref(null);
  110. const caseScenes = ref([
  111. {
  112. type: 0,
  113. numList: [],
  114. },
  115. {
  116. type: 1,
  117. numList: [],
  118. }
  119. ]);
  120. const selectList = ref({
  121. 0: [],
  122. 1: [],
  123. })
  124. const pagScenes = props.pagging.state.table.rows;
  125. caseScenes.value = getSceneListTree()
  126. console.log('caseScenes', selectList, pagScenes);
  127. const submit = async () => {
  128. const apiData = {
  129. caseId: caseId.value,
  130. sceneNumParam: caseScenes.value,
  131. };
  132. await setCaseaddOrUpdate(apiData)
  133. // params.pagging.queryReset()
  134. }
  135. defineExpose<QuiskExpose>({
  136. submit
  137. });
  138. const isObj = ref(props.pagging.state.query?.isObj);
  139. const delSceneHandler = async (scene: QuoteScene) => {
  140. if (await confirm("确定要删除当前场景吗?")) {
  141. await delQuoteScene(scene);
  142. props.pagging.refresh();
  143. }
  144. };
  145. console.log('propsnumList', props.numList);
  146. const selectable = (row) => {
  147. // let selectlist = selectList.find(item => item.type == params.pagging.state.query?.isObj)?.numList;
  148. if (row.inCase) return false;
  149. return row.statusString == '计算成功'// && !selectlist.includes(row.num)
  150. }
  151. // watch(()=>props.pagging.state.query.isObj, (newVal, oldVal) => {
  152. // let scene = selectList.value[newVal]
  153. // if (params.pagging.loading) return;
  154. // console.log('newVal---', selectList.value, scene, tableRef.value); //newVal--- 修改的数据1
  155. // scene.forEach(item => {
  156. // tableRef.value!.toggleRowSelection(item, true);
  157. // })
  158. // // props.pagging.changeSelectRows(selectList.value)
  159. // // tableRef.value.toggleRowSelection(scene, true);
  160. // console.log('newVal---', newVal); //newVal--- 修改的数据1
  161. // console.log('oldVal---', oldVal); //oldVal--- ref数据
  162. // });
  163. // 复选框同步
  164. let changIng = false;
  165. watchEffect(() => {
  166. const type = props.pagging.state.query.isObj;
  167. if (!tableRef.value) return;
  168. const selectKeys = caseScenes.value.find(
  169. (item) => item.type === type
  170. )!.numList;
  171. props.pagging.state.table.rows
  172. // console.log('watchEffect', selectKeys);
  173. console.log('watchEffect', caseScenes.value, selectKeys);
  174. changIng = true;
  175. props.pagging.state.table.rows.forEach((scene) => {
  176. tableRef.value!.toggleRowSelection(scene, selectKeys.includes(scene.num));
  177. });
  178. changIng = false;
  179. console.log(tableRef.value!.getSelectionRows())
  180. // console.log('watchEffect', props.pagging.state.table.rows);
  181. }, { flush: 'post' });
  182. const changeSelection = async (selectScenes) => {
  183. if (changIng) return;
  184. changIng = true
  185. // selectScenes.lnegth === 2 && console.log(toRaw(selectScenes[0]) === toRaw(selectScenes[1]))
  186. console.log(selectScenes.length)
  187. if (props.pagging.loading) return;
  188. const pagScenes = props.pagging.state.table.rows;
  189. const type = props.pagging.state.query.isObj;
  190. const selectKeys = selectScenes.map(ele => ele.num);
  191. const typeCaseScenes = caseScenes.value.find((item) => item.type == type)!;
  192. const oldKeys = caseScenes.value.find((item) => item.type == type)!.numList;
  193. const pagKeys = pagScenes.map(ele => ele.num);
  194. // console.log(pagKeys, oldKeys)
  195. let newlist = oldKeys
  196. // 保留其他页的key,剔除当前页的key
  197. .filter((key) => !pagKeys.includes(key))
  198. // 拼接上当前页选中的key
  199. .concat(selectKeys);
  200. typeCaseScenes.numList = [...new Set(newlist)];
  201. // tableRef.value!.clearSelection()
  202. changIng = false
  203. };
  204. const sceneDownloadHandler = (scene: QuoteScene) => {
  205. sceneDownload({ scene });
  206. };
  207. </script>
  208. <style scoped lang="scss">
  209. .mybody-head{
  210. flex: auto !important;
  211. }
  212. </style>