Browse Source

Merge branch 'main' of http://221.182.8.141:2300/sujunling/xld-gis-admin

XiaXxxxxx 2 years ago
parent
commit
e79b85407f

+ 2 - 2
src/api/resource/map.ts

@@ -2,9 +2,9 @@
  * @Author: tengmingxue 1473375109@qq.com
  * @Date: 2023-08-15 11:20:48
  * @LastEditors: tengmingxue 1473375109@qq.com
- * @LastEditTime: 2023-08-17 16:02:14
+ * @LastEditTime: 2023-08-21 17:13:06
  * @FilePath: \xld-gis-admin\src\api\resource\map.ts
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @Description: 地图资源接口
  */
 import { defHttp } from '/@/utils/http/axios';
 import { session } from "/@/utils/Memory.js";

+ 35 - 0
src/api/resource/scene.ts

@@ -0,0 +1,35 @@
+/*
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-15 11:20:48
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-21 17:19:02
+ * @FilePath: \xld-gis-admin\src\api\resource\scene.ts
+ * @Description: 场景资源接口
+ */
+import { defHttp } from '/@/utils/http/axios';
+import { session } from "/@/utils/Memory.js";
+enum Api {
+    Login = '/callProvider'
+}
+const interfaceType = { apiUrl2: true };
+
+/**
+ * @description:获取地图资源列表
+ */
+export function list() {
+    const formData = new FormData();
+    formData.append("interfaceName", "antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider");
+    formData.append("methodName", "getResourcePagedList");
+    formData.append("args[]", session.getItem('tokenV2'));
+    formData.append("args[]", '{"type":"ER","pageIndex":1,"pageSize":20,"orderBy":"updatedate DESC"}');
+    return new Promise<void>((resolve, reject) => {
+        defHttp.post({ url: Api.Login, params: formData, ...interfaceType })
+            .then((r) => {
+                let result = r.result === '' ? {} : JSON.parse(r.result)
+                console.log('场景资源数据',result)
+                resolve(result);
+            })
+    })
+}
+
+

+ 9 - 9
src/mock/menu.json

@@ -416,11 +416,11 @@
                         "name": "地图资源上传",
                         "parentId": "c084fce9-9b70-4ae0-b094-7cfe30c87f52",
                         "children": [],
-                        "path": "/map/send",
+                        "path": "/dataAdmin/dataAdmin/mapUpload",
                         "type": "SYSADMIN",
-                        "permission": "",
+                        "permission": "map:source:upload",
                         "sort": 24,
-                        "component": "LAYOUT",
+                        "component": "/dataAdmin/dataAdmin/mapUpload/index",
                         "meta": {
                             "icon": "mdi:earth",
                             "title": "地图资源上传",
@@ -482,11 +482,11 @@
                         "name": "场景资源上传",
                         "parentId": "c084fce9-9b70-4ae0-b094-7cfe30c87f52",
                         "children": [],
-                        "path": "/scene/send",
+                        "path": "/dataAdmin/dataAdmin/sceneResourceUpload",
                         "type": "SYSADMIN",
-                        "permission": "",
+                        "permission": "scene:souce:upload",
                         "sort": 25,
-                        "component": "LAYOUT",
+                        "component": "/dataAdmin/dataAdmin/sceneResourceUpload/index",
                         "meta": {
                             "icon": "mdi:earth-box-plus",
                             "title": "场景资源上传",
@@ -526,11 +526,11 @@
                         "name": "文件型数据上传",
                         "parentId": "c084fce9-9b70-4ae0-b094-7cfe30c87f52",
                         "children": [],
-                        "path": "/fild/send",
+                        "path": "/dataAdmin/dataAdmin/fileResourceUpload",
                         "type": "SYSADMIN",
-                        "permission": "",
+                        "permission": "file:souce:upload",
                         "sort": 26,
-                        "component": "LAYOUT",
+                        "component": "/dataAdmin/dataAdmin/fileResourceUpload/index",
                         "meta": {
                             "icon": "mdi:exit-to-app",
                             "title": "文件型数据上传",

+ 4 - 1
src/mock/menu_get_ids.json

@@ -148,5 +148,8 @@
     "27e36b74-f516-4fea-bd92-c8630256758f",
     "ca60b93b-fc8e-487b-bbff-1831ccc6e518",
     "4dd7d7af-aba5-4b55-98a8-599a2475149d",
-    "6f625574-6061-4989-aeb1-a6a1eb8ed668"
+    "6f625574-6061-4989-aeb1-a6a1eb8ed668",
+    "7e0c2dfc-a6d1-4855-914f-51d70f6d291b",
+    "619676b7-2496-4d8d-a2b7-65f6553a8a9b",
+    "8e979a41-8533-44d1-9b09-2216f2af8761"
 ]

+ 5 - 1
src/mock/role_me_permissions.json

@@ -132,5 +132,9 @@
     "sjglzx",
     "api:yt:schedule:update",
     "api:yt:user:reset",
-    "map:resource:examine"
+    "map:resource:examine",
+    "map:source:upload",
+    "file:souce:upload",
+    "scene:souce:upload",
+    "api:dataresource:fileupload:fileuploadAdd"
 ]

+ 37 - 233
src/views/assembly/item/AssemblyData.vue

@@ -3,93 +3,18 @@
   <div style="background-color: #f0f2f5" class="dark:bg-dark-900">
     <div class="datacenter-right">
       <div class="resource_list" id="map_list">
-        <div v-for="(i, n) in list" v-if="list.length" :key="n" data-permission="true" class="resource_item"
-          data-checking="false" data-searching="1" data-ispub="1">
-          <div class="mapItem-top-box">
-            <div class="item-top">
-              <div class="img_container" data-num="1">
-                <img class="tab-list-icon-img-MR00001936 img_mr MR00001936"
-                  :src="i.info && i.info.length && i.info[0].thumbnail" alt="">
-              </div>
-            </div>
-            <div class="item-title">
-              <span class="r_name">{{ i.SERVICENAME }}</span>
-              <span class="r-number" data-num="1" title="编目1次">1</span>
-            </div>
-            <div class="item-msg">
-              <div class="item-msg-val" style="font-weight:bold;font-size:12px;color: #000;">坐标系:{{ i.CRS }}</div>
-              <div class="item-msg-val">适用流程:国家秘密和工作秘密数据成果申请,</div>
-              <div class="item-msg-val">关键字:测试数据</div>
-              <div class="item-msg-val">服务类型:{{ i.TYPENAME }}</div>
-            </div>
-          </div>
-          <div class="operation-box">
-            <div class="operation-item browse-item-btn browse-item-MR00001936">
-              <a target="_blank" :href="`../../mapview.html?/iserver/services/map-16/rest/maps/LZS16envi1%4016.ijs`">
-                <span>浏览</span>
-              </a>
-            </div>
-
-            <div class="operation-item alone-apply-btn alone-apply-btn-MR00001936">
-              <span style="border-right: 1px #ccc solid;" onclick="cardApplyItem('mr')">
-                <span>申请</span>
-              </span>
-            </div>
-            <div class="operation-item" @click="handleQuery(i)">
-              <a href="javascript:void(0)" class="">
-                <span>详细</span>
-              </a>
-            </div>
-            <div class="operation-item" @click="applyWay(i)">
-              <a href="javascript:void(0)" class="">
-                <span>加入申请库</span>
-              </a>
-            </div>
-            <div class="operation-item operation-item-active" @click="handleQuery(i)">
-              <a href="javascript:void(0)" class="">
-                <span>已加入申请库</span>
-              </a>
-            </div>
-          </div>
+        <div v-for="(i, k) in list" :key="k" class="item">
+          <div><img :src="i.src" alt="" srcset=""></div>
+          <b>{{ i.name }}</b>
+          <p>
+            <span>浏览</span>
+            <span>详情</span>
+            <span>加入库</span>
+            <span>已入库</span>
+          </p>
         </div>
       </div>
     </div>
-
-    <!-- <BasicTable @register="registerTable" class="dark:bg-dark-900">
-      <template #toolbar>
-        <Authority value="api:yt:smsLog:delete">
-          <Popconfirm title="您确定要批量删除数据" ok-text="确定" cancel-text="取消" @confirm="handleDeleteOrBatchDelete(null)">
-            <a-button type="primary" color="error" :disabled="hasBatchDelete"> 批量删除 </a-button>
-          </Popconfirm>
-        </Authority>
-      </template>
-      <template #remark="{ record }">
-        <Tooltip :title="record.remark">
-          <div class="truncate w-full">{{ record.remark }}</div>
-        </Tooltip>
-      </template>
-      <template #action="{ record }">
-        <TableAction :actions="[
-          {
-            label: '查看',
-            auth: 'api:yt:smsLog:get',
-            icon: 'ant-design:fund-view-outlined',
-            onClick: handleQuery.bind(null, record),
-          },
-          {
-            label: '删除',
-            auth: 'api:yt:smsLog:delete',
-            icon: 'ant-design:delete-outlined',
-            color: 'error',
-            popConfirm: {
-              title: '是否确认删除',
-              confirm: handleDeleteOrBatchDelete.bind(null, record),
-            },
-          },
-        ]" />
-      </template>
-    </BasicTable> -->
-    <!-- 弹出框 -->
     <AssemblyDrawer @register="registerModal" />
   </div>
 </template>
@@ -114,7 +39,7 @@ export default defineComponent({
   components: { BasicTable, TableAction, Authority, Search, Popconfirm, Tooltip, AssemblyDrawer },
   setup() {
     const [registerModal, { openDrawer }] = useDrawer(); //使用右侧弹出框
-    const list = ref([]);
+
     const props = defineProps({
       listData: {
         type: Array,
@@ -125,14 +50,7 @@ export default defineComponent({
     // setInterval(() => {
     //   console.log(props)
     // }, 2000)
-    onMounted(() => {
-      platList().then((r) => {
-        if (r) {
-          list.value = r[0].items;
-          list.value.map(async (i) => i.info = await img(i.SERVICEID))
-        }
-      });
-    });
+
 
     function handleQuery(record: Recordable) {
       console.log("11111:", record)
@@ -141,26 +59,14 @@ export default defineComponent({
       });
     }
 
-    function applyWay(i) {
-      console.log(i)
-      apply({
-        addRes: [{
-          resDataType: "1",
-          resId: i.SERVICEID,
-          resName: `${i.SERVICENAME}(${i.CRS})`,
-          resType: 0,
-          workflowType: "MAP",
-        }],
-        userId: session.getItem('userId'),
-      }).then((r) => {
-        if (r.datas && r.resp_code == 0) {
-          message.success('申请成功');
-        }
-      })
-    }
+
+    var list = [
+      { src: 'http://106.12.170.138:4001/examples/img/Earth.jpg', name: '地图加载', has: false },
+      { src: 'http://106.12.170.138:4001/examples/img/Earth.jpg', name: '地图加载', has: false },
+      { src: 'http://106.12.170.138:4001/examples/img/Earth.jpg', name: '地图加载', has: false }
+    ]
 
     return {
-      applyWay,
       registerModal,
       list,
       handleQuery,
@@ -170,139 +76,37 @@ export default defineComponent({
 </script>
 
 <style scoped>
-.datacenter-right .resource_list .item-title .r_name {
-  color: #5e5d5e;
+.item p span {
   display: inline-block;
-  width: 190px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.datacenter-right .resource_list {
-  box-sizing: border-box;
-  width: 100%;
-  float: left;
-  clear: both;
-  display: flex;
-  flex-wrap: wrap;
-  align-items: center;
-}
-
-.datacenter-right .resource_list>div:not(:nth-of-type(4n + 4)) {
-  margin-right: 7px;
-}
-
-.resource_item {
-  height: 318px;
-  width: 224px;
-  margin-bottom: 14px;
-  border: 2px dashed transparent;
-
-  width: 386px;
-  height: 402px;
-  border-radius: 4px;
-  opacity: 1;
-  background: #FFFFFF;
-  border: 1px solid #DEDEDE;
-}
-
-.mapItem-top-box {
-  height: 350px;
-}
-
-.datacenter-right .resource_list .operation-box {
-  height: 42px;
-  display: flex;
-  margin-bottom: 10px;
-  margin-left: 20px;
-}
-
-.datacenter-right .resource_list .item-top {
-  padding: 13px;
-}
-
-.datacenter-right .resource_list .item-top img {
-  width: 360px;
-  height: 190px;
-  border: solid 1px #eeebeb;
-}
-
-.datacenter-right .resource_list .item-title {
-  font-size: 14px;
-  font-family: PingFang SC;
-  font-weight: bold;
-  color: #5e5d5e;
-  line-height: 16px;
-  padding: 0 0 0 14px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.datacenter-right .resource_list .item-msg {
-  padding: 0 13px 13px;
-}
-
-.img_container {
-  text-align: center;
-}
-
-.img_container {
-  width: 100%;
-  height: 100%;
-  background: #b7bed3;
-  border-radius: 4px;
-}
-
-.datacenter-right .resource_list .item-msg-val {
-  font-size: 12px;
-  font-family: PingFang SC;
-  font-weight: bold;
-  color: #5e5d5e;
-  line-height: 22px;
-  opacity: 0.5;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.datacenter-right .resource_list .operation-item {
-  display: flex;
-  align-items: center;
-  justify-content: center;
   min-width: 50px;
   height: 34px;
-  opacity: 1;
+  line-height: 34px;
   margin-right: 22px;
   padding: 0 10px;
   background: #E8E8E8;
+  cursor: pointer;
 }
 
-.datacenter-right .resource_list .operation-item:hover {
-  background: #0671DD;
-}
-
-.datacenter-right .resource_list .operation-item:hover a {
-  color: #fff;
-}
-
-.datacenter-right .resource_list .operation-item.alone-apply-btn {
-  display: none;
-}
-
-.operation-item-active {
-  background: #05B069 !important;
+.item b {
+  font-size: 16px;
+  font-weight: bold;
+  display: inline-block;
+  margin: 10px 0;
 }
 
-.operation-item-active a {
-  color: #fff !important;
+.item {
+  width: 386px;
+  height: 299px;
+  border-radius: 4px;
+  background: #FFFFFF;
+  border: 1px solid #DEDEDE;
+  padding: 15px;
+  float: left;
+  margin: 0px 20px 20px 0px;
 }
 
-.datacenter-right .resource_list .operation-item a {
-  font-size: 12px;
-  width: 100%;
-  text-align: center;
-  color: #5e5d5e;
+.item img {
+  width: 354px;
+  height: 190px;
 }
 </style>

+ 4 - 1
src/views/dataAdmin/dataAdmin/fileResourceUpload/index.vue

@@ -9,7 +9,10 @@
     >
     <!-- 表格右上角按钮 -->
     <template #toolbar>
-        <Authority :value="authList.addAuth">
+        <!-- <Authority :value="authList.addAuth">
+          <a-button type="primary" @click="addMethod" >新增文件</a-button>
+        </Authority> -->
+        <Authority >
           <a-button type="primary" @click="addMethod" >新增文件</a-button>
         </Authority>
         <Authority :value="authList.deleteAuth">

+ 225 - 0
src/views/dataAdmin/dataAdmin/mapUpload/MapDrawer.vue

@@ -0,0 +1,225 @@
+<template>
+  <BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="500px" @ok="handleSubmit">
+    <BasicForm @register="registerForm">
+      <template #menu>
+        <Spin :spinning="spinning"></Spin>
+      </template>
+    </BasicForm>
+  </BasicDrawer>
+</template>
+<script lang="ts">
+import { defineComponent, ref, computed, unref, nextTick } from 'vue';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { formSchema, KeysTypeEnum, RoleMenuDictEnum } from './map.data';
+import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
+import { BasicTree, TreeItem } from '/@/components/Tree';
+import { useMessage } from '/@/hooks/web/useMessage';
+const { t } = useI18n(); //加载国际化
+// 加载菜单数据
+import { getMenuList } from '/@/api/sys/menu';
+import { useI18n } from '/@/hooks/web/useI18n';
+import { MenuRecord } from '/@/api/sys/model/menuModel';
+import { saveOrUpdateRoleInfoWithMenu } from '/@/api/system/system';
+import { findDictItemByCode } from '/@/api/system/dict';
+import { RoleEnum } from '/@/enums/roleEnum';
+import { Spin } from 'ant-design-vue';
+import { useUserStore } from '/@/store/modules/user';
+import { session } from '/@/utils/Memory';
+import { v4 as uuidv4 } from 'uuid';
+
+
+type TreeData = MenuRecord & TreeItem;
+
+export default defineComponent({
+  name: 'RoleDrawer',
+  components: { BasicDrawer, BasicForm, BasicTree, Spin },
+  emits: ['success', 'register'],
+  setup(_, { emit }) {
+    const isUpdate = ref<boolean>(true);
+    const treeData = ref<TreeData[]>([]);
+    const roleMenus = ref<string[]>([]);
+    const roleId = ref<string>('');
+    const checked = ref<string[]>([]); //需要选中的节点
+    const spinning = ref(false);
+    var nowRole = null;
+
+    const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
+      labelWidth: 100,
+      schemas: formSchema,
+      showActionButtonGroup: false,
+    });
+
+    const transformName = (data: TreeData[]) => {
+      return data.map((item) => {
+        item.name = t(item.name);
+        if (item.children && item.children.length) {
+          item.children = transformName(item.children as unknown as TreeData[]);
+        }
+        return item;
+      });
+    };
+
+    const userStore = useUserStore();
+    const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
+      resetFields();
+      roleId.value = '';
+      // 在打开弹窗时清除所有选择的菜单
+      isUpdate.value = data.isUpdate;
+      const roleType = data?.record?.roleType || userStore.getRoleList.at(0);
+
+      try {
+        spinning.value = true;
+        // 需要在setFieldsValue之前先填充treeData,否则Tree组件可能会报key not exist警告
+
+        if (!unref(treeData).length) {
+          // 获取全部的菜单
+          const menuListModel = await getMenuList();
+          treeData.value = transformName(menuListModel as unknown as TreeData[]);
+        }
+
+        const keys = await getPermissionByRole(roleType);
+        const { keyType } = RoleMenuDictEnum[roleType];
+        treeData.value = getPermissionTreeData(
+          unref(treeData) as unknown as TreeData[],
+          keys,
+          keyType
+        );
+        // 更新
+        if (unref(isUpdate)) {
+          checked.value = [];
+          roleId.value = data.record.id;
+          nowRole = data.record;
+          setFieldsValue(data.record);
+        } else {
+        }
+      } catch (error) {
+        throw error;
+      } finally {
+        spinning.value = false;
+      }
+    });
+
+    const getTitle = computed(() => (!unref(isUpdate) ? '新增角色' : '编辑角色'));
+
+    async function handleSubmit() {
+      setDrawerProps({ confirmLoading: true });
+      const { createMessage } = useMessage();
+      try {
+        const values = await validate();
+        const req = {
+          groupName: values.groupName,
+          sort: values.sort
+        };
+        if (unref(isUpdate)) {
+          if (nowRole) {
+            req.updateuser = session.getItem("userInfo").EMPLOYEE.EMPLOYEE_ID;
+            req.groupid = nowRole.groupid;
+          }
+        } else {
+          req.groupid = uuidv4()
+        }
+        saveOrUpdateRoleInfoWithMenu(req).then(() => {
+          closeDrawer();
+          emit('success');
+          nowRole = null;
+          createMessage.success(`${unref(isUpdate) ? '编辑' : '新增'}成功`);
+        });
+      } finally {
+        setTimeout(() => {
+          setDrawerProps({ confirmLoading: false });
+        }, 300);
+      }
+    }
+
+    const getPermissionByRole = async (roleType: RoleEnum) => {
+      try {
+        const { key } = RoleMenuDictEnum[roleType];
+        const res = await findDictItemByCode({ dictCode: key });
+        return res.map((item) => item.itemValue);
+      } catch (error) { }
+      return [];
+    };
+
+    const getPermissionTreeData = (
+      data: MenuRecord[],
+      permissionKeys: string[],
+      keysType: KeysTypeEnum
+    ) => {
+      const setDisabled = (data: MenuRecord[], flag: boolean) => {
+        return data.map((item) => {
+          item.name = t(item.name);
+          if (item.children && item.children.length) {
+            item.children = setDisabled(item.children, flag);
+          }
+          return {
+            ...item,
+            disabled: flag,
+            icon: item.meta.icon,
+          } as TreeData;
+        });
+      };
+
+      const permissionCompare = (
+        data: MenuRecord[],
+        permissionKeys: string[],
+        keysType: KeysTypeEnum
+      ) => {
+        return data.map((item) => {
+          item.name = t(item.name);
+          const findFlag = permissionKeys.includes(item.permission);
+          if (findFlag) item.isDictCompareDisabled = true;
+          const disabledFlag = keysType === KeysTypeEnum.DISABLED ? findFlag : !findFlag;
+          item.disabled = disabledFlag;
+
+          if (item.isDictCompareDisabled && item.children && item.children.length) {
+            setDisabled(item.children, disabledFlag);
+          } else {
+            if (item.children && item.children.length) {
+              item.children = permissionCompare(item.children, permissionKeys, keysType);
+              item.disabled = item.children.every((temp) => temp.disabled);
+            }
+          }
+          return {
+            ...item,
+            icon: item.meta.icon,
+          } as TreeData;
+        });
+      };
+
+      const result = permissionCompare(data, permissionKeys, keysType).map((item) => {
+        if (item.children && item.children.length) {
+          const rootDisabledFlag = item.children.every((temp) => temp.disabled);
+          item.disabled = rootDisabledFlag;
+        }
+        return item;
+      });
+
+      return result;
+    };
+
+    return {
+      spinning,
+      registerDrawer,
+      registerForm,
+      getTitle,
+      handleSubmit,
+      treeData,
+      roleMenus,
+    };
+  },
+});
+</script>
+
+<style scoped lang="less">
+:deep(.vben-basic-tree) {
+  width: 100% !important;
+}
+
+:deep(.is-unflod) {
+  display: none !important;
+}
+
+:deep(.is-flod) {
+  display: none !important;
+}
+</style>

+ 106 - 0
src/views/dataAdmin/dataAdmin/mapUpload/MapSourceModal.vue

@@ -0,0 +1,106 @@
+<!--
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-15 16:19:10
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-21 13:39:20
+ * @FilePath: \xld-gis-admin\src\views\resource\map\MapSourceModal.vue
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+-->
+<template>
+  <BasicModal
+    width="1200px"
+    v-bind="$attrs"
+    @register="registerModal"
+    :title="getTitle"
+    @ok="handleSubmit"
+  >
+    <div style="height: 60vh" class="res-form-container">
+      <a-tabs v-model:activeKey="activeKey" class="res-a-tabs">
+        <a-tab-pane key="1" tab="地图资源信息">
+          <!-- <BasicForm @register="registerForm"></BasicForm> -->
+          <source-detail ref="refSourceDetail" @RtnMain="RtnMain" :formData="formData" :isUpdate="isUpdate" :isView="isView"></source-detail>
+        </a-tab-pane>
+        <a-tab-pane key="2" tab="流程信息" force-render>
+          <div class="tab2"></div>
+        </a-tab-pane>
+      </a-tabs>
+    </div>
+  </BasicModal>
+</template>
+  <script lang="ts">
+import { defineComponent, ref, computed, unref, reactive, onMounted } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { formSchema } from './map.data';
+import { BasicTree } from '/@/components/Tree';
+import { PlusOutlined } from '@ant-design/icons-vue';
+import SourceDetail from './SourceDetail.vue';
+
+export default defineComponent({
+  name: 'AccountModal',
+  components: {
+    BasicModal,
+    BasicForm,
+    BasicTree,
+    PlusOutlined,
+    SourceDetail,
+    VNodes: (_, { attrs }) => {
+      return attrs.vnodes;
+    },
+  },
+  emits: ['success', 'register'],
+  setup(_, { emit }) {
+    let activeKey = '1';
+    const refSourceDetail = ref(null);
+    let formData = ref(null)
+    let isUpdate = ref(true);
+    let isView = ref(false)
+    const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+      setModalProps({ confirmLoading: false });
+      isUpdate.value = !!data?.isUpdate;
+      isView.value = !!data?.isView;
+      if(isUpdate.value) formData.value = data.record
+    });
+    const getTitle = computed(() => (!unref(isUpdate) ? '新增地图资源' : '编辑地图资源'));
+
+    async function handleSubmit() {
+      refSourceDetail.value.submitForm();
+    }
+    const RtnMain = (status) => {
+      emit('success')
+    }
+
+    onMounted(() => {});
+    return {
+      activeKey,
+      registerModal,
+      handleSubmit,
+      getTitle,
+      refSourceDetail,
+      isUpdate,
+      isView,
+      formData,
+      RtnMain,
+    };
+  },
+});
+</script>
+  <style scoped lang="less">
+:deep(.vben-basic-tree) {
+  width: 100% !important;
+}
+
+:deep(.is-unflod) {
+  display: none !important;
+}
+
+:deep(.is-flod) {
+  display: none !important;
+}
+:deep(.res-form-container) {
+  .res-a-tabs {
+    margin-top: 61px !important;
+  }
+}
+</style>
+  

+ 633 - 0
src/views/dataAdmin/dataAdmin/mapUpload/SourceDetail.vue

@@ -0,0 +1,633 @@
+<!--
+ * @Author: tengmingxue 1473375109@qq.com
+ * @Date: 2023-08-15 22:08:21
+ * @LastEditors: tengmingxue 1473375109@qq.com
+ * @LastEditTime: 2023-08-21 11:47:31
+ * @FilePath: \xld-gis-admin\src\views\resource\map\SourceDetail.vue
+ * @Description: 地图资源明细界面
+-->
+<template>
+  <div class="source-detail">
+    <a-form ref="formRef" :model="formState" :rules="rules" style="width: 100%">
+      <div class="compontents">
+        <div class="title">基本信息</div>
+        <a-row class="form-container">
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="code" label="资源编码" name="code" class="label-form-item">
+              <a-input v-model:value="formState.code" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicename"
+              label="资源名称"
+              name="servicename"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.servicename" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicealiasname"
+              label="资源别名"
+              name="servicealiasname"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.servicealiasname" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="keywords" label="资源标签" name="keywords" class="label-form-item">
+              <a-select v-model:value="formState.keywords" mode="multiple" :disabled="isView">
+                <template v-for="tag in serviceTags" :key="tag.code">
+                  <a-select-option :value="tag.value">{{ tag.label }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="24" class="form-col">
+            <a-form-item
+              ref="description"
+              label="资源描述"
+              name="description"
+              class="label-form-item"
+              :disabled="isView"
+            >
+              <a-textarea v-model:value="formState.description" :rows="2" />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="24" class="form-col">
+            <a-form-item ref="thumbnail" label="缩略图" name="thumbnail" class="label-form-item">
+              <a-upload action="" v-model:file-list="fileList" :disabled="isView">
+                <a-button style="background-color: #0671dd; color: #fff; border-radius: 4px">
+                  <upload-outlined></upload-outlined>
+                  文件上传
+                </a-button>
+              </a-upload>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </div>
+
+      <div class="compontents">
+        <div class="title">描述信息</div>
+        <a-row class="form-container">
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="servicetype"
+              label="资源类型"
+              name="servicetype"
+              class="label-form-item"
+            >
+              <a-select v-model:value="formState.servicetype" :disabled="isView">
+                <template v-for="tag in serviceTypes" :key="tag.id">
+                  <a-select-option :value="tag.id">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="coordinate" label="坐标系" name="coordinate" class="label-form-item">
+              <a-select v-model:value="formState.coordinate" :disabled="isView">
+                <template v-for="tag in sysCoors" :key="tag.GEOMNAME">
+                  <a-select-option :value="tag.GEOMNAME">{{ tag.GEOMTITLE }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24" class="form-col">
+            <a-form-item ref="mapingurl" label="服务地址" name="mapingurl" class="label-form-item">
+              <a-input v-model:value="formState.mapingurl" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="dataScope" label="数据范围" name="dataScope" class="label-form-item">
+              <a-input v-model:value="formState.dataScope" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="数据来源" name="source" class="label-form-item">
+              <a-input v-model:value="formState.source" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="restype" label="密级" name="secrets" class="label-form-item">
+              <a-select v-model:value="formState.secrets" :disabled="isView">
+                <template v-for="tag in secrets" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="sourcetable"
+              label="数据表"
+              name="sourcetable"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.formdatabase" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="collect" label="保管单位" name="collect" class="label-form-item">
+              <a-select v-model:value="formState.collect" :disabled="isView">
+                <template v-for="tag in collectDept" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="respUnit" label="责任处室" name="respUnit" class="label-form-item">
+              <a-select v-model:value="formState.respUnit" :disabled="isView">
+                <template v-for="tag in respDept" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="发布日期" name="source" class="label-form-item">
+              <!-- <a-input v-model:value="formState.publishtime" disabled /> -->
+              <a-date-picker
+                v-model:value="formState.publishtime"
+                format="YYYY-MM-DD hh:mm:ss"
+                style="width: 100%"
+                disabled
+                show-time
+                :disabled="isView"
+              >
+                <template #renderExtraFooter>extra footer</template>
+              </a-date-picker>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="source" label="发布者" name="source" class="label-form-item">
+              <a-input v-model:value="formState.publisher" disabled :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="updatetype"
+              label="更新方式"
+              name="updatetype"
+              class="label-form-item"
+            >
+              <a-input v-model:value="formState.updateType" :disabled="isView"/>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="updatetime"
+              label="更新时间"
+              name="updatetime"
+              class="label-form-item"
+            >
+              <a-date-picker
+                v-model:value="formState.updatetime"
+                format="YYYY-MM-DD hh:mm:ss"
+                style="width: 100%"
+                disabled
+                show-time
+              >
+                <template #renderExtraFooter>extra footer</template>
+              </a-date-picker>
+            </a-form-item>
+          </a-col>
+          <a-col :span="12" class="form-col">
+            <a-form-item ref="epsgcode" label="EPSGCode" name="epsgcode" class="label-form-item">
+              <a-select v-model:value="formState.epsgcode" :disabled="isView">
+                <template v-for="tag in EPSGCodes" :key="tag.code">
+                  <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
+                </template>
+              </a-select>
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="12" class="form-col">
+            <a-form-item
+              ref="runtimestatus"
+              label="运行状态"
+              name="runtimestatus"
+              class="label-form-item"
+            >
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.runtimestatus"
+                :disabled="isView"
+              />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="public" label="是否公开" name="public" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.public"
+                :disabled="isView"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="share" label="是否共享" name="share" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.share"
+                :disabled="isView"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item
+              ref="externalApply"
+              label="是否外部申请"
+              name="externalApply"
+              class="label-form-item"
+            >
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.externalApply"
+                :disabled="isView"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="6" class="form-col">
+            <a-form-item ref="searched" label="是否展示" name="searched" class="label-form-item">
+              <a-switch
+                checked-children=""
+                un-checked-children=""
+                v-model:checked="formState.searched"
+                :disabled="isView"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </div>
+    </a-form>
+  </div>
+</template>
+<script lang="ts">
+import {
+  defineComponent,
+  ref,
+  toRefs,
+  toRaw,
+  unref,
+  computed,
+  unref,
+  nextTick,
+  reactive,
+  UnwrapRef,
+  onMounted,
+  watch,
+} from 'vue';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { UploadOutlined } from '@ant-design/icons-vue';
+import { ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
+import { useMessage } from '/@/hooks/web/useMessage';
+const { t } = useI18n(); //加载国际化
+// 加载菜单数据
+import { useI18n } from '/@/hooks/web/useI18n';
+import Moment from 'moment';
+import { insertService, updateService } from '/@/api/resource/map';
+import {
+  serviceTypes,
+  serviceTags,
+  secrets,
+  sysCoors,
+  respDept,
+  collectDept,
+  EPSGCodes,
+} from './map.data';
+import { session } from '/@/utils/Memory.js';
+const props = {
+  formData: { type: Object, default: ref(null) },
+  isUpdate: { type: Boolean, default: ref(false) },
+  isView: { type: Boolean, default: ref(false) },
+};
+interface FormState {
+  code: string;
+  servicename: string;
+  servicealiasname: string;
+  keywords: string[];
+  description: string;
+  servicetype: string;
+  coordinate: string;
+  mapingurl: string;
+  dataScope: string;
+  source: string;
+  secrets: string;
+  formdatabase: string;
+  collect: string;
+  respUnit: string;
+  publishtime: string;
+  publisher: string;
+  updateType: string;
+  updatetime: string;
+  epsgcode: string;
+  runtimestatus: boolean;
+  public: boolean;
+  share: boolean;
+  searched: boolean;
+  externalApply: boolean;
+  date1: undefined;
+}
+export default defineComponent({
+  name: 'SourceDetail',
+  components: { BasicForm, UploadOutlined },
+  props,
+  setup(props, { emit }) {
+    const data = reactive({
+      detail: props.formData,
+      isUpdate: props.isUpdate,
+      isView: props.isView,
+      fileList: [],
+      serviceTags: serviceTags,
+      secrets: secrets, //密级
+      sysCoors: sysCoors, //坐标系
+      serviceTypes: serviceTypes, //资源类型
+      respDept: respDept, //责任科室
+      collectDept: collectDept, //保管部门
+      EPSGCodes: EPSGCodes, //EPSGCode
+    });
+    const formRef = ref();
+    const formState: UnwrapRef<FormState> = reactive({
+      code: '',
+      servicename: '',
+      servicealiasname: '',
+      keywords: [],
+      description: '',
+      servicetype: '',
+      coordinate: '',
+      mapingurl: '',
+      dataScope: '',
+      source: '',
+      secrets: '',
+      formdatabase: '',
+      collect: '',
+      respUnit: '',
+      publishtime: '',
+      publisher: '',
+      updateType: '',
+      updatetime: '',
+      epsgcode: '',
+      runtimestatus: true,
+      public: true,
+      share: true,
+      searched: true,
+      externalApply: true,
+      date1: undefined,
+    });
+    const moment = Moment;
+    const rules = {
+      servicename: [
+        { required: true, message: '请填写资源名称', trigger: 'blur' },
+        { min: 3, max: 20, message: '长度必须在3到20个字符', trigger: 'blur' },
+      ],
+      servicealiasname: [
+        { required: true, message: '请输入资源别名', trigger: 'blur' },
+        { min: 3, max: 20, message: '长度必须在3到20个字符', trigger: 'blur' },
+      ],
+      systag: [{ required: true, message: '请选择系统标签', trigger: 'change' }],
+      servicetype: [{ required: true, message: '请选择资源类型', trigger: 'change' }],
+      coordinate: [{ required: true, message: '请选择坐标系', trigger: 'change' }],
+      mapingurl: [{ required: true, message: '请输入服务地址', trigger: 'blur' }],
+
+      date1: [{ required: true, message: 'Please pick a date', trigger: 'change', type: 'object' }],
+      type: [
+        {
+          type: 'array',
+          required: true,
+          message: 'Please select at least one activity type',
+          trigger: 'change',
+        },
+      ],
+      resource: [{ required: true, message: 'Please select activity resource', trigger: 'change' }],
+      desc: [{ required: true, message: 'Please input activity form', trigger: 'blur' }],
+    };
+    const { createMessage } = useMessage();
+    watch(
+      () => props.formData,
+      (obj) => {
+        data.detail = obj;
+        if (data.isUpdate) setFormData();
+      }
+    );
+    watch(
+      () => props.isUpdate,
+      (obj) => {
+        data.isUpdate = obj;
+      }
+    );
+    watch(
+      () => props.isView,
+      (obj) => {
+        data.isView = obj;
+      }
+    );
+
+    const submitForm = () => {
+      try {
+        formRef.value
+          .validate()
+          .then(async () => {
+            //console.log('values', formState, toRaw(formState));
+            const params = setSubmitForm();
+            if (params) {
+              if (data.isUpdate) {
+                params['serviceid'] = data.detail.serviceid;
+                const res = await updateService(params);
+                if (res && res?.status !== '-1') {
+                  createMessage.success('修改地图资源成功!');
+                  resetForm();
+                  emit('RtnMain', true);
+                } else createMessage.error('修改地图资源失败!,失败原因:' + res?.message, 1);
+              } else {
+                const res = await insertService(params);
+                if (res && res?.status !== '-1') {
+                  createMessage.success('新增地图资源成功!');
+                  resetForm();
+                  emit('RtnMain', true);
+                } else createMessage.error('新增地图资源失败!,失败原因:' + res?.message, 1);
+              }
+            }
+          })
+          .catch((error: ValidateErrorEntity<FormState>) => {
+            createMessage.error('请完成必填信息!', 1);
+            console.log('error', error);
+          });
+      } catch (ex) {
+        console.log(ex);
+      }
+    };
+    const resetForm = () => {
+      formRef.value.resetFields();
+    };
+
+    /**
+     * 设置提交数据
+     */
+    const setSubmitForm = () => {
+      const userinfo = session.getItem('userInfo');
+      const collect = collectDept.find((item) => item.code === formState.collect);
+      const rboffices = respDept.find((item) => item.code === formState.respUnit);
+      const secretlevels = secrets.find((item) => item.code === formState.secrets);
+      const coor = sysCoors.find((item) => item.GEOMNAME === formState.coordinate);
+      const EPSGCode = EPSGCodes.find((item) => item.code === formState.epsgcode);
+      return {
+        type: 'MR',
+        servicebase: {
+          publisher: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          username: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          userid: userinfo?.EMPLOYEE?.EMPLOYEE_ID, //'27AF004A-8BDN-885T-30FU-89DE3388762B',
+          servicealiasname: formState.servicealiasname, //资源别名
+          description: formState.description, //资源描述
+          ispublic: formState.public ? '1' : '0', //是否公开
+          searched: formState.searched ? '1' : '0', //是否展示
+          servicetype: formState.servicetype, //资源类型
+          externalApply: formState.externalApply ? '1' : '0', //外部申请
+          runtimestatus: formState.runtimestatus ? '1' : '0', //运行状态
+          servicename: formState.servicename, //资源名
+          mapingurl: formState.mapingurl, //服务地址
+          otherService: '',
+        },
+        metadata: {
+          mapingurl: formState.mapingurl, //服务地址
+          name: formState.servicename, //资源名
+          servicealiasname: formState.servicealiasname, //资源别名
+          thumbnail: '',
+          description: formState.description,
+          keywords: formState.keywords.toString(),
+          servicetype: formState.servicetype, //资源类型
+          dataScope: formState.dataScope, //数据范围
+          updateType: formState.updateType, //更新方式
+          source: formState.source, //数据来源
+          formdatabase: formState.formdatabase, //数据表
+          rboffice: rboffices ? rboffices.codeName : '', //责任单位
+          keepingunit: collect ? collect.codeName : '', //保管单位
+          secretlevel: secretlevels ? secretlevels.codeName : '',
+          crs: coor ? coor.GEOMNAME : '',
+          epsgCode: EPSGCode ? EPSGCode.codeName : '',
+          workSpace: '',
+          runtimestatus: formState.runtimestatus ? '1' : '0', //运行状态
+          ishistory: '0',
+          shsqlc: 'ggdata',
+          urlInfo: '',
+          otherService: '',
+          bz: '',
+          ispublic: formState.public ? '1' : '0', //是否公开
+          searched: formState.searched ? '1' : '0', //是否展示
+          externalApply: formState.externalApply ? '1' : '0', //外部申请
+          isShow: formState.share ? '1' : '0',
+          publisher: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          username: userinfo?.EMPLOYEE?.NAME, //'系统管理员',
+          userid: userinfo?.EMPLOYEE?.EMPLOYEE_ID, //'27AF004A-8BDN-885T-30FU-89DE3388762B',
+        },
+        sourcetraces: [],
+        dataVersionConf: {},
+      };
+    };
+    /**
+     * 设置表单数据
+     */
+    const setFormData = () => {
+      // console.log('表单数据请看', data.detail);
+      // console.log('服务类型', serviceTypes);
+      // console.log('服务标签', serviceTags);
+      // console.log('密级', secrets);
+      // console.log('坐标系', sysCoors);
+      // console.log('责任科室', respDept);
+      // console.log('保管部门', collectDept);
+      // console.log('EPSGCodes', EPSGCodes);
+      formState.public = data.detail.ispublic === '1' ? true : false;
+      formState.servicename = data.detail?.servicename;
+      formState.publishtime = data.detail?.publishdate
+        ? moment(data.detail?.publishdate).format('YYYY-MM-DD HH:mm:ss')
+        : '';
+      formState.publisher = data.detail?.publisher;
+      formState.runtimestatus = data.detail.runtimestatus === 0 ? false : true;
+      formState.servicealiasname = data.detail?.servicealiasname;
+      formState.code = data.detail?.serviceid;
+      formState.servicetype = data.detail?.servicetype;
+      formState.updatetime = data.detail?.updatedate
+        ? moment(data.detail?.updatedate).format('YYYY-MM-DD HH:mm:ss')
+        : '';
+      formState.servicetype = data.detail?.servicetype;
+      formState.coordinate = data.detail?.crs;
+      formState.searched = data.detail.searched === 0 ? false : true;
+    };
+
+    onMounted(() => {
+      resetForm();
+    });
+    return {
+      ...toRefs(data),
+      formRef,
+      moment,
+      rules,
+      formState,
+      submitForm,
+      resetForm,
+      createMessage,
+      setSubmitForm,
+      setFormData,
+    };
+  },
+});
+</script>
+  
+  <style scoped lang="less">
+.source-detail {
+  height: 100%;
+  width: 100%;
+  padding: 0 20px;
+  .compontents {
+    width: 100%;
+    height: auto;
+    .title {
+      height: 19px;
+      line-height: 18px;
+      padding-left: 6px;
+      margin-bottom: 20px;
+      border-left: 3px solid #0671dd;
+      font-family: Source Han Sans CN;
+      font-size: 16px;
+      font-weight: 350;
+      letter-spacing: 0px;
+    }
+    .form-container {
+      width: 100%;
+      height: auto;
+      .form-col {
+        height: 100%;
+      }
+      .form-col-left {
+        padding-right: 20px;
+      }
+    }
+  }
+}
+.label-form-item {
+  :deep(.ant-form-item-label) {
+    width: 90px;
+  }
+  :deep(.ant-form-item-control) {
+    width: calc(100% - 90px);
+  }
+}
+</style>
+  

+ 168 - 180
src/views/dataAdmin/dataAdmin/mapUpload/index.vue

@@ -1,18 +1,15 @@
-<!-- 地图资源上传 -->
 <template>
-  <div style="height: 100%; width: 100%; margin-top: 0; padding: 0;">
-    <!-- 使用搜索框和表格封装组件 -->
+  <div>
     <BasicTable
-    :rowSelection="{ type: 'checkbox' }" 
-    @register="registerTable"
-    :clickToRowSelect="false"
+      :rowSelection="{ type: 'checkbox' }"
+      @register="registerTable"
+      :clickToRowSelect="false"
     >
-    <!-- 表格右上角按钮 -->
-    <template #toolbar>
-        <Authority :value="authList.addAuth">
-          <a-button type="primary" @click="addMethod" >新增地图</a-button>
+      <template #toolbar>
+        <Authority>
+          <a-button type="primary" @click="handleCreate">新增地图</a-button>
         </Authority>
-        <Authority :value="authList.deleteAuth">
+        <Authority>
           <Popconfirm
             title="您确定要批量删除数据"
             ok-text="确定"
@@ -23,220 +20,211 @@
           </Popconfirm>
         </Authority>
       </template>
-      <!-- 表格操作栏 -->
+      <!-- <template #status="{ record }">
+        <Switch :checked="record.status === 1" :loading="record.pendingStatus" checkedChildren="启用" unCheckedChildren="禁用"
+          @change="(checked: boolean) => statusChange(checked, record)" />
+      </template> -->
       <template #action="{ record }">
         <TableAction
           :actions="[
-                        {
+            {
               label: '浏览',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',//图标
-              onClick: handleEdit.bind(null, record),
+              icon: '' /**clarity:note-edit-line*/,
+              onClick: handleViewMap.bind(null, record),
             },
             {
               label: '查看',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',
-              onClick: handleEdit.bind(null, record),
+              icon: '' /**clarity:note-edit-line*/,
+              onClick: handleView.bind(null, record),
             },
             {
               label: '编辑',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',
+              icon: '' /**clarity:note-edit-line*/,
+              color: 'warning',
               onClick: handleEdit.bind(null, record),
             },
             {
               label: '删除',
-              auth: 'api:yt:role:delete',
-              icon: 'ant-design:delete-outlined',
+              icon: '' /**ant-design:delete-outlined'*/,
               color: 'error',
-              ifShow: true,
+              ifShow: record.roleType != RoleEnum.SYS_ADMIN,
               popConfirm: {
                 title: '是否确认删除',
-                confirm: handleDeleteOrBatchDelete.bind(null, record),
+                confirm: handleDelete.bind(null, record),
               },
             },
           ]"
         />
       </template>
+      <template #pdate="{ record }">
+        <Tag
+          :color="'red'"
+        >
+          {{
+           record.publishdate ? moment(record.publishdate).format('YYYY-MM-DD HH:mm:ss') : ''
+          }}
+        </Tag>
+      </template>
+      <template #status="{ record }">
+        <Tag
+          :style="`color:${ record.status === 3 || record.status === 3 ? 'red' : '' };`"
+        >
+          {{
+           record.status === 0 ? '待审核' : (record.status === 1 ? '审核通过' : (record.status === 2 ? '审核不通过' : ( record.status === 3 ? '被驳回' : '未提交' )))
+          }}
+        </Tag>
+      </template>
     </BasicTable>
-    <!-- 新增和编辑 -->
-    <AddMethod @register="registerModal" @success="handleSuccess"></AddMethod>
+    <!-- <MapDrawer @register="registerDrawer" @success="handleSuccess" /> -->
+    <MapSourceModal @register="registerModal" @success="handleSuccess" />
   </div>
 </template>
-
-<script>
-import { defineComponent, nextTick } from 'vue';
-import { BasicTable, TableAction, useTable } from '/@/components/Table';
-import { Authority } from '/@/components/Authority';
+<script lang="ts">
+import { defineComponent, nextTick,onBeforeMount } from 'vue';
+import { BasicTable, useTable, TableAction } from '/@/components/Table';
+import { delRole, getRoleListByPage, setRoleStatus } from '/@/api/system/system';
+// import { useDrawer } from '/@/components/Drawer';
 import { useModal } from '/@/components/Modal';
-import { Popconfirm } from 'ant-design-vue';
-import { delMapResource  } from '../../api/mapuploadApi';
-import { getMapListByPage } from '/@/api/sys/gis';
-import { columns, searchFormSchema } from './mapUploadData';
-import { useDrawer } from '/@/components/Drawer';
+import MapDrawer from './MapDrawer.vue';
+import MapSourceModal from './MapSourceModal.vue';
+import { columns, searchFormSchema } from './map.data';
+import { RoleEnum } from '/@/enums/roleEnum';
+import { Authority } from '/@/components/Authority';
 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
-import AddMethod from './AddMethod.vue'; 
+import { useMessage } from '/@/hooks/web/useMessage';
+import { Switch, Popconfirm } from 'ant-design-vue';
+import { list,deleteService } from '/@/api/resource/map';
+import Moment from 'moment'
 
 export default defineComponent({
-  name: 'mapUpload',
-  components: { BasicTable, Authority, Popconfirm, TableAction, AddMethod },
+  name: 'RoleManagement',
+  components: { BasicTable, MapDrawer, MapSourceModal, TableAction, Authority, Switch, Popconfirm },
   setup() {
-    //按钮的权限控制标识
-    const bottomAuthority = "api:dataresource:mapupload:";
-    const authList = {
-      addAuth: bottomAuthority + "mapuploadAdd",//新增权限控制
-      deleteAuth: bottomAuthority + "maploadDelete",//删除权限控制
-      editAuth: bottomAuthority + "mapuploadEdit",//编辑权限控制
-    }
-    // 新增和编辑界面
-    // const [registerDrawer, { openDrawer }] = useDrawer();
-    const [registerModal, { openModal: openModal }] = useModal();
-    // 新增和编辑界面操作成功的回调函数
-    function handleSuccess() {
-      reload();
-    };
-
-    // function handleRequest(params){
-    //   console.log("&&&&&"+JSON.stringify(params));
-    //     const gisToken = sessionStorage.getItem('gisToken')
-    //     // let directoryFormData = new FormData()
-    //     // params = new FormData()
-    //     // params.append('interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider')
-    //     // params.append('methodName', 'getResourcePagedList')
-    //     // params.append('args[]', gisToken)
-    //     // params.append('args[]', {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11})
-    //     // params = new FormData()
-    //     return new Promise(async (res) => {
-    //        const tempData = await getMapListByPage(params);
-    //        console.log("***"+tempData)
-    //     })
-    //   }
-
-    // 配置下方表格
+    //const [registerDrawer, { openDrawer }] = useDrawer();
+    const [registerModal, { openModal }] = useModal();
     const [registerTable, { setProps, reload, setSelectedRowKeys }] = useTable({
-      // 表格题目
       title: '地图资源列表',
-      // 分页查询请求函数
-        api: getMapListByPage,
-        // 表头
-        columns,
-      // 查询条件框配置
+      api: list,
+      columns,
       formConfig: {
-        labelWidth: 120,
+        labelWidth: 100,
         schemas: searchFormSchema,
       },
-      // 请求之前进行请求参数处理
-      beforeFetch : (T) =>  {
-        delete T.page
-        delete T.pageSize
-        const gisToken = sessionStorage.getItem('gisToken')
-        // let directoryFormData = new FormData()
-        // directoryFormData.append('interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider')
-        // directoryFormData.append('methodName', 'getResourcePagedList')
-        // directoryFormData.append('args[]', gisToken)
-        // directoryFormData.append('args[]', {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11})
-        // T = directoryFormData
-        // debugger
-        // console.log("请求参数1"+JSON.stringify(directoryFormData))
-        // debugger
-        // T['directoryFormData'] = directoryFormData
-        // console.log("请求参数1"+JSON.stringify(T))
-        
-        let args = []
-        args.push(gisToken)
-        args.push('{"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11}')
-        T['interfaceName'] = 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider'
-        T['methodName'] = 'getResourcePagedList'
-        T['args'] = args
-
-        // T['args[]'] =' {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11}'
-        // {
-        //   interfaceName: 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider',
-        //   methodName: 'getResourcePagedList',
-        //   args
-        // }
-        // console.log("请求参数1"+JSON.stringify(T))
-
-      },
-      // 使用额外参数
-      searchInfo: { 
-        // interfaceName: 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider',
-        // methodName: 'getResourcePagedList'
-       },
       useSearchForm: true,
       showTableSetting: true,
       bordered: true,
-      // 表格控制序号显示
       showIndexColumn: true,
-      // 表格操作栏
-        actionColumn: {
-          width: 200,
-          title: '操作',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: 'right',
-        },
+      actionColumn: {
+        width: 200,
+        title: '操作',
+        dataIndex: 'action',
+        slots: { customRender: 'action' },
+        fixed: 'right',
+      },
+    });
+    const moment = Moment
+    const { createMessage } = useMessage();
+    const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } =
+      useBatchDelete(delRole, handleSuccess, setProps);
+    selectionOptions.rowSelection.getCheckboxProps = (record: Recordable) => {
+      // Demo:status为1的选择框禁用
+      if (record.status === 1) {
+        return { disabled: true };
+      } else {
+        return { disabled: false };
+      }
+    };
+    nextTick(() => {
+      setProps(selectionOptions);
+    });
+
+    function handleCreate() {
+      openModal(true, {
+        isUpdate: false,
+      });
+    }
+
+    function handleView(record: Recordable) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+        isView: true,
       });
+    }
 
-      // function fun(data) {
-      //   delete data.page
-      //   delete data.pageSize
-      //   const gisToken = sessionStorage.getItem('gisToken')
-      //   Reflect.set(data, 'interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider');
-      //   Reflect.set(data, 'methodName', 'getResourcePagedList');
-      //   Reflect.set(data, 'args[]', gisToken);
-      //   Reflect.set(data, 'args[]',  {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11});
-      //   console.log("11111111"+JSON.stringify(data));
-      //   // data.append('f',1)
-      //   // debugger
-      //   console.log("11111111"+JSON.stringify(data));
-      // }
+    function handleEdit(record: Recordable) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+      });
+    }
 
-      // 
-      const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } = useBatchDelete(delMapResource, handleSuccess, setProps);
-      // 
-      selectionOptions.rowSelection.getCheckboxProps = (record) => {
-        // Demo:status为1的选择框禁用
-        if (record.status === 1) {
-          return { disabled: true };
-        } else {
-          return { disabled: false };
+    function handleViewMap(record: Recordable){
+      window.open(`http://106.12.170.138:8080/onemapV5.0/mapview.html?${record.serviceid}`,'target',"")
+    }
+
+    const handleDelete = async(record: Recordable) => {
+      if(record?.serviceid){
+        const res = await deleteService(record?.serviceid)
+        if(res?.status !== '-1'){
+          reload();
+          createMessage.success('删除成功!',1)
+        }
+        else{
+          createMessage.error('删除失败!失败原因:'+res?.message,1)
         }
-      };
-      nextTick(() => {
-        setProps(selectionOptions);
+      }
+    }
+
+    function handleSuccess() {
+      openModal(false, {
+        isUpdate: false,
       });
-      // 新增
-      // function handleCreate() {
-      //   openDrawer(true, {
-      //     isUpdate: false,
-      //   });
-      // };
-      function addMethod(){
-        openModal(true, {
-          isUpdate: false,
-        });
-      };
-      // 编辑
-      function handleEdit(record) {
-        openDrawer(true, {
-          record,
-          isUpdate: true,
+      reload();
+    }
+
+    const statusChange = async (checked, record) => {
+      setProps({
+        loading: true,
+      });
+      setSelectedRowKeys([]);
+      resetSelectedRowKeys();
+      const newStatus = checked ? 1 : 0;
+      try {
+        await setRoleStatus(record.id, newStatus);
+        if (newStatus) {
+          createMessage.success(`启用成功`);
+        } else {
+          createMessage.success('禁用成功');
+        }
+      } finally {
+        setProps({
+          loading: false,
         });
-      };
+        reload();
+      }
+    };
+    onBeforeMount(async()=>{
 
-      return {
-        registerModal,
-        authList,
-        registerTable,
-        addMethod,
-        handleEdit,
-        handleSuccess,
-        hasBatchDelete,
-        handleDeleteOrBatchDelete,
-      };
+    })
 
+    return {
+      moment,
+      createMessage,
+      registerTable,
+      // registerDrawer,
+      registerModal,
+      handleCreate,
+      handleViewMap,
+      handleEdit,
+      handleView,
+      handleDelete,
+      handleSuccess,
+      RoleEnum,
+      hasBatchDelete,
+      handleDeleteOrBatchDelete,
+      statusChange,
+    };
   },
-})
-</script>
+});
+</script>

+ 184 - 0
src/views/dataAdmin/dataAdmin/mapUpload/map.data.ts

@@ -0,0 +1,184 @@
+import { BasicColumn } from '/@/components/Table';
+import { FormSchema } from '/@/components/Table';
+import { RoleEnum } from '/@/enums/roleEnum';
+import { getServiceTypes,queryServiceTags,queryDicsByName,queryCoors } from '/@/api/resource/map';
+
+const resTag = await queryServiceTags()
+let listTag = []
+resTag.map(item => {
+  listTag.push({
+    label: item.name,
+    value: item.code
+  })
+})
+/**
+ * 密级字典
+*/
+export const secrets = await queryDicsByName('密级')
+/**
+ * 服务标签
+*/
+export const serviceTags = listTag;
+/**
+ * 坐标系列表
+*/
+export const sysCoors = await queryCoors()
+/**
+ * 服务类型
+*/
+export const serviceTypes = await getServiceTypes()
+/**
+ * 责任处室
+*/
+export const respDept = await queryDicsByName('责任处室')
+/**
+ * 保管单位
+*/
+export const collectDept = await queryDicsByName('保管单位')
+/**
+ * EPSG code
+*/
+export const EPSGCodes = await queryDicsByName('EPSG code')
+
+
+const checkStatus = [
+  { label: '未提交', value: 1 },
+  { label: '审核中', value: 2 },
+  { label: '审核不通过', value: 3 },
+  { label: '被驳回', value: 4 },
+  { label: '审核通过', value: 5 },
+]
+export enum KeysTypeEnum {
+  DISABLED = 'disabled',
+  ENABLED = 'enabled',
+}
+
+export const RoleMenuDictEnum: Recordable<{ key: string; keyType: KeysTypeEnum }> = {
+  [RoleEnum.PLATFORM_ADMIN]: { key: 'enabled_platform_admin_auth', keyType: KeysTypeEnum.ENABLED },
+  [RoleEnum.SYS_ADMIN]: { key: 'enabled_sysadmin_auth', keyType: KeysTypeEnum.ENABLED },
+  [RoleEnum.TENANT_ADMIN]: { key: 'disabled_tenant_auth', keyType: KeysTypeEnum.DISABLED },
+  [RoleEnum.CUSTOMER_USER]: { key: 'disabled_tenant_auth', keyType: KeysTypeEnum.DISABLED },
+};
+
+/**
+ * 查询条件
+*/
+export const searchFormSchema: FormSchema[] = [
+  {
+    field: 'resTag',
+    label: '资源标签',
+    component: 'Select',
+    componentProps: {
+      options: serviceTags,
+      // [
+      //   { label: '标签1', value: 1 },
+      //   { label: '标签2', value: 2 },
+      //   { label: '标签3', value: 3 },
+      // ],
+    },
+    colProps: { span: 5 },
+  },
+  {
+    field: 'resName',
+    label: '资源名称',
+    component: 'Input',
+    colProps: { span: 5 },
+    componentProps: {
+      maxLength: 255,
+    },
+  },
+  {
+    field: 'checkStatus',
+    label: '审核状态',
+    component: 'Select',
+    componentProps: {
+      options: checkStatus,
+    },
+    colProps: { span: 5 },
+  },
+];
+
+/**
+ * 列表显示信息
+*/
+export const columns: BasicColumn[] = [
+  {
+    title: '资源编号',
+    dataIndex: 'serviceid',
+    width: 120,
+  },
+  {
+    title: '资源名称',
+    dataIndex: 'servicename',
+    width: 160,
+  },
+  {
+    title: '坐标系名称',
+    dataIndex: 'crs',
+    width: 120,
+  },
+  {
+    title: '资源标签',
+    dataIndex: 'service',
+    width: 120,
+  },
+  {
+    title: '发布人',
+    dataIndex: 'publisher',
+    width: 100,
+  },
+  {
+    title: '发布时间',
+    dataIndex: 'publishdate',
+    width: 180,
+    slots: { customRender: 'pdate' },
+  },
+  {
+    title: '当前环节',
+    dataIndex: 'curLink',
+    width: 90,
+  },
+  {
+    title: '当前处理人',
+    dataIndex: 'curHandler',
+    width: 100,
+  },
+  {
+    title: '审核状态',
+    dataIndex: 'status',
+    width: 110,
+    slots: { customRender: 'status' },
+  },
+  {
+    title: '审核时间',
+    dataIndex: 'checkTime',
+    width: 180,
+  },
+];
+
+
+
+/**
+ * 表单
+*/
+export const formSchema: FormSchema[] = [
+  {
+    field: 'groupName',
+    label: '角色名称',
+    required: true,
+    component: 'Input',
+    componentProps: {
+      maxLength: 255,
+      placeholder: '请输入角色名称',
+    },
+  },
+  {
+    label: '排序',
+    field: 'sort',
+    component: 'Input',
+    componentProps: {
+      maxLength: 255,
+      placeholder: '请输入排序',
+    },
+  }
+];

src/views/dataAdmin/dataAdmin/mapUpload/AddMethod.vue → src/views/dataAdmin/dataAdmin/mapUpload_b/AddMethod.vue


+ 242 - 0
src/views/dataAdmin/dataAdmin/mapUpload_b/index.vue

@@ -0,0 +1,242 @@
+<!-- 地图资源上传 -->
+<template>
+  <div style="height: 100%; width: 100%; margin-top: 0; padding: 0;">
+    <!-- 使用搜索框和表格封装组件 -->
+    <BasicTable
+    :rowSelection="{ type: 'checkbox' }" 
+    @register="registerTable"
+    :clickToRowSelect="false"
+    >
+    <!-- 表格右上角按钮 -->
+    <template #toolbar>
+        <Authority :value="authList.addAuth">
+          <a-button type="primary" @click="addMethod" >新增地图</a-button>
+        </Authority>
+        <Authority :value="authList.deleteAuth">
+          <Popconfirm
+            title="您确定要批量删除数据"
+            ok-text="确定"
+            cancel-text="取消"
+            @confirm="handleDeleteOrBatchDelete(null)"
+          >
+            <a-button type="primary" color="error" :disabled="hasBatchDelete"> 批量删除 </a-button>
+          </Popconfirm>
+        </Authority>
+      </template>
+      <!-- 表格操作栏 -->
+      <template #action="{ record }">
+        <TableAction
+          :actions="[
+                        {
+              label: '浏览',
+              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: 'clarity:note-edit-line',//图标
+              onClick: handleEdit.bind(null, record),
+            },
+            {
+              label: '查看',
+              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: 'clarity:note-edit-line',
+              onClick: handleEdit.bind(null, record),
+            },
+            {
+              label: '编辑',
+              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: 'clarity:note-edit-line',
+              onClick: handleEdit.bind(null, record),
+            },
+            {
+              label: '删除',
+              auth: 'api:yt:role:delete',
+              icon: 'ant-design:delete-outlined',
+              color: 'error',
+              ifShow: true,
+              popConfirm: {
+                title: '是否确认删除',
+                confirm: handleDeleteOrBatchDelete.bind(null, record),
+              },
+            },
+          ]"
+        />
+      </template>
+    </BasicTable>
+    <!-- 新增和编辑 -->
+    <AddMethod @register="registerModal" @success="handleSuccess"></AddMethod>
+  </div>
+</template>
+
+<script>
+import { defineComponent, nextTick } from 'vue';
+import { BasicTable, TableAction, useTable } from '/@/components/Table';
+import { Authority } from '/@/components/Authority';
+import { useModal } from '/@/components/Modal';
+import { Popconfirm } from 'ant-design-vue';
+import { delMapResource  } from '../../api/mapuploadApi';
+import { getMapListByPage } from '/@/api/sys/gis';
+import { columns, searchFormSchema } from './mapUploadData';
+import { useDrawer } from '/@/components/Drawer';
+import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
+import AddMethod from './AddMethod.vue'; 
+
+export default defineComponent({
+  name: 'mapUpload',
+  components: { BasicTable, Authority, Popconfirm, TableAction, AddMethod },
+  setup() {
+    //按钮的权限控制标识
+    const bottomAuthority = "api:dataresource:mapupload:";
+    const authList = {
+      addAuth: bottomAuthority + "mapuploadAdd",//新增权限控制
+      deleteAuth: bottomAuthority + "maploadDelete",//删除权限控制
+      editAuth: bottomAuthority + "mapuploadEdit",//编辑权限控制
+    }
+    // 新增和编辑界面
+    // const [registerDrawer, { openDrawer }] = useDrawer();
+    const [registerModal, { openModal: openModal }] = useModal();
+    // 新增和编辑界面操作成功的回调函数
+    function handleSuccess() {
+      reload();
+    };
+
+    // function handleRequest(params){
+    //   console.log("&&&&&"+JSON.stringify(params));
+    //     const gisToken = sessionStorage.getItem('gisToken')
+    //     // let directoryFormData = new FormData()
+    //     // params = new FormData()
+    //     // params.append('interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider')
+    //     // params.append('methodName', 'getResourcePagedList')
+    //     // params.append('args[]', gisToken)
+    //     // params.append('args[]', {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11})
+    //     // params = new FormData()
+    //     return new Promise(async (res) => {
+    //        const tempData = await getMapListByPage(params);
+    //        console.log("***"+tempData)
+    //     })
+    //   }
+
+    // 配置下方表格
+    const [registerTable, { setProps, reload, setSelectedRowKeys }] = useTable({
+      // 表格题目
+      title: '地图资源列表',
+      // 分页查询请求函数
+        api: getMapListByPage,
+        // 表头
+        columns,
+      // 查询条件框配置
+      formConfig: {
+        labelWidth: 120,
+        schemas: searchFormSchema,
+      },
+      // 请求之前进行请求参数处理
+      beforeFetch : (T) =>  {
+        delete T.page
+        delete T.pageSize
+        const gisToken = sessionStorage.getItem('gisToken')
+        // let directoryFormData = new FormData()
+        // directoryFormData.append('interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider')
+        // directoryFormData.append('methodName', 'getResourcePagedList')
+        // directoryFormData.append('args[]', gisToken)
+        // directoryFormData.append('args[]', {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11})
+        // T = directoryFormData
+        // debugger
+        // console.log("请求参数1"+JSON.stringify(directoryFormData))
+        // debugger
+        // T['directoryFormData'] = directoryFormData
+        // console.log("请求参数1"+JSON.stringify(T))
+        
+        let args = []
+        args.push(gisToken)
+        args.push('{"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11}')
+        T['interfaceName'] = 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider'
+        T['methodName'] = 'getResourcePagedList'
+        T['args'] = args
+
+        // T['args[]'] =' {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11}'
+        // {
+        //   interfaceName: 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider',
+        //   methodName: 'getResourcePagedList',
+        //   args
+        // }
+        // console.log("请求参数1"+JSON.stringify(T))
+
+      },
+      // 使用额外参数
+      searchInfo: { 
+        // interfaceName: 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider',
+        // methodName: 'getResourcePagedList'
+       },
+      useSearchForm: true,
+      showTableSetting: true,
+      bordered: true,
+      // 表格控制序号显示
+      showIndexColumn: true,
+      // 表格操作栏
+        actionColumn: {
+          width: 200,
+          title: '操作',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
+          fixed: 'right',
+        },
+      });
+
+      // function fun(data) {
+      //   delete data.page
+      //   delete data.pageSize
+      //   const gisToken = sessionStorage.getItem('gisToken')
+      //   Reflect.set(data, 'interfaceName', 'antu.space.provider.sservicebase.ServiceBaseMetaDataViewProvider');
+      //   Reflect.set(data, 'methodName', 'getResourcePagedList');
+      //   Reflect.set(data, 'args[]', gisToken);
+      //   Reflect.set(data, 'args[]',  {"type":"MR","fields":{"DATA":["serviceid","servicename","servicetype","servicealiasname"],"METADATA":["publisher ","publishdate"]},"pageIndex":1,"pageSize":11});
+      //   console.log("11111111"+JSON.stringify(data));
+      //   // data.append('f',1)
+      //   // debugger
+      //   console.log("11111111"+JSON.stringify(data));
+      // }
+
+      // 
+      const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } = useBatchDelete(delMapResource, handleSuccess, setProps);
+      // 
+      selectionOptions.rowSelection.getCheckboxProps = (record) => {
+        // Demo:status为1的选择框禁用
+        if (record.status === 1) {
+          return { disabled: true };
+        } else {
+          return { disabled: false };
+        }
+      };
+      nextTick(() => {
+        setProps(selectionOptions);
+      });
+      // 新增
+      // function handleCreate() {
+      //   openDrawer(true, {
+      //     isUpdate: false,
+      //   });
+      // };
+      function addMethod(){
+        openModal(true, {
+          isUpdate: false,
+        });
+      };
+      // 编辑
+      function handleEdit(record) {
+        openDrawer(true, {
+          record,
+          isUpdate: true,
+        });
+      };
+
+      return {
+        registerModal,
+        authList,
+        registerTable,
+        addMethod,
+        handleEdit,
+        handleSuccess,
+        hasBatchDelete,
+        handleDeleteOrBatchDelete,
+      };
+
+  },
+})
+</script>

src/views/dataAdmin/dataAdmin/mapUpload/mapUploadData.js → src/views/dataAdmin/dataAdmin/mapUpload_b/mapUploadData.js


+ 183 - 159
src/views/dataAdmin/dataAdmin/sceneResourceUpload/AddMethod.vue

@@ -8,28 +8,35 @@
     :useWrapper="true"
     :minHeight="500"
   >
-    <div style="height: 50vh;">
+    <div style="height: 50vh">
       <BasicForm @register="registerForm">
         <template #title>
           <div class="text-center text-black text-2xl">
             <!-- <a-typography-title style="font-size: 16px;">流域基础信息</a-typography-title> -->
             <a-menu v-model:selectedKeys="current" mode="horizontal">
-              <a-menu-item key="mail1">
-                基础信息
-              </a-menu-item>
-              <a-menu-item key="mail2">
-                版本信息
-              </a-menu-item>
+              <a-menu-item key="mail1"> 场景资源信息 </a-menu-item>
+              <a-menu-item key="mail2"> 流程信息 </a-menu-item>
             </a-menu>
           </div>
         </template>
+        <template #basicinfo>
+          <div class="basic-info-title">基础信息</div>
+        </template>
+
+        <template #descinfo>
+          <div class="basic-info-title">描述信息</div>
+        </template>
+
         <template #upload>
           <a-upload name="file" :multiple="true">
-           <a-button  type="primary">
-             <upload-outlined></upload-outlined>
-              选择文件
-           </a-button>
-           <span style="font-size: 14px; margin-left: 10px;">支持上传png、jpeg、gif、tif、doc、xls、pdf等格式文件</span>
+            <a-button type="primary">
+              <upload-outlined></upload-outlined>
+              文件上传
+            </a-button>
+            <span style="font-size: 14px; margin-left: 10px"
+              >支持上传png、jpeg、gif、tif等格式文件</span
+            >
+            <!-- 支持上传png、jpeg、gif、tif、doc、xls、pdf等格式文件 -->
           </a-upload>
         </template>
       </BasicForm>
@@ -37,165 +44,182 @@
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, computed, unref, reactive, onMounted } from 'vue';
-  import { BasicModal, useModalInner } from '/@/components/Modal';
-  import { BasicForm, useForm } from '/@/components/Form/index';
-  import { accountFormSchema } from './sceneUploadData';
-  import { filterRoleList } from '/@/api/system/system';
-  // import { addDzsbsjjr } from '/@/api/datamanager/groundDisasterId/muSourceData';
+import { defineComponent, ref, computed, unref, reactive, onMounted } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import { BasicForm, useForm } from '/@/components/Form/index';
+import { accountFormSchema } from './sceneUploadData';
+import { filterRoleList } from '/@/api/system/system';
+// import { addDzsbsjjr } from '/@/api/datamanager/groundDisasterId/muSourceData';
 
-  import { message, Upload, } from 'ant-design-vue';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  // import { FileItem } from '/@/components/Upload/src/typing';
-  import { TOption } from '/@/views/rule/linkedge/config/config.data';
-  import { PlusOutlined } from '@ant-design/icons-vue';
-  // import { upload } from '/@/api/oss/ossFileUploader';
-  import { addFileResource } from '../../api/fileUploadApi'
-  export default defineComponent({
-    name: 'AccountModal',
-    components: {
-      BasicModal,
-      BasicForm,
-      Upload,
-      PlusOutlined,
-    },
-    emits: ['success', 'register'],
-    setup(_, { emit }) {
-      const current = ref(['mail1']);
-      const tenantLogo = ref('');
-      const loading = ref(false);
-      const roleOptions = ref<TOption[]>([]);
-      const isUpdate = ref(true);
-      const rowId = ref('');
-      const postData = reactive({});
+import { message, Upload } from 'ant-design-vue';
+import { useMessage } from '/@/hooks/web/useMessage';
+// import { FileItem } from '/@/components/Upload/src/typing';
+import { TOption } from '/@/views/rule/linkedge/config/config.data';
+import { PlusOutlined } from '@ant-design/icons-vue';
+// import { upload } from '/@/api/oss/ossFileUploader';
+import { addFileResource } from '../../api/fileUploadApi';
+export default defineComponent({
+  name: 'AccountModal',
+  components: {
+    BasicModal,
+    BasicForm,
+    Upload,
+    PlusOutlined,
+  },
+  emits: ['success', 'register'],
+  setup(_, { emit }) {
+    const current = ref(['mail1']);
+    const tenantLogo = ref('');
+    const loading = ref(false);
+    const roleOptions = ref<TOption[]>([]);
+    const isUpdate = ref(true);
+    const rowId = ref('');
+    const postData = reactive({});
 
-      const getRoleList = async () => {
-        const res = await filterRoleList();
-        console.log(res);
-        roleOptions.value = res.map((m) => {
-          return {
-            label: m.name,
-            value: m.id,
-          };
-        });
-      };
-      onMounted(async () => {
-        await getRoleList();
+    const getRoleList = async () => {
+      const res = await filterRoleList();
+      console.log(res);
+      roleOptions.value = res.map((m) => {
+        return {
+          label: m.name,
+          value: m.id,
+        };
       });
+    };
+    onMounted(async () => {
+      await getRoleList();
+    });
 
-      const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
-        labelWidth: 100,
-        schemas: accountFormSchema,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 18,
-        },
-      });
+    const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
+      labelWidth: 100,
+      schemas: accountFormSchema,
+      showActionButtonGroup: false,
+      actionColOptions: {
+        span: 18,
+      },
+    });
 
-      const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
-        await resetFields();
-        setModalProps({ confirmLoading: false });
-        isUpdate.value = !!data?.isUpdate;
-        if (unref(isUpdate)) {
-          rowId.value = data.record.id;
-          setFieldsValue(data.record);
-        }
-      });
-      const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
+    const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
+      await resetFields();
+      setModalProps({ confirmLoading: false });
+      isUpdate.value = !!data?.isUpdate;
+      if (unref(isUpdate)) {
+        rowId.value = data.record.id;
+        setFieldsValue(data.record);
+      }
+    });
+    const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
 
-      async function handleSubmit() {
-        setModalProps({ confirmLoading: true });
-        try {
-          const { createMessage } = useMessage();
-          const values = await validate([
-            'parentId'
-          ]);
-          Object.assign(postData, values);
+    async function handleSubmit() {
+      setModalProps({ confirmLoading: true });
+      try {
+        const { createMessage } = useMessage();
+        const values = await validate(['parentId']);
+        Object.assign(postData, values);
 
-          console.log("准备传递的参数"+JSON.stringify(postData))
+        console.log('准备传递的参数' + JSON.stringify(postData));
 
-          await addFileResource(paramsToFormData(postData as any), unref(isUpdate));
-          closeModal();
-          emit('success');
-          createMessage.success(unref(isUpdate) ? '编辑成功' : '新增成功');
-        } finally {
-          setTimeout(() => {
-            setModalProps({ confirmLoading: false });
-          }, 300);
-        }
-      }
-      // async function customUpload({ file }) {
-      //   if (beforeUpload(file)) {
-      //     tenantLogo.value = '';
-      //     loading.value = true;
-      //     const formData = new FormData();
-      //     formData.append('file', file);
-      //     const response = await upload(formData);
-      //     if (response.fileStaticUri) {
-      //       tenantLogo.value = response.fileStaticUri;
-      //       loading.value = false;
-      //     }
-      //   }
-      // }
-      // const beforeUpload = (file: FileItem) => {
-      //   const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
-      //   if (!isJpgOrPng) {
-      //     message.error('只能上传图片文件!');
-      //   }
-      //   const isLt2M = (file.size as number) / 1024 / 1024 < 5;
-      //   if (!isLt2M) {
-      //     message.error('图片大小不能超过5MB!');
-      //   }
-      //   return isJpgOrPng && isLt2M;
-      // };
-      function preProcessData(data) {
-        Object.keys(data).forEach((item) => {
-          if (typeof data[item] === 'undefined' || data[item] === null || data[item] === '') {
-            delete data[item];
-          }
-        });
-        return data;
+        await addFileResource(paramsToFormData(postData as any), unref(isUpdate));
+        closeModal();
+        emit('success');
+        createMessage.success(unref(isUpdate) ? '编辑成功' : '新增成功');
+      } finally {
+        setTimeout(() => {
+          setModalProps({ confirmLoading: false });
+        }, 300);
       }
+    }
+    // async function customUpload({ file }) {
+    //   if (beforeUpload(file)) {
+    //     tenantLogo.value = '';
+    //     loading.value = true;
+    //     const formData = new FormData();
+    //     formData.append('file', file);
+    //     const response = await upload(formData);
+    //     if (response.fileStaticUri) {
+    //       tenantLogo.value = response.fileStaticUri;
+    //       loading.value = false;
+    //     }
+    //   }
+    // }
+    // const beforeUpload = (file: FileItem) => {
+    //   const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
+    //   if (!isJpgOrPng) {
+    //     message.error('只能上传图片文件!');
+    //   }
+    //   const isLt2M = (file.size as number) / 1024 / 1024 < 5;
+    //   if (!isLt2M) {
+    //     message.error('图片大小不能超过5MB!');
+    //   }
+    //   return isJpgOrPng && isLt2M;
+    // };
+    function preProcessData(data) {
+      Object.keys(data).forEach((item) => {
+        if (typeof data[item] === 'undefined' || data[item] === null || data[item] === '') {
+          delete data[item];
+        }
+      });
+      return data;
+    }
 
-      function paramsToFormData(obj) {
-        const data = preProcessData(obj);
-        const formData = new FormData();
-        Object.keys(data).forEach((key) => {
-          if (data[key] instanceof Array) {
-            data[key].forEach((item) => {
-              formData.append(key, item);
-            });
-            return;
-          }
-          formData.append(key, obj[key]);
-        });
-        return formData;
-      }
-      return {
-        current,
-        registerModal,
-        registerForm,
-        handleSubmit,
-        getTitle,
-        roleOptions,
-        // customUpload,
-        // beforeUpload,
-        tenantLogo,
-        loading,
-      };
-    },
-  });
+    function paramsToFormData(obj) {
+      const data = preProcessData(obj);
+      const formData = new FormData();
+      Object.keys(data).forEach((key) => {
+        if (data[key] instanceof Array) {
+          data[key].forEach((item) => {
+            formData.append(key, item);
+          });
+          return;
+        }
+        formData.append(key, obj[key]);
+      });
+      return formData;
+    }
+
+    function func(row, label) {
+      console.log(row, label);
+    }
+    return {
+      current,
+      registerModal,
+      registerForm,
+      handleSubmit,
+      getTitle,
+      roleOptions,
+      // customUpload,
+      // beforeUpload,
+      tenantLogo,
+      loading,
+      func,
+    };
+  },
+});
 </script>
 <style scoped lang="less">
-  :deep(.vben-basic-tree) {
-    width: 100% !important;
-  }
+:deep(.vben-basic-tree) {
+  width: 100% !important;
+}
 
-  :deep(.is-unflod) {
-    display: none !important;
-  }
+:deep(.is-unflod) {
+  display: none !important;
+}
 
-  :deep(.is-flod) {
-    display: none !important;
-  }
+:deep(.is-flod) {
+  display: none !important;
+}
+.basic-info-title {
+  height: 19px;
+  line-height: 18px;
+  padding-left: 6px;
+  margin-left: 20px;
+  border-left: 3px solid #0671dd;
+  font-family: Source Han Sans CN;
+  font-size: 16px;
+  font-weight: 350;
+  letter-spacing: 0px;
+}
+:deep(.ant-calendar-picker){
+  width: 100% !important;
+}
 </style>

+ 134 - 97
src/views/dataAdmin/dataAdmin/sceneResourceUpload/index.vue

@@ -1,18 +1,18 @@
 <!-- 场景资源上传 -->
 <template>
-  <div style="height: 100%; width: 100%; margin-top: 0; padding: 0;">
+  <div style="height: 100%; width: 100%; margin-top: 0; padding: 0">
     <!-- 使用搜索框和表格封装组件 -->
     <BasicTable
-    :rowSelection="{ type: 'checkbox' }" 
-    @register="registerTable"
-    :clickToRowSelect="false"
+      :rowSelection="{ type: 'checkbox' }"
+      @register="registerTable"
+      :clickToRowSelect="false"
     >
-    <!-- 表格右上角按钮 -->
-    <template #toolbar>
-        <Authority :value="authList.addAuth">
-          <a-button type="primary" @click="addMethod" >新增场景</a-button>
+      <!-- 表格右上角按钮 -->
+      <template #toolbar>
+        <Authority>
+          <a-button type="primary" @click="addMethod">新增场景</a-button>
         </Authority>
-        <Authority :value="authList.deleteAuth">
+        <Authority>
           <Popconfirm
             title="您确定要批量删除数据"
             ok-text="确定"
@@ -27,28 +27,28 @@
       <template #action="{ record }">
         <TableAction
           :actions="[
-                        {
+            {
               label: '浏览',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',//图标
-              onClick: handleEdit.bind(null, record),
+              // auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: '',//'clarity:note-edit-line', //图标
+              onClick: viewScene.bind(null, record),
             },
             {
               label: '查看',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',
+              //auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: '',//'clarity:note-edit-line',
               onClick: handleEdit.bind(null, record),
             },
             {
               label: '编辑',
-              auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
-              icon: 'clarity:note-edit-line',
+              //auth: 'api:yt:role:saveOrUpdateRoleInfoWithMenu:update',
+              icon: '',//'clarity:note-edit-line',
               onClick: handleEdit.bind(null, record),
             },
             {
               label: '删除',
-              auth: 'api:yt:role:delete',
-              icon: 'ant-design:delete-outlined',
+              //auth: 'api:yt:role:delete',
+              icon: '',//'ant-design:delete-outlined',
               color: 'error',
               ifShow: true,
               popConfirm: {
@@ -59,6 +59,31 @@
           ]"
         />
       </template>
+      <template #pdate="{ record }">
+        <Tag :color="'red'">
+          {{ record.publishdate ? moment(record.publishdate).format('YYYY-MM-DD HH:mm:ss') : '' }}
+        </Tag>
+      </template>
+      <template #edate="{ record }">
+        <Tag :color="'red'">
+          {{ record.edate ? moment(record.edate).format('YYYY-MM-DD HH:mm:ss') : '' }}
+        </Tag>
+      </template>
+      <template #status="{ record }">
+        <Tag :style="`color:${record.status === 2 || record.status === 3 ? 'red' : '#05B069'};`">
+          {{
+            record.status === 0
+              ? '待审核'
+              : record.status === 1
+              ? '审核通过'
+              : record.status === 2
+              ? '审核不通过'
+              : record.status === 3
+              ? '被驳回'
+              : '未提交'
+          }}
+        </Tag>
+      </template>
     </BasicTable>
     <!-- 新增和编辑 -->
     <!-- <RoleDrawer @register="registerDrawer" @success="handleSuccess" /> -->
@@ -72,103 +97,115 @@ import { BasicTable, TableAction, useTable } from '/@/components/Table';
 import { Authority } from '/@/components/Authority';
 import { useModal } from '/@/components/Modal';
 import { Popconfirm } from 'ant-design-vue';
-import { getSceneListByPage, delSceneResource  } from '../../api/sceneUploadApi';
+import { getSceneListByPage, delSceneResource } from '../../api/sceneUploadApi';
 import { columns, searchFormSchema } from './sceneUploadData';
 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
-import AddMethod from './AddMethod.vue'
+import AddMethod from './AddMethod.vue';
+import Moment from 'moment';
+import { list } from '/@/api/resource/scene';
 
 export default defineComponent({
   name: 'mapUpload',
   components: { BasicTable, Authority, Popconfirm, TableAction, AddMethod },
   setup() {
+    const moment = Moment;
     //按钮的权限控制标识
-    const bottomAuthority = "api:dataresource:sceneupload:";
+    const bottomAuthority = 'api:dataresource:sceneupload:';
     const authList = {
-      addAuth: bottomAuthority + "sceneuploadAdd",//新增权限控制
-      deleteAuth: bottomAuthority + "sceneuploadDelete",//删除权限控制
-      editAuth: bottomAuthority + "sceneuploadEdit",//编辑权限控制
-    }
+      addAuth: bottomAuthority + 'sceneuploadAdd', //新增权限控制
+      deleteAuth: bottomAuthority + 'sceneuploadDelete', //删除权限控制
+      editAuth: bottomAuthority + 'sceneuploadEdit', //编辑权限控制
+    };
     // 新增和编辑界面
     // const [registerDrawer, { openDrawer }] = useDrawer();
     const [registerModal, { openModal: openModal }] = useModal();
     // 新增和编辑界面操作函数
     function handleSuccess() {
-        reload();
-      };
+      reload();
+    }
     // 配置下方表格
     const [registerTable, { setProps, reload, setSelectedRowKeys }] = useTable({
       // 表格题目
-        title: '场景资源列表',
-        // 分页查询请求函数
-        api: getSceneListByPage,
-        // 表头
-        columns,
-        // 查询条件框配置
-        formConfig: {
-          labelWidth: 120,
-          schemas: searchFormSchema,
-        },
-        useSearchForm: true,
-        showTableSetting: true,
-        bordered: true,
-        // 表格控制序号显示
-        showIndexColumn: true,
-        // 表格操作栏
-        actionColumn: {
-          width: 200,
-          title: '操作',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          fixed: 'right',
-        },
+      title: '场景资源列表',
+      // 分页查询请求函数
+      api: list,
+      // 表头
+      columns,
+      // 查询条件框配置
+      formConfig: {
+        labelWidth: 120,
+        schemas: searchFormSchema,
+      },
+      useSearchForm: true,
+      showTableSetting: true,
+      bordered: true,
+      // 表格控制序号显示
+      showIndexColumn: true,
+      // 表格操作栏
+      actionColumn: {
+        width: 200,
+        title: '操作',
+        dataIndex: 'action',
+        slots: { customRender: 'action' },
+        fixed: 'right',
+      },
+    });
+    //
+    const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } =
+      useBatchDelete(delSceneResource, handleSuccess, setProps);
+    //
+    selectionOptions.rowSelection.getCheckboxProps = (record) => {
+      // Demo:status为1的选择框禁用
+      if (record.status === 1) {
+        return { disabled: true };
+      } else {
+        return { disabled: false };
+      }
+    };
+    //
+    nextTick(() => {
+      setProps(selectionOptions);
+    });
+    // 新增
+    function handleCreate() {
+      openModal(true, {
+        isUpdate: false,
       });
-      // 
-      const { hasBatchDelete, handleDeleteOrBatchDelete, selectionOptions, resetSelectedRowKeys } = useBatchDelete(delSceneResource, handleSuccess, setProps);
-      // 
-      selectionOptions.rowSelection.getCheckboxProps = (record) => {
-        // Demo:status为1的选择框禁用
-        if (record.status === 1) {
-          return { disabled: true };
-        } else {
-          return { disabled: false };
-        }
-      };
-      // 
-      nextTick(() => {
-        setProps(selectionOptions);
-      });
-      // 新增
-      // function handleCreate() {
-      //   // openDrawer(true, {
-      //   //   isUpdate: false,
-      //   // });
-      // };
-            // 新增
-            function addMethod(){
-        openModal(true, {
-          isUpdate: false,
-        });
-      };
-      // 编辑
-      function handleEdit(record) {
-        // openDrawer(true, {
-        //   record,
-        //   isUpdate: true,
-        // });
-      };
+    }
+    /**
+     * 浏览
+    */
+   function viewScene(record){
+    window.open(`http://106.12.170.138:8080/onemapV5.0/mapview.html?${record.serviceid}`,'target',"")
+   }
 
-      return {
-        registerModal,
-        authList,
-        registerTable,
-        // handleCreate,
-        addMethod,
-        handleEdit,
-        handleSuccess,
-        hasBatchDelete,
-        handleDeleteOrBatchDelete,
-      };
+    function addMethod() {
+      openModal(true, {
+        isUpdate: false,
+      });
+    }
+    // 编辑
+    function handleEdit(record) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+      });
+    }
+    
 
+    return {
+      moment,
+      registerModal,
+      authList,
+      registerTable,
+      // handleCreate,
+      addMethod,
+      viewScene,
+      handleEdit,
+      handleSuccess,
+      hasBatchDelete,
+      handleDeleteOrBatchDelete,
+    };
   },
-})
+});
 </script>

+ 361 - 250
src/views/dataAdmin/dataAdmin/sceneResourceUpload/sceneUploadData.js

@@ -1,85 +1,93 @@
 export const columns = [
-    {
-      title: '资源编号',
-      dataIndex: 'resourceNumber',
-      width: 200,
-    },
-    {
-        title: '资源名称',
-        dataIndex: 'resourceName',
-        width: 200,
-      },
-      {
-        title: '坐标系名称',
-        dataIndex: 'coordinateName',
-        width: 200,
-      },
-      {
-        title: '资源标签',
-        dataIndex: 'resourceTags',
-        width: 200,
-      },
-      {
-        title: '发布人',
-        dataIndex: 'publisher',
-        width: 200,
-      },
-      {
-        title: '发布时间',
-        dataIndex: 'publisherTime',
-        width: 200,
-      },
-      {
-        title: '审核状态',
-        dataIndex: 'auditStatus',
-        width: 200,
-      },
-      {
-        title: '审核人',
-        dataIndex: 'reviewer',
-        width: 200,
-      },
-      {
-        title: '审核时间',
-        dataIndex: 'reviewTime',
-        width: 200,
-      },
+  {
+    title: '资源编号',
+    dataIndex: 'serviceid',
+    width: 200,
+  },
+  {
+    title: '资源名称',
+    dataIndex: 'servicename',
+    width: 200,
+  },
+  {
+    title: '资源类型',
+    dataIndex: 'typename',
+    width: 200,
+  },
+  {
+    title: '资源标签',
+    dataIndex: 'servicetype',
+    width: 200,
+  },
+  {
+    title: '发布人',
+    dataIndex: 'publisher',
+    width: 200,
+  },
+  {
+    title: '发布时间',
+    dataIndex: 'publisherdate',
+    width: 200,
+    slots: { customRender: 'pdate' },
+  },
+  {
+    title: '当前环节',
+    dataIndex: 'currHj',
+    width: 200,
+  },
+  {
+    title: '当前处理人',
+    dataIndex: 'auditStatus',
+    width: 200,
+  },
+  {
+    title: '审核状态',
+    dataIndex: 'status',
+    width: 200,
+    slots: { customRender: 'status' },
+  },
+  {
+    title: '审核时间',
+    dataIndex: 'eximdata',
+    width: 200,
+    slots: { customRender: 'edate' },
+  },
 ];
 
 export const searchFormSchema = [
-    {
-        field: 'resourceTags',
-        label: '资源标签',
-        component: 'Select',
-        componentProps: {
-          options: [
-            { label: '无', value: 0 },
-          ],
-        },
-        colProps: { span: 6 },
-      },
-    {
-        field: 'resourceName',
-        label: '资源名称',
-        component: 'Input',
-        colProps: { span: 6 },
-        componentProps: {
-            maxLength: 255,
-        },
+  {
+    field: 'resourceTags',
+    label: '资源标签',
+    component: 'Select',
+    componentProps: {
+      options: [
+        { label: '无', value: 0 },
+      ],
     },
-    {
-        field: 'auditStatus',
-        label: '审核状态',
-        component: 'Select',
-        componentProps: {
-          options: [
-            { label: '审核不通过', value: 2 },
-            { label: '审核中', value: 1 },
-            { label: '审核通过', value: 0 },
-          ],
-        },
-        colProps: { span: 6 },
-      },
+    colProps: { span: 6 },
+  },
+  {
+    field: 'resourceName',
+    label: '资源名称',
+    component: 'Input',
+    colProps: { span: 6 },
+    componentProps: {
+      maxLength: 255,
+    },
+  },
+  {
+    field: 'auditStatus',
+    label: '审核状态',
+    component: 'Select',
+    componentProps: {
+      options: [
+        { label: '审核不通过', value: 2 },
+        { label: '审核中', value: 1 },
+        { label: '审核通过', value: 0 },
+      ],
+    },
+    colProps: { span: 6 },
+  },
 ]
 
 // 新增表单配置
@@ -90,6 +98,12 @@ export const accountFormSchema = [
     slot: 'title',
     component: 'Input',
   },
+  {
+    field: 'basicinfo',
+    label: '',
+    slot: 'basicinfo',
+    component: 'Input',
+  },
   {
     field: 'id',
     label: 'id',
@@ -100,8 +114,53 @@ export const accountFormSchema = [
     },
   },
   {
-    field: 'parentId',
-    label: '服务类型',
+    field: 'serviceCode',
+    label: '资源编码',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入资源编码',
+    },
+  },
+  {
+    field: 'serviceName',
+    label: '资源名称',
+    required: true,
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入资源名称',
+    },
+  },
+  {
+    field: 'serviceAliasName',
+    label: '资源别名',
+    required: true,
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入资源别名',
+    },
+  },
+  // {
+  //   field: 'parentId',
+  //   label: '服务类型',
+  //   required: true,
+  //   component: 'TreeSelect',
+  //   colProps: { span: 12 },
+  //   componentProps: {
+  //     replaceFields: {
+  //       title: 'name',
+  //       key: 'id',
+  //       value: 'id',
+  //     },
+  //     maxTagCount: 10,
+  //     getPopupContainer: () => document.body,
+  //   },
+  // },
+  {
+    field: 'sysTag',
+    label: '系统标签',
     required: true,
     component: 'TreeSelect',
     colProps: { span: 12 },
@@ -116,8 +175,34 @@ export const accountFormSchema = [
     },
   },
   {
-    field: 'parentId',
-    label: '系统标签',
+    field: 'servicedesc',
+    label: '资源描述',
+    component: 'InputTextArea',
+    colProps: { span: 24 },
+    componentProps: {
+      maxLength: 255,
+      placeholder: '请输入备注',
+    },
+  },
+
+  {
+    field: 'thumbnail',
+    label: '缩略图',
+    slot: 'upload',
+    component: 'Input',
+    // componentProps: {
+    //   maxLength: 255,
+    // },
+  },
+  {
+    field: 'descinfo',
+    label: '',
+    slot: 'descinfo',
+    component: 'Input',
+  },
+  {
+    field: 'serviceType',
+    label: '资源类型',
     required: true,
     component: 'TreeSelect',
     colProps: { span: 12 },
@@ -131,181 +216,207 @@ export const accountFormSchema = [
       getPopupContainer: () => document.body,
     },
   },
-{
-  field: 'lymc',
-  label: '数据版本',
-  component: 'Input',
-  colProps: { span: 12 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-{
-  field: 'lymc',
-  label: '运行状态',
-  component: 'Input',
-  colProps: { span: 12 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-{
-  field: 'lymc',
-  label: '资源描述',
-  component: 'Input',
-  colProps: { span: 24 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-{
-  field: 'parentId',
-  label: '责任处室',
-  required: true,
-  component: 'TreeSelect',
-  colProps: { span: 12 },
-  componentProps: {
-    replaceFields: {
-      title: 'name',
-      key: 'id',
-      value: 'id',
+  {
+    field: 'coors',
+    label: '坐标系',
+    required: true,
+    component: 'TreeSelect',
+    colProps: { span: 12 },
+    componentProps: {
+      replaceFields: {
+        title: 'name',
+        key: 'id',
+        value: 'id',
+      },
+      maxTagCount: 10,
+      getPopupContainer: () => document.body,
     },
-    maxTagCount: 10,
-    getPopupContainer: () => document.body,
-  },
-},
-{
-  field: 'lymc',
-  label: '保管单位',
-  component: 'TreeSelect',
-  colProps: { span: 12 },
-  componentProps: {
-    replaceFields: {
-      title: 'name',
-      key: 'id',
-      value: 'id',
+  },
+  {
+    field: 'serviceAddr',
+    label: '服务地址',
+    component: 'Input',
+    colProps: { span: 24 },
+    componentProps: {
+      placeholder: '请输入服务地址',
     },
-    maxTagCount: 10,
-    getPopupContainer: () => document.body,
-  },
-},  {
-  field: 'lymc',
-  label: '密级',
-  component: 'TreeSelect',
-  colProps: { span: 12 },
-  componentProps: {
-    replaceFields: {
-      title: 'name',
-      key: 'id',
-      value: 'id',
+  },
+  {
+    field: 'dataRange',
+    label: '数据范围',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入',
     },
-    maxTagCount: 10,
-    getPopupContainer: () => document.body,
-  },
-},  {
-  field: 'lymc',
-  label: '坐标系',
-  component: 'TreeSelect',
-  colProps: { span: 12 },
-  componentProps: {
-    replaceFields: {
-      title: 'name',
-      key: 'id',
-      value: 'id',
+  },
+  {
+    field: 'dataSource',
+    label: '数据来源',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入',
     },
-    maxTagCount: 10,
-    getPopupContainer: () => document.body,
-  },
-},
-{
-  field: 'lymc',
-  label: '数据范围',
-  component: 'Input',
-  colProps: { span: 12 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-{
-  field: 'lymc',
-  label: '数据来源',
-  component: 'Input',
-  colProps: { span: 12 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-{
-  field: 'lymc',
-  label: 'EPSC CODE',
-  component: 'Input',
-  colProps: { span: 24 },
-  componentProps: {
-    placeholder: '请输入',
-  },
-},
-
-{
-  field: 'sjms',
-  label: '备注:',
-  component: 'InputTextArea',
-  colProps: { span: 24 },
-  componentProps: {
-    maxLength: 255,
-    placeholder: '请输入备注',
-  },
-},
+  },
+  {
+    field: 'classification',
+    label: '密级',
+    component: 'TreeSelect',
+    colProps: { span: 12 },
+    componentProps: {
+      replaceFields: {
+        title: 'name',
+        key: 'id',
+        value: 'id',
+      },
+      maxTagCount: 10,
+      getPopupContainer: () => document.body,
+    },
+  },
+  {
+    field: 'lymc',
+    label: '数据表',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入数据表',
+    },
+  },
+  {
+    field: 'lymc',
+    label: '保管单位',
+    component: 'TreeSelect',
+    colProps: { span: 12 },
+    componentProps: {
+      replaceFields: {
+        title: 'name',
+        key: 'id',
+        value: 'id',
+      },
+      maxTagCount: 10,
+      getPopupContainer: () => document.body,
+    },
+  },
+  {
+    field: 'parentId',
+    label: '责任处室',
+    required: true,
+    component: 'TreeSelect',
+    colProps: { span: 12 },
+    componentProps: {
+      replaceFields: {
+        title: 'name',
+        key: 'id',
+        value: 'id',
+      },
+      maxTagCount: 10,
+      getPopupContainer: () => document.body,
+    },
+  },
+  {
+    field: 'publishdata',
+    label: '发布日期',
+    component: 'DatePicker',
+    colProps: { span: 12 },
+    dynamicDisabled:true,
+    componentProps: {
+      placeholder: '请输入',
+    },
+  },
 
-{
-  field: 'status',
-  label: "是否公开", //状态
-  component: 'RadioButtonGroup',
-  colProps: { span: 8 },
-  defaultValue: '0',
-  componentProps: {
-    options: [
-      { label: "是", value: '0' }, //启用
-      { label:"否", value: '1' }, //禁用
-    ],
-  },
-},
+  {
+    field: 'publisher',
+    label: '发布者',
+    component: 'Input',
+    colProps: { span: 12 },
+    dynamicDisabled:true,
+    componentProps: {
+      placeholder: '请输入',
+    },
+  },
+  {
+    field: 'updateWay',
+    label: '更新方式',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入更新方式',
+    },
+  },
+  {
+    field: 'publishdata',
+    label: '更新日期',
+    component: 'DatePicker',
+    colProps: { span: 12 },
+    dynamicDisabled:true,
+    componentProps: {
+      placeholder: '请输入更新日期',
+    },
+  },
+  
+  {
+    field: 'epsgcode',
+    label: 'EPSC CODE',
+    component: 'Input',
+    colProps: { span: 12 },
+    componentProps: {
+      placeholder: '请输入EPSC CODE',
+    },
+  },
+  {
+    field: 'runstatus',
+    label: "运行状态", //状态
+    component: 'RadioButtonGroup',
+    colProps: { span: 12 },
+    defaultValue: '0',
+    componentProps: {
+      options: [
+        { label: "是", value: '0' }, //启用
+        { label: "否", value: '1' }, //禁用
+      ],
+    },
+  },
 
-{
-  field: 'status',
-  label: "是否共享", //状态
-  component: 'RadioButtonGroup',
-  colProps: { span: 8 },
-  defaultValue: '0',
-  componentProps: {
-    options: [
-      { label: "是", value: '0' }, //启用
-      { label:"否", value: '1' }, //禁用
-    ],
-  },
-},
+  {
+    field: 'status',
+    label: "是否公开", //状态
+    component: 'RadioButtonGroup',
+    colProps: { span: 8 },
+    defaultValue: '0',
+    componentProps: {
+      options: [
+        { label: "是", value: '0' }, //启用
+        { label: "否", value: '1' }, //禁用
+      ],
+    },
+  },
 
-{
-  field: 'status',
-  label: "是否展开", //状态
-  component: 'RadioButtonGroup',
-  colProps: { span: 8 },
-  defaultValue: '0',
-  componentProps: {
-    options: [
-      { label: "是", value: '0' }, //启用
-      { label:"否", value: '1' }, //禁用
-    ],
-  },
-},
+  {
+    field: 'status',
+    label: "是否共享", //状态
+    component: 'RadioButtonGroup',
+    colProps: { span: 8 },
+    defaultValue: '0',
+    componentProps: {
+      options: [
+        { label: "是", value: '0' }, //启用
+        { label: "否", value: '1' }, //禁用
+      ],
+    },
+  },
 
-{
-  field: 'file',
-  label: '上传附件',
-  slot: 'upload',
-  required: true,
-  component: 'Input',
-  // componentProps: {
-  //   maxLength: 255,
-  // },
-},
+  {
+    field: 'status',
+    label: "是否展开", //状态
+    component: 'RadioButtonGroup',
+    colProps: { span: 8 },
+    defaultValue: '0',
+    componentProps: {
+      options: [
+        { label: "是", value: '0' }, //启用
+        { label: "否", value: '1' }, //禁用
+      ],
+    },
+  },
 ]

+ 8 - 7
src/views/resource/map/MapSourceModal.vue

@@ -2,7 +2,7 @@
  * @Author: tengmingxue 1473375109@qq.com
  * @Date: 2023-08-15 16:19:10
  * @LastEditors: tengmingxue 1473375109@qq.com
- * @LastEditTime: 2023-08-17 15:54:02
+ * @LastEditTime: 2023-08-21 13:38:48
  * @FilePath: \xld-gis-admin\src\views\resource\map\MapSourceModal.vue
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 -->
@@ -18,7 +18,7 @@
       <a-tabs v-model:activeKey="activeKey" class="res-a-tabs">
         <a-tab-pane key="1" tab="地图资源信息">
           <!-- <BasicForm @register="registerForm"></BasicForm> -->
-          <source-detail ref="refSourceDetail" @RtnMain="RtnMain" :formData="formData" :isUpdate="isUpdate"></source-detail>
+          <source-detail ref="refSourceDetail" @RtnMain="RtnMain" :formData="formData" :isUpdate="isUpdate" :isView="isView"></source-detail>
         </a-tab-pane>
         <a-tab-pane key="2" tab="流程信息" force-render>
           <div class="tab2"></div>
@@ -50,15 +50,15 @@ export default defineComponent({
   },
   emits: ['success', 'register'],
   setup(_, { emit }) {
-    const data = reactive({
-      activeKey: '2',
-    });
+    let activeKey = '1';
     const refSourceDetail = ref(null);
     let formData = ref(null)
-    const isUpdate = ref(true);
+    let isUpdate = ref(true);
+    let isView = ref(false)
     const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
       setModalProps({ confirmLoading: false });
       isUpdate.value = !!data?.isUpdate;
+      isView.value = !!data?.isView;
       if(isUpdate.value) formData.value = data.record
     });
     const getTitle = computed(() => (!unref(isUpdate) ? '新增地图资源' : '编辑地图资源'));
@@ -72,12 +72,13 @@ export default defineComponent({
 
     onMounted(() => {});
     return {
-      ...ref(data),
+      activeKey,
       registerModal,
       handleSubmit,
       getTitle,
       refSourceDetail,
       isUpdate,
+      isView,
       formData,
       RtnMain,
     };

+ 42 - 26
src/views/resource/map/SourceDetail.vue

@@ -2,7 +2,7 @@
  * @Author: tengmingxue 1473375109@qq.com
  * @Date: 2023-08-15 22:08:21
  * @LastEditors: tengmingxue 1473375109@qq.com
- * @LastEditTime: 2023-08-17 15:59:13
+ * @LastEditTime: 2023-08-21 11:47:31
  * @FilePath: \xld-gis-admin\src\views\resource\map\SourceDetail.vue
  * @Description: 地图资源明细界面
 -->
@@ -14,7 +14,7 @@
         <a-row class="form-container">
           <a-col :span="12" class="form-col">
             <a-form-item ref="code" label="资源编码" name="code" class="label-form-item">
-              <a-input v-model:value="formState.code" />
+              <a-input v-model:value="formState.code" :disabled="isView"/>
             </a-form-item>
           </a-col>
           <a-col :span="12" class="form-col">
@@ -24,7 +24,7 @@
               name="servicename"
               class="label-form-item"
             >
-              <a-input v-model:value="formState.servicename" />
+              <a-input v-model:value="formState.servicename" :disabled="isView"/>
             </a-form-item>
           </a-col>
 
@@ -35,13 +35,13 @@
               name="servicealiasname"
               class="label-form-item"
             >
-              <a-input v-model:value="formState.servicealiasname" />
+              <a-input v-model:value="formState.servicealiasname" :disabled="isView"/>
             </a-form-item>
           </a-col>
 
           <a-col :span="12" class="form-col">
             <a-form-item ref="keywords" label="资源标签" name="keywords" class="label-form-item">
-              <a-select v-model:value="formState.keywords" mode="multiple">
+              <a-select v-model:value="formState.keywords" mode="multiple" :disabled="isView">
                 <template v-for="tag in serviceTags" :key="tag.code">
                   <a-select-option :value="tag.value">{{ tag.label }}</a-select-option>
                 </template>
@@ -55,6 +55,7 @@
               label="资源描述"
               name="description"
               class="label-form-item"
+              :disabled="isView"
             >
               <a-textarea v-model:value="formState.description" :rows="2" />
             </a-form-item>
@@ -62,7 +63,7 @@
 
           <a-col :span="24" class="form-col">
             <a-form-item ref="thumbnail" label="缩略图" name="thumbnail" class="label-form-item">
-              <a-upload action="" v-model:file-list="fileList">
+              <a-upload action="" v-model:file-list="fileList" :disabled="isView">
                 <a-button style="background-color: #0671dd; color: #fff; border-radius: 4px">
                   <upload-outlined></upload-outlined>
                   文件上传
@@ -83,7 +84,7 @@
               name="servicetype"
               class="label-form-item"
             >
-              <a-select v-model:value="formState.servicetype">
+              <a-select v-model:value="formState.servicetype" :disabled="isView">
                 <template v-for="tag in serviceTypes" :key="tag.id">
                   <a-select-option :value="tag.id">{{ tag.name }}</a-select-option>
                 </template>
@@ -93,7 +94,7 @@
 
           <a-col :span="12" class="form-col">
             <a-form-item ref="coordinate" label="坐标系" name="coordinate" class="label-form-item">
-              <a-select v-model:value="formState.coordinate">
+              <a-select v-model:value="formState.coordinate" :disabled="isView">
                 <template v-for="tag in sysCoors" :key="tag.GEOMNAME">
                   <a-select-option :value="tag.GEOMNAME">{{ tag.GEOMTITLE }}</a-select-option>
                 </template>
@@ -102,23 +103,23 @@
           </a-col>
           <a-col :span="24" class="form-col">
             <a-form-item ref="mapingurl" label="服务地址" name="mapingurl" class="label-form-item">
-              <a-input v-model:value="formState.mapingurl" />
+              <a-input v-model:value="formState.mapingurl" :disabled="isView"/>
             </a-form-item>
           </a-col>
           <a-col :span="12" class="form-col">
             <a-form-item ref="dataScope" label="数据范围" name="dataScope" class="label-form-item">
-              <a-input v-model:value="formState.dataScope" />
+              <a-input v-model:value="formState.dataScope" :disabled="isView"/>
             </a-form-item>
           </a-col>
           <a-col :span="12" class="form-col">
             <a-form-item ref="source" label="数据来源" name="source" class="label-form-item">
-              <a-input v-model:value="formState.source" />
+              <a-input v-model:value="formState.source" :disabled="isView"/>
             </a-form-item>
           </a-col>
 
           <a-col :span="12" class="form-col">
             <a-form-item ref="restype" label="密级" name="secrets" class="label-form-item">
-              <a-select v-model:value="formState.secrets">
+              <a-select v-model:value="formState.secrets" :disabled="isView">
                 <template v-for="tag in secrets" :key="tag.code">
                   <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
                 </template>
@@ -132,13 +133,13 @@
               name="sourcetable"
               class="label-form-item"
             >
-              <a-input v-model:value="formState.formdatabase" />
+              <a-input v-model:value="formState.formdatabase" :disabled="isView"/>
             </a-form-item>
           </a-col>
 
           <a-col :span="12" class="form-col">
             <a-form-item ref="collect" label="保管单位" name="collect" class="label-form-item">
-              <a-select v-model:value="formState.collect">
+              <a-select v-model:value="formState.collect" :disabled="isView">
                 <template v-for="tag in collectDept" :key="tag.code">
                   <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
                 </template>
@@ -147,7 +148,7 @@
           </a-col>
           <a-col :span="12" class="form-col">
             <a-form-item ref="respUnit" label="责任处室" name="respUnit" class="label-form-item">
-              <a-select v-model:value="formState.respUnit">
+              <a-select v-model:value="formState.respUnit" :disabled="isView">
                 <template v-for="tag in respDept" :key="tag.code">
                   <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
                 </template>
@@ -163,6 +164,7 @@
                 style="width: 100%"
                 disabled
                 show-time
+                :disabled="isView"
               >
                 <template #renderExtraFooter>extra footer</template>
               </a-date-picker>
@@ -170,7 +172,7 @@
           </a-col>
           <a-col :span="12" class="form-col">
             <a-form-item ref="source" label="发布者" name="source" class="label-form-item">
-              <a-input v-model:value="formState.publisher" disabled />
+              <a-input v-model:value="formState.publisher" disabled :disabled="isView"/>
             </a-form-item>
           </a-col>
 
@@ -181,7 +183,7 @@
               name="updatetype"
               class="label-form-item"
             >
-              <a-input v-model:value="formState.updateType" />
+              <a-input v-model:value="formState.updateType" :disabled="isView"/>
             </a-form-item>
           </a-col>
           <a-col :span="12" class="form-col">
@@ -204,7 +206,7 @@
           </a-col>
           <a-col :span="12" class="form-col">
             <a-form-item ref="epsgcode" label="EPSGCode" name="epsgcode" class="label-form-item">
-              <a-select v-model:value="formState.epsgcode">
+              <a-select v-model:value="formState.epsgcode" :disabled="isView">
                 <template v-for="tag in EPSGCodes" :key="tag.code">
                   <a-select-option :value="tag.code">{{ tag.name }}</a-select-option>
                 </template>
@@ -223,6 +225,7 @@
                 checked-children=""
                 un-checked-children=""
                 v-model:checked="formState.runtimestatus"
+                :disabled="isView"
               />
             </a-form-item>
           </a-col>
@@ -233,6 +236,7 @@
                 checked-children=""
                 un-checked-children=""
                 v-model:checked="formState.public"
+                :disabled="isView"
               />
             </a-form-item>
           </a-col>
@@ -242,6 +246,7 @@
                 checked-children=""
                 un-checked-children=""
                 v-model:checked="formState.share"
+                :disabled="isView"
               />
             </a-form-item>
           </a-col>
@@ -256,6 +261,7 @@
                 checked-children=""
                 un-checked-children=""
                 v-model:checked="formState.externalApply"
+                :disabled="isView"
               />
             </a-form-item>
           </a-col>
@@ -265,6 +271,7 @@
                 checked-children=""
                 un-checked-children=""
                 v-model:checked="formState.searched"
+                :disabled="isView"
               />
             </a-form-item>
           </a-col>
@@ -310,6 +317,7 @@ import { session } from '/@/utils/Memory.js';
 const props = {
   formData: { type: Object, default: ref(null) },
   isUpdate: { type: Boolean, default: ref(false) },
+  isView: { type: Boolean, default: ref(false) },
 };
 interface FormState {
   code: string;
@@ -346,6 +354,7 @@ export default defineComponent({
     const data = reactive({
       detail: props.formData,
       isUpdate: props.isUpdate,
+      isView: props.isView,
       fileList: [],
       serviceTags: serviceTags,
       secrets: secrets, //密级
@@ -424,6 +433,13 @@ export default defineComponent({
         data.isUpdate = obj;
       }
     );
+    watch(
+      () => props.isView,
+      (obj) => {
+        data.isView = obj;
+      }
+    );
+
     const submitForm = () => {
       try {
         formRef.value
@@ -529,14 +545,14 @@ export default defineComponent({
      * 设置表单数据
      */
     const setFormData = () => {
-      console.log('表单数据请看', data.detail);
-      console.log('服务类型', serviceTypes);
-      console.log('服务标签', serviceTags);
-      console.log('密级', secrets);
-      console.log('坐标系', sysCoors);
-      console.log('责任科室', respDept);
-      console.log('保管部门', collectDept);
-      console.log('EPSGCodes', EPSGCodes);
+      // console.log('表单数据请看', data.detail);
+      // console.log('服务类型', serviceTypes);
+      // console.log('服务标签', serviceTags);
+      // console.log('密级', secrets);
+      // console.log('坐标系', sysCoors);
+      // console.log('责任科室', respDept);
+      // console.log('保管部门', collectDept);
+      // console.log('EPSGCodes', EPSGCodes);
       formState.public = data.detail.ispublic === '1' ? true : false;
       formState.servicename = data.detail?.servicename;
       formState.publishtime = data.detail?.publishdate

+ 16 - 9
src/views/resource/map/index.vue

@@ -30,12 +30,12 @@
             {
               label: '浏览',
               icon: '' /**clarity:note-edit-line*/,
-              onClick: handleEdit.bind(null, record),
+              onClick: handleViewMap.bind(null, record),
             },
             {
               label: '查看',
               icon: '' /**clarity:note-edit-line*/,
-              onClick: handleEdit.bind(null, record),
+              onClick: handleView.bind(null, record),
             },
             {
               label: '编辑',
@@ -139,25 +139,30 @@ export default defineComponent({
     });
 
     function handleCreate() {
-      // openDrawer(true, {
-      //   isUpdate: false,
-      // });
       openModal(true, {
         isUpdate: false,
       });
     }
 
+    function handleView(record: Recordable) {
+      openModal(true, {
+        record,
+        isUpdate: true,
+        isView: true,
+      });
+    }
+
     function handleEdit(record: Recordable) {
-      // openDrawer(true, {
-      //   record,
-      //   isUpdate: true,
-      // });
       openModal(true, {
         record,
         isUpdate: true,
       });
     }
 
+    function handleViewMap(record: Recordable){
+      window.open(`http://106.12.170.138:8080/onemapV5.0/mapview.html?${record.serviceid}`,'target',"")
+    }
+
     const handleDelete = async(record: Recordable) => {
       if(record?.serviceid){
         const res = await deleteService(record?.serviceid)
@@ -210,7 +215,9 @@ export default defineComponent({
       // registerDrawer,
       registerModal,
       handleCreate,
+      handleViewMap,
       handleEdit,
+      handleView,
       handleDelete,
       handleSuccess,
       RoleEnum,