feiyu02
2025-09-17 b330e57051e54789eb83d10dc58c4d9d10c608e1
2025.9.17 数据产品模块(待完成)
已修改8个文件
已添加3个文件
1084 ■■■■ 文件已修改
src/api/index.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components.d.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/SearchBar.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/core/Content.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/constants/menu.js 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index copy.js 304 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 461 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/base-data-product/ProdManage.vue 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/base-data-product/ProdSceneInfo.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/base-data-product/components/BaseProdProcess.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/fysp/data-product/base-data-product/components/ProdQueryOpt.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index.js
@@ -13,7 +13,8 @@
let ip2_file = 'https://fyami.com.cn/';
if (debug) {
  ip1 = 'http://192.168.0.103:9001/';
  // ip1 = 'http://192.168.0.103:9001/';
  ip1 = 'http://localhost:9001/';
  // ip1_file = 'http://192.168.0.138:8080/';
  // ip2 = 'http://192.168.0.138:8080/';
  // ip2_file = 'https://fyami.com.cn/';
src/components.d.ts
@@ -20,7 +20,6 @@
    ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
    ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
    ElButton: typeof import('element-plus/es')['ElButton']
    ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
    ElCalendar: typeof import('element-plus/es')['ElCalendar']
    ElCard: typeof import('element-plus/es')['ElCard']
    ElCascader: typeof import('element-plus/es')['ElCascader']
@@ -37,9 +36,6 @@
    ElDialog: typeof import('element-plus/es')['ElDialog']
    ElDivider: typeof import('element-plus/es')['ElDivider']
    ElDrawer: typeof import('element-plus/es')['ElDrawer']
    ElDropdown: typeof import('element-plus/es')['ElDropdown']
    ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
    ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
    ElEmpty: typeof import('element-plus/es')['ElEmpty']
    ElForm: typeof import('element-plus/es')['ElForm']
    ElFormItem: typeof import('element-plus/es')['ElFormItem']
@@ -55,16 +51,13 @@
    ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
    ElMenuItemGroup: typeof import('element-plus/es')['ElMenuItemGroup']
    ElOption: typeof import('element-plus/es')['ElOption']
    ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
    ElPagination: typeof import('element-plus/es')['ElPagination']
    ElPopconfirm: typeof import('element-plus/es')['ElPopconfirm']
    ElPopover: typeof import('element-plus/es')['ElPopover']
    ElRadio: typeof import('element-plus/es')['ElRadio']
    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
    ElRow: typeof import('element-plus/es')['ElRow']
    ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
    ElSegmented: typeof import('element-plus/es')['ElSegmented']
    ElSelect: typeof import('element-plus/es')['ElSelect']
    ElSpace: typeof import('element-plus/es')['ElSpace']
    ElStep: typeof import('element-plus/es')['ElStep']
@@ -78,7 +71,6 @@
    ElTag: typeof import('element-plus/es')['ElTag']
    ElText: typeof import('element-plus/es')['ElText']
    ElTooltip: typeof import('element-plus/es')['ElTooltip']
    ElTransfer: typeof import('element-plus/es')['ElTransfer']
    ElTree: typeof import('element-plus/es')['ElTree']
    ElUpload: typeof import('element-plus/es')['ElUpload']
    Footer: typeof import('./components/core/Footer.vue')['default']
src/components/SearchBar.vue
@@ -22,7 +22,7 @@
          :type="2"
          v-model:value="formSearch.scenetype"
        ></FYOptionScene>
        <el-form-item>
        <el-form-item v-show="btnShow">
          <el-button type="primary" @click="onSubmit">查询</el-button>
        </el-form-item>
      </el-form>
@@ -40,6 +40,17 @@
export default {
  emits: ['onSubmit'],
  props: {
    btnShow: {
      type: Boolean,
      default: true
    },
    init: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      topTasks: [],
@@ -62,7 +73,9 @@
        });
        this.topTasks = list;
        this.formSearch.topTaskId = list[0].value;
        this.onSubmit();
        if (this.init) {
          this.onSubmit();
        }
      });
    },
    //查询子任务统计信息
@@ -81,7 +94,8 @@
  },
  mounted() {
    this.getOptions();
  }
  },
  expose: ['onSubmit']
};
</script>
src/components/core/Content.vue
@@ -5,17 +5,21 @@
      <component
        v-if="route.meta.keepAlive"
        :is="Component"
        :key="route.name"
        :key="route.meta.key ? route.meta.key : route.name"
      />
    </keep-alive>
    <component v-if="!route.meta.keepAlive" :is="Component" :key="route.name" />
    <component
      v-if="!route.meta.keepAlive"
      :is="Component"
      :key="route.meta.key ? route.meta.key : route.name"
    />
    <!-- </transition> -->
  </router-view>
</template>
<script>
export default {
  name: 'CoreContent',
  name: 'CoreContent'
};
</script>
<style scoped></style>
src/constants/menu.js
@@ -1,6 +1,6 @@
const MENU_COMMON = [
  {
    path: 'common/userMatch',
    path: '/common/userMatch',
    icon: 'Connection',
    name: '账户匹配'
  }
@@ -8,7 +8,7 @@
if (import.meta.env.DEV) {
  MENU_COMMON.push({
    path: 'common/docTest',
    path: '/common/docTest',
    icon: 'Connection',
    name: '文档生成'
  });
@@ -23,7 +23,7 @@
  //   ]
  // },
  {
    path: 'fysp/procheck',
    path: '/fysp/procheck',
    icon: 'CircleCheck',
    name: '问题整改'
  },
@@ -32,12 +32,12 @@
    name: '任务管理',
    children: [
      {
        path: 'fysp/task/manage',
        path: '/fysp/task/manage',
        icon: 'CircleCheck',
        name: '监管任务'
      },
      {
        path: 'fysp/sceneInfo',
        path: '/fysp/sceneInfo',
        icon: 'Files',
        name: '场景信息'
      }
@@ -48,22 +48,22 @@
    name: '基础数据产品',
    children: [
      {
        path: 'fysp/data-product/base/home/scene',
        path: '/fysp/data-product/base/home/scene',
        icon: 'Document',
        name: '现场巡查',
      },
      // {
      //   path: 'fysp/data-product/base/ProdMonitorTaskInfo',
      //   path: '/fysp/data-product/base/ProdMonitorTaskInfo',
      //   icon: 'Document',
      //   name: '监管清单',
      // },
      // {
      //   path: 'fysp/data-product/base/ProdTreatmentDeviceInfo',
      //   path: '/fysp/data-product/base/ProdTreatmentDeviceInfo',
      //   icon: 'Document',
      //   name: '防治设备清单',
      // },
      {
        path: 'fysp/data-product/base/PordProblemRecurrence',
        path: '/fysp/data-product/base/PordProblemRecurrence',
        icon: 'Document',
        name: '问题复发清单',
      },
@@ -74,27 +74,27 @@
    name: '中间数据产品',
    children: [
      {
        path: 'fysp/data-product/profollow',
        path: '/fysp/data-product/profollow',
        icon: 'Document',
        name: '问题动态跟踪'
      },
      {
        path: 'fysp/data-product/proanalysis',
        path: '/fysp/data-product/proanalysis',
        icon: 'Document',
        name: '问题整改分析'
      },
      {
        path: 'fysp/data-product/standardjudge',
        path: '/fysp/data-product/standardjudge',
        icon: 'Document',
        name: '规范性评估'
      },
      {
        path: 'fysp/data-product/dailyreport',
        path: '/fysp/data-product/dailyreport',
        icon: 'Document',
        name: '日报管理'
      },
      {
        path: 'fysp/data-product/lawenforcelist',
        path: '/fysp/data-product/lawenforcelist',
        icon: 'Document',
        name: '联合执法清单'
      },
@@ -106,7 +106,7 @@
    name: '最终数据产品',
    children: [
      {
        path: 'fysp/data-product/scenereport',
        path: '/fysp/data-product/scenereport',
        icon: 'Document',
        name: '场景分析报告'
      }
@@ -122,12 +122,12 @@
    name: '自动评估',
    children: [
      {
        path: 'fysp/evaluation/evalutationTask',
        path: '/fysp/evaluation/evalutationTask',
        icon: 'MessageBox',
        name: '评估任务'
      },
      {
        path: 'fysp/evaluation/evalutationRecord',
        path: '/fysp/evaluation/evalutationRecord',
        icon: 'Tickets',
        name: '评估记录'
      }
@@ -138,25 +138,25 @@
    name: '配置管理',
    children: [
      {
        path: 'fysp/config/problemType',
        path: '/fysp/config/problemType',
        icon: 'List',
        name: '监管问题'
      },
      {
        path: 'fysp/config/deviceMatch',
        path: '/fysp/config/deviceMatch',
        icon: 'List',
        name: '设备匹配'
      },
      {
        //评估规则管理
        path: 'fysp/config/evalutationRule',
        path: '/fysp/config/evalutationRule',
        icon: 'List',
        name: '评估规则'
      }
    ]
  },
  {
    path: 'fysp/support',
    path: '/fysp/support',
    icon: 'Files',
    name: '对外支持'
  },
@@ -215,12 +215,12 @@
  //   name: '台账审核'
  // },
  {
    path: 'fytz/notice',
    path: '/fytz/notice',
    icon: 'Message',
    name: '通知管理'
  },
  {
    path: 'fytz/userInfo',
    path: '/fytz/userInfo',
    icon: 'User',
    name: '账户信息'
  },
@@ -229,7 +229,7 @@
    name: '资源管理',
    children: [
      {
        path: 'fytz/enforceCase',
        path: '/fytz/enforceCase',
        icon: 'Search',
        name: '督察案例'
      }
src/router/index copy.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,304 @@
// eslint-disable-next-line no-unused-vars
import {
  createRouter,
  createWebHistory,
  createWebHashHistory
} from 'vue-router';
import pinia from '../stores/index';
import { useLoadingStore } from '../stores/loadingStore';
const routes = [
  {
    name: 'home',
    path: '/',
    component: () => import('@/views/HomePage.vue'),
    children: [
      // {
      //   //整改审核
      //   name: 'changecheck',
      //   path: '/changecheck',
      //   component: () => import('@/views/check/ChangeCheck.vue')
      // },
      /**********************************飞羽监管***********************************************/
      {
        //问题动态跟踪
        name: 'profollow',
        path: 'fysp/data-product/profollow',
        component: () => import('@/views/fysp/data-product/ProdProFollow.vue')
      },
      {
        //问题整改分析
        name: 'proanalysis',
        path: 'fysp/data-product/proanalysis',
        component: () => import('@/views/fysp/data-product/ProdProAnalysis.vue')
      },
      {
        //规范性评估
        name: 'standardjudge',
        path: 'fysp/data-product/standardjudge',
        component: () =>
          import('@/views/fysp/data-product/ProdStandardJudge.vue')
      },
      {
        //日报管理
        name: 'dailyreport',
        path: 'fysp/data-product/dailyreport',
        component: () => import('@/views/fysp/data-product/ProdDailyReport.vue')
      },
      {
        //场景报告
        name: 'scenereport',
        path: 'fysp/data-product/scenereport',
        component: () => import('@/views/fysp/data-product/ProdSceneReport.vue')
      },
      {
        //场景报告
        name: 'lawenforcelist',
        path: 'fysp/data-product/lawenforcelist',
        component: () =>
          import('@/views/fysp/data-product/ProdLawEnforceList.vue')
      },
      // {
      //   //场景报告-工地
      //   name: 'construction',
      //   path: '/scenereport/construction',
      //   component: () => import('@/views/fysp/scenereport/ConstructionReport.vue')
      // },
      // {
      //   //场景报告-码头
      //   name: 'wharf',
      //   path: '/scenereport/wharf',
      //   component: () => import('@/views/fysp/scenereport/WharfReport.vue')
      // },
      // {
      //   //场景报告-搅拌站
      //   name: 'mixing',
      //   path: '/scenereport/mixing',
      //   component: () => import('@/views/fysp/scenereport/MixingReport.vue')
      // },
      // {
      //   //场景报告-堆场
      //   name: 'storage',
      //   path: '/scenereport/storage',
      //   component: () => import('@/views/fysp/scenereport/StorageReport.vue')
      // },
      {
        //监管任务
        name: 'taskmanage',
        path: 'fysp/task/manage',
        component: () => import('@/views/fysp/task/TaskManage.vue'),
        meta: { keepAlive: true }
      },
      {
        //监管任务场景编辑
        name: 'monitorObjEdit',
        path: 'fysp/task/edit',
        component: () => import('@/views/fysp/task/MonitorObjEdit.vue')
      },
      {
        //监管任务计划编辑
        name: 'monitorPlanEdit',
        path: 'fysp/task/plan/edit',
        component: () => import('@/views/fysp/task/MonitorPlanEdit.vue')
      },
      {
        //监管任务计划编辑
        name: 'monitorTaskCreate',
        path: 'fysp/task/create',
        component: () => import('@/views/fysp/task/MonitorTaskCreate.vue')
      },
      {
        //问题审核
        name: 'procheck',
        path: 'fysp/procheck',
        component: () => import('@/views/fysp/check/ProCheck.vue')
      },
      // {
      //   //账户管理
      //   name: 'fyspUser',
      //   path: 'fysp/userInfo',
      //   component: () => import('@/views/baseinfo/fysp/user/UserInfo.vue')
      // },
      {
        //监管问题
        name: 'fyspProblemType',
        path: 'fysp/config/problemType',
        component: () => import('@/views/fysp/config/ProblemType.vue')
      },
      {
        //设备匹配
        name: 'fyspDeviceMatch',
        path: 'fysp/config/deviceMatch',
        component: () => import('@/views/fysp/config/DeviceMatch.vue')
      },
      {
        //评估规则管理
        name: 'fyspEvalutationRule',
        path: 'fysp/config/evalutationRule',
        component: () => import('@/views/fysp/config/EvalutationRule.vue')
      },
      {
        //评估数据源
        name: 'fyspEvalutationTask',
        path: 'fysp/evaluation/evalutationTask',
        component: () => import('@/views/fysp/evaluation/EvalutationTask.vue'),
        meta: { keepAlive: false }
      },
      {
        //评估管理
        name: 'fyspEvalutationRecord',
        path: 'fysp/evaluation/evalutationRecord',
        component: () =>
          import('@/views/fysp/evaluation/EvalutationRecord.vue'),
        meta: { keepAlive: true }
      },
      {
        //评估结果详情
        name: 'fyspEvalutationEdit',
        path: 'fysp/evaluation/evalutationEdit/:subTaskId',
        component: () => import('@/views/fysp/evaluation/EvalutationEdit.vue')
      },
      {
        //场景信息
        name: 'fyspSceneInfo',
        path: 'fysp/sceneInfo',
        component: () => import('@/views/fysp/scene/SceneInfo.vue'),
        meta: { keepAlive: true }
      },
      {
        //场景编辑
        name: 'fyspSceneEdit',
        path: 'fysp/sceneEdit/:sid',
        component: () => import('@/views/fysp/scene/SceneEdit.vue'),
        meta: { transition: 'slide-left' }
      },
      {
        //对外支持
        name: 'fyspSupport',
        path: 'fysp/support',
        component: () => import('@/views/fysp/support/JingAnSupport.vue')
      },
      {
        // åŸºç¡€äº§å“-管理
        name: 'ProdManage',
        path: 'fysp/data-product/base/home',
        component: () =>
          import('@/views/fysp/data-product/base-data-product/ProdManage.vue'),
        children: [
          {
            // åŸºç¡€äº§å“-场景清单
            path: 'scene',
            name: 'ProdSceneInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdSceneInfo.vue'
              )
          },
          {
            // åŸºç¡€äº§å“-规范性评估
            path: 'evaluate',
            name: 'ProdEvaluationInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdEvaluationInfo.vue'
              )
          },
          {
            // åŸºç¡€äº§å“-巡查信息
            path: 'inspection',
            name: 'ProdInspectionInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdInspectionInfo.vue'
              )
          },
          {
            // åŸºç¡€äº§å“-监测数据
            path: 'monitordata',
            name: 'ProdMonitorDataInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdMonitorDataInfo.vue'
              )
          }
        ]
      },
      {
        // åŸºç¡€äº§å“-问题复发清单
        name: 'PordProblemRecurrence',
        path: 'fysp/data-product/base/PordProblemRecurrence',
        component: () =>
          import(
            '@/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue'
          )
      },
      /**********************************飞羽环境***********************************************/
      {
        //台账审核
        name: 'ledger',
        path: 'fytz/ledger',
        component: () => import('@/views/fytz/ledger/LedgerManage.vue')
      },
      {
        //通知管理
        name: 'notice',
        path: 'fytz/notice',
        component: () => import('@/views/fytz/notice/NoticeManage.vue')
      },
      {
        //账户管理
        name: 'fytzUser',
        path: 'fytz/userInfo',
        component: () => import('@/views/fytz/user/UserInfo.vue'),
        meta: { keepAlive: true }
      },
      {
        //账户编辑
        name: 'fytzUserEdit',
        path: 'fytz/userEdit/:userId',
        component: () => import('@/views/fytz/user/UserEdit.vue'),
        meta: { transition: 'slide-left' }
      },
      {
        //环保督察案例
        name: 'enforceCase',
        path: 'fytz/enforceCase',
        component: () => import('@/views/fytz/enforce-case/EnforceCase.vue')
      },
      /**********************************通用模块***********************************************/
      {
        //账户匹配
        name: 'userMatch',
        path: 'common/userMatch',
        component: () => import('@/views/common/UserMatch.vue')
      },
      {
        //文档生成测试
        name: 'docTest',
        path: 'common/docTest',
        component: () => import('@/views/DocTest.vue')
      }
    ]
  }
];
const router = createRouter({
  // history: createWebHistory(import.meta.env.BASE_URL)
  history: createWebHashHistory(),
  routes: routes
});
const loadingStore = useLoadingStore(pinia);
// eslint-disable-next-line no-unused-vars
router.afterEach((to, from) => {
  loadingStore.clearLoading();
});
export { router, routes };
src/router/index.js
@@ -13,229 +13,262 @@
    path: '/',
    component: () => import('@/views/HomePage.vue'),
    children: [
      // {
      //   //整改审核
      //   name: 'changecheck',
      //   path: '/changecheck',
      //   component: () => import('@/views/check/ChangeCheck.vue')
      // },
      /**********************************飞羽监管***********************************************/
      {
        //问题动态跟踪
        name: 'profollow',
        path: 'fysp/data-product/profollow',
        component: () => import('@/views/fysp/data-product/ProdProFollow.vue')
      },
      {
        //问题整改分析
        name: 'proanalysis',
        path: 'fysp/data-product/proanalysis',
        component: () => import('@/views/fysp/data-product/ProdProAnalysis.vue')
      },
      {
        //规范性评估
        name: 'standardjudge',
        path: 'fysp/data-product/standardjudge',
        component: () =>
          import('@/views/fysp/data-product/ProdStandardJudge.vue')
      },
      {
        //日报管理
        name: 'dailyreport',
        path: 'fysp/data-product/dailyreport',
        component: () => import('@/views/fysp/data-product/ProdDailyReport.vue')
      },
      {
        //场景报告
        name: 'scenereport',
        path: 'fysp/data-product/scenereport',
        component: () => import('@/views/fysp/data-product/ProdSceneReport.vue')
      },
      {
        //场景报告
        name: 'lawenforcelist',
        path: 'fysp/data-product/lawenforcelist',
        component: () =>
          import('@/views/fysp/data-product/ProdLawEnforceList.vue')
      },
      // {
      //   //场景报告-工地
      //   name: 'construction',
      //   path: '/scenereport/construction',
      //   component: () => import('@/views/fysp/scenereport/ConstructionReport.vue')
      // },
      // {
      //   //场景报告-码头
      //   name: 'wharf',
      //   path: '/scenereport/wharf',
      //   component: () => import('@/views/fysp/scenereport/WharfReport.vue')
      // },
      // {
      //   //场景报告-搅拌站
      //   name: 'mixing',
      //   path: '/scenereport/mixing',
      //   component: () => import('@/views/fysp/scenereport/MixingReport.vue')
      // },
      // {
      //   //场景报告-堆场
      //   name: 'storage',
      //   path: '/scenereport/storage',
      //   component: () => import('@/views/fysp/scenereport/StorageReport.vue')
      // },
      {
        //监管任务
        name: 'taskmanage',
        path: 'fysp/task/manage',
        component: () => import('@/views/fysp/task/TaskManage.vue'),
        meta: { keepAlive: true }
      },
      {
        //监管任务场景编辑
        name: 'monitorObjEdit',
        path: 'fysp/task/edit',
        component: () => import('@/views/fysp/task/MonitorObjEdit.vue')
      },
      {
        //监管任务计划编辑
        name: 'monitorPlanEdit',
        path: 'fysp/task/plan/edit',
        component: () => import('@/views/fysp/task/MonitorPlanEdit.vue')
      },
      {
        //监管任务计划编辑
        name: 'monitorTaskCreate',
        path: 'fysp/task/create',
        component: () => import('@/views/fysp/task/MonitorTaskCreate.vue')
      },
      {
        //问题审核
        name: 'procheck',
        path: 'fysp/procheck',
        component: () => import('@/views/fysp/check/ProCheck.vue')
      },
      // {
      //   //账户管理
      //   name: 'fyspUser',
      //   path: 'fysp/userInfo',
      //   component: () => import('@/views/baseinfo/fysp/user/UserInfo.vue')
      // },
      {
        //监管问题
        name: 'fyspProblemType',
        path: 'fysp/config/problemType',
        component: () => import('@/views/fysp/config/ProblemType.vue')
      },
      {
        //设备匹配
        name: 'fyspDeviceMatch',
        path: 'fysp/config/deviceMatch',
        component: () => import('@/views/fysp/config/DeviceMatch.vue')
      },
      {
        //评估规则管理
        name: 'fyspEvalutationRule',
        path: 'fysp/config/evalutationRule',
        component: () => import('@/views/fysp/config/EvalutationRule.vue')
      },
      {
        //评估数据源
        name: 'fyspEvalutationTask',
        path: 'fysp/evaluation/evalutationTask',
        component: () => import('@/views/fysp/evaluation/EvalutationTask.vue'),
        meta: { keepAlive: false }
      },
      {
        //评估管理
        name: 'fyspEvalutationRecord',
        path: 'fysp/evaluation/evalutationRecord',
        component: () =>
          import('@/views/fysp/evaluation/EvalutationRecord.vue'),
        meta: { keepAlive: true }
      },
      {
        //评估结果详情
        name: 'fyspEvalutationEdit',
        path: 'fysp/evaluation/evalutationEdit/:subTaskId',
        component: () => import('@/views/fysp/evaluation/EvalutationEdit.vue')
      },
      {
        //场景信息
        name: 'fyspSceneInfo',
        path: 'fysp/sceneInfo',
        component: () => import('@/views/fysp/scene/SceneInfo.vue'),
        meta: { keepAlive: true }
      },
      {
        //场景编辑
        name: 'fyspSceneEdit',
        path: 'fysp/sceneEdit/:sid',
        component: () => import('@/views/fysp/scene/SceneEdit.vue'),
        meta: { transition: 'slide-left' }
      },
      {
        //对外支持
        name: 'fyspSupport',
        path: 'fysp/support',
        component: () => import('@/views/fysp/support/JingAnSupport.vue')
      },
      {
        // åŸºç¡€äº§å“-管理
        name: 'ProdManage',
        path: 'fysp/data-product/base/home',
        component: () =>
          import('@/views/fysp/data-product/base-data-product/ProdManage.vue'),
        name: 'fysp',
        path: 'fysp',
        children: [
          // {
          //   //整改审核
          //   name: 'changecheck',
          //   path: '/changecheck',
          //   component: () => import('@/views/check/ChangeCheck.vue')
          // },
          /**********************************飞羽监管***********************************************/
          {
            // åŸºç¡€äº§å“-场景清单
            path: 'scene',
            name: 'ProdSceneInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdSceneInfo.vue'
              )
            //问题审核
            name: 'procheck',
            path: 'procheck',
            component: () => import('@/views/fysp/check/ProCheck.vue')
          },
          {
            // åŸºç¡€äº§å“-规范性评估
            path: 'evaluate',
            name: 'ProdEvaluationInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdEvaluationInfo.vue'
              )
            name: 'data-product',
            path: 'data-product',
            children: [
              {
                //问题动态跟踪
                name: 'profollow',
                path: 'profollow',
                component: () =>
                  import('@/views/fysp/data-product/ProdProFollow.vue')
              },
              {
                //问题整改分析
                name: 'proanalysis',
                path: 'proanalysis',
                component: () =>
                  import('@/views/fysp/data-product/ProdProAnalysis.vue')
              },
              {
                //规范性评估
                name: 'standardjudge',
                path: 'standardjudge',
                component: () =>
                  import('@/views/fysp/data-product/ProdStandardJudge.vue')
              },
              {
                //日报管理
                name: 'dailyreport',
                path: 'dailyreport',
                component: () =>
                  import('@/views/fysp/data-product/ProdDailyReport.vue')
              },
              {
                //场景报告
                name: 'scenereport',
                path: 'scenereport',
                component: () =>
                  import('@/views/fysp/data-product/ProdSceneReport.vue')
              },
              {
                //场景报告
                name: 'lawenforcelist',
                path: 'lawenforcelist',
                component: () =>
                  import('@/views/fysp/data-product/ProdLawEnforceList.vue')
              },
              {
                name: 'dataProdBase',
                path: 'base',
                children: [
                  {
                    // åŸºç¡€äº§å“-管理
                    name: 'ProdManage',
                    path: 'home',
                    component: () =>
                      import(
                        '@/views/fysp/data-product/base-data-product/ProdManage.vue'
                      ),
                    children: [
                      {
                        // åŸºç¡€äº§å“-场景清单
                        path: 'scene',
                        name: 'ProdSceneInfo',
                        meta: { keepAlive: true, key: 'ProdManage' },
                        component: () =>
                          import(
                            '@/views/fysp/data-product/base-data-product/ProdSceneInfo.vue'
                          )
                      },
                      {
                        // åŸºç¡€äº§å“-规范性评估
                        path: 'evaluate',
                        name: 'ProdEvaluationInfo',
                        meta: { keepAlive: true, key: 'ProdManage' },
                        component: () =>
                          import(
                            '@/views/fysp/data-product/base-data-product/ProdEvaluationInfo.vue'
                          )
                      },
                      {
                        // åŸºç¡€äº§å“-巡查信息
                        path: 'inspection',
                        name: 'ProdInspectionInfo',
                        meta: { keepAlive: true, key: 'ProdManage' },
                        component: () =>
                          import(
                            '@/views/fysp/data-product/base-data-product/ProdInspectionInfo.vue'
                          )
                      },
                      {
                        // åŸºç¡€äº§å“-监测数据
                        path: 'monitordata',
                        name: 'ProdMonitorDataInfo',
                        meta: { keepAlive: true, key: 'ProdManage' },
                        component: () =>
                          import(
                            '@/views/fysp/data-product/base-data-product/ProdMonitorDataInfo.vue'
                          )
                      }
                    ]
                  },
                  {
                    // åŸºç¡€äº§å“-问题复发清单
                    name: 'PordProblemRecurrence',
                    path: 'PordProblemRecurrence',
                    component: () =>
                      import(
                        '@/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue'
                      )
                  }
                ]
              }
            ]
          },
          {
            // åŸºç¡€äº§å“-巡查信息
            path: 'inspection',
            name: 'ProdInspectionInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdInspectionInfo.vue'
              )
            name: 'task',
            path: 'task',
            children: [
              {
                //监管任务
                name: 'taskmanage',
                path: 'manage',
                component: () => import('@/views/fysp/task/TaskManage.vue'),
                meta: { keepAlive: true }
              },
              {
                //监管任务场景编辑
                name: 'monitorObjEdit',
                path: 'edit',
                component: () => import('@/views/fysp/task/MonitorObjEdit.vue')
              },
              {
                name: 'plan',
                path: 'plan',
                children: [
                  {
                    //监管任务计划编辑
                    name: 'monitorPlanEdit',
                    path: 'edit',
                    component: () =>
                      import('@/views/fysp/task/MonitorPlanEdit.vue')
                  }
                ]
              },
              {
                //监管任务计划编辑
                name: 'monitorTaskCreate',
                path: 'create',
                component: () =>
                  import('@/views/fysp/task/MonitorTaskCreate.vue')
              }
            ]
          },
          // {
          //   //账户管理
          //   name: 'fyspUser',
          //   path: 'userInfo',
          //   component: () => import('@/views/baseinfo/fysp/user/UserInfo.vue')
          // },
          {
            //监管问题
            name: 'config',
            path: 'config',
            children: [
              {
                //监管问题
                name: 'fyspProblemType',
                path: 'problemType',
                component: () => import('@/views/fysp/config/ProblemType.vue')
              },
              {
                //设备匹配
                name: 'fyspDeviceMatch',
                path: 'deviceMatch',
                component: () => import('@/views/fysp/config/DeviceMatch.vue')
              },
              {
                //评估规则管理
                name: 'fyspEvalutationRule',
                path: 'evalutationRule',
                component: () =>
                  import('@/views/fysp/config/EvalutationRule.vue')
              }
            ]
          },
          {
            // åŸºç¡€äº§å“-监测数据
            path: 'monitordata',
            name: 'ProdMonitorDataInfo',
            meta: { keepAlive: true },
            component: () =>
              import(
                '@/views/fysp/data-product/base-data-product/ProdMonitorDataInfo.vue'
              )
            //评估数据源
            name: 'evaluation',
            path: 'evaluation',
            children: [
              {
                //评估数据源
                name: 'fyspEvalutationTask',
                path: 'evalutationTask',
                component: () =>
                  import('@/views/fysp/evaluation/EvalutationTask.vue'),
                meta: { keepAlive: false }
              },
              {
                //评估管理
                name: 'fyspEvalutationRecord',
                path: 'evalutationRecord',
                component: () =>
                  import('@/views/fysp/evaluation/EvalutationRecord.vue'),
                meta: { keepAlive: true }
              },
              {
                //评估结果详情
                name: 'fyspEvalutationEdit',
                path: 'evalutationEdit/:subTaskId',
                component: () =>
                  import('@/views/fysp/evaluation/EvalutationEdit.vue')
              }
            ]
          },
          {
            //场景信息
            name: 'fyspSceneInfo',
            path: 'sceneInfo',
            component: () => import('@/views/fysp/scene/SceneInfo.vue'),
            meta: { keepAlive: true }
          },
          {
            //场景编辑
            name: 'fyspSceneEdit',
            path: 'sceneEdit/:sid',
            component: () => import('@/views/fysp/scene/SceneEdit.vue'),
            meta: { transition: 'slide-left' }
          },
          {
            //对外支持
            name: 'fyspSupport',
            path: 'support',
            component: () => import('@/views/fysp/support/JingAnSupport.vue')
          }
        ]
      },
      {
        // åŸºç¡€äº§å“-问题复发清单
        name: 'PordProblemRecurrence',
        path: 'fysp/data-product/base/PordProblemRecurrence',
        component: () =>
          import(
            '@/views/fysp/data-product/base-data-product/PordProblemRecurrence.vue'
          )
      },
      /**********************************飞羽环境***********************************************/
@@ -290,8 +323,8 @@
];
const router = createRouter({
  // history: createWebHistory(import.meta.env.BASE_URL)
  history: createWebHashHistory(),
  history: createWebHistory(import.meta.env.BASE_URL),
  // history: createWebHashHistory(),
  routes: routes
});
src/views/fysp/data-product/base-data-product/ProdManage.vue
@@ -1,22 +1,18 @@
<template>
  <!-- <el-menu default-active="scene" ellipsis mode="horizontal" style="max-width: 600px">
    <el-menu-item index="scene" @click="navPage">场景清单</el-menu-item>
    <el-menu-item index="evaluate" @click="navPage">评估清单</el-menu-item>
    <el-menu-item index="inspection" @click="navPage">巡查信息</el-menu-item>
    <el-menu-item index="monitorData" @click="navPage">监测数据</el-menu-item>
  </el-menu> -->
  <!-- <a @click="navPage({ index: 'scene' })"><div>场景清单</div></a>
  <a @click="navPage({ index: 'evaluate' })"><div>评估清单</div></a>
  <a @click="navPage({ index: 'inspection' })"><div>巡查信息</div></a>
  <a @click="navPage({ index: 'monitorData' })"><div>监测数据</div></a> -->
  <el-space>
    <template v-for="(item, index) in menu" :key="item.path">
      <a :class="btnClz(item.selected)" @click="navTo(index)">
        <div>{{ item.name }}</div>
      </a>
    </template>
  </el-space>
  <div>sssss</div>
  <el-menu
    default-active="scene"
    ellipsis
    mode="horizontal"
    style="max-width: 600px"
  >
    <el-menu-item
      v-for="item in menu"
      :key="item.path"
      :index="item.path"
      @click="navPage"
      >{{ item.name }}</el-menu-item
    >
  </el-menu>
  <router-view v-slot="{ Component, route }">
    <keep-alive>
      <component
@@ -54,55 +50,13 @@
    path: 'monitorData'
  }
]);
// console.log(router);
// console.log(route.path);
const navPage = (item) => {
  console.log(item);
  if (item.index) {
    router.push({
      path: item.index
    });
  }
};
function btnClz(selected) {
  return (
    'mode-btn ' + (selected ? 'btn-selected ' : 'btn-unselected ') + 'm-r-8'
  );
}
function navTo(index) {
  const m = this.menu;
  m.forEach((e) => {
    e.selected = false;
  });
  m[index].selected = true;
  router.replace(m[index].path);
}
onMounted(() => {
  console.log(route.path);
  // router.push('/fysp/data-product/base/home/scene');
});
</script>
<style scoped>
.mode-btn {
  padding: 8px 16px;
  border-radius: 4px;
  font-size: 14px;
  color: #303133;
  background-color: #f5f7fa;
  border: 1px solid #dcdfe6;
  cursor: pointer;
}
.btn-selected {
  color: #fff;
  background-color: #409eff;
  border-color: #409eff;
}
.btn-unselected {
  color: #303133;
  background-color: #f5f7fa;
  border-color: #dcdfe6;
}
</style>
<style scoped></style>
src/views/fysp/data-product/base-data-product/ProdSceneInfo.vue
@@ -1,4 +1,31 @@
<template>
  ProdSceneInfo
  <BaseProdProcess :active="active">
    <template #step1>
      <ProdQueryOpt :loading="loading" @submit="onSearch"> </ProdQueryOpt>
    </template>
    <template #step2></template>
    <template #step3></template>
  </BaseProdProcess>
</template>
<script></script>
<script setup>
import { ref } from 'vue';
import BaseProdProcess from '@/views/fysp/data-product/base-data-product/components/BaseProdProcess.vue';
import ProdQueryOpt from '@/views/fysp/data-product/base-data-product/components/ProdQueryOpt.vue';
const active = ref(1);
const loading = ref(false)
function changeActive() {
  active.value++;
  active.value = active.value > 3 ? 1 : active.value;
}
function onSearch(opt) {
  console.log(opt);
  loading.value = true;
  setTimeout(() => {
    changeActive()
    loading.value = false;
  }, 1000);
}
</script>
src/views/fysp/data-product/base-data-product/components/BaseProdProcess.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
<template>
  <!-- <el-button type="primary" @click="changeActive">change</el-button> -->
  <!-- <el-row>
    <el-col
      :span="active == 1 ? 16 : 4"
      :class="active == 1 ? 'prod-active' : 'prod-inactive'"
    >step1</el-col>
    <el-col
      :span="active == 2 ? 16 : 4"
      :class="active == 2 ? 'prod-active' : 'prod-inactive'"
    >step2</el-col>
    <el-col
      :span="active == 3 ? 16 : 4"
      :class="active == 3 ? 'prod-active' : 'prod-inactive'"
    >step3</el-col>
  </el-row> -->
  <el-row>
    <div :class="active == 1 ? 'prod-active' : 'prod-inactive'">
        <slot name="step1"></slot>
    </div>
    <div :class="active == 2 ? 'prod-active' : 'prod-inactive'">
        <slot name="step2"></slot>
    </div>
    <div :class="active == 3 ? 'prod-active' : 'prod-inactive'">
        <slot name="step3"></slot>
    </div>
  </el-row>
</template>
<script setup>
import { ref } from 'vue';
const props = defineProps({
  active: {
    type: Number,
    default: 1
  }
});
// function changeActive() {
//   active.value++;
//   active.value = active.value > 3 ? 1 : active.value;
// }
</script>
<style scoped>
.prod-active {
  width: 66.667%;
  transition: width 0.5s ease;
  background-color: #409eff;
  color: white;
  margin: 5px 0;
  border-radius: 4px;
}
.prod-inactive {
  width: 16.667%;
  transition: width 0.5s ease;
  background-color: #e4e7ed;
  color: #606266;
  margin: 5px 0;
  border-radius: 4px;
}
</style>
src/views/fysp/data-product/base-data-product/components/ProdQueryOpt.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
<template>
  <el-card shadow="never">
    <template #header>
      <div><el-text tag="b" size="large">产品生成选项</el-text></div>
    </template>
    <SearchBar
      ref="refSearchBar"
      :btn-show="false"
      :init="false"
      @on-submit="search"
    >
    </SearchBar>
    <template #footer>
      <el-row justify="space-around">
        <el-button
          type="primary"
          size="default"
          :loading="loading"
          @click="submit"
          >生成</el-button
        >
      </el-row>
    </template>
  </el-card>
</template>
<script setup>
import { ref, computed } from 'vue';
import dayjs from 'dayjs';
const props = defineProps({
  loading: {
    type: Boolean,
    default: false
  }
});
const emit = defineEmits(['submit']);
const refSearchBar = ref(null);
const submit = () => {
  refSearchBar.value.onSubmit();
};
const search = (options) => {
  const opt = {
    topTaskId: options.topTask.tguid,
    provinceCode: options.topTask.provincecode,
    cityCode: options.topTask.citycode,
    districtCode: options.topTask.districtcode,
    townCode: options.topTask.towncode,
    startTime: dayjs(options.topTask.starttime).format('YYYY-MM-DD HH:mm:ss'),
    endTime: dayjs(options.topTask.endtime)
      .add(1, 'day')
      .add(-1, 'second')
      .format('YYYY-MM-DD HH:mm:ss'),
    sceneTypeId: options.sceneTypeId,
    needCache: true
  };
  emit('submit', opt);
};
</script>