2 Commits a6e83426b2 ... 22f8ffba99

Autore SHA1 Messaggio Data
  Hwf 22f8ffba99 Merge remote-tracking branch 'origin/dev' into dev 4 giorni fa
  Hwf 1936f807b5 图层配置4 4 giorni fa

BIN
src/assets/images/menu/icon1.png


BIN
src/assets/images/menu/icon2.png


BIN
src/assets/images/menu/icon3.png


BIN
src/assets/images/menu/icon4.png


BIN
src/assets/images/menu/icon5.png


+ 4 - 26
src/views/globalMap/LeftMenu.vue

@@ -89,11 +89,7 @@
           <div class="menu-content">
             <div v-for="(item, index) in menuData[menuState.activeIndex]?.children" :key="index" class="content-box">
               <div class="box-header">
-                <div v-if="item.name === '防风防汛'" class="icon1" style="width: 24px; height: 26px"></div>
-                <div v-if="item.name === '危化品安全监测' || item.name === '危险化工品'" class="icon2" style="width: 23px; height: 26px"></div>
-                <div v-if="item.name === '其他'" class="icon3" style="width: 26px; height: 26px"></div>
-                <div v-if="item.name === '水情监测'" class="icon4" style="width: 29px; height: 26px"></div>
-                <div v-if="item.name === '自然灾害监测'" class="icon5" style="width: 25px; height: 26px"></div>
+                <img v-if="item.meta && item.meta.icon" :src="baseUrl + downLoadApi + item.meta.icon" style="height: 26px" />
                 <div>{{ item.name }}</div>
                 <div :class="item.show ? 'expand-icon down-icon' : 'expand-icon up-icon'" @click="changeBoxShow(item)"></div>
               </div>
@@ -130,6 +126,9 @@ import useMapStore from '@/store/modules/map';
 const emits = defineEmits(['switchMap', 'clickMenu', 'selectSearchMarker', 'clearAllMenu']);
 const getMapUtils = inject('getMapUtils');
 const amapKey = 'e45d4caa2bef3c84714a2ed9b1e27d98';
+
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const downLoadApi = '/api/file/get_img/get_img_by_id/';
 let mapUtils;
 const mapStore = useMapStore();
 // 左侧菜单
@@ -524,27 +523,6 @@ defineExpose({ setMenuChange, setMenuIndex });
           height: 3px;
           background-color: rgba(142, 189, 241, 0.3);
         }
-        .icon1 {
-          background-image: url('@/assets/images/menu/icon1.png');
-          background-size: 100% 100%;
-        }
-
-        .icon2 {
-          background-image: url('@/assets/images/menu/icon2.png');
-          background-size: 100% 100%;
-        }
-        .icon3 {
-          background-image: url('@/assets/images/menu/icon3.png');
-          background-size: 100% 100%;
-        }
-        .icon4 {
-          background-image: url('@/assets/images/menu/icon4.png');
-          background-size: 100% 100%;
-        }
-        .icon5 {
-          background-image: url('@/assets/images/menu/icon5.png');
-          background-size: 100% 100%;
-        }
 
         .expand-icon {
           position: absolute;

+ 4 - 1
src/views/globalMap/index.vue

@@ -251,7 +251,10 @@ const clickMenu = (item, dataList) => {
       let checked = item.checked ? '1' : '2';
       // 打点信息
       addMarkers(item);
-      if (['易涝隐患点', '省政务无人机', '铁塔运行监测', '通讯保障', '救援队伍', '重点车辆', '河道监测', '水库监测'].includes(item.name) || item.isVideo) {
+      if (
+        ['易涝隐患点', '省政务无人机', '铁塔运行监测', '通讯保障', '救援队伍', '重点车辆', '河道监测', '水库监测'].includes(item.name) ||
+        item.isVideo
+      ) {
         rightMenuRef.value.updateMenu(checked, item);
       } else {
         let index = findChecked(dataList, item.name);

+ 107 - 206
src/views/globalMap/layerConfiguration.vue

@@ -12,16 +12,16 @@
                 </el-form-item>
               </el-col>
               <el-col :span="6">
-                <el-form-item label="专题:" prop="status">
-                  <el-select v-model="queryParams.topicName" placeholder="请选择" clearable>
-                    <el-option label="暂无数据" value="" />
+                <el-form-item label="专题:" prop="ZT">
+                  <el-select v-model="queryParams.ZT" placeholder="请选择" clearable>
+                    <el-option v-for="dict in topic_type" :key="dict.value" :label="dict.label" :value="dict.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
               <el-col :span="6">
                 <el-form-item label="状态:" prop="status">
                   <el-select v-model="queryParams.status" placeholder="状态" clearable>
-                    <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
+                    <el-option v-for="dict in listing_status" :key="dict.value" :label="dict.label" :value="dict.value" />
                   </el-select>
                 </el-form-item>
               </el-col>
@@ -43,7 +43,6 @@
         <el-col :span="1.5">
           <el-button type="danger" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
         </el-col>
-        <!--      <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>-->
       </el-row>
 
       <el-table
@@ -54,27 +53,19 @@
         :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
         :default-expand-all="isExpandAll"
       >
-        <!--        <el-table-column type="selection" width="55"> </el-table-column>-->
-        <el-table-column prop="menuName" align="center" label="菜单名称" :show-overflow-tooltip="true" width="160"> </el-table-column>
-        <!--        <el-table-column prop="menuType" align="center" label="菜单类型" :show-overflow-tooltip="true" width="160"></el-table-column>-->
-        <el-table-column prop="menuType" label="菜单类型" align="center" width="100">
+        <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true"> </el-table-column>
+        <el-table-column prop="menuType" label="菜单类型" align="center">
           <template #default="scope">
-            <dict-tag :options="menu_type" :value="scope.row.menuType" />
+            <dict-tag :options="menuTypeList" :value="scope.row.menuType" />
           </template>
         </el-table-column>
-        <el-table-column prop="orderNum" label="排序" width="60"></el-table-column>
-        <el-table-column prop="perms" label="权限标识" :show-overflow-tooltip="true"></el-table-column>
-        <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true"></el-table-column>
-        <el-table-column prop="status" label="状态" width="80">
-          <template #default="scope">
-            <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
-          </template>
-        </el-table-column>
-        <el-table-column label="创建时间" align="center" prop="createTime">
+
+        <el-table-column prop="status" label="上架状态" :show-overflow-tooltip="true">
           <template #default="scope">
-            <span>{{ scope.row.createTime }}</span>
+            <dict-tag :options="listing_status" :value="scope.row.status" />
           </template>
         </el-table-column>
+        <el-table-column prop="orderNum" label="排序"></el-table-column>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleUpdate(scope.row)">修改</el-text>
@@ -84,7 +75,7 @@
         </el-table-column>
       </el-table>
     </div>
-    <div v-show="dialog.visible" class="common-dialog">
+    <div v-if="dialog.visible" class="common-dialog">
       <div class="common-dialog-content">
         <div class="common-dialog-title-box">
           <i class="common-dialog-title-icon" />
@@ -93,7 +84,7 @@
         <div class="common-dialog-box">
           <el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px">
             <el-col :span="24">
-              <el-form-item style="width: 500px" label="上级菜单:">
+              <el-form-item style="width: 480px" label="上级菜单:" prop="parentId">
                 <el-tree-select
                   v-model="form.parentId"
                   :data="menuOptions"
@@ -105,30 +96,19 @@
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="菜单类型:" prop="menuType">
-                <el-radio-group v-model="form.menuType">
-                  <el-radio value="M">目录</el-radio>
-                  <el-radio value="C">菜单</el-radio>
-                  <el-radio value="F">按钮</el-radio>
-                </el-radio-group>
+              <el-form-item label="菜单类型:" prop="menuType" style="width: 480px">
+                <el-select v-model="form.menuType" placeholder="请选择">
+                  <el-option v-for="item in menuTypeList" :key="item.value" :label="item.label" :value="item.value" />
+                </el-select>
               </el-form-item>
             </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="24">
+            <el-col v-if="['Z'].includes(form.menuType)" :span="24">
               <el-form-item label="菜单图标:" prop="icon">
-                <!-- 图标选择器 -->
-                <icon-select v-model="form.icon" />
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="24">
-              <el-form-item label="菜单模板:" prop="template">
-                <!-- 模板选择器 -->
-                <el-select v-model="form.layer_template" placeholder="请选择模板">
-                  <el-option v-for="item in templateOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
+                <imageUpload v-model="form.icon" :limit="1" :file-size="10" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item style="width: 500px" label="菜单名称:" prop="menuName">
+              <el-form-item style="width: 480px" label="菜单名称:" prop="menuName">
                 <el-input v-model="form.menuName" placeholder="请输入菜单名称" />
               </el-form-item>
             </el-col>
@@ -137,134 +117,44 @@
                 <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
               </el-form-item>
             </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="12">
-              <el-form-item>
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择是外链则路由地址需要以`http(s)://`开头" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon> </el-tooltip
-                    >是否外链:
-                  </span>
-                </template>
-                <el-radio-group v-model="form.isFrame">
-                  <el-radio label="0">是</el-radio>
-                  <el-radio label="1">否</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="12">
-              <el-form-item prop="path" style="width: 500px">
-                <template #label>
-                  <span>
-                    <el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    路由地址:
-                  </span>
-                </template>
-                <el-input v-model="form.path" placeholder="请输入路由地址" />
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType === 'C'" :span="12">
-              <el-form-item prop="component">
-                <template #label>
-                  <span>
-                    <el-tooltip content="访问的组件路径,如:`system/user/index`,默认在`views`目录下" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    组件路径:
-                  </span>
-                </template>
-                <el-input v-model="form.component" placeholder="请输入组件路径" />
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType !== 'M'" :span="12">
-              <el-form-item>
-                <el-input v-model="form.perms" placeholder="请输入权限标识" maxlength="100" />
-                <template #label>
-                  <span>
-                    <el-tooltip content="控制器中定义的权限字符,如:@SaCheckPermission('system:user:list')" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    权限字符:
-                  </span>
-                </template>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType === 'C'" :span="12">
-              <el-form-item>
-                <el-input v-model="form.queryParam" placeholder="请输入路由参数" maxlength="255" />
+            <el-col v-if="['T'].includes(form.menuType)" :span="12">
+              <el-form-item prop="path" style="width: 480px">
                 <template #label>
                   <span>
-                    <el-tooltip content='访问路由的默认传递参数,如:`{"id": 1, "name": "ry"}`' placement="top">
+                    <el-tooltip content="选择新增内容的展示类型,是在地图内定位打点或者是地图侧边的弹出框" placement="top">
                       <el-icon>
                         <question-filled />
                       </el-icon>
                     </el-tooltip>
-                    路由参数
+                    模板:
                   </span>
                 </template>
+                <el-select v-model="form.path" placeholder="请选择模板">
+                  <el-option v-for="item in layer_configuration_template" :key="item.value" :label="item.label" :value="item.value"> </el-option>
+                </el-select>
               </el-form-item>
             </el-col>
-            <el-col v-if="form.menuType === 'C'" :span="12">
-              <el-form-item>
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择是则会被`keep-alive`缓存,需要匹配组件的`name`和地址保持一致" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    是否缓存:
-                  </span>
-                </template>
-                <el-radio-group v-model="form.isCache">
-                  <el-radio label="0">缓存</el-radio>
-                  <el-radio label="1">不缓存</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="12">
-              <el-form-item>
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择隐藏则路由将不会出现在侧边栏,但仍然可以访问" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    显示状态:
-                  </span>
-                </template>
-                <el-radio-group v-model="form.visible">
-                  <el-radio v-for="dict in sys_show_hide" :key="dict.value" :label="dict.value">{{ dict.label }} </el-radio>
-                </el-radio-group>
+            <el-col v-if="['T'].includes(form.menuType)" :span="12">
+              <el-form-item style="width: 480px" label="数据类型:" prop="component">
+                <el-select v-model="form.component" placeholder="请选择数据类型" clearable filterable>
+                  <el-option v-for="item in point_type" :key="item.value" :label="item.label" :value="item.value"> </el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item>
+              <el-form-item style="width: 480px">
                 <template #label>
                   <span>
-                    <el-tooltip content="选择停用则路由将不会出现在侧边栏,也不能被访问" placement="top">
+                    <el-tooltip content="选择已下架则不在地图中展示" placement="top">
                       <el-icon>
                         <question-filled />
                       </el-icon>
                     </el-tooltip>
-                    菜单状态:
+                    上架状态:
                   </span>
                 </template>
                 <el-radio-group v-model="form.status">
-                  <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">
-                    {{ dict.label }}
-                  </el-radio>
+                  <el-radio v-for="dict in listing_status" :key="dict.value" :label="dict.value">{{ dict.label }} </el-radio>
                 </el-radio-group>
               </el-form-item>
             </el-col>
@@ -279,21 +169,9 @@
   </div>
 </template>
 
-<script setup name="Menu" lang="ts">
-import {
-  addMenu,
-  addLayerMenu,
-  delMenu,
-  delLayerMenu,
-  getMenu,
-  getLayerMenu,
-  listMenu,
-  LayerlistMenu,
-  updateMenu,
-  updateLayerMenu
-} from '@/api/globalMap/layerConfig';
-import { MenuForm, MenuQuery, MenuVO } from '@/api/globalMap/layerConfig/types';
-import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
+<script setup name="LayerConfiguration" lang="ts">
+import { addLayerMenu, delLayerMenu, getLayerMenu, LayerlistMenu, updateLayerMenu, getLayerMenuType } from '@/api/globalMap/layerConfig';
+import { MenuVO } from '@/api/globalMap/layerConfig/types';
 
 interface MenuOptionsType {
   menuId: number;
@@ -301,21 +179,13 @@ interface MenuOptionsType {
   children: MenuOptionsType[] | undefined;
 }
 
-import { ref, onMounted } from 'vue';
-import { ElMessage } from 'element-plus';
-import { addInformation, getTemplateList } from '@/api/informationissue/informationissue';
-
-const templateOptions = ref([
-  { value: 'template1', label: '图层分析一' },
-  { value: 'template2', label: '图层分析二' },
-  { value: 'template3', label: '图层分析三' }
-  // 更多模板选项...
-]);
-
+// 菜单类型
+const menuTypeList = ref([]);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-const { sys_show_hide, sys_normal_disable, topic_name, menu_type } = toRefs<any>(
-  proxy?.useDict('sys_show_hide', 'sys_normal_disable', 'topic_name', 'menu_type')
+const { listing_status, topic_type, layer_configuration_template, point_type } = toRefs<any>(
+  proxy?.useDict('listing_status', 'topic_type', 'layer_configuration_template', 'point_type')
 );
+
 const menuList = ref<MenuVO[]>([]);
 const loading = ref(true);
 const showSearch = ref(true);
@@ -329,44 +199,47 @@ const dialog = reactive<DialogOption>({
 
 const queryFormRef = ref<ElFormInstance>();
 const menuFormRef = ref<ElFormInstance>();
-const initFormData = {
+
+const menuTableRef = ref<ElTableInstance>();
+const queryParams = reactive({
+  menuName: undefined,
+  status: undefined,
+  ZT: undefined
+});
+const form = ref({
   path: '',
   menuId: undefined,
   parentId: 0,
   menuName: '',
   icon: '',
-  menuType: MenuTypeEnum.M,
+  menuType: 'D',
   orderNum: 1,
-  isFrame: '1',
-  isCache: '0',
-  visible: '0',
-  status: '0'
-};
-const data = reactive<PageData<MenuForm, MenuQuery>>({
-  form: { ...initFormData },
-  queryParams: {
-    menuName: undefined,
-    status: undefined
-  },
-  rules: {
+  status: '0',
+  component: ''
+});
+const rules = computed(() => {
+  const newRules = {
+    parentId: [{ required: true, message: '请选择上级菜单', trigger: 'change' }],
+    menuType: [{ required: true, message: '请选择菜单类型', trigger: 'change' }],
     menuName: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
     orderNum: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }],
-    path: [{ required: true, message: '路由地址不能为空', trigger: 'blur' }]
-  }
+    status: [{ required: true, message: '请选择上架状态', trigger: 'change' }]
+  };
+  return newRules;
 });
-
-const menuTableRef = ref<ElTableInstance>();
-
-const { queryParams, form, rules } = toRefs<PageData<MenuForm, MenuQuery>>(data);
 /** 查询菜单列表 */
-const getList = async () => {
+const getList = () => {
   loading.value = true;
-  const res = await LayerlistMenu(queryParams.value);
-  const data = proxy?.handleTree<MenuVO>(res.data, 'menuId');
-  if (data) {
-    menuList.value = data;
-  }
-  loading.value = false;
+  LayerlistMenu(queryParams)
+    .then((res) => {
+      const data = proxy?.handleTree<MenuVO>(res.data, 'menuId');
+      if (data) {
+        menuList.value = data;
+      }
+    })
+    .finally(() => {
+      loading.value = false;
+    });
 };
 /** 查询菜单下拉树结构 */
 const getTreeselect = async () => {
@@ -383,7 +256,17 @@ const cancel = () => {
 };
 /** 表单重置 */
 const reset = () => {
-  form.value = { ...initFormData };
+  form.value = {
+    path: '',
+    menuId: undefined,
+    parentId: 0,
+    menuName: '',
+    icon: '',
+    menuType: 'D',
+    orderNum: 1,
+    status: '0',
+    component: ''
+  };
   menuFormRef.value?.resetFields();
 };
 
@@ -401,6 +284,15 @@ const handleAdd = (row?: MenuVO) => {
   reset();
   getTreeselect();
   row && row.menuId ? (form.value.parentId = row.menuId) : (form.value.parentId = 0);
+  if (row) {
+    if (!row.menuType) {
+      form.value.menuType = 'D';
+    } else if (row.menuType === 'D') {
+      form.value.menuType = 'Z';
+    } else if (row.menuType === 'Z') {
+      form.value.menuType = 'T';
+    }
+  }
   dialog.visible = true;
   dialog.title = '添加菜单';
   // fullscreen: false;
@@ -425,8 +317,8 @@ const handleUpdate = async (row: MenuVO) => {
     const { data } = await getLayerMenu(row.menuId);
     form.value = data;
   }
-  dialog.visible = true;
   dialog.title = '修改菜单';
+  dialog.visible = true;
 };
 /** 提交按钮 */
 const submitForm = () => {
@@ -434,8 +326,8 @@ const submitForm = () => {
     if (valid) {
       form.value.menuId ? await updateLayerMenu(form.value) : await addLayerMenu(form.value);
       proxy?.$modal.msgSuccess('操作成功');
-      dialog.visible = false;
-      await getList();
+      cancel();
+      getList();
     }
   });
 };
@@ -446,8 +338,17 @@ const handleDelete = async (row: MenuVO) => {
   await getList();
   proxy?.$modal.msgSuccess('删除成功');
 };
-
+const getTypeList = () => {
+  getLayerMenuType().then((res) => {
+    res.data.forEach((item) => {
+      item.label = item.dictLabel;
+      item.value = item.dictValue;
+    });
+    menuTypeList.value = res.data;
+  });
+};
 onMounted(() => {
   getList();
+  getTypeList();
 });
 </script>

+ 0 - 354
src/views/globalMap/layerConfigurationTest.vue

@@ -1,354 +0,0 @@
-<template>
-  <div class="app-container">
-    <div v-show="!dialog.visible">
-      <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
-        <div v-show="showSearch">
-          <el-form ref="queryFormRef" :model="queryParams">
-            <el-row :gutter="20">
-              <!-- 第一行 -->
-              <el-col :span="6">
-                <el-form-item label="图层名称:" prop="menuName">
-                  <el-input v-model="queryParams.menuName" placeholder="请输入图层名称" clearable @keyup.enter="handleQuery" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item label="专题:" prop="ZT">
-                  <el-select v-model="queryParams.ZT" placeholder="请选择" clearable>
-                    <el-option v-for="dict in topic_type" :key="dict.value" :label="dict.label" :value="dict.value" />
-                  </el-select>
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item label="状态:" prop="status">
-                  <el-select v-model="queryParams.status" placeholder="状态" clearable>
-                    <el-option v-for="dict in listing_status" :key="dict.value" :label="dict.label" :value="dict.value" />
-                  </el-select>
-                </el-form-item>
-              </el-col>
-              <el-col :span="6">
-                <el-form-item>
-                  <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-                  <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-                </el-form-item>
-              </el-col>
-            </el-row>
-          </el-form>
-        </div>
-      </transition>
-
-      <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
-          <el-button v-hasPermi="['system:menu:add']" icon="Plus" type="primary" @click="handleAdd()">新增 </el-button>
-        </el-col>
-        <el-col :span="1.5">
-          <el-button type="danger" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
-        </el-col>
-      </el-row>
-
-      <el-table
-        ref="menuTableRef"
-        v-loading="loading"
-        :data="menuList"
-        row-key="menuId"
-        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
-        :default-expand-all="isExpandAll"
-      >
-        <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true"> </el-table-column>
-        <el-table-column prop="menuType" label="菜单类型" align="center">
-          <template #default="scope">
-            <dict-tag :options="menuTypeList" :value="scope.row.menuType" />
-          </template>
-        </el-table-column>
-
-        <el-table-column prop="status" label="上架状态" :show-overflow-tooltip="true">
-          <template #default="scope">
-            <dict-tag :options="listing_status" :value="scope.row.status" />
-          </template>
-        </el-table-column>
-        <el-table-column prop="orderNum" label="排序"></el-table-column>
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template #default="scope">
-            <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleUpdate(scope.row)">修改</el-text>
-            <el-text v-hasPermi="['system:menu:add']" class="common-btn-text-primary" @click="handleAdd(scope.row)">新增</el-text>
-            <el-text v-hasPermi="['system:menu:remove']" class="common-btn-text-danger" @click="handleDelete(scope.row)">删除</el-text>
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-    <div v-if="dialog.visible" class="common-dialog">
-      <div class="common-dialog-content">
-        <div class="common-dialog-title-box">
-          <i class="common-dialog-title-icon" />
-          <div>{{ dialog.title }}</div>
-        </div>
-        <div class="common-dialog-box">
-          <el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px">
-            <el-col :span="24">
-              <el-form-item style="width: 480px" label="上级菜单:" prop="parentId">
-                <el-tree-select
-                  v-model="form.parentId"
-                  :data="menuOptions"
-                  :props="{ value: 'menuId', label: 'menuName', children: 'children' }"
-                  value-key="menuId"
-                  placeholder="选择上级菜单"
-                  check-strictly
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="菜单类型:" prop="menuType" style="width: 480px">
-                <el-select v-model="form.menuType" placeholder="请选择">
-                  <el-option v-for="item in menuTypeList" :key="item.value" :label="item.label" :value="item.value" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="['Z'].includes(form.menuType)" :span="24">
-              <el-form-item label="菜单图标:" prop="icon">
-                <imageUpload v-model="form.icon" :limit="1" :file-size="10" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item style="width: 480px" label="菜单名称:" prop="menuName">
-                <el-input v-model="form.menuName" placeholder="请输入菜单名称" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="显示排序:" prop="orderNum">
-                <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
-              </el-form-item>
-            </el-col>
-            <el-col v-if="['T'].includes(form.menuType)" :span="12">
-              <el-form-item prop="path" style="width: 480px">
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择新增内容的展示类型,是在地图内定位打点或者是地图侧边的弹出框" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    模板:
-                  </span>
-                </template>
-                <el-select v-model="form.path" placeholder="请选择模板">
-                  <el-option v-for="item in layer_configuration_template" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="['T'].includes(form.menuType)" :span="12">
-              <el-form-item style="width: 480px" label="数据类型:" prop="component">
-                <el-select v-model="form.component" placeholder="请选择数据类型" clearable filterable>
-                  <el-option v-for="item in point_type" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item style="width: 480px">
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择已下架则不在地图中展示" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    上架状态:
-                  </span>
-                </template>
-                <el-radio-group v-model="form.status">
-                  <el-radio v-for="dict in listing_status" :key="dict.value" :label="dict.value">{{ dict.label }} </el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-          </el-form>
-        </div>
-        <div class="common-dialog-footer" style="display: flex; justify-content: center">
-          <el-button type="primary" @click="submitForm">确 定</el-button>
-          <el-button @click="cancel">取 消</el-button>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup name="LayerConfiguration" lang="ts">
-import { addLayerMenu, delLayerMenu, getLayerMenu, LayerlistMenu, updateLayerMenu, getLayerMenuType } from '@/api/globalMap/layerConfig';
-import { MenuVO } from '@/api/globalMap/layerConfig/types';
-
-interface MenuOptionsType {
-  menuId: number;
-  menuName: string;
-  children: MenuOptionsType[] | undefined;
-}
-
-// 菜单类型
-const menuTypeList = ref([]);
-const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-const { listing_status, topic_type, layer_configuration_template, point_type } = toRefs<any>(
-  proxy?.useDict('listing_status', 'topic_type', 'layer_configuration_template', 'point_type')
-);
-
-const menuList = ref<MenuVO[]>([]);
-const loading = ref(true);
-const showSearch = ref(true);
-const menuOptions = ref<MenuOptionsType[]>([]);
-const isExpandAll = ref(false);
-
-const dialog = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
-
-const queryFormRef = ref<ElFormInstance>();
-const menuFormRef = ref<ElFormInstance>();
-
-const menuTableRef = ref<ElTableInstance>();
-const queryParams = reactive({
-  menuName: undefined,
-  status: undefined,
-  ZT: undefined
-});
-const form = ref({
-  path: '',
-  menuId: undefined,
-  parentId: 0,
-  menuName: '',
-  icon: '',
-  menuType: 'D',
-  orderNum: 1,
-  status: '0',
-  component: ''
-});
-const rules = computed(() => {
-  const newRules = {
-    parentId: [{ required: true, message: '请选择上级菜单', trigger: 'change' }],
-    menuType: [{ required: true, message: '请选择菜单类型', trigger: 'change' }],
-    menuName: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
-    orderNum: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }],
-    status: [{ required: true, message: '请选择上架状态', trigger: 'change' }]
-  };
-  return newRules;
-});
-/** 查询菜单列表 */
-const getList = () => {
-  loading.value = true;
-  LayerlistMenu(queryParams)
-    .then((res) => {
-      const data = proxy?.handleTree<MenuVO>(res.data, 'menuId');
-      if (data) {
-        menuList.value = data;
-      }
-    })
-    .finally(() => {
-      loading.value = false;
-    });
-};
-/** 查询菜单下拉树结构 */
-const getTreeselect = async () => {
-  menuOptions.value = [];
-  const response = await LayerlistMenu();
-  const menu: MenuOptionsType = { menuId: 0, menuName: '主类目', children: [] };
-  menu.children = proxy?.handleTree<MenuOptionsType>(response.data, 'menuId');
-  menuOptions.value.push(menu);
-};
-/** 取消按钮 */
-const cancel = () => {
-  reset();
-  dialog.visible = false;
-};
-/** 表单重置 */
-const reset = () => {
-  form.value = {
-    path: '',
-    menuId: undefined,
-    parentId: 0,
-    menuName: '',
-    icon: '',
-    menuType: 'D',
-    orderNum: 1,
-    status: '0',
-    component: ''
-  };
-  menuFormRef.value?.resetFields();
-};
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  getList();
-};
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value?.resetFields();
-  handleQuery();
-};
-/** 新增按钮操作 */
-const handleAdd = (row?: MenuVO) => {
-  // reset();
-  getTreeselect();
-  row && row.menuId ? (form.value.parentId = row.menuId) : (form.value.parentId = 0);
-  if (row) {
-    if (!row.menuType) {
-      form.value.menuType = 'D';
-    } else if (row.menuType === 'D') {
-      form.value.menuType = 'Z';
-    } else if (row.menuType === 'Z') {
-      form.value.menuType = 'T';
-    }
-  }
-  dialog.visible = true;
-  dialog.title = '添加菜单';
-  // fullscreen: false;
-};
-/** 展开/折叠操作 */
-const handleToggleExpandAll = () => {
-  isExpandAll.value = !isExpandAll.value;
-  toggleExpandAll(menuList.value, isExpandAll.value);
-};
-/** 展开/折叠所有 */
-const toggleExpandAll = (data: MenuVO[], status: boolean) => {
-  data.forEach((item: MenuVO) => {
-    menuTableRef.value?.toggleRowExpansion(item, status);
-    if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
-  });
-};
-/** 修改按钮操作 */
-const handleUpdate = async (row: MenuVO) => {
-  reset();
-  await getTreeselect();
-  if (row.menuId) {
-    const { data } = await getLayerMenu(row.menuId);
-    form.value = data;
-  }
-  dialog.title = '修改菜单';
-  dialog.visible = true;
-};
-/** 提交按钮 */
-const submitForm = () => {
-  menuFormRef.value?.validate(async (valid: boolean) => {
-    if (valid) {
-      form.value.menuId ? await updateLayerMenu(form.value) : await addLayerMenu(form.value);
-      proxy?.$modal.msgSuccess('操作成功');
-      cancel();
-      getList();
-    }
-  });
-};
-/** 删除按钮操作 */
-const handleDelete = async (row: MenuVO) => {
-  await proxy?.$modal.confirm('是否确认删除名称为"' + row.menuName + '"的数据项?');
-  await delLayerMenu(row.menuId);
-  await getList();
-  proxy?.$modal.msgSuccess('删除成功');
-};
-const getTypeList = () => {
-  getLayerMenuType().then((res) => {
-    res.data.forEach((item) => {
-      item.label = item.dictLabel;
-      item.value = item.dictValue;
-    });
-    menuTypeList.value = res.data;
-  });
-};
-onMounted(() => {
-  getList();
-  getTypeList();
-});
-</script>

+ 0 - 279
src/views/globalMap/topicPage.vue

@@ -1,279 +0,0 @@
-<template>
-  <div  class="app-container" v-if="!showTopic">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
-      <div v-show="showSearch">
-        <el-form ref="queryFormRef" :model="queryParams">
-          <el-row :gutter="20">
-            <!-- 第一行 -->
-            <el-col :span="6">
-              <el-form-item label="专题:" prop="status">
-                <el-select v-model="queryParams.topicName" placeholder="请选择" clearable>
-                  <el-option v-for="dict in topic_type" :key="dict.value" :label="dict.label">{{ dict.label }}</el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="6">
-              <el-form-item>
-                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
-                <el-button icon="Refresh" @click="resetQuery">重置</el-button>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form>
-      </div>
-    </transition>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button v-hasPermi="['system:menu:add']" icon="Plus" type="primary" @click="handleAdd()">新增 </el-button>
-      </el-col>
-    </el-row>
-
-    <el-table
-      ref="menuTableRef"
-      :data="topicList"
-    >
-      <el-table-column prop="topicNames" align="center" label="专题名称" :show-overflow-tooltip="true">
-        <template #default="scope">
-          <span class="link-text" @click="handleTopicClick(scope.row.id)">{{ scope.row.topicNames }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template #default="scope">
-          <el-text v-hasPermi="['system:menu:edit']" class="common-btn-text-primary" @click="handleUpdate(scope.row)">修改</el-text>
-<!--          <el-text v-hasPermi="['system:menu:add']" class="common-btn-text-primary" @click="handleAdd(scope.row)">新增</el-text>-->
-          <el-text v-hasPermi="['system:menu:remove']" class="common-btn-text-danger" @click="handleDelete(scope.row)">删除</el-text>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <div v-show="dialog.visible" class="common-dialog">
-      <div class="common-dialog-content">
-        <div class="common-dialog-title-box">
-          <i class="common-dialog-title-icon" />
-          <div>{{ dialog.title }}</div>
-        </div>
-        <div class="common-dialog-box">
-          <el-form ref="menuFormRef" :model="form" :rules="rules" label-width="100px">
-            <el-col :span="24">
-              <el-col :span="12">
-                <el-form-item style="width: 500px" label="菜单栏名称:" prop="menuName">
-                  <el-input v-model="form.menuName" placeholder="请输入菜单名称" />
-                </el-form-item>
-              </el-col>
-              <el-col :span="24">
-                <el-form-item label="菜单类型:" prop="menuType">
-                  <el-radio-group v-model="form.menuType">
-                    <el-radio value="M">目录</el-radio>
-                    <el-radio value="C">菜单</el-radio>
-                    <!--                  <el-radio value="F">按钮</el-radio>-->
-                  </el-radio-group>
-                </el-form-item>
-              </el-col>
-              <el-form-item label="菜单图标:" prop="icon">
-                <!-- 图标选择器 -->
-                <!--                <icon-select v-model="form.icon" />-->
-                <FileUpload
-                  v-model="form.icon"
-                  :file-type="['jpg', 'jpeg', 'png']"
-                  :limit="1"
-                  :file-size="5"
-                  class="upload-box"
-                  @change="menuFormRef.validateField('fileList')"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="菜单模板:" prop="template">
-                <!-- 模板选择器 -->
-                <el-select v-model="form.layer_template" placeholder="请选择模板">
-                  <el-option v-for="item in templateOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="菜单排序:" prop="orderNum">
-                <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item>
-                <template #label>
-                  <span>
-                    <el-tooltip content="选择不上架则不在地图中展示" placement="top">
-                      <el-icon>
-                        <question-filled />
-                      </el-icon>
-                    </el-tooltip>
-                    上架状态:
-                  </span>
-                </template>
-                <el-radio-group v-model="form.visible">
-                  <el-radio v-for="dict in listing_status" :key="dict.value" :label="dict.value">{{ dict.label }} </el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col v-if="form.menuType !== 'F'" :span="24">
-              <el-form-item label="配置地图:" prop="template">
-                <!-- 模板选择器 -->
-                <el-select v-model="form.layer_template" placeholder="请选择模板">
-                  <el-option v-for="item in mapType" :key="item.value" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-form>
-
-        </div>
-        <div class="common-dialog-footer" style="display: flex; justify-content: center">
-          <el-button type="primary" @click="submitForm">确 定</el-button>
-          <el-button @click="cancel">取 消</el-button>
-        </div>
-      </div>
-    </div>
-  </div>
-  <layer-configuration-test v-if="showTopic" @close="pageClose" :id="topicId" />
-</template>
-
-<script setup lang="ts">
-import { ComponentInternalInstance, getCurrentInstance, reactive, ref, toRefs } from 'vue';
-
-import { LayerlistMenu } from '@/api/globalMap/layerConfig';
-
-import { MenuForm, MenuQuery, MenuVO } from '@/api/globalMap/layerConfig/types';
-import { MenuTypeEnum } from '@/enums/MenuTypeEnum';
-import { getDicts } from '@/api/system/dict/data';
-import LayerConfigurationTest from '@/views/globalMap/layerConfigurationTest.vue';
-import { getLayerMenu } from '@/api/system/menu';
-const showSearch = ref(true);
-const topicList = ref([]);
-const queryFormRef = ref<ElFormInstance>();
-const topicId = ref();
-const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-const { sys_show_hide, sys_normal_disable, topic_name, menu_type, listing_status } = toRefs<any>(
-  proxy?.useDict('sys_show_hide', 'sys_normal_disable', 'topic_name', 'menu_type', 'listing_status')
-);
-const initFormData = {
-  path: '',
-  menuId: undefined,
-  parentId: 0,
-  menuName: '',
-  icon: '',
-  menuType: MenuTypeEnum.M,
-  orderNum: 1,
-  isFrame: '1',
-  isCache: '0',
-  visible: '0',
-  status: '0'
-};
-const templateOptions = ref([
-  { value: 'template1', label: '图层分析一' },
-  { value: 'template2', label: '图层分析二' },
-  { value: 'template3', label: '图层分析三' }
-  // 更多模板选项...
-]);
-const mapType = ref([
-  { value: '1', label: '业务图' },
-  { value: '2', label: '地形图' },
-  { value: '3', label: '卫星图' },
-  { value: '4', label: '影像图' },
-  { value: '5', label: '简版图' }
-  // 更多模板选项...
-]);
-interface MenuOptionsType {
-  menuId: number;
-  menuName: string;
-  children: MenuOptionsType[] | undefined;
-}
-const data = reactive<PageData<MenuForm, MenuQuery>>({
-  form: { ...initFormData },
-  queryParams: {
-    menuName: undefined,
-    status: undefined
-  },
-  rules: {
-    menuName: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
-    orderNum: [{ required: true, message: '菜单顺序不能为空', trigger: 'blur' }],
-    path: [{ required: true, message: '路由地址不能为空', trigger: 'blur' }]
-  }
-});
-const menuTableRef = ref<ElTableInstance>();
-const { queryParams, form, rules } = toRefs<PageData<MenuForm, MenuQuery>>(data);
-const topic_type = ref([]);
-const showTopic = ref(false);
-const menuOptions = ref<MenuOptionsType[]>([]);
-const menuFormRef = ref<ElFormInstance>();
-const dialog = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
-
-/** 查询菜单列表 */
-const getList = async () => {
-  getDicts('topic_type').then((resp) => {
-    topic_type.value = resp.data.map(
-      (p): DictDataOption => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass })
-    );
-    let temp = [];
-    topic_type.value.forEach(item => {
-      temp.push(item.label);
-    })
-    // topicList.value = temp;
-    topicList.value = topic_type.value.map(item => ({
-      topicNames: item.label
-    }));
-  });
-};
-getList();
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  getList();
-};
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value?.resetFields();
-  handleQuery();
-};
-const handleTopicClick = (id) => {
-  showTopic.value = true;
-  topicId.value = id;
-}
-const pageClose = () => {
-  showTopic.value = false;
-}
-const reset = () => {
-  form.value = { ...initFormData };
-  menuFormRef.value?.resetFields();
-};
-
-const handleAdd = (row?: MenuVO) => {
-  reset();
-  // getTreeselect();
-  row && row.menuId ? (form.value.parentId = row.menuId) : (form.value.parentId = 0);
-  dialog.visible = true;
-  dialog.title = '添加菜单';
-  // fullscreen: false;
-};
-/** 修改按钮操作 */
-const handleUpdate = async (row: MenuVO) => {
-  reset();
-  // await getTreeselect();
-  if (row.menuId) {
-    const { data } = await getLayerMenu(row.menuId);
-    form.value = data;
-  }
-  dialog.visible = true;
-  dialog.title = '修改菜单';
-};
-const cancel = () => {
-  reset();
-  dialog.visible = false;
-};
-const submitForm = () => {
-  reset();
-  dialog.visible = false;
-};
-</script>
-
-<style scoped lang="scss">
-
-</style>