index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <template>
  2. <div class="examine-container">
  3. <div class="left-container">
  4. <template v-for="source in sourceTypes" :key="source.SERVICETYPE">
  5. <div class="soure-item-row" :class="{ active: current === source.SERVICETYPE }" @click="selectHandle(source)">
  6. {{ `${source.name}(` }}<span :id="'scsh' + source.SERVICETYPE">{{ 0 }}</span>)
  7. </div>
  8. </template>
  9. </div>
  10. <div class="right-container">
  11. <BasicTable @register="registerTable" @fetch-success="onFetchSuccess">
  12. <template #toolbar>
  13. <!-- <Authority>
  14. <a-button type="primary" @click="batchExamine" :disabled="hasBatchDelete">批量审核</a-button>
  15. </Authority> -->
  16. </template>
  17. <template #action="{ record }">
  18. <TableAction :actions="[
  19. {
  20. label: '浏览',
  21. ifShow: current == 'DR' ? false : true,
  22. onClick: handleVliew.bind(null, record),
  23. },
  24. {
  25. label: '查看',
  26. onClick: handleDetail.bind(null, record),
  27. },
  28. {
  29. label: '审核',
  30. disabled: statusShow == 1 ? false : true,
  31. color: 'warning',
  32. onClick: handleEdit.bind(null, record),
  33. },
  34. ]" />
  35. </template>
  36. <template #pdate="{ record }">
  37. <a-tag :color="'red'">
  38. {{ record.publishdate ? moment(record.publishdate).format('YYYY-MM-DD HH:mm:ss') : '' }}
  39. </a-tag>
  40. </template>
  41. <template #FLOWNAME="{ record }">
  42. {{ record.FLOWNAME.replace('上传', '') }}
  43. </template>
  44. <template #ISPASS="{ record }">
  45. <a-tag
  46. :style="`color:${record.ISPASS == '1' ? 'green' : 'red'};opacity:${(record.ISPASS === '1' || record.ISPASS === '0') ? '1' : '0'};`">
  47. {{
  48. record.ISPASS == '1' ? '通过' : record.ISPASS == '0' ? '不通过' : ''
  49. }}
  50. </a-tag>
  51. </template>
  52. <template #status="{ record }">
  53. <a-tag :style="`color:${record.status === 3 || record.status === 3 ? 'red' : ''};`">
  54. {{
  55. !record.status ? '待审核' : record.status == 2 ? '审核不通过' : record.status ? '审核通过' : ''
  56. }}
  57. </a-tag>
  58. </template>
  59. <template #BLZT="{ record }">
  60. <a-tag :style="`color:${record.status === 3 || record.status === 3 ? 'red' : ''};`">
  61. {{
  62. record.BLZT
  63. }}
  64. </a-tag>
  65. </template>
  66. <!-- <template #ISPASS="{ record }">
  67. {{
  68. record.ISPASS == '1' ? '同意' : record.ISPASS == '0' ? '不同意' : ''
  69. }}
  70. </template> -->
  71. </BasicTable>
  72. <!-- <check v-if="ischect" @register="registerModal" @success="handleSuccess" />
  73. <map-resource-upload v-if="!ischect && current === 'MR'" @register="registerModal"
  74. @success="handleSuccess"></map-resource-upload>
  75. <scene-resource-upload v-if="!ischect && current === 'ER'" @register="registerModal"
  76. @success="handleSuccess"></scene-resource-upload>
  77. <file-resource-upload v-if="!ischect && current === 'DR'" @register="registerModal"
  78. @success="handleSuccess"></file-resource-upload>
  79. <ass-resource-upload v-if="!ischect && current === 'SR'" @register="registerModal"
  80. @success="handleSuccess"></ass-resource-upload> -->
  81. <map-resource-upload v-if="current === 'MR'" @register="registerModal"
  82. @success="handleSuccess"></map-resource-upload>
  83. <scene-resource-upload v-if="current === 'ER'" @register="registerModal"
  84. @success="handleSuccess"></scene-resource-upload>
  85. <file-resource-upload v-if="current === 'DR'" @register="registerModal"
  86. @success="handleSuccess"></file-resource-upload>
  87. <ass-resource-upload v-if="current === 'SR'" @register="registerModal"
  88. @success="handleSuccess"></ass-resource-upload>
  89. </div>
  90. </div>
  91. </template>
  92. <script lang="ts">
  93. import { defineComponent, nextTick, ref, watch } from 'vue';
  94. import { BasicTable, useTable, TableAction } from '/@/components/Table';
  95. import { delRole, setRoleStatus } from '/@/api/system/system';
  96. import MapResourceUpload from '/@/views/dataAdmin/dataAdmin/mapUpload/MapSourceModal.vue';
  97. import FileResourceUpload from '/@/views/dataAdmin/dataAdmin/fileResourceUpload/AddMethod.vue';
  98. import SceneResourceUpload from '/@/views/dataAdmin/dataAdmin/sceneResourceUpload/AddMethod.vue';
  99. import AssResourceUpload from '/@/views/dataAdmin/assembly/MapSourceModal.vue';
  100. import check from './check.vue';
  101. import { getFileUrl } from '/@/api/resource/files';
  102. import { session } from '/@/utils/Memory.js';
  103. import {
  104. columns,
  105. searchFormSchemaMR,
  106. searchFormSchemaER,
  107. searchFormSchemaDR,
  108. searchFormSchemaSR,
  109. } from './map.data';
  110. import { RoleEnum } from '/@/enums/roleEnum';
  111. import { Authority } from '/@/components/Authority';
  112. import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
  113. import { useMessage } from '/@/hooks/web/useMessage';
  114. import { Switch, Popconfirm } from 'ant-design-vue';
  115. import { queryResourceById } from '/@/api/resource/map';
  116. import Moment from 'moment';
  117. import { updateExamine } from '/@/api/resource/updateExamine';
  118. import { useModal } from '/@/components/Modal';
  119. import { useRouter } from 'vue-router';
  120. import { useAppStore } from '/@/store/modules/app';
  121. export default defineComponent({
  122. name: 'RoleManagement',
  123. components: {
  124. BasicTable,
  125. check,
  126. TableAction,
  127. Authority,
  128. Switch,
  129. Popconfirm,
  130. MapResourceUpload,
  131. FileResourceUpload,
  132. AssResourceUpload,
  133. SceneResourceUpload,
  134. },
  135. setup() {
  136. const appStore = useAppStore();
  137. const { currentRoute } = useRouter();
  138. const currRoute = currentRoute.value;
  139. let current = ref(currRoute?.query?.type || 'MR');
  140. let statusShow = ref(1);
  141. const [registerTable, { getSelectRows, setProps, reload, setSelectedRowKeys, getDataSource }] = useTable({
  142. title: '地图资源审核列表',
  143. api: (param) => {
  144. statusShow.value = param.checkStatus;
  145. const data = Object.assign(param, { serviceType: current.value });
  146. return updateExamine(data);
  147. }, //求接口
  148. //dataSource: dataSources, //表格的数据
  149. columns,
  150. rowKey: (record) => record.BUSSID,
  151. formConfig: {
  152. labelWidth: 90,
  153. schemas: searchFormSchemaMR,
  154. },
  155. useSearchForm: true,
  156. showTableSetting: true,
  157. bordered: true,
  158. showIndexColumn: true,
  159. actionColumn: {
  160. width: 200,
  161. title: '操作',
  162. dataIndex: 'action',
  163. slots: { customRender: 'action' },
  164. fixed: 'right',
  165. },
  166. pagination: {
  167. hideOnSinglePage: false,
  168. pageSize: 10,
  169. },
  170. clickToRowSelect: true, //点击当前行多选框不选中,默认是true
  171. rowSelection: { type: 'checkbox' }, //是否有多选功能
  172. tableSetting: {
  173. redo: true,
  174. size: true,
  175. setting: false,
  176. fullScreen: false,
  177. },
  178. });
  179. const onFetchSuccess = () => {
  180. // 请求后拿到数据,打开对应的资源审核弹窗
  181. nextTick(() => {
  182. let dataList = getDataSource()
  183. if (currRoute?.query?.bussid && appStore.routerPushAuditFlag) {
  184. dataList.forEach(item => {
  185. item.BUSSID === currRoute.query.bussid && handleEdit(item)
  186. })
  187. }
  188. });
  189. }
  190. const moment = Moment;
  191. const ischect = ref(true)
  192. const sourceTypes = ref([
  193. { SERVICETYPE: 'MR', name: '地图资源', SUM: 0 },
  194. { SERVICETYPE: 'ER', name: '场景资源', SUM: 0 },
  195. { SERVICETYPE: 'DR', name: '文件资源', SUM: 0 },
  196. { SERVICETYPE: 'SR', name: '组件资源', SUM: 0 },
  197. ]);
  198. const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } =
  199. useBatchDelete(delRole, handleSuccess, setProps);
  200. selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => {
  201. // Demo:status为1的选择框禁用
  202. // if (record.status === 1) {
  203. // return { disabled: true };
  204. // } else {
  205. // return { disabled: false };
  206. // }
  207. };
  208. const [registerModal, { openModal }] = useModal();
  209. watch(
  210. () => current.value, (val) => {
  211. let searchFormSchema = searchFormSchemaMR;
  212. let title = '地图资源审核列表';
  213. if (val === 'MR') {
  214. searchFormSchema = searchFormSchemaMR;
  215. title = '地图资源审核列表';
  216. } else if (val === 'ER') {
  217. searchFormSchema = searchFormSchemaER;
  218. title = '场景资源审核列表';
  219. } else if (val === 'DR') {
  220. searchFormSchema = searchFormSchemaDR;
  221. title = '文件资源审核列表';
  222. } else {
  223. searchFormSchema = searchFormSchemaSR;
  224. title = '组件资源审核列表';
  225. }
  226. setProps({
  227. title: title,
  228. formConfig: {
  229. labelWidth: 90,
  230. schemas: searchFormSchema,
  231. },
  232. });
  233. reload();
  234. }
  235. );
  236. nextTick(() => {
  237. setProps(selectionOptions);
  238. });
  239. function selectHandle(record) {
  240. current.value = record.SERVICETYPE;
  241. }
  242. /**
  243. * 详情
  244. */
  245. async function handleDetail(record: Recordable) {
  246. ischect.value = false;
  247. const res = (await queryResourceById(record?.SERVICEID)) as any;
  248. if (res) {
  249. if (res.dataVersionConf) {
  250. res.metadata.isnew = res.servicebase.isnew = res.dataVersionConf.active == 'Y' ? "1" : "0";
  251. }
  252. const result = Object.assign(res.metadata, res.servicebase, res.dataVersionConf || {},{bussid:record?.BUSSID});
  253. //if (record.bussid) res.bussid = record?.BUSSID;
  254. debugger
  255. openModal(true, {
  256. record: result,
  257. isUpdate: true,
  258. isView: true,
  259. isCheck: false,
  260. });
  261. }
  262. }
  263. /**
  264. * 审核
  265. */
  266. async function handleEdit(record: Recordable) {
  267. ischect.value = true;
  268. if(!record?.BUSSID) return;
  269. const res = (await queryResourceById(record?.SERVICEID)) as any;
  270. if (res) {
  271. if (res.dataVersionConf) {
  272. res.metadata.isnew = res.servicebase.isnew = res.dataVersionConf.active == 'Y' ? "1" : "0";
  273. }
  274. const result = Object.assign(res.metadata, res.servicebase, res.dataVersionConf || {},{bussid:record?.BUSSID});
  275. //if (record.bussid) res.bussid = record.BUSSID;
  276. openModal(true, {
  277. record: result,
  278. isUpdate: true,
  279. isView: true,
  280. isCheck: true,
  281. });
  282. }
  283. }
  284. /**
  285. * 浏览
  286. */
  287. async function handleVliew(record: Recordable) {
  288. //场景资源
  289. if (current.value === 'ER') {
  290. // window.open(`http://192.168.119.143:8080/onemapV5.0/sceneview.html?${record.SERVICEID}`, 'target', '');
  291. window.open(`./sceneview.html?${record.SERVICEID}`, 'target', '');
  292. }
  293. //地图资源
  294. if (current.value === 'MR') {
  295. // window.open(`http://192.168.119.143:8080/onemapV5.0/mapview.html?${record.SERVICEID}`, 'target', '');
  296. window.open(`./mapview.html?${record.SERVICEID}`, 'target', '');
  297. }
  298. //地图资源
  299. if (current.value === 'SR') {
  300. var res = (await queryResourceById(record?.SERVICEID)) as any;
  301. res = Object.assign(res.metadata, res.servicebase, res.dataVersionConf || {});
  302. if (res) {
  303. window.open(`./mapview.html?onlineIde_${res.servicealiasname}`, 'target', '');
  304. }
  305. }
  306. //文件资源
  307. if (current.value === 'DR') {
  308. const obj = {
  309. id: record['fileid'],
  310. userid: record['userid'],
  311. parentId: session.getItem('sysFild').dirId,
  312. };
  313. const res = (await getFileUrl(obj)) as any;
  314. if (res) {
  315. const fileName = res.fileName;
  316. console.log('下载文件', fileName);
  317. const url = res.url;
  318. window.open(url);
  319. }
  320. }
  321. if (current.value === 'DR') {
  322. console.log('组件');
  323. }
  324. }
  325. function handleSuccess() {
  326. openModal(false, {
  327. isUpdate: false,
  328. isCheck: false,
  329. });
  330. reload();
  331. }
  332. const statusChange = async (checked, record) => {
  333. setProps({
  334. loading: true,
  335. });
  336. setSelectedRowKeys([]);
  337. resetSelectedRowKeys();
  338. const newStatus = checked ? 1 : 0;
  339. const { createMessage } = useMessage();
  340. try {
  341. await setRoleStatus(record.id, newStatus);
  342. if (newStatus) {
  343. createMessage.success(`启用成功`);
  344. } else {
  345. createMessage.success('禁用成功');
  346. }
  347. } finally {
  348. setProps({
  349. loading: false,
  350. });
  351. reload();
  352. }
  353. };
  354. const batchExamine = () => {
  355. console.log('审核数据', getSelectRows());
  356. };
  357. return {
  358. statusShow,
  359. current,
  360. moment,
  361. ischect,
  362. sourceTypes,
  363. registerTable,
  364. registerModal,
  365. handleVliew,
  366. handleDetail,
  367. handleEdit,
  368. handleSuccess,
  369. RoleEnum,
  370. hasBatchDelete,
  371. handleDeleteOrBatchDelete,
  372. statusChange,
  373. batchExamine,
  374. selectHandle,
  375. onFetchSuccess
  376. };
  377. },
  378. });
  379. </script>
  380. <style scoped lang="less">
  381. .examine-container {
  382. display: flex;
  383. height: 100%;
  384. width: 100%;
  385. .left-container {
  386. width: 240px;
  387. height: calc(100% - 32px);
  388. margin: 16px 0 16px 10px;
  389. padding: 10px 20px;
  390. background-color: #fff;
  391. border-radius: 2px;
  392. .soure-item-row {
  393. height: 34px;
  394. width: 100%;
  395. margin: 20px 0;
  396. line-height: 34px;
  397. text-align: center;
  398. font-size: 14px;
  399. font-weight: normal;
  400. letter-spacing: 0px;
  401. color: #333333;
  402. background: #eff0f5;
  403. border-radius: 2px;
  404. cursor: pointer;
  405. }
  406. .active {
  407. background: #0671dd;
  408. color: #fff;
  409. }
  410. }
  411. .right-container {
  412. width: calc(100% - 260px);
  413. height: 100%;
  414. }
  415. }
  416. </style>