| src/api/logs.js | ●●●●● patch | view | raw | blame | history | |
| src/option/job/jobserver.js | ●●●●● patch | view | raw | blame | history | |
| src/types/device-cmd.js | ●●●●● patch | view | raw | blame | history | |
| src/views/dataCenter/dataCenter.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/device/addDevice.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/device/airport.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/job/components/TaskTop/TaskIndustry.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/monitor/log/flightLog.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/tickets/orderLog.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/tickets/ticket.vue | ●●●●● patch | view | raw | blame | history |
src/api/logs.js
@@ -62,3 +62,55 @@ }, }); }; // 历史轨迹记录 export const getHistoryTrack = (params) => { return request({ url: '/drone-device-core/log/droneFlightLog/page', method: 'get', params }) } // 导出飞行日志 export const exportFlyLog = data => { return request({ url: '/drone-device-core/log/droneFlightLogInfo/export', method: 'post', data }) } // 收藏 export const addStar = data => { return request({ url: '/drone-device-core/log/favorite/add', method: 'post', data }) } // 收藏列表 export const starPage = (params) => { return request({ url: '/drone-device-core/log/favorite/page', method: 'post', params }) } export const updateDroneFlight = (data) => { return request({ url: '/drone-device-core/log/droneFlightLog/updateDroneFlight', method: 'post', data }) } export const cancelStar = data => { return request({ url: '/drone-device-core/log/favorite/cancel/'+data, method: 'get', }) } export const droneFlightLogInfoPage = params => { return request({ url: '/drone-device-core/log/droneFlightLogInfo/page', method: 'get', params }) } src/option/job/jobserver.js
@@ -11,7 +11,9 @@ export default { tip: false, searchShow: true, searchMenuSpan: 6, // searchGutter: 10, searchMenuPosition: 'right', searchMenuSpan: 12, border: true, index: true, viewBtn: true, src/types/device-cmd.js
@@ -146,7 +146,7 @@ disabled: true, }, { label: '4g 增强', label: '4G 增强', status: '--', operateText: '开启', cmdKey: DeviceCmd.SdrWorkModeSwitch, src/views/dataCenter/dataCenter.vue
@@ -35,7 +35,7 @@ }} </template> </el-table-column> <el-table-column property="recordName" label="任务名称" show-overflow-tooltip /> <el-table-column property="name" label="任务名称" show-overflow-tooltip /> <el-table-column property="regionName" label="所属区域"> <template #default="scope"> <span>{{scope.row.city_name ? scope.row.city_name :'--'}},{{scope.row.area_name ? scope.row.area_name :'--'}}</span> @@ -500,6 +500,7 @@ .then(res => { folderList.value = res.data.data.records.map(i => ({ ...i, checked: false })) total.value = res.data.data.total }) .finally(() => { loadings.value = false; src/views/device/addDevice.vue
@@ -74,8 +74,8 @@ searchGutter: 30, tip: false, searchShow: true, searchMenuSpan: 6, searchGutter: 30, searchMenuPosition: 'right', searchMenuSpan: 10, border: true, index: true, indexLabel: '序号', src/views/device/airport.vue
@@ -306,7 +306,9 @@ searchGutter: 30, tip: false, searchShow: true, searchMenuSpan: 6, // searchMenuSpan: 16, searchMenuPosition: 'right', searchMenuSpan: 8, border: true, index: true, indexLabel: '序号', @@ -465,8 +467,8 @@ ], }, { label: '是否激活', prop: 'esim_activate_state', label: '4G增强', prop: 'link_workmode', labelWidth: 145, width: 160, overHidden: true, @@ -475,9 +477,8 @@ align: 'center', formatter: (row, column, cellValue) => { const statusMap = { 0: '未知', 1: '未激活', 2: '已激活' 0: '关', 1: '开', }; return statusMap[cellValue] || '/'; } src/views/job/components/TaskTop/TaskIndustry.vue
@@ -29,8 +29,8 @@ color: '#363636', fontSize: 12, }, itemWidth: 2, // 减小图例标记的宽度 itemHeight: 6, // 减小图例标记的高度 itemWidth: 8, // 减小图例标记的宽度 itemHeight: 8, // 减小图例标记的高度 itemGap: 8, // 减小图例项之间的间距 formatter: '{name}', // 简化图例文本 }, @@ -43,14 +43,14 @@ center: ['30%', '50%'], data: [], label: { show: true, show: false, position: 'outside', formatter: '{c}', fontSize: 12, color: '#000', }, labelLine: { show: true, show: false, length: 10, length2: 10, lineStyle: { src/views/monitor/log/flightLog.vue
New file @@ -0,0 +1,393 @@ <!-- 飞行日志 --> <template> <div class="flight"> <div class="ztzf-search-mange"> <el-form :model="params" inline> <div class="search-contain"> <div> <el-form-item label="任务名称:"> <el-input v-model="params.jobName" placeholder="请输入任务名称" clearable /> </el-form-item> <el-form-item label="任务编号:"> <el-input v-model="params.jobInfoNum" placeholder="请输入任务编号" clearable /> </el-form-item> <el-form-item label="日期:"> <el-date-picker v-model="rangTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" clearable @change="changeselect" /> </el-form-item> </div> <div class="btns"> <el-button type="primary" @click="getList" :icon="Search">搜索</el-button> <el-button @click="cancelSearch" :icon="Delete">清空</el-button> </div> </div> </el-form> </div> <div class="mange-table"> <!-- <el-tabs v-model="tabType" class="demo-tabs" @tab-click="handleTabClick">--> <!-- <el-tab-pane label="全部" name="全部"></el-tab-pane>--> <!-- <el-tab-pane label="我的收藏" name="收藏"></el-tab-pane>--> <!-- --> <!-- </el-tabs>--> <el-table border :data="tableList" class="custom-header"> <el-table-column label="序号" type="index" width="60"></el-table-column> <el-table-column prop="job_name" label="任务名称" align="center" show-overflow-tooltip></el-table-column> <el-table-column prop="job_info_num" label="任务编号" align="center" show-overflow-tooltip></el-table-column> <el-table-column prop="title" label="飞行类型" align="center" show-overflow-tooltip></el-table-column> <el-table-column prop="device_name" label="无人机" align="center"></el-table-column> <el-table-column prop="start_time" label="开始时间" align="center"> <template #default="scope"> {{ timeFormatConvert(scope.row.start_time) }} </template> </el-table-column> <el-table-column prop="end_time" label="结束时间" align="center"> <template #default="scope"> {{ timeFormatConvert(scope.row.end_time) }} </template> </el-table-column> <!-- <el-table-column prop="end_time" label="标签" align="center">--> <!-- <template #default="scope">--> <!-- <el-select v-model="scope.row.label_id" @change="handleUpdateLabel(scope.row)" clearable>--> <!-- <el-option--> <!-- v-for="item in tagList"--> <!-- :key="item.id"--> <!-- :label="item.label_name"--> <!-- :value="item.id"--> <!-- ></el-option>--> <!-- </el-select>--> <!-- </template>--> <!-- </el-table-column>--> <el-table-column label="操作" width="300" align="center"> <template #default="scope"> <el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button> <el-button icon="el-icon-delete" type="text" @click="handleDelete(scope.row)">删除</el-button> <!-- <el-button type="text" @click="handleStar(scope.row)">--> <!-- <el-icon><Star /></el-icon>--> <!-- {{ scope.row.is_favorite ? '取消收藏':'收藏' }}</el-button>--> <el-button type="text" @click="handleExport(scope.row)"><el-icon><Download /></el-icon>导出</el-button> </template> </el-table-column> </el-table> </div> <div class="pagination"> <el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background :page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="params.page" v-model:page-size="params.page_size" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> </div> </div> <el-dialog class="ztzf-dialog" append-to-body v-model="isShowView" title="查看" :width="pxToRem(1000)" :close-on-click-modal="false" :destroy-on-close="true"> <!-- <div class="content"> --> <el-table border :data="tableDataDetails" height="466"> <el-table-column label="序号" type="index" width="60"></el-table-column> <el-table-column prop="flight_type" label="飞行类型" align="center" show-overflow-tooltip></el-table-column> <el-table-column prop="latitude" label="经度" align="center"></el-table-column> <el-table-column prop="longitude" label="纬度" align="center"></el-table-column> <el-table-column prop="height" label="高度" align="center"></el-table-column> <el-table-column prop="elevation" label="海拔高度" align="center"></el-table-column> </el-table> <div class="pagination" style="display: flex;justify-content: end;margin-top: 10px;"> <el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background :page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="detailParams.current" v-model:page-size="detailParams.size" layout="total, sizes, prev, pager, next, jumper" :total="detailTotal" @size-change="handleSizeChangeDetails" @current-change="handleCurrentChangeDetails" /> <!-- </div> --> </div> </el-dialog> </template> <script setup> import { getHistoryTrack, cancelStar, addStar, updateDroneFlight, droneFlightLogInfoPage } from '@/api/logs'; // import { flightLogPage } from '@/api/airspace/airspace'; import { downloadXls } from '@/utils/util'; import { exportBlob } from '@/api/common' import { ElMessage, ElMessageBox, ElLoading } from 'element-plus'; import { Delete, Search } from '@element-plus/icons-vue'; const total = ref(0) let rangTime = ref([]) const params = ref({ isFavorite: false, page: 1, page_size: 10, startTime: '', endTime: '', jobName: '', jobInfoNum: '', }); let tableList = ref([]) let isShowView = ref(false) let tabType = ref('全部') function timeFormatConvert(time) { if (!time) return '/' const date = new Date(time); return date.toLocaleString(); } function cancelSearch() { rangTime.value = [] params.value = { startTime: '', endTime: '', isFavorite: tabType.value === '收藏' ? true : false, page: '1', page_size: '10', jobName: '', jobInfoNum: '', } getList() } function getList() { params.value.startTime = rangTime.value?.length ? rangTime.value[0].getTime() : '' params.value.endTime = rangTime.value?.length? new Date( rangTime.value[1].getFullYear(), rangTime.value[1].getMonth(), rangTime.value[1].getDate(), 23, 59, 59 ).getTime() : '' getHistoryTrack(params.value).then(res => { tableList.value = res.data.data.list || [] total.value = res.data.data.pagination.total || 0 }) } function handleAll() { params.value.isFavorite = false params.value.page = 1 tabType.value = '全部' getList() } // 查看 let tableDataDetails = ref([]) let detailTotal = ref(0) let detailParams = ref({ current: 1, size: 10, flightId: '' }) function handleDetail(row) { isShowView.value = true detailParams.value.current = 1 detailParams.value.flightId = row.id detailTotal.value = 0 droneFlightLogInfoPage(detailParams.value).then(res => { tableDataDetails.value = res.data.data.records detailTotal.value = res.data.data.total }) } // 分页 function handleSizeChangeDetails(val) { detailParams.value.size = val detailParams.value.current = 1 droneFlightLogInfoPage(detailParams.value).then(res => { tableDataDetails.value = res.data.data.records detailTotal.value = res.data.data.total }) } function handleCurrentChangeDetails(val) { detailParams.value.current = val droneFlightLogInfoPage(detailParams.value).then(res => { tableDataDetails.value = res.data.data.records detailTotal.value = res.data.data.total }) } function handleStartList() { params.value.isFavorite = true tabType.value = '收藏' params.value.page = 1 getList() } // function handleTabClick() { // if (tabType.value === '全部') { // handleAll() // } else if (tabType.value === '收藏') { // handleStartList() // } // } // 收藏 function handleStar(row) { if (row.is_favorite) { cancelStar(row.id).then(res => { ElMessage.success('取消收藏成功') getList() }) } else { addStar({ flight_log_id: row.id }).then(res => { ElMessage.success('收藏成功') getList() }) } } // 打标签 function handleUpdateLabel(row) { updateDroneFlight({ id: row.id, label_id: row.label_id }).then(res => { // getList() ElMessage.success('设置标签成功') }) } // 删除 function handleDelete(row) { ElMessageBox.confirm('确定删除该条数据?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', }).then(() => { updateDroneFlight({ is_deleted: 1, id: row.id }).then(res => { ElMessage.success('删除成功') getList() }) }).catch(() => { ElMessage({ type: 'info', message: '已取消删除' }) }) } // 导出 function handleExport(row) { exportBlob( `/drone-device-core/log/droneFlightLogInfo/export/${row.id}` ).then(res => { downloadXls(res.data, `${row.job_name}.xlsx`) }) } // 日期选择 // const changeselect = () => { // params.value.startTime = rangTime.value[0] ? rangTime.value[0].getTime() : '' // params.value.endTime = rangTime.value[1]? rangTime.value[1].getTime() : '' // getList() // }; function handleSizeChange(val) { params.value.page_size = val getList() } function handleCurrentChange(val) { params.value.page = val getList() } let tagList = ref([]) function tagManageList() { flightLogPage({ current:1, size: 99 }).then(res => { tagList.value = res.data.data.records || [] }) } onMounted(() => { // tagManageList() getList() }) </script> <style lang="scss" scoped> .flight { height: 0; flex: 1; margin: 0 10px 10px 10px; background-color: #ffffff; padding: 10px 20px; border-radius: 5px; display: flex; flex-direction: column; //.search-box { // height: 30px; //} :deep(.el-input) { .el-input__wrapper { width: 200px; } } // 表格 .mange-table { height: 0; flex: 1; margin-top: 18px; overflow: auto; } :deep(.el-pagination) { display: flex; justify-content: right; } :deep(.el-pagination button) { background: center center no-repeat none !important; color: #8eb8ea !important; } :deep(.ztzf-select){ .el-select__selection { width: 200px; } } } .content { padding: 20px; .view-table { width: 100%; border-collapse: collapse; border: 1px solid #EBEEF5; tr { &:not(:last-child) { border-bottom: 1px solid #EBEEF5; } td { padding: 12px 10px; &.label { width: 140px; text-align: right; // color: #909399; // background-color: #F5F7FA; border-right: 1px solid #EBEEF5; } &.value { width: 180px; // color: #303133; } } } } } .content-edit { .el-form { .el-form-item { width: 300px; :deep(.el-form-item__label) { width: 120px; } } .btns { display: flex; justify-content: center } } } </style> src/views/tickets/orderLog.vue
@@ -281,7 +281,7 @@ ></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-col :span="6"> <el-form-item label="关联航线" prop="file_id"> <el-select v-model="form.file_id" @@ -296,6 +296,15 @@ :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="安全返航真高" prop="rth_altitude"> <el-input-number v-model="form.rth_altitude" :min="30" :max="300" ></el-input-number> </el-form-item> </el-col> </el-row> @@ -395,9 +404,9 @@ </el-form> <template #footer> <div class="dialog-footer"> <el-button type="danger" @click="submitForm(1)">发起</el-button> <el-button type="primary" @click="submitForm(0)">存草稿</el-button> <el-button @click="dialogVisible = false" :icon="CircleClose">取消</el-button> <el-button type="danger" @click="submitForm(1)" icon="el-icon-position">发起</el-button> <el-button type="primary" @click="submitForm(0)" icon="el-icon-document-add">存草稿</el-button> <el-button @click="dialogVisible = false" icon="el-icon-circle-close">取消</el-button> </div> </template> </el-dialog> @@ -589,12 +598,14 @@ type="danger" v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)" @click="submitForm(1)" icon="el-icon-position" >发布</el-button > <el-button type="primary" v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)" @click="submitForm(0)" icon="el-icon-plus" >保存</el-button > <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user" @@ -794,6 +805,7 @@ type="danger" v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)" @click="submitForm(1)" icon="el-icon-position" >发布</el-button > <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user" @@ -803,15 +815,17 @@ type="primary" v-if="form.status == 1 && hasPaddingBtnPermission()" @click="orderLogPass(form.id)" icon="el-icon-check" >通过</el-button > <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()" @click="orderLogReject(form.id)" icon="el-icon-close" >驳回</el-button > <el-button @click="detailVisibleCopy = false">取消</el-button> <el-button @click="detailVisibleCopy = false" icon="el-icon-circle-close">取消</el-button> </div> </template> </el-dialog> @@ -846,7 +860,8 @@ import 'dayjs/locale/zh-cn'; // 导入中文语言包 import weekday from 'dayjs/plugin/weekday'; import elTooltipCopy from '@/components/ElTooltipCopy.vue'; import { CircleClose } from '@element-plus/icons-vue'; import { CircleClose, Promotion, Select } from '@element-plus/icons-vue'; import fqSvg from '@/assets/images/fq.svg' dayjs.extend(weekday); dayjs.locale('zh-cn'); @@ -1669,6 +1684,12 @@ </script> <style lang="scss" scoped> :deep(.el-input-number) { width: 200px; } :deep(.el-form-item__label) { width: 100px !important; } ::v-deep(.el-tabs) { height: 100%; display: flex; src/views/tickets/ticket.vue
@@ -415,12 +415,12 @@ </el-form> <template #footer> <div class="dialog-footer-new"> <el-button type="danger" :loading="submitLoading" @click="submitForm">发布</el-button> <el-button type="infoprimary" plain :loading="draftLoading" @click="saveDraft" <el-button type="danger" :loading="submitLoading" @click="submitForm" icon="el-icon-position">发布</el-button> <el-button type="infoprimary" plain :loading="draftLoading" @click="saveDraft" icon="el-icon-document-add" >存草稿</el-button > <el-button @click="handleCancel" :icon="CircleClose">取 消</el-button> <el-button @click="handleCancel" icon="el-icon-circle-close">取 消</el-button> </div> </template> </el-dialog> @@ -644,7 +644,7 @@ :src="getThumbUrl(currentDetail.mediaUrl)" :preview-src-list="[getPreviewUrl(currentDetail.mediaUrl)]" fit="contain" style="width: 700px; height: 520px; cursor: pointer" style="pxToRemNum(width: 700px); pxToRemNum(height: 520px); cursor: pointer" > <template #placeholder> <div class="image-placeholder"> @@ -736,6 +736,7 @@ type="primary" :loading="approveLoading" @click="approveTicket" icon="el-icon-check" >通过</el-button > <el-button @@ -743,9 +744,10 @@ type="danger" :loading="rejectLoading" @click="rejectTicket" icon="el-icon-close" >不通过</el-button > <el-button @click="detailVisible = false":icon="CircleClose">取消</el-button> <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button> </template> <template v-else-if="currentDetail.status === 0"> <el-button @@ -753,6 +755,7 @@ type="primary" :loading="dispatchLoading" @click="approveAndDispatch" icon="el-icon-check" >受理</el-button > <el-button @@ -760,9 +763,10 @@ type="danger" :loading="rejectLoading" @click="rejectTicket" icon="el-icon-close" >不受理</el-button > <el-button @click="detailVisible = false">取消</el-button> <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button> </template> <template v-if="currentDetail.status === 3"> <!-- 处理中 --> @@ -771,15 +775,16 @@ type="primary" :loading="completeLoading" @click="completeTicket" icon="el-icon-circle-check" >完成工单</el-button > <el-button @click="detailVisible = false">取消</el-button> <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button> </template> <template v-else-if="currentDetail.status === 4"> <!-- 已完成 --> <!-- <el-button v-if="hasProcessedAndOverBtnPermission()" type="primary" :loading="finalizeLoading" @click="finalizeTicket">完结工单</el-button> --> <el-button @click="detailVisible = false">取消</el-button> <el-button @click="detailVisible = false" icon="el-icon-circle-close">取消</el-button> </template> </div> <div @@ -832,7 +837,7 @@ </el-form-item> </el-form> <template #footer> <el-button @click="dispatchDialogVisible = false">取消</el-button> <el-button @click="dispatchDialogVisible = false" icon="el-icon-circle-close">取消</el-button> <el-button type="primary" :loading="dispatchLoading" @click="submitDispatch" >确认派发</el-button > @@ -909,9 +914,9 @@ <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="handleBatchApprove">通过</el-button> <el-button type="danger" @click="handleBatchReject">不通过</el-button> <el-button @click="cancleBatchReject">取消</el-button> <el-button type="primary" @click="handleBatchApprove" icon="el-icon-check">通过</el-button> <el-button type="danger" @click="handleBatchReject" icon="el-icon-close">不通过</el-button> <el-button @click="cancleBatchReject" icon="el-icon-circle-close">取消</el-button> </div> </template> </el-dialog> @@ -935,6 +940,7 @@ </template> <script> import { pxToRem, pxToRemNum } from '@/utils/rem' import { getSmallImg, getShowImg } from '@/utils/util'; import { ElMessageBox, ElLoading } from 'element-plus'; import { calculateDefaultRange } from '@/utils/util'; @@ -3572,7 +3578,7 @@ opacity: 0.3 !important; } .PopUpTableScrolls { height: 600px; max-height: 600px; overflow-y: scroll; overflow-x: hidden; }