吉安感知网项目-前端
shuishen
2026-01-26 bac9657fdef49221a80ace96d3522d0a66e758a0
Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web
10 files modified
192 ■■■■■ changed files
applications/task-work-order/src/views/orderView/orderManage/clueEvents/ViewDiaLog.vue 82 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue 7 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue 13 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue 4 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue 4 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue 4 ●●●● patch | view | raw | blame | history
uniapps/work-app/src/api/map.js 8 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/pages/map/index.vue 10 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/pages/work/index.vue 26 ●●●●● patch | view | raw | blame | history
uniapps/work-app/src/store/modules/location.js 34 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderManage/clueEvents/ViewDiaLog.vue
@@ -1,47 +1,45 @@
<template>
    <el-dialog class="gd-dialog" v-model="visible" title="查看" @closed="visible = false" width="1000px" destroy-on-close>
        <div class="gd-table-container" v-loading="loading" style="height: 600px">
            <div class="gd-table-content gd-table-content-bg">
                <el-table class="gd-table" :data="list">
                    <el-table-column label="线索缩略图" width="120">
                        <template v-slot="{ row }">
                            <el-image
                                v-if="row.resultUrl"
                                :src="row.resultUrl"
                                :preview-src-list="[row.resultUrl]"
                                fit="cover"
                                style="width: 80px; height: 60px"
                                preview-teleported
                            />
                            <span v-else>-</span>
                        </template>
                    </el-table-column>
                    <el-table-column prop="resultCode" show-overflow-tooltip label="线索编号" />
                    <el-table-column prop="shootTime" show-overflow-tooltip label="拍摄时间" />
                    <el-table-column label="线索位置" show-overflow-tooltip>
                        <template v-slot="{ row }">
                            {{ formatLocation(row) }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="distributeStatus" show-overflow-tooltip label="线索状态">
                        <template v-slot="{ row }">
                            {{ getDistributeStatusLabel(row.distributeStatus) }}
                        </template>
                    </el-table-column>
                    <el-table-column prop="distributeDeptName" show-overflow-tooltip label="分发部门" />
                    <el-table-column prop="distributeUserName" show-overflow-tooltip label="分发人员" />
                    <el-table-column label="操作" class-name="operation-btns" width="140">
                        <template v-slot="{ row }">
                            <el-link  type="primary"
                                @click="openDistributeDialog(row)"
                                :disabled="row.distributeStatus === 1 || currentRow.taskStatus !== '50'"
                            >
                                转为事件并分发
                            </el-link>
                        </template>
                    </el-table-column>
                </el-table>
            </div>
        <div v-loading="loading">
            <el-table :data="list">
                <el-table-column label="线索缩略图" width="120">
                    <template v-slot="{ row }">
                        <el-image
                            v-if="row.resultUrl"
                            :src="row.resultUrl"
                            :preview-src-list="[row.resultUrl]"
                            fit="cover"
                            style="width: 80px; height: 60px"
                            preview-teleported
                        />
                        <span v-else>-</span>
                    </template>
                </el-table-column>
                <el-table-column prop="resultCode" show-overflow-tooltip label="线索编号" />
                <el-table-column prop="shootTime" show-overflow-tooltip label="拍摄时间" />
                <el-table-column label="线索位置" show-overflow-tooltip>
                    <template v-slot="{ row }">
                        {{ formatLocation(row) }}
                    </template>
                </el-table-column>
                <el-table-column prop="distributeStatus" show-overflow-tooltip label="线索状态">
                    <template v-slot="{ row }">
                        {{ getDistributeStatusLabel(row.distributeStatus) }}
                    </template>
                </el-table-column>
                <el-table-column prop="distributeDeptName" show-overflow-tooltip label="分发部门" />
                <el-table-column prop="distributeUserName" show-overflow-tooltip label="分发人员" />
                <el-table-column label="操作" class-name="operation-btns" width="140">
                    <template v-slot="{ row }">
                        <el-link  type="primary"
                                            @click="openDistributeDialog(row)"
                                            :disabled="row.distributeStatus === 1 || currentRow.taskStatus !== '8'"
                        >
                            转为事件并分发
                        </el-link>
                    </template>
                </el-table-column>
            </el-table>
        </div>
        <template #footer>
applications/task-work-order/src/views/orderView/orderManage/clueEvents/index.vue
@@ -159,7 +159,12 @@
    const range = dateRangeFormat(dateRange.value)
    loading.value = true
    try {
        const res = await gdPatrolTaskPageApi({ ...searchParams.value, startTime: range[0], endTime: range[1] })
        const res = await gdPatrolTaskPageApi({
            ...searchParams.value,
            startTime: range[0],
            endTime: range[1],
            taskStatus: 8
        })
        list.value = res?.data?.data?.records ?? []
        total.value = res?.data?.data?.total ?? 0
    } finally {
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/FormDiaLog.vue
@@ -221,7 +221,7 @@
const dialogMode = ref('add') // 弹框模式
const submitting = ref(false) // 提交中
const dialogReadonly = computed(() => dialogMode.value === 'view')
const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' })
const titleEnum = ref({ edit: '新增', view: '查看', add: '新增' })
// 工单相关
const workOrderList = ref([]) // 工单列表
@@ -270,7 +270,7 @@
// 获取工单列表
async function getWorkOrderList() {
    const res = await gdWorkOrderPageApi({ size: 999, workOrderStatus: '20' })
    const res = await gdWorkOrderPageApi({ size: 999, workOrderStatus: dialogMode.value ==='add' ?  '20' : '' })
    workOrderList.value = res?.data?.data?.records ?? []
}
@@ -294,7 +294,7 @@
// 获取设备列表
async function getDeviceList() {
    const res = await gdManageDeviceListApi({
        deviceIds: selectedWorkOrder.value.recommendDeviceIds,
        deviceIds: selectedWorkOrder.value?.recommendDeviceIds,
    })
    deviceList.value = res?.data?.data ?? []
}
@@ -302,6 +302,7 @@
watch(
    () => selectedWorkOrderId.value,
    () => {
        handleWorkOrderChange(selectedWorkOrderId.value)
        getDeviceList()
    }
)
@@ -364,9 +365,9 @@
// 打开弹框
async function open({ mode = 'add', row } = {}) {
    console.log(row, 'rowrow')
    dialogMode.value = mode
    if (mode === 'add') {
    await getWorkOrderList()
    if (dialogMode.value === 'add') {
        selectedWorkOrderId.value = null
        selectedWorkOrder.value = null
        taskList.value = [initTaskRow()]
@@ -385,7 +386,7 @@
}
onMounted(() => {
    getWorkOrderList()
})
defineExpose({ open })
applications/task-work-order/src/views/orderView/orderManage/inspectionRequest/ViewDiaLog.vue
@@ -18,10 +18,10 @@
                        :type="index === processList.length - 1 ? 'success' : 'info'"
                        :color="activity.color"
                        :hollow="activity.hollow"
                        :timestamp="activity.flowDesc.split(' ')[1] + activity.flowDesc.split(' ')[2]"
                        :timestamp="activity.createTime"
                    >
                        <div class="item-content">
                            <div>{{ activity.flowDesc.split(' ')[0] }}</div>
                            <div>{{ activity.operator }}</div>
                            <div class="flowName">{{ activity.flowName }}</div>
                        </div>
                    </el-timeline-item>
applications/task-work-order/src/views/orderView/orderManage/operatingIncome/index.vue
@@ -20,8 +20,8 @@
                <el-table-column label="操作" width="180" align="center" class-name="operation-btns">
                    <template #default="scope">
            <!-- <el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button> -->
                            <el-link @click="handleEdit(scope.row)">编辑</el-link>
                            <el-link @click="handleDelete(scope.row)">删除</el-link>
                            <el-link type="primary" @click="handleEdit(scope.row)">编辑</el-link>
                            <el-link  type="primary" @click="handleDelete(scope.row)">删除</el-link>
                    </template>
                </el-table-column>
            </el-table>
applications/task-work-order/src/views/orderView/orderManage/orderManage/FormDiaLog.vue
@@ -18,10 +18,10 @@
                        :type="index === processList.length - 1 ? 'success' : 'info'"
                        :color="activity.color"
                        :hollow="activity.hollow"
                        :timestamp="activity.flowDesc.split(' ')[1] + activity.flowDesc.split(' ')[2]"
                        :timestamp="activity.createTime"
                    >
                        <div class="item-content">
                            <div>{{ activity.flowDesc.split(' ')[0] }}</div>
                            <div>{{ activity.operator }}</div>
                            <div class="flowName">{{ activity.flowName }}</div>
                        </div>
                    </el-timeline-item>
uniapps/work-app/src/api/map.js
@@ -7,3 +7,11 @@
    data: { hidden_flag: 0, ...data },
  })
}
// 位置上报
export const reportLocationApi = data => {
  return request({
    url: '/webservice/jaUserTrajectory/reportLocation',
    method: 'post',
    data,
  })
}
uniapps/work-app/src/pages/map/index.vue
@@ -1,13 +1,3 @@
<!--
 * @Author       : yuan
 * @Date         : 2025-12-03 14:20:57
 * @LastEditors  : yuan
 * @LastEditTime : 2025-12-20 16:49:02
 * @FilePath     : \src\pages\map\index.vue
 * @Description  :
 * Copyright 2025 OBKoro1, All Rights Reserved.
 * 2025-12-03 14:20:57
-->
<template>
  <view class="page-wrap">
    <WebViewPlus :src="`${viewUrl}`" @webMessage="onPostMessage" />
uniapps/work-app/src/pages/work/index.vue
@@ -2,7 +2,7 @@
  <div class="eventTickets" :style="{ paddingTop: topMargin + 'px' }">
    <div class="searchTop">
      <up-search placeholder="请输入关键字搜索"  :animation="true"  v-model="listParams.keyword" :show-action="false" @search="handleSearch"></up-search>
      <up-search placeholder="请输入关键字搜索"  :animation="true"  v-model="listParams.keyword" :show-action="false" @search="handleSearch" @clear="handleClear"></up-search>
    </div>
    <div class="listBox">
      <div class="tabs-container">
@@ -18,6 +18,11 @@
              <div class="itemContent">{{formatDate(item.createTime) }}</div>
            </div>
          </div>
        </div>
        <!-- 暂无数据提示 -->
        <div class="noData" v-if="!loading && dataList.length === 0">
          <text>暂无数据</text>
        </div>
        <!-- 加载提示 -->
@@ -151,6 +156,15 @@
// 搜索功能
const handleSearch = () => {
  listParams.value.current = 1
  hasMore.value = true
  dataList.value = []
  getDataList()
  getstatusCountData()
}
// 清除搜索
const handleClear = () => {
  listParams.value.keyword = ''
  listParams.value.current = 1
  hasMore.value = true
  dataList.value = []
@@ -295,5 +309,15 @@
    color: #999;
    width: 100%;
  }
  .noData {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 300rpx;
    font-size: 28rpx;
    color: #999;
    width: 100%;
  }
}
</style>
uniapps/work-app/src/store/modules/location.js
@@ -1,5 +1,6 @@
import { defineStore } from 'pinia'
import locationUtil from '@/utils/location.js'
import { reportLocationApi } from '@/api/map.js'
const useLocationStore = defineStore('location', {
  state: () => ({
@@ -12,7 +13,9 @@
    // 位置更新间隔(毫秒)
    updateInterval: 5000,
    // 位置监听器ID
    watcherId: null
    watcherId: null,
    // 上次位置上报时间
    lastReportTime: 0
  }),
  getters: {
@@ -115,13 +118,32 @@
    },
    /**
     * 位置信息上报(可根据实际需求实现)
     * 位置信息上报
     * @param {Object} location 位置信息
     */
    reportLocation(location) {
      // 这里可以添加位置信息上报到服务器的逻辑
      // 例如:api.uploadLocation(location)
      console.log('位置上报:', location);
    async reportLocation(location) {
      try {
        const now = Date.now();
        // 检查是否达到上报时间间隔(1分钟)
        if (now - this.lastReportTime >= 60000) {
          // 构造请求参数
           const params = {
            longitude: location.longitude,
            latitude: location.latitude,
            // reportTime: new Date().toISOString()
          };
          // 调用位置上报接口
          const result = await reportLocationApi(params);
          console.log('位置上报成功:', result);
          // 更新上次上报时间
          this.lastReportTime = now;
        }
      } catch (error) {
        console.error('位置上报失败:', error);
      }
    },
    /**