index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. <template>
  2. <PageWrapper contentBackground>
  3. <template #footer>
  4. <a-tabs v-model:activeKey="tableType" @change="changeTable">
  5. <a-tab-pane :key="0" tab="四维看看" :disabled="loading"/>
  6. <a-tab-pane :key="1" tab="四维看见" :disabled="loading"/>
  7. <a-tab-pane :key="2" tab="深时点云场景" :disabled="loading"/>
  8. <a-tab-pane :key="5" tab="深时Mesh场景" :disabled="loading"/>
  9. <a-tab-pane :key="6" tab="深光点云场景" :disabled="loading"/>
  10. <a-tab-pane :key="7" tab="深光Mesh场景" :disabled="loading"/>
  11. <a-tab-pane :key="3" tab="四维双目Lite" :disabled="loading"/>
  12. <a-tab-pane :key="4" tab="四维全景" :disabled="loading"/>
  13. </a-tabs
  14. ></template>
  15. <div class="desc-wrap-BasicTable">
  16. <BasicTable v-if="tableType == 4" @register="registerTableViewKankan">
  17. <template #action="{ record }">
  18. <TableAction
  19. stopButtonPropagation
  20. :actions="[
  21. {
  22. label: '删除',
  23. color: 'error',
  24. ifShow:getTypeCheckPerm('account-productDelete'),
  25. popConfirm: {
  26. title: '是否删除?',
  27. confirm: handleQjDelete.bind(null, record),
  28. placement: 'topLeft',
  29. },
  30. },
  31. ]"
  32. />
  33. </template>
  34. </BasicTable>
  35. <BasicTable v-else @register="registerTable">
  36. <template #action="{ record }">
  37. <TableAction
  38. stopButtonPropagation
  39. :actions="[
  40. {
  41. label: '迁移',
  42. ifShow:getTypeCheckPerm('account-productTransfer'),
  43. disabled:!(record.status == 1 || record.status == -2),
  44. onClick: handleMove.bind(null, record),
  45. },
  46. {
  47. label: '解冻',
  48. disabled: !record.isColdStorage || !(record.status == 1 || record.status == -2),
  49. ifShow: getTypeCheckPerm('scenes-thaw'),
  50. onClick: handleColdStorage.bind(null, record),
  51. },
  52. {
  53. label: '下载',
  54. disabled:!(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
  55. ifShow:getTypeCheckPerm('account-productDownload'),
  56. onClick: handleDownload.bind(null, record),
  57. },
  58. {
  59. label: '重算',
  60. disabled: record.status == 0|| (record.status == -2 && record.payStatus != 1),
  61. ifShow:getTypeCheckPerm('account-productRerun'),
  62. popConfirm: {
  63. title: '是否重算?',
  64. confirm: handleReset.bind(null, record),
  65. },
  66. },
  67. {
  68. label: '复制',
  69. disabled:!(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
  70. ifShow:getTypeCheckPerm('account-productCopy'),
  71. onClick: handleCopy.bind(null, record),
  72. },
  73. {
  74. label: '删除',
  75. color: 'error',
  76. disabled:record.status == 0,
  77. ifShow:getTypeCheckPerm('account-productDelete'),
  78. popConfirm: {
  79. title: '是否删除?',
  80. confirm: handleDelete.bind(null, record),
  81. placement: 'topRight',
  82. },
  83. },
  84. ]"
  85. />
  86. </template>
  87. </BasicTable>
  88. </div>
  89. <DownLoadModal
  90. :downloadOption="downloadOption"
  91. @cancel="afterClose"
  92. @register="registerDownModal"
  93. @update="reload"
  94. cancelText="取消下载"
  95. okText="下载"
  96. @cancelDownload="cancelDownload"
  97. :okButtonProps="{ disabled: canDownload }"
  98. />
  99. <MoveModal @register="registerMoveModal" />
  100. </PageWrapper>
  101. </template>
  102. <script lang="ts">
  103. import { defineComponent, ref, computed } from 'vue';
  104. import {
  105. BasicTable,
  106. useTable,
  107. TableAction,
  108. } from '/@/components/Table';
  109. import { PageWrapper } from '/@/components/Page';
  110. import DownLoadModal from '/@/views/productOperation/modal/DownLoadModal.vue';
  111. import MoveModal from '/@/views/productOperation/modal/MoveModal.vue';
  112. import { overallList, overallDelete } from '/@/api/operate';
  113. import { Descriptions, Tabs, } from 'ant-design-vue';
  114. import { useI18n } from '/@/hooks/web/useI18n';
  115. import { useMessage } from '/@/hooks/web/useMessage';
  116. import { columns,searchForm,cameraScene,cameraSearchForm, quanjSearchForm } from './data'
  117. import { useModal } from '/@/components/Modal';
  118. import { usePermissionStore } from '/@/store/modules/permission';
  119. import { otherInfoStore } from '/@/store/modules/other'
  120. import {
  121. operateSceneList,
  122. sceneMove,
  123. sceneDelete,
  124. qjsceneDelete,
  125. sceneReset,
  126. sceneRestStore,
  127. sceneDownload,
  128. checkDownLoad,
  129. downloadProcess,
  130. sceneCopy,
  131. rebuildScene,
  132. } from '/@/api/operate';
  133. import { message } from 'ant-design-vue';
  134. export default defineComponent({
  135. components: {
  136. DownLoadModal,
  137. MoveModal,
  138. BasicTable,
  139. TableAction,
  140. PageWrapper,
  141. [Descriptions.name]: Descriptions,
  142. [Descriptions.Item.name]: Descriptions.Item,
  143. [Tabs.name]: Tabs,
  144. [Tabs.TabPane.name]: Tabs.TabPane,
  145. },
  146. setup() {
  147. const { t } = useI18n();
  148. const otherInfo = otherInfoStore();
  149. const OverviewInfo = computed(() => otherInfo.getOverviewInfo);
  150. const { userName } = OverviewInfo.value
  151. const { createMessage, createConfirm } = useMessage();
  152. const timer = ref<NodeJS.Timeout | number | undefined | null>(null);
  153. const tableType = ref<number>(0); //0看看 、1看见、2深时
  154. const loading = ref(false);
  155. function cancelDownload() {
  156. downloadOption.value = {};
  157. }
  158. const permissionStore = usePermissionStore();
  159. const { getCheckPerm } = permissionStore;
  160. const [registerDownModal, { openModal: openDownModal }] = useModal();
  161. const [registerMoveModal, { openModal: openMoveModal }] = useModal();
  162. const [registerTableViewKankan, { reload:ViewReload }] = useTable({
  163. api: overallList,
  164. title: `作品列表`,
  165. // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
  166. columns: cameraScene,
  167. searchInfo: { type: tableType,userName },
  168. useSearchForm: true,
  169. formConfig: quanjSearchForm,
  170. showTableSetting: true,
  171. showIndexColumn:false,
  172. rowKey: 'num',
  173. beforeFetch:(T)=>{
  174. loading.value = true
  175. return T
  176. },
  177. afterFetch: (T) => {
  178. loading.value = false
  179. return T;
  180. },
  181. fetchSetting: {
  182. pageField: 'pageNum',
  183. sizeField: 'pageSize',
  184. listField: 'list',
  185. totalField: 'total',
  186. },
  187. canResize: false,
  188. });
  189. const [registerTable, { reload }] = useTable({
  190. api: operateSceneList,
  191. title: `场景列表`,
  192. // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
  193. columns: columns,
  194. searchInfo: { type: tableType, userName},
  195. useSearchForm: true,
  196. formConfig: searchForm,
  197. showTableSetting: true,
  198. showIndexColumn:false,
  199. beforeFetch:(T)=>{
  200. loading.value = true
  201. return T
  202. },
  203. afterFetch: (T) => {
  204. loading.value = false
  205. return T;
  206. },
  207. rowKey: 'num',
  208. fetchSetting: {
  209. pageField: 'pageNum',
  210. sizeField: 'pageSize',
  211. listField: 'list',
  212. totalField: 'total',
  213. },
  214. canResize: false,
  215. });
  216. function changeTable(val: string) {
  217. tableType.value = val;
  218. reload();
  219. }
  220. async function handleCopy(record: Recordable) {
  221. createConfirm({
  222. title: '复制场景',
  223. content: '复制场景,场景归属在原相机下。<br/>确定要复制场景吗?',
  224. onOk: async () => {
  225. sceneCopy({ num: record.num })
  226. .then(() => {
  227. message.success({
  228. content: '复制成功',
  229. });
  230. reload();
  231. })
  232. },
  233. });
  234. }
  235. async function handleQjDelete(record: Recordable) {
  236. qjsceneDelete({ id: record.id })
  237. .then(() => {
  238. message.success({
  239. content: '删除成功',
  240. });
  241. ViewReload();
  242. })
  243. }
  244. async function handleDelete(record: Recordable) {
  245. sceneDelete({ num: record.num })
  246. .then(() => {
  247. message.success({
  248. content: '删除成功',
  249. });
  250. reload();
  251. })
  252. }
  253. async function handleColdStorage(record: Recordable) {
  254. createConfirm({
  255. title: '删除',
  256. content: '确定要解冻场景吗?',
  257. onOk: async () => {
  258. sceneRestStore({ num: record.num }).then(() => {
  259. message.success({
  260. content: '解冻成功',
  261. });
  262. reload();
  263. });
  264. },
  265. });
  266. }
  267. async function handleMove(record: Recordable) {
  268. openMoveModal(true, {
  269. ...record,
  270. });
  271. }
  272. // const timer = ref<NodeJS.Timeout | null = null>(null); //0看看 、1看见、2深时
  273. const downloadOption = ref<Object>({});
  274. const canDownload = ref<boolean>(true);
  275. function handleDownload(record: Recordable) {
  276. console.log('handleDownload', record);
  277. let isObj = tableType.value == 4?1:0
  278. let params = {num: record.num}
  279. if(tableType.value == 4 || tableType.value == 2){
  280. params.isObj = isObj
  281. }
  282. checkDownLoad(params).then((res) => {
  283. console.log(res);
  284. if (res.downloadStatus!= 3) {
  285. // 未下载过,需要打包
  286. sceneDownload(params).then((downres) => {
  287. console.log(downres);
  288. openDownModal(true, {
  289. ...record,
  290. });
  291. if (downres.downloadStatus == 1) {
  292. if (timer.value) {
  293. afterClose();
  294. }
  295. timer.value = setInterval(() => {
  296. downloadProcess(params).then((processres) => {
  297. if (processres.percent >= 100) {
  298. canDownload.value = false;
  299. afterClose();
  300. }
  301. downloadOption.value = processres;
  302. console.log(processres);
  303. });
  304. }, 1000);
  305. }
  306. });
  307. } else {
  308. window.open(res.downloadUrl);
  309. }
  310. });
  311. }
  312. function afterClose() {
  313. clearInterval(timer.value);
  314. timer.value = null;
  315. }
  316. function handleReset(record: Recordable) {
  317. console.log('handleReset', record);
  318. rebuildScene({ num: record.num })
  319. .then(() => {
  320. message.success({
  321. content: '操作成功',
  322. });
  323. reload();
  324. })
  325. }
  326. function getTypeCheckPerm(val){
  327. let myType = tableType.value
  328. return getCheckPerm(val) || getCheckPerm(`${val}-${myType}`)
  329. }
  330. return {
  331. registerTableViewKankan,
  332. registerTable,
  333. handleDelete,
  334. handleQjDelete,
  335. handleCopy,
  336. loading,
  337. handleMove,
  338. handleDownload,
  339. handleReset,
  340. tableType,
  341. changeTable,
  342. reload,
  343. t,
  344. openDownModal,
  345. registerDownModal,
  346. registerMoveModal,
  347. afterClose,
  348. timer,
  349. canDownload,
  350. downloadOption,
  351. handleColdStorage,
  352. cancelDownload,
  353. ViewReload,
  354. getTypeCheckPerm,
  355. };
  356. },
  357. });
  358. </script>
  359. <style lang="less" scoped>
  360. .desc-wrap-BasicTable {
  361. background-color: #f0f2f5;
  362. .vben-basic-table-form-container {
  363. padding: 0;
  364. }
  365. }
  366. </style>