index.vue 10 KB

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