吉安感知网项目-前端
罗广辉
2026-01-31 8681bbd0bbf7084cca70ab99ec60413cf6547cd8
feat: 跳转修改
11 files modified
322 ■■■■ changed files
applications/drone-command/env/.env.development 34 ●●●●● patch | view | raw | blame | history
applications/drone-command/env/.env.production 22 ●●●● patch | view | raw | blame | history
applications/drone-command/src/axios.js 20 ●●●● patch | view | raw | blame | history
applications/drone-command/src/page/index/top/index.vue 3 ●●●● patch | view | raw | blame | history
applications/drone-command/src/permission.js 3 ●●●● patch | view | raw | blame | history
applications/drone-command/src/store/modules/user.js 7 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/axios.js 20 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/page/index/top/index.vue 3 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/permission.js 3 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/store/modules/user.js 7 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue 200 ●●●● patch | view | raw | blame | history
applications/drone-command/env/.env.development
@@ -1,41 +1,31 @@
###
 # @Author       : yuan
 # @Date         : 2026-01-07 14:58:30
 # @LastEditors  : yuan
 # @LastEditTime : 2026-01-30 09:29:25
 # @FilePath     : \applications\drone-command\env\.env.development
 # @Description  :
 # Copyright 2026 OBKoro1, All Rights Reserved.
 # 2026-01-07 14:58:30
###
NODE_ENV = 'development'
NODE_ENV='development'
#开发环境配置
VITE_APP_ENV = 'development'
VITE_APP_ENV='development'
#开发环境代理地址(推荐本地新建文件 .env.development.local 来进行覆盖)
# VITE_APP_URL = https://wrj.shuixiongit.com/api
VITE_APP_URL= http://192.168.1.168
# VITE_APP_URL=https://wrj.shuixiongit.com/api
VITE_APP_URL=http://192.168.1.168
#新大屏地址
VITE_APP_DASHBOARD_URL = 'https://wrj.shuixiongit.com/command-center-dashboard/'
VITE_APP_DASHBOARD_URL='https://wrj.shuixiongit.com/command-center-dashboard/'
# 域名
VITE_APP_AREA_NAME = https://wrj.shuixiongit.com
VITE_APP_AREA_NAME=https://wrj.shuixiongit.com
# ws地址
VITE_APP_WS_API_URL = wss://wrj.shuixiongit.com/drone-wss/api/v1/ws
VITE_APP_WS_API_URL=wss://wrj.shuixiongit.com/drone-wss/api/v1/ws
# 航线文件地址
VITE_APP_AIRLINE_URL = https://wrj.shuixiongit.com/minio/cloud-bucket
VITE_APP_AIRLINE_URL=https://wrj.shuixiongit.com/minio/cloud-bucket
# 地形存放
VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_c_uas/
VITE_APP_TERRAIN_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_c_uas/
# 行政区划存放地址
VITE_APP_REGION_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_region
VITE_APP_REGION_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_region
# 算法仓库图片地址
VITE_APP_PICTURE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
VITE_APP_PICTURE_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
# 设备ip地址
VITE_APP_DEVICE_IP = '139.196.74.78:1883'
VITE_APP_DEVICE_IP='139.196.74.78:1883'
applications/drone-command/env/.env.production
@@ -1,32 +1,32 @@
NODE_ENV = 'production'
NODE_ENV='production'
#生产环境配置
VITE_APP_ENV = 'production'
VITE_APP_ENV='production'
# 服务地址
VITE_APP_URL = https://aisky.org.cn/api
VITE_APP_URL=https://aisky.org.cn/api
# 域名
VITE_APP_AREA_NAME = https://aisky.org.cn
VITE_APP_AREA_NAME=https://aisky.org.cn
#新大屏地址
VITE_APP_DASHBOARD_URL = 'https://aisky.org.cn/command-center-dashboard/'
VITE_APP_DASHBOARD_URL='https://aisky.org.cn/command-center-dashboard/'
# ws地址
VITE_APP_WS_API_URL = wss://aisky.org.cn/drone-wss/api/v1/ws
VITE_APP_WS_API_URL=wss://aisky.org.cn/drone-wss/api/v1/ws
# 航线文件地址
VITE_APP_AIRLINE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
VITE_APP_AIRLINE_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
# 图片存放地址
VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_terrain/
VITE_APP_TERRAIN_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_terrain/
# 算法仓库图片地址
VITE_APP_PICTURE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
VITE_APP_PICTURE_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
# 行政区划存放地址
VITE_APP_REGION_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_region
VITE_APP_REGION_URL=https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_region
# 设备ip地址
VITE_APP_DEVICE_IP = '101.132.85.201:1883'
VITE_APP_DEVICE_IP='101.132.85.201:1883'
applications/drone-command/src/axios.js
@@ -151,16 +151,16 @@
          removeRefreshToken();
          const env = import.meta.env.VITE_APP_ENV;
          // 重定向到登录页
          // store.dispatch('FedLogOut').then(() => router.push({
          //     path: '/login'
          // }));
          env === 'development'
            ? store.dispatch('FedLogOut').then(() =>
                router.push({
                  path: '/login',
                })
              )
            : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
          store.dispatch('FedLogOut').then(() => router.push({
              path: '/login'
          }));
          // env === 'development'
          //   ? store.dispatch('FedLogOut').then(() =>
          //       router.push({
          //         path: '/login',
          //       })
          //     )
          //   : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
          return Promise.reject(new Error(message));
        });
    }
applications/drone-command/src/page/index/top/index.vue
@@ -95,7 +95,8 @@
        this.$store.dispatch('LogOut').then(() => {
          const env = import.meta.env.VITE_APP_ENV
          const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
          env === 'development' ? this.$router.push({ path: '/login' }) : window.location.replace(`${adminUrl}#/login`)
                    this.$router.push({ path: '/login' })
          // env === 'development' ? this.$router.push({ path: '/login' }) : window.location.replace(`${adminUrl}#/login`)
        })
      })
    },
applications/drone-command/src/permission.js
@@ -121,7 +121,8 @@
    if (meta.isAuth === false) {
      next()
    } else {
      env === 'development' ? next('/login') : window.location.replace(`${adminUrl}#/login`)
            next('/login')
      // env === 'development' ? next('/login') : window.location.replace(`${adminUrl}#/login`)
    }
  }
})
applications/drone-command/src/store/modules/user.js
@@ -274,9 +274,10 @@
        dispatch('LogOut').then(()=>{
          const env = import.meta.env.VITE_APP_ENV
          const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
          env === 'development'
            ? window.location.href = "/drone-command/login"
            : window.location.replace(`${adminUrl}#/login`)
                    window.location.href = "/drone-command/login"
          // env === 'development'
          //   ? window.location.href = "/drone-command/login"
          //   : window.location.replace(`${adminUrl}#/login`)
        })
      }
      return new Promise(resolve => {
applications/task-work-order/src/axios.js
@@ -153,16 +153,16 @@
                    removeRefreshToken()
                    const env = import.meta.env.VITE_APP_ENV
                    // 重定向到登录页
                    // store.dispatch('FedLogOut').then(() => router.push({
                    //     path: '/login'
                    // }));
                    env === 'development'
                        ? store.dispatch('FedLogOut').then(() =>
                                router.push({
                                    path: '/login',
                                })
                          )
                        : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`))
                    store.dispatch('FedLogOut').then(() => router.push({
                        path: '/login'
                    }));
                    // env === 'development'
                    //     ? store.dispatch('FedLogOut').then(() =>
                    //             router.push({
                    //                 path: '/login',
                    //             })
                    //       )
                    //     : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`))
                    return Promise.reject(new Error(message))
                })
        }
applications/task-work-order/src/page/index/top/index.vue
@@ -89,7 +89,8 @@
        this.$store.dispatch('LogOut').then(() => {
        const env = import.meta.env.VITE_APP_ENV
          const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
           env === 'development' ? this.$router.push({ path: '/login' }):window.location.replace(`${adminUrl}#/login`)
                    this.$router.push({ path: '/login' })
           // env === 'development' ? this.$router.push({ path: '/login' }):window.location.replace(`${adminUrl}#/login`)
        })
      })
    },
applications/task-work-order/src/permission.js
@@ -120,7 +120,8 @@
    if (meta.isAuth === false) {
      next()
    } else {
      env === 'development' ? next('/login') : window.location.replace(`${adminUrl}#/login`)
            next('/login')
      // env === 'development' ? next('/login') : window.location.replace(`${adminUrl}#/login`)
    }
  }
})
applications/task-work-order/src/store/modules/user.js
@@ -262,9 +262,10 @@
                dispatch('LogOut').then(() => {
                    const env = import.meta.env.VITE_APP_ENV
                    const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
                    env === 'development'
                        ? (window.location.href = '/task-work-order/login')
                        : window.location.replace(`${adminUrl}#/login`)
                    (window.location.href = '/task-work-order/login')
                    // env === 'development'
                    //     ? (window.location.href = '/task-work-order/login')
                    //     : window.location.replace(`${adminUrl}#/login`)
                })
            }
            return new Promise(resolve => {
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -10,22 +10,42 @@
    >
        <div class="content" style="display: flex">
            <div class="processBox" v-if="dialogMode !== 'add' && processList.length">
                <el-timeline class="gd-timeline">
                    <el-timeline-item
                        v-for="(activity, index) in processList"
                        :key="index"
                        :icon="Check"
                        :type="index === processList.length - 1 ? 'success' : 'info'"
                        :color="activity.color"
                        :hollow="activity.hollow"
                        :timestamp="activity.createTime"
                    >
                        <div class="item-content">
                            <div>{{ activity.operator }}</div>
                            <div class="flowName">{{ activity.flowName }}</div>
                <div class="timeline-wrapper">
                    <div v-for="(stage, stageIndex) in processList" :key="stageIndex" class="stage-group">
                        <!-- 大节点 Stage Node -->
                        <div class="stage-node">
                            <div class="stage-icon" :class="{ reached: stage.reached }">
                                <el-icon v-if="stage.reached"><Check /></el-icon>
                                <span v-else class="stage-index">{{ stageIndex + 1 }}</span>
                            </div>
                            <span class="stage-name">{{ stage.stageName }}</span>
                        </div>
                    </el-timeline-item>
                </el-timeline>
                        <!-- 小节点 Child Nodes -->
                        <div class="child-list" v-if="stage.child && stage.child.length">
                            <template v-for="(child, childIndex) in stage.child.filter(c => c.reached)">
                                <div v-if="child.reached" :key="childIndex" class="child-node">
                                    <div class="child-left">
                                        <span class="child-status">{{ child.statusName }}</span>
                                    </div>
                                    <div class="child-dot"></div>
                                    <div class="child-right">
                                        <span class="child-operator">{{ child.operator || '-' }}</span>
                                        <span class="child-time">{{ child.createTime || '-' }}</span>
                                    </div>
                                </div>
                            </template>
                        </div>
                        <!-- 连接线 -->
                        <div
                            class="connector-line"
                            v-if="stageIndex < processList.length - 1"
                            :class="{ reached: stage.reached }"
                        ></div>
                    </div>
                </div>
            </div>
            <div class="leftBox">
                <div v-if="dialogReadonly">
@@ -334,13 +354,13 @@
const gdStatusObj = {
    '10': { reason: '拒单原因', operationType: '2', title: '拒绝接单' },
    '11': { reason: '拒单原因' },
    '20': { reason: '原因', operationType: '3',title:'申请取消' },
    '20': { reason: '原因', operationType: '3', title: '申请取消' },
    '21': { reason: '取消原因' },
    '23': { reason: '取消原因' },
    '30': { reason: '修改原因', operationType: '9',title:'协商修改' },
    '30': { reason: '修改原因', operationType: '9', title: '协商修改' },
    '31': { reason: '修改原因' },
    '40': { reason: '' },
    '50': { reason: '情况说明', operationType: '11',title:'结算' },
    '50': { reason: '情况说明', operationType: '11', title: '结算' },
    '60': { reason: '情况说明' },
}
@@ -394,7 +414,7 @@
            row: formData.value,
            type: gdStatusObj[gdStatus.value].operationType,
            formLabel: gdStatusObj[gdStatus.value].reason,
            title: gdStatusObj[gdStatus.value]?.title || '新增'
            title: gdStatusObj[gdStatus.value]?.title || '新增',
        })
    })
}
@@ -687,18 +707,148 @@
    }
    .processBox {
        padding: 24px 0;
        padding: 24px 16px;
        width: 312px;
        border: 1px solid #e4e4e4;
        border-radius: 8px;
        overflow: auto;
        background: #fff;
        .item-content {
        .timeline-wrapper {
            padding-left: 100px;
            position: relative;
            .flowName {
                width: 80px;
        }
        .stage-group {
            position: relative;
        }
        // 大节点 - Stage Node
        .stage-node {
            display: flex;
            align-items: center;
            gap: 12px;
            margin-bottom: 8px;
            .stage-icon {
                width: 28px;
                height: 28px;
                border-radius: 50%;
                background: #e0e0e0;
                display: flex;
                align-items: center;
                justify-content: center;
                color: #fff;
                font-size: 14px;
                font-weight: 600;
                flex-shrink: 0;
                position: relative;
                z-index: 2;
                &.reached {
                    background: #1a1a2e;
                }
                .el-icon {
                    font-size: 16px;
                }
                .stage-index {
                    font-size: 12px;
                }
            }
            .stage-name {
                width: 70px;
                text-align: right;
                position: absolute;
                left: -120px;
                top: 0px;
                left: -80px;
                font-family: Roboto, Roboto;
                font-weight: bold;
                font-size: 16px;
                color: rgba(0,0,0,0.85);
            }
        }
        // 小节点 - Child Nodes
        .child-list {
            position: relative;
            left: -52px;
        }
        .child-node {
            display: flex;
            align-items: flex-start;
            position: relative;
            &:last-child::before {
                bottom: 50%;
            }
            .child-left {
                width: 100px;
                flex-shrink: 0;
                text-align: right;
                padding-right: 20px;
                font-family: Source Han Sans CN, Source Han Sans CN;
                font-weight: 400;
                font-size: 14px;
                color: rgba(0,0,0,0.85);
                .child-status {
                    white-space: nowrap;
                }
            }
            .child-dot {
                width: 12px;
                height: 12px;
                border-radius: 50%;
                background: #1a1a2e;
                flex-shrink: 0;
                position: relative;
                z-index: 2;
                margin-top: 4px;
            }
            .child-right {
                flex: 1;
                padding-left: 12px;
                display: flex;
                flex-direction: column;
                gap: 2px;
                .child-operator {
                    font-family: Source Han Sans CN, Source Han Sans CN;
                    font-weight: 400;
                    font-size: 14px;
                    color: rgba(0,0,0,0.85);
                }
                .child-time {
                    white-space: nowrap;
                    font-family: Source Han Sans CN, Source Han Sans CN;
                    font-weight: 400;
                    font-size: 14px;
                    color: rgba(0,0,0,0.45);
                }
            }
        }
        // 连接线
        .connector-line {
            position: absolute;
            left: 13px;
            width: 2px;
            height: 100%;
            background: #e0e0e0;
            top: 28px;
            z-index: 1;
            &.reached {
                background: #1a1a2e;
            }
        }
    }