Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web
| | |
| | | <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"> |
| | | <div v-loading="loading"> |
| | | <el-table :data="list"> |
| | | <el-table-column label="线索缩略图" width="120"> |
| | | <template v-slot="{ row }"> |
| | | <el-image |
| | |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" |
| | | @click="openDistributeDialog(row)" |
| | | :disabled="row.distributeStatus === 1 || currentRow.taskStatus !== '50'" |
| | | :disabled="row.distributeStatus === 1 || currentRow.taskStatus !== '8'" |
| | | > |
| | | 转为事件并分发 |
| | | </el-link> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | |
| | | <template #footer> |
| | |
| | | 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 { |
| | |
| | | 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([]) // 工单列表 |
| | |
| | | |
| | | // 获取工单列表 |
| | | 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 ?? [] |
| | | } |
| | | |
| | |
| | | // 获取设备列表 |
| | | async function getDeviceList() { |
| | | const res = await gdManageDeviceListApi({ |
| | | deviceIds: selectedWorkOrder.value.recommendDeviceIds, |
| | | deviceIds: selectedWorkOrder.value?.recommendDeviceIds, |
| | | }) |
| | | deviceList.value = res?.data?.data ?? [] |
| | | } |
| | |
| | | watch( |
| | | () => selectedWorkOrderId.value, |
| | | () => { |
| | | handleWorkOrderChange(selectedWorkOrderId.value) |
| | | getDeviceList() |
| | | } |
| | | ) |
| | |
| | | |
| | | // 打开弹框 |
| | | 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()] |
| | |
| | | } |
| | | |
| | | onMounted(() => { |
| | | getWorkOrderList() |
| | | |
| | | }) |
| | | |
| | | defineExpose({ open }) |
| | |
| | | :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> |
| | |
| | | <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> |
| | |
| | | :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> |
| | |
| | | data: { hidden_flag: 0, ...data }, |
| | | }) |
| | | } |
| | | // 位置上报 |
| | | export const reportLocationApi = data => { |
| | | return request({ |
| | | url: '/webservice/jaUserTrajectory/reportLocation', |
| | | method: 'post', |
| | | data, |
| | | }) |
| | | } |
| | |
| | | <!-- |
| | | * @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" /> |
| | |
| | | <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"> |
| | |
| | | <div class="itemContent">{{formatDate(item.createTime) }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 暂无数据提示 --> |
| | | <div class="noData" v-if="!loading && dataList.length === 0"> |
| | | <text>暂无数据</text> |
| | | </div> |
| | | |
| | | <!-- 加载提示 --> |
| | |
| | | |
| | | // 搜索功能 |
| | | 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 = [] |
| | |
| | | color: #999; |
| | | width: 100%; |
| | | } |
| | | |
| | | .noData { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 300rpx; |
| | | font-size: 28rpx; |
| | | color: #999; |
| | | width: 100%; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | import { defineStore } from 'pinia' |
| | | import locationUtil from '@/utils/location.js' |
| | | import { reportLocationApi } from '@/api/map.js' |
| | | |
| | | const useLocationStore = defineStore('location', { |
| | | state: () => ({ |
| | |
| | | // 位置更新间隔(毫秒) |
| | | updateInterval: 5000, |
| | | // 位置监听器ID |
| | | watcherId: null |
| | | watcherId: null, |
| | | // 上次位置上报时间 |
| | | lastReportTime: 0 |
| | | }), |
| | | |
| | | getters: { |
| | |
| | | }, |
| | | |
| | | /** |
| | | * 位置信息上报(可根据实际需求实现) |
| | | * 位置信息上报 |
| | | * @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); |
| | | } |
| | | }, |
| | | |
| | | /** |