Merge remote-tracking branch 'origin/master'
55 files modified
13 files deleted
| | |
| | | <script type="text/javascript" |
| | | src='https://webapi.amap.com/maps?v=2.0&key=eb0654440644f710110547d2132b2fbe&plugin=AMap.PlaceSearch,AMap.Geocoder'></script> |
| | | <script src="https://webapi.amap.com/ui/1.1/main.js?v=1.0.11"></script> |
| | | <title>中图智绘低空无人机监测网平台</title> |
| | | <title>反制平台</title> |
| | | </head> |
| | | |
| | | <body class="theme-white"> |
| | |
| | | |
| | | export default function getBaseConfig () { |
| | | return { |
| | | loginTitle: '中图智飞低空智能感知网平台', //登陆页面标题 |
| | | // envName: 'jiangwu', |
| | | loginTitle: '反制平台', //登陆页面标题 |
| | | ...defaultLayer |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | // 直接导入所有配置文件 |
| | | import jiangwuConfig from '@/buildConfig/buildConfig/config.jiangwu.js' |
| | | import defaultConfig from '@/buildConfig/buildConfig/config.default.js' |
| | | |
| | | // 根据环境变量选择配置 |
| | | const env = import.meta.env.VITE_APP_ENV || 'default' |
| | | const configMap = { |
| | | jiangwu: jiangwuConfig, |
| | | default: defaultConfig |
| | | } |
| | | |
| | | // 导出配置函数 |
| | | export default configMap[env] || configMap.default |
| | | export default configMap[env] || configMap.default |
| | |
| | | export default { |
| | | title: '中图智绘低空无人机监测网平台', |
| | | title: '反制平台', |
| | | logoutTip: 'Exit the system, do you want to continue?', |
| | | submitText: 'submit', |
| | | cancelText: 'cancel', |
| | |
| | | export default { |
| | | title: '中图智绘低空无人机监测网平台', |
| | | title: '反制平台', |
| | | logoutTip: '退出系统, 是否继续?', |
| | | submitText: '确定', |
| | | cancelText: '取消', |
| | |
| | | NProgress.done() |
| | | const isLoginPage = to.path === '/login' |
| | | // 根据是否登录页设置标题 |
| | | const pageTitle = isLoginPage ? '中图智飞低空感知网平台' : '综合管理平台' |
| | | const pageTitle = isLoginPage ? '反制平台' : '反制平台' |
| | | document.title = pageTitle |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| | |
| | | import { cartesian3Convert } from '@/utils/cesium/mapUtil' |
| | | import * as turf from '@turf/turf' |
| | | import * as Cesium from 'cesium' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | // 初始化表单 |
| | | const initForm = () => ({ |
| | |
| | | const selectedSceneRows = ref([]) // 选中场景 |
| | | const dictObj = inject('dictObj') |
| | | const mapRef = ref(null) |
| | | const route = useRoute() |
| | | let viewer |
| | | let drawPolygonExample |
| | | let pointList = [] |
| | |
| | | const str = [...pointList, pointList[0]].map(item => `${item.longitude} ${item.latitude}`).join(',') |
| | | formData.value.geom = `POLYGON((${str}))` |
| | | await fwDefenseZoneSubmitApi(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '防区管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { fwDefenseZonePageApi, fwDefenseZoneRemoveApi } from './defenseZoneApi' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | // 初始化查询参数 |
| | | const initSearchParams = () => ({ |
| | |
| | | const queryParamsRef = ref(null) // 查询表单实例 |
| | | const dialogRef = ref(null) // 弹框实例 |
| | | const dialogVisible = ref(false) |
| | | const route = useRoute() |
| | | |
| | | // 获取列表 |
| | | async function getList () { |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwDefenseZoneRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '防区管理'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { computed, inject, nextTick, onMounted, ref, watch } from 'vue' |
| | | import { ElMessage } from 'element-plus' |
| | | import { fwAreaDivideDetailApi, fwAreaDivideSubmitApi } from './partitionApi' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import { fieldRules, geomAnalysis, getDictLabel } from '@ztzf/utils' |
| | | import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue' |
| | | import { DrawPolygon } from '@/utils/cesium/DrawPolygon' |
| | |
| | | const dialogMode = ref('add') // 弹框模式 |
| | | const submitting = ref(false) // 提交中 |
| | | const readonly = computed(() => dialogMode.value === 'view') |
| | | const route = useRoute() |
| | | const titleEnum = ref({ edit: '编辑区域', view: '查看区域', add: '新增区域' }) |
| | | const flyDateRange = ref([]) // 飞行时间 |
| | | const deviceTableRef = ref(null) |
| | |
| | | let str = [...pointList, pointList[0]].map(item => `${item.longitude} ${item.latitude}`).join(',') |
| | | formData.value.geom = `POLYGON((${str}))` |
| | | await fwAreaDivideSubmitApi(formData.value) |
| | | const actionText = dialogMode.value === 'add' ? '新增' : '编辑' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '区域划分'}-${actionText}`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { fwAreaDividePageApi, fwAreaDivideRemoveApi } from './partitionApi' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | |
| | | const initSearchParams = () => ({ |
| | |
| | | const queryParamsRef = ref(null) // 查询表单实例 |
| | | const dialogRef = ref(null) // 弹框实例 |
| | | const dialogVisible = ref(false) |
| | | const route = useRoute() |
| | | |
| | | // 获取列表 |
| | | async function getList () { |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwAreaDivideRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '区域划分'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import CommonCesiumMap from '@/components/map-container/common-cesium-map.vue' |
| | | import * as Cesium from 'cesium' |
| | | import axios from 'axios' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | address: '', // 位置 |
| | |
| | | const titleEnum = ref({ edit: '编辑', view: '查看', add: '新增' }) |
| | | const tempLocation = ref({ longitude: null, latitude: null }) |
| | | const mapRef = ref(null) |
| | | const route = useRoute() |
| | | |
| | | const rules = { |
| | | address: fieldRules(true, 50), |
| | |
| | | submitting.value = true |
| | | try { |
| | | await fwPoliceStationSubmitApi(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '派出所管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { fwPoliceStationPageApi, fwPoliceStationRemoveApi } from './precinctInfoApi' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | stationName: '', // 名称 |
| | |
| | | const queryParamsRef = ref(null) // 查询表单实例 |
| | | const dialogRef = ref(null) // 弹框实例 |
| | | const dialogVisible = ref(false) |
| | | const route = useRoute() |
| | | |
| | | // 获取列表 |
| | | async function getList () { |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwPoliceStationRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '派出所管理'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { fwAreaDivideDetailApi, fwAreaDivideListApi } from '../partition/partitionApi' |
| | | import { DrawPolygon } from '@/utils/cesium/DrawPolygon' |
| | | import commandPost from '@/assets/images/dataCockpit/legend/command-post.png' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | sceneName: '', // 场景名称 |
| | |
| | | const selectedAreaRows = ref([]) //选中列表 |
| | | const dictObj = inject('dictObj') |
| | | const mapRef = ref(null) |
| | | const route = useRoute() |
| | | let viewer |
| | | let redPointEntity |
| | | let leftClickBound = false |
| | |
| | | formData.value.areaCount = ids.length |
| | | formData.value.defenseArea = calcDefenseArea(selectedAreaRows.value) |
| | | await fwDefenseSceneSubmitApi(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '场景配置管理'}-${dialogMode.value === 'add' ? '新增' : '编辑'}`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | sceneName: '', // 场景名称 |
| | |
| | | const queryParamsRef = ref(null) // 查询表单实例 |
| | | const dialogRef = ref(null) // 弹框实例 |
| | | const dialogVisible = ref(false) |
| | | const route = useRoute() |
| | | |
| | | // 获取列表 |
| | | async function getList() { |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwDefenseSceneRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '场景配置管理'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { fieldRules } from '@ztzf/utils' |
| | | import { fwDeviceScrapSaveApi } from '@/views/basicManage/deviceStock/fwDeviceScrapApi' |
| | | import dayjs from 'dayjs' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | deviceId: '', // 设备ID |
| | |
| | | const visible = ref(false) // 弹框显隐 |
| | | const dialogMode = ref('add') // 弹框模式 |
| | | const submitting = ref(false) |
| | | const route = useRoute() |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const dialogTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') { |
| | |
| | | try { |
| | | formData.value.scrapTime = dayjs().format('YYYY-MM-DD HH:mm:ss') |
| | | await fwDeviceScrapSaveApi(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '设备出入库'}-报废`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('报废成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { getLazyTree } from '@/api/base/region' |
| | | import { fieldRules } from '@ztzf/utils' |
| | | import { fwDeviceTrackSubmitApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | charger: '', // 负责人 |
| | |
| | | const visible = ref(false) // 弹框显隐 |
| | | const dialogMode = ref('add') // 弹框模式 |
| | | const submitting = ref(false) |
| | | const route = useRoute() |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const dialogTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') { |
| | |
| | | outTarget: selected?.label ?? formData.value.outTarget, |
| | | } |
| | | await fwDeviceTrackSubmitApi(payload) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '设备出入库'}-出库`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('出库成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { getUserListApi } from '@/api/system/user' |
| | | import { fieldRules, getDictLabel } from '@ztzf/utils' |
| | | import { fwDeviceTrackPageApi } from '@/views/basicManage/deviceStock/fwDeviceTrackApi' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | belongDept: '', // 所属部门 |
| | |
| | | const dictObj = inject('dictObj') |
| | | const deptTree = inject('deptTree') |
| | | const emit = defineEmits(['success']) |
| | | const route = useRoute() |
| | | const formRef = ref(null) // 表单实例 |
| | | const formData = ref(initForm()) // 表单数据 |
| | | const visible = ref(false) // 弹框显隐 |
| | |
| | | submitting.value = true |
| | | try { |
| | | await fwDeviceSubmitApi(formData.value) |
| | | const actionText = dialogMode.value === 'add' ? '建档' : '编辑' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '设备出入库'}-${actionText}`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { ElMessage } from 'element-plus' |
| | | import { fieldRules, getDictLabel } from '@ztzf/utils' |
| | | import { fwDeviceMaintainRecordPageApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import { |
| | | fwDeviceMaintainPlanDetailApi, |
| | | fwDeviceMaintainPlanSubmitApi, |
| | |
| | | const deviceList = ref([]) // 设备列表 |
| | | const getPlanCycleLabel = inject('getPlanCycleLabel') |
| | | const dictObj = inject('dictObj') |
| | | const route = useRoute() |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const titleEnum = ref({ edit: '编辑', view: '查看', add: '维护计划' }) |
| | | |
| | |
| | | )], |
| | | } |
| | | await fwDeviceMaintainPlanSubmitApi(payload) |
| | | const actionText = dialogMode.value === 'add' ? '维护计划-新增' : '维护计划-编辑' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '维护记录管理'}-${actionText}`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { fieldRules } from '@ztzf/utils' |
| | | import { fwDeviceMaintainRecordSubmitApi } from '@/views/basicManage/maintainRecord/fwDeviceMaintainRecord' |
| | | import { fwDeviceMaintainPlanDetailApi } from '@/views/basicManage/maintainRecord/maintainRecordApi' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | deviceId: '', |
| | |
| | | const dialogMode = ref('add') // 弹框模式 |
| | | const submitting = ref(false) // 提交中 |
| | | const deviceList = ref([]) // 设备列表 |
| | | const route = useRoute() |
| | | |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const titleEnum = ref({ edit: '维护', view: '查看', add: '维护计划' }) |
| | |
| | | try { |
| | | formData.value.maintainTime = dayjs().format('YYYY-MM-DD HH:mm:ss') |
| | | await fwDeviceMaintainRecordSubmitApi(formData.value) |
| | | const actionText = dialogMode.value === 'add' ? '维护-新增' : '维护-编辑' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '维护记录管理'}-${actionText}`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import MaintenanceDiaLog from '@/views/basicManage/maintainRecord/MaintenanceDiaLog.vue' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import { |
| | | fwDeviceMaintainPlanPageApi, |
| | | fwDeviceMaintainPlanRemoveApi, |
| | |
| | | deviceAtt: [], // 设备属性 |
| | | }) |
| | | provide('dictObj', dictObj) |
| | | const route = useRoute() |
| | | const deptTree = ref([]) // 部门树 |
| | | const treeProps = { |
| | | label: 'name', |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwDeviceMaintainPlanRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '维护记录管理'}-删除`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { fieldRules } from '@ztzf/utils' |
| | | import { PublicCesium } from '@/utils/cesium/publicCesium' |
| | | import * as Cesium from 'cesium' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | // 初始化表单 |
| | | const initForm = () => ({ |
| | |
| | | const areaList = ref([]) // 区域列表 |
| | | const sceneList = ref([]) // 场景列表 |
| | | const deviceStatus = ref('') |
| | | const route = useRoute() |
| | | |
| | | const rules = { |
| | | deviceId: fieldRules(true), |
| | |
| | | formData.value.dispatchEndTime = formData.value.dispatchDateRange[1] |
| | | } |
| | | await fwTaskScheduleSubmitApi(formData.value) |
| | | |
| | | const actionText = dialogMode.value === 'add' ? '新增' : '修改' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '任务调度'}-${actionText}`, |
| | | type: 1 |
| | | }) |
| | | |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | </el-table-column> |
| | | |
| | | <el-table-column prop="areaName" show-overflow-tooltip width="120" label="区域" /> |
| | | <el-table-column prop="defenseZoneName" show-overflow-tooltip width="120" label="场景" /> |
| | | <el-table-column prop="defenseSceneName" show-overflow-tooltip width="120" label="场景" /> |
| | | <el-table-column show-overflow-tooltip label="调度位置"> |
| | | <template v-slot="{ row }">{{ row.longitude }}, {{ row.latitude }}</template> |
| | | </el-table-column> |
| | |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | // 初始化查询参数 |
| | | const initSearchParams = () => ({ |
| | |
| | | deviceStatus: [], // 设备状态 |
| | | }) |
| | | const deviceList = ref([]) // 设备列表 |
| | | const route = useRoute() |
| | | |
| | | // 注入字典到子组件 |
| | | provide('dictObj', dictObj) |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await fwTaskScheduleRemoveApi({ ids }) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '任务调度'}-删除`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { add, getDept, getDeptTree, update } from '@/api/system/dept' |
| | | import { getLazyTree } from '@/api/base/region' |
| | | import { fieldRules, getDictLabel } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | deptName: '', |
| | |
| | | const visible = ref(false) |
| | | const dialogMode = ref('add') |
| | | const submitting = ref(false) |
| | | const isAddChild = ref(false) |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const route = useRoute() |
| | | const dialogTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') return '编辑' |
| | | if (dialogMode.value === 'view') return '查看' |
| | |
| | | } else { |
| | | await add(payload) |
| | | } |
| | | const actionText = dialogMode.value === 'add' ? (isAddChild.value ? '新增子项' : '新增') : '编辑' |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '部门管理'}-${actionText}`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | |
| | | |
| | | function handleClosed() { |
| | | formData.value = initForm() |
| | | isAddChild.value = false |
| | | } |
| | | |
| | | async function open({ mode, row, parent } = {}) { |
| | | dialogMode.value = mode || 'add' |
| | | visible.value = true |
| | | isAddChild.value = mode === 'add' && !!parent?.id |
| | | await getDeptTree().then(res => { |
| | | if (deptTree) { |
| | | deptTree.value = res?.data?.data ?? [] |
| | |
| | | import { getChildLazyTree, getDeptTree, getLazyList, remove } from '@/api/system/dept' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | deptName: '', |
| | |
| | | org_nature: [], |
| | | }) |
| | | const deptTree = ref([]) |
| | | const route = useRoute() |
| | | |
| | | provide('dictObj', dictObj) |
| | | provide('deptTree', deptTree) |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await remove(ids) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '部门管理'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { ElMessage } from 'element-plus' |
| | | import { add, getRoleTreeById, update } from '@/api/system/role' |
| | | import { fieldRules } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | roleName: '', |
| | |
| | | const dialogMode = ref('add') |
| | | const submitting = ref(false) |
| | | const dialogReadonly = computed(() => dialogMode.value === 'view') |
| | | const route = useRoute() |
| | | const dialogTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') return '编辑' |
| | | if (dialogMode.value === 'view') return '查看' |
| | |
| | | try { |
| | | if (dialogMode.value === 'edit') { |
| | | await update(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '角色管理'}-编辑`, |
| | | type: 1, |
| | | }) |
| | | } else { |
| | | await add(formData.value) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '角色管理'}-新增`, |
| | | type: 1, |
| | | }) |
| | | } |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | |
| | | <script setup> |
| | | import { ref } from 'vue' |
| | | import { grant, grantTree, getRole } from '@/api/system/role' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const visible = ref(false) |
| | | const roleId = ref('') |
| | |
| | | const droneControl = ref(null) |
| | | |
| | | const emit = defineEmits(['success']) |
| | | const route = useRoute() |
| | | |
| | | function resetState() { |
| | | menuGrantList.value = [] |
| | |
| | | [], |
| | | [] |
| | | ).then(() => { |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '角色管理'}-权限设置`, |
| | | type: 1, |
| | | }) |
| | | visible.value = false |
| | | emit('success') |
| | | }) |
| | |
| | | import { useStore } from 'vuex' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import RolePermissionDialog from './RolePermissionDialog.vue' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | roleName: '', |
| | |
| | | const roleDialogRef = ref(null) |
| | | const store = useStore() |
| | | const userInfo = computed(() => store.getters.userInfo || {}) |
| | | const route = useRoute() |
| | | |
| | | async function loadList() { |
| | | loading.value = true |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await remove(ids) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '角色管理'}-删除`, |
| | | type: 1, |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | loadList() |
| | |
| | | import { getDeptTree } from '@/api/system/dept' |
| | | import { getRoleTree } from '@/api/system/role' |
| | | import func from '@/utils/func' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initForm = () => ({ |
| | | account: '', |
| | |
| | | }) |
| | | const roleTree = ref([]) |
| | | const deptTree = ref([]) |
| | | const route = useRoute() |
| | | |
| | | const validatePass = (rule, value, callback) => { |
| | | if (value === '') { |
| | |
| | | submitData.name = submitData.realName |
| | | if (dialogMode.value === 'add') { |
| | | await add(submitData) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理'}-新增`, |
| | | type: 1 |
| | | }) |
| | | } else { |
| | | await update(submitData) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理'}-编辑`, |
| | | type: 1 |
| | | }) |
| | | } |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | |
| | | </el-form> |
| | | |
| | | <div class="command-table-toolbar"> |
| | | <el-button v-if="permission.user_add" :icon="Plus" color="#284FE3" type="primary" @click="handleAdd"> |
| | | <el-button v-if="permission.permissionUser_add" :icon="Plus" color="#284FE3" type="primary" @click="handleAdd"> |
| | | 新增 |
| | | </el-button> |
| | | <el-button |
| | | v-if="permission.user_delete" |
| | | v-if="permission.permissionUser_remove" |
| | | :icon="Delete" |
| | | color="#1A2652" |
| | | type="primary" |
| | |
| | | <el-table-column prop="phone" show-overflow-tooltip width="120" label="手机号" /> |
| | | <el-table-column label="操作" class-name="operation-btns" width="180"> |
| | | <template v-slot="{ row }"> |
| | | <el-link v-if="permission.user_view" @click="handleView(row)">查看</el-link> |
| | | <el-link v-if="permission.user_edit" @click="handleEdit(row)">编辑</el-link> |
| | | <el-link v-if="permission.user_delete" type="danger" @click="handleDelete(row)">删除</el-link> |
| | | <el-link @click="handleView(row)">查看</el-link> |
| | | <el-link v-if="permission.permissionUser_edit" @click="handleEdit(row)">编辑</el-link> |
| | | <el-link v-if="permission.permissionUser_remove" type="danger" @click="handleDelete(row)">删除</el-link> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | import { getList as getUserList, remove } from '@/api/system/user' |
| | | import { useStore } from 'vuex' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | account: '', |
| | |
| | | } |
| | | const store = useStore() |
| | | const permission = computed(() => store.getters.permission || {}) |
| | | const route = useRoute() |
| | | |
| | | async function getList() { |
| | | loading.value = true |
| | |
| | | }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await remove(ids) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理'}-删除`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | import { exportFwDroneAlarmRecordApi, fwDroneAlarmRecordPageApi } from './fwDroneAlarmRecord' |
| | | import FormDiaLog from './FormDiaLog.vue' |
| | | import { blobDownload, dateRangeFormat, getDictLabel } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const initSearchParams = () => ({ |
| | | droneName: '', // 无人机名称 |
| | |
| | | }) |
| | | const dateRange = ref([]) |
| | | const exportLoading = ref(false) |
| | | const route = useRoute() |
| | | const deviceTypeMap = computed(() => { |
| | | const map = new Map() |
| | | dictObj.value.deviceType.forEach(item => { |
| | |
| | | exportLoading.value = true |
| | | exportFwDroneAlarmRecordApi({ ids: selectedIds.value.join(',') }) |
| | | .then(res => { |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '报警记录'}-导出`, |
| | | type: 1, |
| | | }) |
| | | blobDownload(res) |
| | | }) |
| | | .finally(() => { |
| | |
| | | import { onMounted, ref, nextTick } from 'vue' |
| | | import { exportFwDroneFlightRecordApi, fwDroneFlightRecordPageApi } from './fwDroneFlightRecord' |
| | | import { blobDownload, dateRangeFormat } from '@ztzf/utils' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import TrajectoryDiaLog from '@/views/recordManage/historyTracks/TrajectoryDiaLog.vue' |
| | | |
| | | const initSearchParams = () => ({ |
| | |
| | | const dateRange = ref([]) |
| | | const exportLoading = ref(false) |
| | | const dialogRef = ref(null) // 弹框实例 |
| | | const route = useRoute() |
| | | |
| | | // 获取列表 |
| | | async function getList() { |
| | |
| | | ids: ids.join(','), |
| | | }) |
| | | .then(res => { |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '历史轨迹'}-导出`, |
| | | type: 1, |
| | | }) |
| | | blobDownload(res) |
| | | }) |
| | | .finally(() => { |
| | |
| | | import { getDeptTree } from '@/api/system/dept' |
| | | import { getRoleTree } from '@/api/system/role' |
| | | import func from '@/utils/func' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | // 初始化表单 |
| | | const initForm = () => ({ |
| | |
| | | const titleEnum = ref({ edit: '编辑用户', view: '查看用户', add: '新增用户' }) |
| | | const roleTree = ref([]) |
| | | const deptTree = ref([]) |
| | | const route = useRoute() |
| | | |
| | | // 密码验证 |
| | | const validatePass = (rule, value, callback) => { |
| | |
| | | |
| | | if (dialogMode.value === 'add') { |
| | | await add(submitData) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理01'}-新增`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('新增成功') |
| | | } else { |
| | | await update(submitData) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理01'}-编辑`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('更新成功') |
| | | } |
| | | visible.value = false |
| | |
| | | import NProgress from 'nprogress' |
| | | import 'nprogress/nprogress.css' |
| | | import func from '@/utils/func' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | |
| | | const store = useStore() |
| | | const userInfo = computed(() => store.getters.userInfo) |
| | |
| | | const dialogVisible = ref(false) |
| | | const auditMode = ref(false) |
| | | const treeDeptId = ref('') |
| | | const route = useRoute() |
| | | |
| | | // 部门树 |
| | | const deptTree = ref([]) |
| | |
| | | await ElMessageBox.confirm(`确认删除${tips}吗?`, '提示', { type: 'warning' }) |
| | | const ids = row ? row.id : selectedIds.value.join(',') |
| | | await remove(ids) |
| | | saveOperationLog({ |
| | | requestUri: route.path, |
| | | title: `${route.name || '用户管理01'}-删除`, |
| | | type: 1 |
| | | }) |
| | | ElMessage.success('删除成功') |
| | | selectedIds.value = [] |
| | | getList() |
| | |
| | | @click="openReviewDialog" |
| | | >批量审核 |
| | | </el-button> |
| | | |
| | | |
| | | <el-button |
| | | v-if="permissionList.exportBtn" |
| | | type="success" |
| | |
| | | >详情 |
| | | </el-button> |
| | | </template> |
| | | |
| | | |
| | | <template v-if="row.status === 4 && activeTab === 'completed'"> |
| | | <el-button type="text" icon="el-icon-download" @click="exportTheTick(row)" |
| | | >导出 |
| | |
| | | |
| | | <script> |
| | | import {ALL_WORK_ORDER_TYPE_OPTIONS} from '@ztzf/constants' |
| | | |
| | | |
| | | import { pxToRem, pxToRemNum } from '@/utils/rem'; |
| | | import { getSmallImg, getShowImg } from '@/utils/util'; |
| | | import { ElMessageBox, ElLoading } from 'element-plus'; |
| | |
| | | { label: '处理人', prop: 'handler', width: 120, overHidden: true }, |
| | | { |
| | | slot: true, |
| | | hide: envName === 'jiangwu' ? true : false, |
| | | hide: false, |
| | | label: '复核状态', |
| | | prop: 'isReview', |
| | | width: 90, |
| | |
| | | exportTheTick(row){ |
| | | const params = { |
| | | num:row.orderNumber |
| | | } |
| | | } |
| | | exportTheTicket(params).then(res=>{ |
| | | const elink = document.createElement('a') |
| | | elink.download = row.orderName + '.docx' |
| | |
| | | "build:dev": "vite build --mode development", |
| | | "build:test": "vite build --mode test", |
| | | "build:prod": "vite build --mode production", |
| | | "build:jiangwu": "vite build --mode jiangwu", |
| | | "build:blackBox": "vite build --mode blackBox", |
| | | "serve": "vite preview --host", |
| | | "format": "prettier --write \"src/**/*.+(js|ts|jsx|tsx)\"" |
| | | }, |
| | |
| | | const store = useStore() |
| | | const userInfo = computed(() => store?.state?.user?.userInfo) |
| | | const route = useRoute() |
| | | const mapCurrentDetail = ref({ |
| | | "id": 8474, |
| | | "wayline_job_id": "51835088-cd94-42f8-b2ec-a9069ced4e7b", |
| | | "event_name": "测试", |
| | | "device_sn": "7CTDM5E00B3H61", |
| | | "status": 3, |
| | | "photo_url": "https://wrj.shuixiongit.com/minio/cloud-bucket/upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg", |
| | | "file_path": "upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg", |
| | | "longitude": "115.85649472222222", |
| | | "latitude": "28.624301527777778", |
| | | "create_time": "2026-01-13 16:51:57", |
| | | "media_type": "PHOTO_TYPE", |
| | | "event_num": "BHJC20260113002", |
| | | "ai_types": "道路裂缝", |
| | | "ai_type_key_list": [ |
| | | "DLLFSB" |
| | | ], |
| | | "work_order_type_dict_key": "ZHZLL", |
| | | "work_order_type": "交通运输与交管", |
| | | "create_user": "曾超杰", |
| | | "update_user": "管理员", |
| | | "dept_name": "中图智飞(江西省)", |
| | | "create_user_id": "2009140684346388482", |
| | | "user_id": "1991745495648227330", |
| | | "handle_user_id": "1123598821738675201", |
| | | "address": "江西省南昌市西湖区朝农街道抚生南路1806号南昌台湾健康产业城", |
| | | "update_photo_url": "https://wrj.shuixiongit.com/minio/cloud-bucket/upload/20260113/f090f03fdc52499473ab9cbfcdc0876d.jpeg", |
| | | "content": "测试", |
| | | "work_type": "3", |
| | | "job_name": "定向拍照2", |
| | | "is_review": 0, |
| | | "job_create_time": "2026-01-13 16:51:57" |
| | | }) |
| | | const mapCurrentDetail = ref({}) |
| | | const eventNum = ref('') |
| | | // 机巢数据 |
| | | let machineData = ref([]); |
| | |
| | | /* |
| | | * @Author : yuan |
| | | * @Date : 2025-06-21 10:08:29 |
| | | * @LastEditors : yuan |
| | | * @LastEditTime : 2025-07-21 14:58:00 |
| | | * @FilePath : \src\buildConfig\baseConfig\config.default.js |
| | | * @Description : |
| | | * Copyright 2025 OBKoro1, All Rights Reserved. |
| | | * 2025-06-21 10:08:29 |
| | | */ |
| | | // src/buildConfig/config.private.js |
| | | import { useStore } from 'vuex' |
| | | import menuConfig from '@/buildConfig/menuConfig/defaultMenu' |
| | |
| | | import defaultHomeConfig from '@/buildConfig/homeConfig/defaultHomeConfig' |
| | | import { getDateRange } from '@/utils/date' |
| | | const systemNameEnum = { |
| | | 0: '银轨科技', |
| | | 0: 'appWebView', |
| | | } |
| | | |
| | | export default function getBaseConfig() { |
| | |
| | | |
| | | return { |
| | | userLoginTitle(key) { |
| | | return (systemNameEnum[key] || '中图智飞') + '低空感知网平台' |
| | | return (systemNameEnum[key] || 'appWebview') + '平台' |
| | | }, |
| | | // envName: 'jiangwu', |
| | | userLoginPageClass: '', |
| | | loginTitle: '中图智飞低空智能感知网平台', //登陆页面标题 |
| | | headerTitle: `${loginUserInfo.value?.areaName || ''}低空感知网指挥调度平台`, //首页标题 |
| | | gateTitle: '中图智飞低空感知网平台', |
| | | loginTitle: 'appWebview', //登陆页面标题 |
| | | headerTitle: `${loginUserInfo.value?.areaName || ''}appWebView`, //首页标题 |
| | | gateTitle: 'appWebview', |
| | | gateTitleEn: 'AISKY Low-altitude Perception Network Platform', |
| | | isShowFooterBtns: true, |
| | | isShowAiSkyLogo: true, |
| | |
| | | /* |
| | | * @Author : yuan |
| | | * @Date : 2025-06-13 09:42:10 |
| | | * @LastEditors : yuan |
| | | * @LastEditTime : 2025-06-13 15:21:09 |
| | | * @FilePath : \src\buildConfig\config.js |
| | | * @Description : |
| | | * Copyright 2025 OBKoro1, All Rights Reserved. |
| | | * 2025-06-13 09:42:10 |
| | | */ |
| | | // src/config.js |
| | | |
| | | // 直接导入所有配置文件 |
| | | import jiangwuConfig from '@/buildConfig/baseConfig/config.jiangwu.js' |
| | | import defaultConfig from '@/buildConfig/baseConfig/config.default.js' |
| | | |
| | | // 根据环境变量选择配置 |
| | | const env = import.meta.env.VITE_APP_ENV || 'default' |
| | | const configMap = { |
| | | jiangwu: jiangwuConfig, |
| | | default: defaultConfig |
| | | } |
| | | |
| | | // 导出配置函数 |
| | | export default configMap[env] || configMap.default |
| | | export default configMap[env] || configMap.default |
| | |
| | | onMounted(() => { |
| | | narrowScreenFun() |
| | | window.addEventListener('resize', narrowScreenFun) |
| | | document.title = '中图智飞低空感知网平台' |
| | | document.title = 'appWebview' |
| | | }) |
| | | </script> |
| | | |
| | |
| | | NProgress.done() |
| | | const isLoginPage = to.path === '/login' |
| | | // 根据是否登录页设置标题 |
| | | // const pageTitle = isLoginPage ? '中图智飞低空感知网平台' : '指挥调度平台' |
| | | // const pageTitle = isLoginPage ? 'appWebview' : 'appWebview' |
| | | document.title = to.meta.title || '掌控智飞' |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| | |
| | | * @LastEditors : yuan |
| | | * @LastEditTime : 2025-06-25 10:54:47 |
| | | * @FilePath : \src\utils\http\config.js |
| | | * @Description : |
| | | * Copyright 2025 OBKoro1, All Rights Reserved. |
| | | * @Description : |
| | | * Copyright 2025 OBKoro1, All Rights Reserved. |
| | | * 2025-06-13 09:42:10 |
| | | */ |
| | | let rtmpURL = '' |
| | | |
| | | if (import.meta.env.VITE_APP_ENV === 'production') { |
| | | rtmpURL = 'rtmp://101.132.85.201/live/' |
| | | } else if (import.meta.env.VITE_APP_ENV === 'jiangwu') { |
| | | rtmpURL = 'rtmp://192.168.253.121/live/' |
| | | } else { |
| | | rtmpURL = 'rtmp://139.196.74.78/live/' |
| | | } |
| | |
| | | <script type="text/javascript" |
| | | src='https://webapi.amap.com/maps?v=2.0&key=eb0654440644f710110547d2132b2fbe&plugin=AMap.PlaceSearch,AMap.Geocoder'></script> |
| | | <script src="https://webapi.amap.com/ui/1.1/main.js?v=1.0.11"></script> |
| | | <title>中图智绘低空无人机监测网平台</title> |
| | | <title>任务工单平台</title> |
| | | </head> |
| | | |
| | | <body class="theme-white"> |
| | |
| | | menu: true, |
| | | }, |
| | | fistPage: { |
| | | name: '工单管理首页', |
| | | path: '/', |
| | | }, |
| | | //配置菜单的属性 |
| | |
| | | export default { |
| | | title: '中图智绘低空无人机监测网平台', |
| | | title: '任务工单平台', |
| | | logoutTip: 'Exit the system, do you want to continue?', |
| | | submitText: 'submit', |
| | | cancelText: 'cancel', |
| | |
| | | export default { |
| | | title: '中图智绘低空无人机监测网平台', |
| | | title: '任务工单平台', |
| | | logoutTip: '退出系统, 是否继续?', |
| | | submitText: '确定', |
| | | cancelText: '取消', |
| | |
| | | |
| | | let toMenu = findRouteByPath(newMenu, to.path) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: firstMenu.name, |
| | | path: firstMenu.path, |
| | | fullPath: firstMenu.path, |
| | | params: firstMenu.params || {}, |
| | | query: firstMenu.query || {}, |
| | | meta: firstMenu.meta || {}, |
| | | }) |
| | | // store.commit('ADD_TAG', { |
| | | // name: firstMenu.name, |
| | | // path: firstMenu.path, |
| | | // fullPath: firstMenu.path, |
| | | // params: firstMenu.params || {}, |
| | | // query: firstMenu.query || {}, |
| | | // meta: firstMenu.meta || {}, |
| | | // }) |
| | | store.commit('ADD_TAG', { |
| | | name: toMenu.name, |
| | | path: toMenu.path, |
| | |
| | | NProgress.done() |
| | | const isLoginPage = to.path === '/login' |
| | | // 根据是否登录页设置标题 |
| | | const pageTitle = isLoginPage ? '中图智飞低空感知网平台' : '综合管理平台' |
| | | const pageTitle = isLoginPage ? '任务工单平台' : '综合管理平台' |
| | | document.title = pageTitle |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| | |
| | | export default [ |
| | | { |
| | | path: '/', |
| | | name:'工单管理首页', |
| | | redirect: '/orderView/orderManage/orderManage/index', |
| | | }, |
| | | { |
| | |
| | | setStore({ name: 'tag', content: state.tag }) |
| | | if (state.bsTagList.some(ele => ele.fullPath == action.fullPath)) return |
| | | state.bsTagList.push(action) |
| | | console.log(state.bsTagList,'99') |
| | | setStore({ name: 'bsTagList', content: state.bsTagList }) |
| | | }, |
| | | DEL_TAG: (state, action) => { |
| | |
| | | flex: 1; |
| | | height: 100%; |
| | | box-sizing: border-box; |
| | | background: url('@/assets/images/layoutBg.png') repeat; |
| | | |
| | | .layer-content-bottom { |
| | | width: 100%; |
| | |
| | | border-radius: 3px 3px 3px 3px; |
| | | |
| | | &.is-active { |
| | | padding: 0 !important; |
| | | padding-left: 20px !important; |
| | | //padding: 0 !important; |
| | | //padding-left: 20px !important; |
| | | color: #FFFFFF; |
| | | background: #5B6BFF; |
| | | |
| | | .is-icon-close { |
| | | margin: 0 10px; |
| | | //margin: 0 10px; |
| | | } |
| | | } |
| | | |
| | |
| | | padding: 1px 0 0 15px; |
| | | box-sizing: border-box; |
| | | } |
| | | } |
| | | } |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="executeTime" show-overflow-tooltip label="任务执行时间" /> |
| | | <el-table-column prop="feishou" show-overflow-tooltip label="选择飞手" /> |
| | | <el-table-column prop="deviceId" show-overflow-tooltip label="选择设备" /> |
| | | <el-table-column label="操作" class-name="operation-btns"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="">查看</el-link> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="recommendFlyerName" show-overflow-tooltip label="选择飞手" /> |
| | | <el-table-column prop="deviceName" show-overflow-tooltip label="选择设备" /> |
| | | </el-table> |
| | | </template> |
| | | </div> |
| | |
| | | <el-table-column prop="devicePayload" label="设备负载" /> |
| | | </el-table> |
| | | </template> |
| | | <div v-else>请先选择设备需求并绘制范围</div> |
| | | <div v-else>请先选择设备需求并在地图上绘制工单范围</div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | </el-button> |
| | | <el-button v-if="gdStatus === '10'" @click="addDescription">拒绝接单</el-button> |
| | | <el-button v-if="gdStatus === '10'" @click="statusChange(1)">接单</el-button> |
| | | <el-button v-if="gdStatus === '22'" @click="statusChange(7)">同意修改</el-button> |
| | | <el-button v-if="gdStatus === '22'" @click="statusChange(8)">不同意修改</el-button> |
| | | <el-button v-if="gdStatus === '21'" @click="statusChange(5)">同意取消</el-button> |
| | | <el-button v-if="gdStatus === '22'" @click="statusChange(7)">同意修改</el-button> |
| | | <el-button v-if="gdStatus === '21'" @click="addDescription">不同意取消</el-button> |
| | | <el-button v-if="gdStatus === '21'" @click="statusChange(5)">同意取消</el-button> |
| | | <el-button v-if="gdStatus === '30'" @click="addDescription">协商修改</el-button> |
| | | <el-button v-if="gdStatus === '31'" @click="statusChange(10)">同意</el-button> |
| | | </template> |
| | |
| | | hasPatrolTaskList.value && gdPatrolTaskPage() |
| | | dialogMode.value === 'edit' ? editPolygon() : viewPolygon() |
| | | } |
| | | await getDeviceList() |
| | | // setMapDevice() |
| | | await nextTick() |
| | | syncSelection() |
| | |
| | | |
| | | .processBox { |
| | | width: 312px; |
| | | .el-timeline{ |
| | | .el-timeline { |
| | | padding-left: 100px; |
| | | } |
| | | .item-content{ |
| | | .item-content { |
| | | position: relative; |
| | | .flowName{ |
| | | .flowName { |
| | | position: absolute; |
| | | left: -100px; |
| | | top: 0; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | <el-option |
| | | v-for="item in dictObj.workOrderStatus" |
| | | :key="item.dictKey" |
| | | :label="item.dictValue" |
| | | :label="item.dictValue.split('_')[1]" |
| | | :value="item.dictKey" |
| | | /> |
| | | </el-select> |
| | |
| | | 修改 /src/config 里面的development的参数,改为对应环境的对应变量 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | # uniapp 团队协作开发实践模板(Vue3) |
| | | |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | |
| | | |
| | | 使用uniapp+vite+vue3+typescript+uview-plus+unocss 搭建的适合团队协作的快速开发模版 |
| | | |
| | | [uview-plus官方文档](https://uiadmin.net/uview-plus/) |
| | | |
| | | 本项目集众多项目的优点,打造最适合团队协作开发的项目模板。 |
| | | |
| | | 国内仓库地址:[https://gitee.com/ouyang/uniapp-vue3-template](https://gitee.com/ouyang/uniapp-vue3-template) |
| | | |
| | | 在线预览地址:[https://oyjt.github.io/uniapp-vue3-template/](https://oyjt.github.io/uniapp-vue3-template/) |
| | | |
| | | ### 特性 |
| | | |
| | | - [x] 集成`uview-plus3.0 ui`库 |
| | | - [x] 支持多环境打包构建 |
| | | - [x] 使用`pinia`状态管理 |
| | | - [x] 封装网络请求,并支持`Typescript` |
| | | - [x] 支持路径别名 |
| | | - [x] 支持自动加载组件和`API` |
| | | - [x] 自动校验`git`提交代码格式 |
| | | - [x] 集成`ESLint`、`StyleLint`、`EditorConfig`代码格式规范 |
| | | - [x] `Typescript`支持 |
| | | - [x] 集成`UnoCSS` |
| | | - [x] 集成`iconify`图标库 |
| | | - [x] 集成`z-paging`下拉刷新功能 |
| | | - [x] 添加页面跳转拦截,登录权限校验 |
| | | - [x] 支持`token`无感刷新 |
| | | - [x] 项目分包 |
| | | - [x] 集成小程序隐私协议授权组件 |
| | | - [x] 项目构建自动删除本地图片并替换本地图片路径为线上图片 |
| | | - [x] 集成包体积视图分析插件 |
| | | - [x] 支持国际化 |
| | | - [x] 集成`alova`网络请求(具体使用请切换到 [feature/alova](https://github.com/oyjt/uniapp-vue3-template/tree/feature/alova) 分支) |
| | | - [x] 集成`axios`网络请求(具体使用请切换到 [feature/axios](https://github.com/oyjt/uniapp-vue3-template/tree/feature/axios) 分支) |
| | | - [x] 支持新的`wot-design-uni`库(具体使用请切换到[feature/wot-design-uni](https://github.com/oyjt/uniapp-vue3-template/tree/feature/wot-design-uni)分支),[wot-design-uni官方文档](https://wot-design-uni.cn/) |
| | | - [x] 支持新的`shadcn-ui`库(具体使用请切换到[feature/shadcn-ui](https://github.com/oyjt/uniapp-vue3-template/tree/feature/shadcn-ui)分支),[shadcn-ui官方文档](https://ui.shadcn.com/) |
| | | - [x] 更好的 `AI` 支持,适配`cursor`和`trae`规则,集成`MCP`插件 |
| | | |
| | | ### uniapp插件推荐 |
| | | - [uniapp 插件精选(https://github.com/oyjt/awesome-uniapp)](https://github.com/oyjt/awesome-uniapp) |
| | | |
| | | ### 目录结构 |
| | | 项目中采用目前最新的技术方案来实现,目录结构清晰。 |
| | | ``` |
| | |
| | | 修改 /src/config 里面的development的参数,改为对应环境的对应变量 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | # uniapp 团队协作开发实践模板(Vue3) |
| | | |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | [](https://github.com/oyjt/uniapp-vue3-template) |
| | | |
| | | |
| | | 使用uniapp+vite+vue3+typescript+uview-plus+unocss 搭建的适合团队协作的快速开发模版 |
| | | |
| | | [uview-plus官方文档](https://uiadmin.net/uview-plus/) |
| | | |
| | | 本项目集众多项目的优点,打造最适合团队协作开发的项目模板。 |
| | | |
| | | 国内仓库地址:[https://gitee.com/ouyang/uniapp-vue3-template](https://gitee.com/ouyang/uniapp-vue3-template) |
| | | |
| | | 在线预览地址:[https://oyjt.github.io/uniapp-vue3-template/](https://oyjt.github.io/uniapp-vue3-template/) |
| | | |
| | | ### 特性 |
| | | |
| | | - [x] 集成`uview-plus3.0 ui`库 |
| | | - [x] 支持多环境打包构建 |
| | | - [x] 使用`pinia`状态管理 |
| | | - [x] 封装网络请求,并支持`Typescript` |
| | | - [x] 支持路径别名 |
| | | - [x] 支持自动加载组件和`API` |
| | | - [x] 自动校验`git`提交代码格式 |
| | | - [x] 集成`ESLint`、`StyleLint`、`EditorConfig`代码格式规范 |
| | | - [x] `Typescript`支持 |
| | | - [x] 集成`UnoCSS` |
| | | - [x] 集成`iconify`图标库 |
| | | - [x] 集成`z-paging`下拉刷新功能 |
| | | - [x] 添加页面跳转拦截,登录权限校验 |
| | | - [x] 支持`token`无感刷新 |
| | | - [x] 项目分包 |
| | | - [x] 集成小程序隐私协议授权组件 |
| | | - [x] 项目构建自动删除本地图片并替换本地图片路径为线上图片 |
| | | - [x] 集成包体积视图分析插件 |
| | | - [x] 支持国际化 |
| | | - [x] 集成`alova`网络请求(具体使用请切换到 [feature/alova](https://github.com/oyjt/uniapp-vue3-template/tree/feature/alova) 分支) |
| | | - [x] 集成`axios`网络请求(具体使用请切换到 [feature/axios](https://github.com/oyjt/uniapp-vue3-template/tree/feature/axios) 分支) |
| | | - [x] 支持新的`wot-design-uni`库(具体使用请切换到[feature/wot-design-uni](https://github.com/oyjt/uniapp-vue3-template/tree/feature/wot-design-uni)分支),[wot-design-uni官方文档](https://wot-design-uni.cn/) |
| | | - [x] 支持新的`shadcn-ui`库(具体使用请切换到[feature/shadcn-ui](https://github.com/oyjt/uniapp-vue3-template/tree/feature/shadcn-ui)分支),[shadcn-ui官方文档](https://ui.shadcn.com/) |
| | | - [x] 更好的 `AI` 支持,适配`cursor`和`trae`规则,集成`MCP`插件 |
| | | |
| | | ### uniapp插件推荐 |
| | | - [uniapp 插件精选(https://github.com/oyjt/awesome-uniapp)](https://github.com/oyjt/awesome-uniapp) |
| | | |
| | | ### 目录结构 |
| | | 项目中采用目前最新的技术方案来实现,目录结构清晰。 |
| | | ``` |