Merge remote-tracking branch 'origin/master'
| | |
| | | }) |
| | | }, |
| | | jumpMH () { |
| | | const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL |
| | | window.location.href = `${adminUrl}#/gatewayPage` |
| | | // const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL |
| | | // window.location.href = `${adminUrl}#/gatewayPage` |
| | | }, |
| | | }, |
| | | } |
| | |
| | | clearable @clear="handleSearch" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="区域类型" prop="areaType"> |
| | | <el-form-item label="区域类型" prop="areaTypeKeys"> |
| | | <el-select class="command-select" popper-class="command-select-popper" |
| | | v-model="searchParams.areaType" placeholder="请选择" clearable @change="handleSearch"> |
| | | v-model="searchParams.areaTypeKeys" placeholder="请选择" clearable @change="handleSearch"> |
| | | <el-option v-for="item in dictObj.areaType" :key="item.dictKey" :label="item.dictValue" |
| | | :value="item.dictKey" /> |
| | | </el-select> |
| | |
| | | <el-table class="command-table" :data="list"> |
| | | <el-table-column type="index" show-overflow-tooltip width="64" label="序号" /> |
| | | <el-table-column prop="areaName" show-overflow-tooltip label="区域名称" /> |
| | | <el-table-column prop="areaType" show-overflow-tooltip label="区域类型"> |
| | | <el-table-column prop="areaTypeKeys" show-overflow-tooltip label="区域类型"> |
| | | <template v-slot="{ row }"> |
| | | {{ getDictLabel(row.areaType, dictObj.areaType) }} |
| | | {{ getDictLabel(row.areaTypeKeys, dictObj.areaType) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="sceneName" show-overflow-tooltip label="关联场景" /> |
| | |
| | | // 初始化查询参数 |
| | | const initSearchParams = () => ({ |
| | | areaName: '', // 区域名称 |
| | | areaType: '', // 区域类型 |
| | | areaTypeKeys: '', // 区域类型 |
| | | sceneType: '', // 场景类型 |
| | | current: 1, // 当前页 |
| | | size: 10, // 每页大小 |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { computed, nextTick, ref } from 'vue' |
| | | import { computed, nextTick, ref, watch } from 'vue' |
| | | import { ElMessage } from 'element-plus' |
| | | import { fwPoliceStationDetailApi, fwPoliceStationSubmitApi } from './precinctInfoApi' |
| | | import { fieldRules } from '@ztzf/utils' |
| | |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import positionIcon from '@/assets/images/areaManage/positionIcon.png' |
| | | import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip' |
| | | |
| | | const initForm = () => ({ |
| | | address: '', // 位置 |
| | |
| | | let viewer |
| | | let redPointEntity |
| | | let leftClickBound = false |
| | | let mouseMoveBound = false |
| | | let mapTooltip |
| | | let publicCesium |
| | | const tooltipEventKey = 'precinct-info-point-tip' |
| | | const labelParams = { |
| | | font: '18px', |
| | | fillColor: Cesium.Color.WHITE, // 文字颜色:白色 |
| | |
| | | await nextTick() |
| | | const map = inlineMapRef.value?.getMap() |
| | | viewer = map?.viewer || null |
| | | publicCesium = map?.publicCesium || null |
| | | if (viewer && !leftClickBound) { |
| | | map.publicCesium?.addLeftClickEvent?.(null, LeftClickEvent) |
| | | leftClickBound = true |
| | | } |
| | | if (viewer && !readonly.value) { |
| | | ensurePointTooltip() |
| | | } |
| | | if (formData.value.longitude != null && formData.value.latitude != null) { |
| | | setMapPoint(formData.value.longitude, formData.value.latitude) |
| | | } |
| | | } |
| | | |
| | | function ensurePointTooltip() { |
| | | if (!viewer || !publicCesium || mouseMoveBound) return |
| | | mapTooltip ||= new MapTooltip(viewer, { offset: { x: 16, y: 24 } }) |
| | | publicCesium.addMouseHandler?.( |
| | | null, |
| | | movement => { |
| | | if (!visible.value || readonly.value) return |
| | | mapTooltip?.show('点击地图选择派出所位置', movement.endPosition) |
| | | }, |
| | | tooltipEventKey |
| | | ) |
| | | mouseMoveBound = true |
| | | } |
| | | |
| | | function clearPointTooltip() { |
| | | mapTooltip?.hide() |
| | | if (publicCesium && mouseMoveBound) { |
| | | publicCesium.removeMouseHandler?.(tooltipEventKey) |
| | | mouseMoveBound = false |
| | | } |
| | | } |
| | | |
| | |
| | | formData.value = dialogMode.value === 'add' ? initForm() : row |
| | | redPointEntity = null |
| | | leftClickBound = false |
| | | clearPointTooltip() |
| | | if (dialogMode.value !== 'add') { |
| | | await loadDetail() |
| | | } |
| | |
| | | }, 500) |
| | | } |
| | | |
| | | watch( |
| | | () => visible.value, |
| | | val => { |
| | | if (!val) { |
| | | clearPointTooltip() |
| | | } |
| | | } |
| | | ) |
| | | |
| | | defineExpose({ open }) |
| | | </script> |
| | | <style scoped lang="scss"> |
| | |
| | | import { buildEllipsePositions } from '@/utils/cesium/shapeTools' |
| | | import { cartesian3Convert } from '@/utils/cesium/mapUtil' |
| | | import { AREA_TYPE_STYLE_MAP, BUFFER_LEVEL_STYLES, DEFAULT_AREA_STYLE } from '@ztzf/constants' |
| | | import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip' |
| | | |
| | | // 初始化表单数据 |
| | | const initForm = () => ({ |
| | |
| | | let redPointEntity |
| | | let areaDisplaySource |
| | | let leftClickBound = false |
| | | let mouseMoveBound = false |
| | | let mapTooltip |
| | | let publicCesium |
| | | const tooltipEventKey = 'scene-manage-point-tip' |
| | | |
| | | // 表单验证规则 |
| | | const rules = { |
| | |
| | | |
| | | // 初始化地图实例 |
| | | function initMap() { |
| | | if (viewer) return |
| | | const map = mapRef.value?.getMap() |
| | | if (!map?.viewer) return |
| | | viewer = map.viewer |
| | | viewer ||= map.viewer |
| | | publicCesium ||= map.publicCesium |
| | | if (!readonly.value && !leftClickBound) { |
| | | map.publicCesium?.addLeftClickEvent?.(null, LeftClickEvent) |
| | | leftClickBound = true |
| | | } |
| | | if (!readonly.value) ensurePointTooltip() |
| | | } |
| | | |
| | | function ensurePointTooltip() { |
| | | if (!viewer || !publicCesium || mouseMoveBound) return |
| | | mapTooltip ||= new MapTooltip(viewer, { offset: { x: 28, y: 24 } }) |
| | | publicCesium.addMouseHandler?.( |
| | | null, |
| | | movement => { |
| | | if (!visible.value || readonly.value) return |
| | | mapTooltip?.show('点击地图选择指挥点位置', movement.endPosition) |
| | | }, |
| | | tooltipEventKey |
| | | ) |
| | | mouseMoveBound = true |
| | | } |
| | | |
| | | function clearPointTooltip() { |
| | | mapTooltip?.hide() |
| | | if (publicCesium && mouseMoveBound) { |
| | | publicCesium.removeMouseHandler?.(tooltipEventKey) |
| | | mouseMoveBound = false |
| | | } |
| | | } |
| | | |
| | |
| | | redPointEntity = null |
| | | await nextTick() |
| | | initMap() |
| | | if (dialogMode.value === 'view') { |
| | | clearPointTooltip() |
| | | } |
| | | await getSceneConfigList() |
| | | if (dialogMode.value === 'add') { |
| | | mapRef.value?.zoomToAdminBoundary?.() |
| | |
| | | watch( |
| | | () => visible.value, |
| | | val => { |
| | | if (!val) clearAreaDisplay() |
| | | if (!val) { |
| | | clearAreaDisplay() |
| | | clearPointTooltip() |
| | | } |
| | | } |
| | | ) |
| | | |
| | |
| | | <el-table-column prop="purpose" show-overflow-tooltip width="130" label="用途" /> |
| | | <el-table-column prop="belongDeptName" show-overflow-tooltip width="160" label="所属部门" /> |
| | | <el-table-column prop="charger" show-overflow-tooltip width="100" label="负责人" /> |
| | | <el-table-column prop="yxzt" show-overflow-tooltip width="116" label="运行状态"> |
| | | <el-table-column prop="yxzt" show-overflow-tooltip width="96" label="运行状态"> |
| | | <template v-slot="{ row }"> |
| | | {{ getDictLabel(row.status, dictObj.deviceStatus) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="yxzt" show-overflow-tooltip width="116" label="出库状态"> |
| | | <el-table-column prop="yxzt" show-overflow-tooltip width="96" label="出库状态"> |
| | | <template v-slot="{ row }"> |
| | | {{ getDictLabel(row.trackStatus, trackStatusOptions) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" class-name="operation-btns" width="140"> |
| | | <el-table-column label="操作" class-name="operation-btns"> |
| | | <template v-slot="{ row }"> |
| | | <el-link @click="handleView(row)">查看</el-link> |
| | | <el-link @click="handleEdit(row)">编辑</el-link> |
| | |
| | | <el-table-column prop="droneName" show-overflow-tooltip width="130" label="无人机名称" /> |
| | | <el-table-column prop="droneType" show-overflow-tooltip width="130" label="无人机类型" /> |
| | | <el-table-column prop="droneDeviceCode" show-overflow-tooltip width="140" label="设备编码" /> |
| | | <el-table-column prop="findTime" show-overflow-tooltip width="140" label="发现时间" /> |
| | | <el-table-column prop="findTime" show-overflow-tooltip width="156" label="发现时间" /> |
| | | <el-table-column prop="counterEffect" show-overflow-tooltip width="120" label="反制效果"> |
| | | <template v-slot="{ row }"> |
| | | {{ getDictLabel(row.counterEffect, dictObj.counterEffect) }} |
| | |
| | | <el-table-column prop="deviceSn" show-overflow-tooltip width="140" label="反制设备编码" /> |
| | | <el-table-column prop="areaCode" show-overflow-tooltip width="120" label="场景" /> |
| | | <el-table-column prop="areaCode" show-overflow-tooltip width="120" label="区域" /> |
| | | <el-table-column show-overflow-tooltip width="160" label="部署位置"> |
| | | <el-table-column show-overflow-tooltip width="172" label="部署位置"> |
| | | <template v-slot="{ row }"> |
| | | {{ row.deployLongitude && row.deployLatitude ? `${row.deployLongitude}, ${row.deployLatitude}` : '' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="coverRadiusM" show-overflow-tooltip width="120" label="覆盖范围"> |
| | | <el-table-column prop="coverRadiusM" show-overflow-tooltip width="120" label="覆盖范围(m)"> |
| | | <template v-slot="{ row }"> |
| | | {{ row.coverRadiusM ? `${row.coverRadiusM}米` : '' }} |
| | | {{ row.coverRadiusM ? `${row.coverRadiusM}` : '' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="workMode" show-overflow-tooltip width="120" label="工作模式"> |
| | |
| | | <el-table-column prop="deviceModel" show-overflow-tooltip label="设备型号" /> |
| | | <el-table-column prop="deviceName" show-overflow-tooltip label="设备名称" /> |
| | | <el-table-column prop="deviceSn" show-overflow-tooltip label="设备编码" /> |
| | | <el-table-column prop="deviceStatus" show-overflow-tooltip label="设备状态"> |
| | | <el-table-column prop="deviceStatus" show-overflow-tooltip width="96" label="设备状态"> |
| | | <template v-slot="{ row }"> |
| | | {{ getDictLabel(row.status, dictObj.deviceStatus) }} |
| | | </template> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="manufacturer" show-overflow-tooltip label="厂商" /> |
| | | <el-table-column prop="contactPhone" show-overflow-tooltip label="联系方式" /> |
| | | <el-table-column prop="contactPhone" show-overflow-tooltip width="112" label="联系方式" /> |
| | | <el-table-column prop="sceneName" show-overflow-tooltip label="所属场景" /> |
| | | <el-table-column label="操作" class-name="operation-btns"> |
| | | <template v-slot="{ row }"> |
| | |
| | | <div class="val">{{ formData.projectExperience }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞手地址</div> |
| | | <div class="val">{{ formData.flyerAddress }}</div> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div class="label">飞手证书</div> |
| | | <div class="val"> |
| | | <el-image |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="24" v-if="dialogType === 'view'"> |
| | | <el-form-item label="飞手证书" prop="certification"> |
| | | <el-image |
| | | v-for="(item, index) in formData.certification" |
| | | :key="index" |
| | | :src="item" |
| | | :preview-src-list="formData.certification" |
| | | class="gd-image" |
| | | style="width: 100px; height: 100px; margin-right: 10px;" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> --> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | <div class="upload-container"> |
| | | <el-upload |
| | | :http-request="handleHttpRequest" |
| | | :limit="3" |
| | | :on-success="handleUploadSuccess" |
| | | :on-error="handleUploadError" |
| | | :on-remove="handleFileRemove" |
| | |
| | | <el-table-column label="操作" class-name="operation-btns" width="140"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openDistributeDialog(row)" v-if="permission.clueEvents_distribute && (row.distributeStatus === 0 || row.distributeStatus === 2)"> |
| | | 转为事件并分发 |
| | | {{ row.distributeStatus === 2 ? '再次分发':'转为事件并分发' }} |
| | | </el-link> |
| | | <el-button disabled type="text" v-else>转为事件并分发</el-button> |
| | | </template> |
| | |
| | | const distributeStatusOptions = [ |
| | | { label: '未分发', value: 0 }, |
| | | { label: '已分发', value: 1 }, |
| | | { label: '已退回', value: 2 }, |
| | | { label: '被退回', value: 2 }, |
| | | { label: '已确认', value: 3 }, |
| | | ] |
| | | |
| | |
| | | 任务执行时间 |
| | | </template> |
| | | <template v-slot="{ row }"> |
| | | <!-- gd-date-picker-popper--> |
| | | <el-date-picker |
| | | class="gd-date-picker" |
| | | popper-class="gd-date-picker-popper" |
| | | popper-class="" |
| | | v-model="row.executeTime" |
| | | type="datetime" |
| | | placeholder="请选择" |