From 5b93d148889f9ade54ba0022f0dea373b7075246 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 16 Apr 2025 15:07:01 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/drone/command-center-dashboard
---
src/layout/Header.vue | 5
src/views/TaskManage/TaskTop/TaskTime.vue | 1
src/views/Home/HomeLeft/MachineNestList.vue | 10
src/hooks/useMapAggregation/useMapAggregation.js | 7
src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue | 3
src/views/Home/SearchBox.vue | 8
src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceEvent.vue | 94 ++--
.env.development | 2
vite.config.mjs.timestamp-1744707003737-1868137d88f2d.mjs | 187 +++++++++
src/views/Home/HomeLeft/OverviewNext.vue | 23
src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/MachineTableDetails.vue | 8
src/components/CommonDateTime.vue | 3
src/views/TaskManage/TaskIntermediateContent/TaskMap.vue | 11
src/store/modules/home.js | 7
.env.production | 2
src/views/TaskManage/TaskIntermediateContent/AddTask.vue | 413 +++++++++++---------
src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue | 15
src/views/TaskManage/TaskIntermediateContent/TaskTable.vue | 333 +++++++++-------
src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJob.vue | 16
19 files changed, 709 insertions(+), 439 deletions(-)
diff --git a/.env.development b/.env.development
index 029d374..4792921 100644
--- a/.env.development
+++ b/.env.development
@@ -11,3 +11,5 @@
# 航线文件地址
VITE_APP_AIRLINE_URL = https://wrj.shuixiongit.com/minio/cloud-bucket
+#系统运维
+VITE_APP_ADMIN_URL = 'https://wrj.shuixiongit.com/manage'
\ No newline at end of file
diff --git a/.env.production b/.env.production
index 4a0e953..d4914e6 100644
--- a/.env.production
+++ b/.env.production
@@ -5,3 +5,5 @@
VITE_BUILD_COMPRESS = gzip
# ws地址
VITE_APP_WS_API_URL = wss://wrj.shuixiongit.com/drone-wss/api/v1/ws
+# 管理后台地址
+VITE_APP_ADMIN_URL = ' https://aisky.org.cn/manage'
diff --git a/src/components/CommonDateTime.vue b/src/components/CommonDateTime.vue
index 393e9b7..3876c6c 100644
--- a/src/components/CommonDateTime.vue
+++ b/src/components/CommonDateTime.vue
@@ -60,9 +60,8 @@
let timeClick = (item,index) => {
checked.value = item;
const newDateRange = dateRanges[item];
- store.commit('setEventTimeType', [checked.value, timeListEnum[index]]);
model.value = newDateRange;
- emit('change', newDateRange, timeListEnum[index]);
+ emit('change', newDateRange, timeListEnum[index],checked.value);
};
onMounted(() => {
// 如果父组件传入了值,就使用父组件的值 by cpz
diff --git a/src/hooks/useMapAggregation/useMapAggregation.js b/src/hooks/useMapAggregation/useMapAggregation.js
index 46aeb4a..c3b229b 100644
--- a/src/hooks/useMapAggregation/useMapAggregation.js
+++ b/src/hooks/useMapAggregation/useMapAggregation.js
@@ -137,14 +137,12 @@
if (arr.length !== 0) {
returnObj.childrens = arr
}
- console.log(returnObj, '111111')
return returnObj
})
}
// 获取事件聚合
function getMapEventCount (params) {
- console.log(5555555)
return getMapEvents(params).then(res => {
const resData = res?.data?.data
if (resData?.data) {
@@ -185,7 +183,6 @@
eventList = []
if (!areaCode) return
saveParams.area_code = areaCode
- console.log(type, '444')
const list = type === 'device' ? await getDeviceCount(areaCode) : await getMapEventCount(saveParams)
const splashedList = type === 'device'
? await getDeviceList(areaCode)
@@ -248,8 +245,6 @@
return
}
- handlerInit()
-
if (newValue.eventTimeType) {
saveParams = { area_code: newValue.selectedAreaCode, date_enum: store.state.home.eventTimeParams }
}
@@ -260,6 +255,8 @@
needFly = true
if (!viewer) return
+ handlerInit()
+
viewer.scene.postRender.removeEventListener(determineScaling)
initMapData(newValue.selectedAreaCode).then(() => {
diff --git a/src/layout/Header.vue b/src/layout/Header.vue
index 17a4f57..3e67c19 100644
--- a/src/layout/Header.vue
+++ b/src/layout/Header.vue
@@ -31,6 +31,7 @@
import { useRouter, useRoute } from 'vue-router';
import { Message } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus';
+import { ELocalStorageKey } from '@/utils/http/enums';
const router = useRouter();
const route = useRoute();
@@ -50,6 +51,10 @@
]);
const handleClick = ({ path, name }) => {
+ if (['系统运维'].includes(name)) {
+ window.open(import.meta.env.VITE_APP_ADMIN_URL + '?token=' + localStorage.getItem(ELocalStorageKey.Token), '_blank');
+ return;
+ }
if (!['首页', '任务管理'].includes(name)) return ElMessage.warning('正在加急开发中...');
// 更新 leftList 的 active 状态
leftList.value.forEach(item => {
diff --git a/src/store/modules/home.js b/src/store/modules/home.js
index 73618a3..f4b0ca8 100644
--- a/src/store/modules/home.js
+++ b/src/store/modules/home.js
@@ -117,10 +117,9 @@
dock.work_osd = info.host
}
},
- setEventTimeType : (state, data) => {
- console.log('33333')
- state.eventTimeType = data[0]
- state.eventTimeParams = data[1]
+ setEventTimeType: (state, [timeType, timeParams]) => {
+ state.eventTimeType = timeType
+ state.eventTimeParams = timeParams
},
setEventTimeRang : (state, time) => {
state.eventTimeRang = time
diff --git a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
index 276130c..a2374d1 100644
--- a/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
+++ b/src/views/Home/EventOverviewDetail/EventOverviewDetailLeft/EventOverviewDetailLeft.vue
@@ -41,11 +41,12 @@
provide('eventOverviewParams', params)
// 时间变化
-const timeChange = (value, date_enum) => {
+const timeChange = (value, date_enum, type) => {
params.value = {
...params.value,
date_enum,
}
+ store.commit('setEventTimeType', [type, date_enum]);
}
const goBack = () => {
store.commit('setIsEventOverviewDetail', false)
diff --git a/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue b/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
index 777af0c..b5e7ed4 100644
--- a/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
+++ b/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
@@ -3,7 +3,7 @@
<el-dialog
class="inspection-rask-details-dialog ztzf-dialog"
v-model="isShowDetailsDialog"
- :width="pxToRem(1000)"
+ :width="pxToRem(1500)"
:close-on-click-modal="false"
:destroy-on-close="true"
>
@@ -64,7 +64,7 @@
<el-table
:data="taskDetailData"
:row-class-name="tableRowClassName"
- :row-style="{ height: '54px', fontSize: '14px', 'text-align': 'center' }"
+ :row-style="{ height: '45px', fontSize: '14px', 'text-align': 'center' }"
:header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }"
>
<el-table-column label="序号" type="index" width="60">
@@ -115,7 +115,7 @@
</el-table>
</div>
<!-- 分页 -->
- <div style="display: flex; justify-content: center">
+ <div style="display: flex; justify-content: center;margin:15px 0;">
<el-pagination
class="ztzf-pagination"
v-model:current-page="pageParams.current"
@@ -322,7 +322,7 @@
.tabledata {
padding: 0 16px;
overflow: hidden;
- height: 640px;
+ // height: 640px;
overflow-y: scroll !important;
}
@@ -343,9 +343,4 @@
color: #8cfea7;
}
</style>
-<style lang="scss">
-.inspection-rask-details-dialog {
- width: 1270px;
- height: 856px;
-}
-</style>
+
diff --git a/src/views/Home/HomeLeft/MachineNestList.vue b/src/views/Home/HomeLeft/MachineNestList.vue
index 016fb64..8b4ccf8 100644
--- a/src/views/Home/HomeLeft/MachineNestList.vue
+++ b/src/views/Home/HomeLeft/MachineNestList.vue
@@ -5,13 +5,17 @@
<div class="machine-nest-list">
<MachineNestTotal @searchNickName="handleSearch" />
<div class="content-wrapper">
- <div
+ <!-- <div
class="table-list"
v-if="tableList.length > 0"
infinite-scroll-distance="6"
v-infinite-scroll="loadMore"
:infinite-scroll-disabled="busy"
infinite-scroll-immediate="true"
+ > -->
+ <div
+ class="table-list"
+ v-if="tableList.length > 0"
>
<div
:class="[index % 2 === 1 ? 'table-itemeven' : 'table-item']"
@@ -73,7 +77,7 @@
// 分页参数
const pageParams = ref({
current: 1,
- size: 8,
+ size: 99,
total: 0,
})
@@ -90,7 +94,7 @@
if (res.data.code !== 0) return
if (res.data.data.records.length === 0) return (isMore.value = false)
// pageParams.value.current += 1
- pageParams.value.size += 8
+ // pageParams.value.size += 8
tableList.value = res.data.data.records;// [...tableList.value, ...res.data.data.records]
busy.value = false
})
diff --git a/src/views/Home/HomeLeft/OverviewNext.vue b/src/views/Home/HomeLeft/OverviewNext.vue
index 4d1116a..a1e4e07 100644
--- a/src/views/Home/HomeLeft/OverviewNext.vue
+++ b/src/views/Home/HomeLeft/OverviewNext.vue
@@ -8,14 +8,17 @@
<div class="name">机巢名称</div>
<div class="status">机巢状态</div>
</div>
- <div
+ <!-- <div
class="table-body"
v-if="tableList.length > 0"
infinite-scroll-distance="6"
v-infinite-scroll="loadMore"
:infinite-scroll-disabled="busy"
infinite-scroll-immediate="true"
- >
+ > -->
+ <div
+ class="table-body"
+ v-if="tableList.length > 0">
<div
class="table-item"
:class="[index % 2 === 1 ? '' : 'table-item-odd']"
@@ -66,7 +69,7 @@
// 分页参数
const pageParams = ref({
current: 1,
- size: 5,
+ size: 99,
total: 0,
})
// 机巢列表
@@ -82,24 +85,24 @@
if (res.data.code !== 0) return
if (res.data.data.records.length === 0) return (isMore.value = false)
// pageParams.value.current += 1
- pageParams.value.size += 5;
+ // pageParams.value.size += 5;
tableList.value = res.data.data.records;// [...tableList.value, ...res.data.data.records]
busy.value = false
})
}
// 加载更多数据
-const loadMore = async () => {
- busy.value = true
- if (!isMore.value) return
- getTableList()
-}
+// const loadMore = async () => {
+ // busy.value = true
+ // if (!isMore.value) return
+ // getTableList()
+// }
// 搜索数据
const handleSearch = name => {
searchText.value = name
pageParams.value.current = 1
- pageParams.value.size = 5;
+ // pageParams.value.size = 5;
tableList.value = []
isMore.value = true
getTableList()
diff --git a/src/views/Home/SearchBox.vue b/src/views/Home/SearchBox.vue
index e27cf63..5af1e0e 100644
--- a/src/views/Home/SearchBox.vue
+++ b/src/views/Home/SearchBox.vue
@@ -21,7 +21,7 @@
:load="load"
:props="props"
style="width: 240px"
- @change="treeChange"
+ @node-click="handleNodeClick"
/>
</div>
</div>
@@ -47,9 +47,9 @@
const searchBoxRef = ref(null);
const selectDownRef = ref(null);
-function treeChange(value, node) {
- areaValue.value = node.label;
- store.commit('setSelectedAreaCode', value);
+function handleNodeClick(data) {
+ areaValue.value = data.name;
+ store.commit('setSelectedAreaCode', data.code);
}
const props = {
diff --git a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceEvent.vue b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceEvent.vue
index 587af5b..0edf424 100644
--- a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceEvent.vue
+++ b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceEvent.vue
@@ -2,45 +2,48 @@
<div class="deviceevent-container">
<div class="machineTableDetailsTitle">
<p>
- 相关事件<span>{{ total }}</span
- >件
+ 相关事件
+ <span>{{ total }}</span>
+ 件
</p>
</div>
- <div class="deviceevent-table ztzf-table" >
- <el-table :data="list" :row-class-name="tableRowClassName"
- style="width: 100%;"
- :row-style="{ height: '38px', fontSize: '14px', 'text-align': 'center' }"
- :header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }">
- <el-table-column label="序号" type="index" width="60">
+ <div class="deviceevent-table ztzf-table">
+ <el-table
+ :data="list"
+ :row-class-name="tableRowClassName"
+ style="width: 100%"
+ :row-style="{ height: '35px', fontSize: '14px', 'text-align': 'center' }"
+ :header-cell-style="{ 'text-align': 'center', height: '30px', fontSize: '14px' }"
+ >
+ <el-table-column label="序号" type="index" width="60">
<template #default="{ $index }">
{{ ($index + 1).toString().padStart(2, '0') }}
</template>
</el-table-column>
- <el-table-column prop="id" label="事件编号" />
- <el-table-column prop="event_name" label="事件名称" />
- <el-table-column prop="create_user" label="所属单位 " />
- <el-table-column show-overflow-tooltip prop="remark" label="事件内容" />
- <el-table-column show-overflow-tooltip prop="ai_types" label="关联算法" />
- <el-table-column prop="status" label="事件状态">
- <template #default="scope">
- <div class="pending" v-if="scope.row.status === 0">待处理</div>
- <div class="reviewed" v-if="scope.row.status === 2">待审核</div>
- <div class="processing" v-if="scope.row.status === 3">处理中</div>
- <div class="done" v-if="scope.row.status === 4">已完成</div>
- <div class="ended" v-if="scope.row.status === 5">已完结</div>
- </template>
- </el-table-column>
- <el-table-column label="操作" width="80">
- <template #default="scope">
- <div class="ztzf-view" @click="distribution(scope.row)">查看</div>
- </template>
- </el-table-column>
- </el-table>
+ <el-table-column prop="id" label="事件编号" />
+ <el-table-column prop="event_name" label="事件名称" />
+ <el-table-column prop="create_user" label="所属单位 " />
+ <el-table-column show-overflow-tooltip prop="remark" label="事件内容" />
+ <el-table-column show-overflow-tooltip prop="ai_types" label="关联算法" />
+ <el-table-column prop="status" label="事件状态">
+ <template #default="scope">
+ <div class="pending" v-if="scope.row.status === 0">待处理</div>
+ <div class="reviewed" v-if="scope.row.status === 2">待审核</div>
+ <div class="processing" v-if="scope.row.status === 3">处理中</div>
+ <div class="done" v-if="scope.row.status === 4">已完成</div>
+ <div class="ended" v-if="scope.row.status === 5">已完结</div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" width="80">
+ <template #default="scope">
+ <div class="ztzf-view" @click="distribution(scope.row)">查看</div>
+ </template>
+ </el-table-column>
+ </el-table>
</div>
<el-pagination
- class="ztzf-pagination"
+ class="ztzf-pagination"
background
-
v-model:current-page="sizeParams.current"
v-model:page-size="sizeParams.size"
layout="prev, pager, next, jumper"
@@ -79,11 +82,7 @@
const resData = res?.data?.data || {}
list.value = resData.records
total.value = resData.total
-
})
-
-
-
}
const pageChange = val => {
sizeParams.value.current = val
@@ -103,11 +102,10 @@
</script>
<style scoped lang="scss">
-
// 标题
.machineTableDetailsTitle {
margin: 0 24px;
- margin-bottom: 16px;
+ margin-bottom: 10px;
background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center;
background-size: 100% 100%;
p {
@@ -127,38 +125,36 @@
}
// 表格
.deviceevent-table {
-padding: 0 17px;
-
+ padding: 0 17px;
}
// 分页
:deep(.el-pagination) {
display: flex;
justify-content: center;
-
}
:deep(.el-pagination button) {
background: center center no-repeat none !important;
color: #8eb8ea !important;
}
// 待处理
-.pending{
-color: #FF7411;
+.pending {
+ color: #ff7411;
}
// 待审核
-.reviewed{
-color: #8CFEA7;
+.reviewed {
+ color: #8cfea7;
}
// 处理中
-.processing{
-color: #FFC398;
+.processing {
+ color: #ffc398;
}
// 已完成
-.done{
-color: #AFD9FB;
+.done {
+ color: #afd9fb;
}
// 已完结
-.ended{
-color: #11C4FF;
+.ended {
+ color: #11c4ff;
}
</style>
diff --git a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJob.vue b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJob.vue
index 4999956..4d904db 100644
--- a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJob.vue
+++ b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/DeviceJob/DeviceJob.vue
@@ -12,8 +12,8 @@
:data="list"
:row-class-name="tableRowClassName"
style="width: 100%"
- :row-style="{ height: '38px', fontSize: '14px', 'text-align': 'center' }"
- :header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }"
+ :row-style="{ height: '35px', fontSize: '14px', 'text-align': 'center' }"
+ :header-cell-style="{ 'text-align': 'center', height: '30px', fontSize: '14px' }"
>
<el-table-column label="序号" type="index" width="60">
<template #default="{ $index }">
@@ -100,7 +100,7 @@
// 标题
.machineTableDetailsTitle {
margin: 0 24px;
- margin-bottom: 16px;
+ margin-bottom: 10px;
background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center;
background-size: 100% 100%;
p {
@@ -121,15 +121,9 @@
// 表格
.devicelob-table {
padding: 0 17px;
- // height: 280px;
- // overflow: hidden;
- // overflow-y: scroll !important;
+
}
-// :deep(::-webkit-scrollbar) {
-// width: 0;
-// display: none;
-// background: none !important;
-// }
+
// 分页
:deep(.el-pagination) {
diff --git a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/MachineTableDetails.vue b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/MachineTableDetails.vue
index f4f104f..e44d230 100644
--- a/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/MachineTableDetails.vue
+++ b/src/views/SignMachineNest/MachineRight/MachineStatus/MachineTableDetails/MachineTableDetails.vue
@@ -70,12 +70,10 @@
<style lang="scss">
.machineTableDetails {
- width: 1270px;
- height: 856px;
.el-pagination {
text-align: left;
- padding: 20px 20px 0 20px;
+ padding: 10px 20px 5px 10px;
}
.my-header {
display: inline-block;
@@ -90,7 +88,7 @@
display: flex;
justify-content: space-between;
align-items: center;
- margin-bottom: 14px;
+ margin-bottom: 10px;
font-size: 14px;
color: #ffffff;
.itemBox {
@@ -115,7 +113,7 @@
margin: 0 24px;
}
.machineTableDetailsTitle {
- margin-bottom: 16px;
+ margin-bottom: 10px;
background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center;
background-size: 100% 100%;
span {
diff --git a/src/views/TaskManage/TaskIntermediateContent/AddTask.vue b/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
index 6846ab1..5fc9f15 100644
--- a/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/AddTask.vue
@@ -1,49 +1,71 @@
-<!-- 机巢列表详情 -->
+<!-- 新建任务 -->
<template>
<el-dialog
+ class="ztzf-dialog"
modal-class="add-task"
v-model="isShowAddTask"
title="新建任务"
:width="pxToRem(1500)"
:close-on-click-modal="false"
- :destroy-on-close="true">
+ :destroy-on-close="true"
+ >
<!-- <el-divider content-position="left">新建任务</el-divider> -->
<div class="task-contain">
<div class="left">
<div class="search">
- <div class="item"><span class="required">*</span>任务名称:<el-input v-model="searchForm.name" placeholder="请输入任务名称"></el-input></div>
- <div class="item"><span class="required">*</span>任务日期:
+ <div class="item">
+ <el-input class="ztzf-input" v-model="searchForm.name" placeholder="请输入任务/机巢名称"></el-input>
+ </div>
+ <div class="item">
<el-date-picker
+ class="ztzf-date-picker"
v-model="taskData"
- format="YYYY-MM-DD"
+ type="daterange"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
value-format="YYYY-MM-DD"
- :disabled-date="disabledDate"
+ @change="changeselect"
/>
</div>
- <div class="item">任务时间:
+ <div class="item">
+ <div class="itemchild">任务时间:</div>
<el-time-picker
+ class="ztzf-date-picker tasktimer"
v-model="timeSlot"
- placeholder="选择时间"
+ placeholder="请选择"
format="HH:mm"
- value-format="HH:mm"/>
+ value-format="HH:mm"
+ />
</div>
- <div class="item">选择航线:
+ <div class="item">
+ <div class="itemchild">选择航线:</div>
+
<el-select
+ class="ztzf-select"
v-model="searchForm.file_id"
@change="getWayLineFile"
placeholder="请选择航线"
- clearable>
+ clearable
+ >
<el-option
v-for="item in routeOptions"
:key="item.wayline_id"
:label="item.name"
- :value="item.wayline_id"/>
- </el-select>
- </div>
- <div class="item">关联算法:
- <TaskAlgorithmBusiness :showAlgorithm="true" @algorithmChange="algorithmChange"/>
- </div>
- <div class="item">任务描述:<el-input v-model="searchForm.remark" placeholder="请输入任务名称"></el-input></div>
+ :value="item.wayline_id"
+ />
+ </el-select>
+ </div>
+ <div class="item">
+
+ <div class="itemchild">关联算法:</div>
+ <TaskAlgorithmBusiness :setWidth="200" :showAlgorithm="true" @algorithmChange="algorithmChange" />
+ </div>
+ <div class="item">
+
+ <div class="itemchild">任务描述:</div>
+ <el-input class="ztzf-input" v-model="searchForm.remark" placeholder="请输入任务名称"></el-input>
+ </div>
</div>
<div class="lines">
<div class="wayline-type">
@@ -52,26 +74,29 @@
<el-radio :value="2" label="智能规划选区"></el-radio>
</el-radio-group>
</div>
- <TaskMap class="wayline-map"
+ <TaskMap
+ class="wayline-map"
:wayLineFile="wayLineFile"
:checkedTableData="checkedTableData"
- :waylineTypeTest="waylineType"
+ :waylineTypeTest="waylineType"
@clickPosition="clickSignPosition"
@saveWayline="savePlanerWayline"
/>
</div>
</div>
- <div class="right">
- <TaskTable ref="taskTableRef"
- :waylineId="waylineId"
- :waylineType="waylineType"
+ <div class="right ">
+ <TaskTable
+ ref="taskTableRef"
+ :waylineId="waylineId"
+ :waylineType="waylineType"
:singlePoint="singlePoint"
:planarPoints="planarPoints"
- @update:selected="handleSelected"
+ @update:selected="handleSelected"
/>
<div class="btn">
- <el-button type="primary" @click="cancel">取消</el-button>
- <el-button type="primary" @click="submitClick">发布</el-button>
+ <img @click="cancel" style="margin-right:23px" src="@/assets/images/task/cancel.png" alt="">
+ <img @click="submitClick" src="@/assets/images/task/publish.png" alt="">
+
</div>
</div>
</div>
@@ -79,26 +104,26 @@
</template>
<script setup>
-import { ElMessage } from 'element-plus';
-import { pxToRem } from '@/utils/rem';
-import { getWaylineList, createTask } from '@/api/home/task';
-import TaskAlgorithmBusiness from '../components/TaskAlgorithmBusiness.vue';
-import TaskMap from './TaskMap.vue';
-import TaskTable from './TaskTable.vue';
+import { ElMessage } from 'element-plus'
+import { pxToRem } from '@/utils/rem'
+import { getWaylineList, createTask } from '@/api/home/task'
+import TaskAlgorithmBusiness from '../components/TaskAlgorithmBusiness.vue'
+import TaskMap from './TaskMap.vue'
+import TaskTable from './TaskTable.vue'
-const emit = defineEmits(['refresh']);
+const emit = defineEmits(['refresh'])
-const rangDate = ref([]);
+const rangDate = ref([])
// 航线ID
-const waylineId = ref('');
+const waylineId = ref('')
// 航线文件
-const wayLineFile = ref('');
+const wayLineFile = ref('')
// 航线类型
-const waylineType = ref(3);
+const waylineType = ref(3)
// 添加子组件引用
-const taskTableRef = ref(null);
-const taskData = ref('');
-const timeSlot = ref('');
+const taskTableRef = ref(null)
+const taskData = ref('')
+const timeSlot = ref('')
const searchForm = reactive({
name: '',
ai_types: [],
@@ -112,157 +137,157 @@
longitude: '',
latitude: '',
polygon: [],
-});
-const isShowAddTask = defineModel('show');
+})
+const isShowAddTask = defineModel('show')
// 禁用当天之前的日期
-const disabledDate = (time) => {
- return time.getTime() < Date.now() - 8.64e7; // 86400000 = 24 * 60 * 60 * 1000
-};
+const disabledDate = time => {
+ return time.getTime() < Date.now() - 8.64e7 // 86400000 = 24 * 60 * 60 * 1000
+}
// 获取航线列表数据
-const routeOptions = ref([]);
+const routeOptions = ref([])
const getRouteList = async () => {
- const res = await getWaylineList();
- if (res.data.code === 0) {
- routeOptions.value = res.data.data;
- }
-};
+ const res = await getWaylineList()
+ if (res.data.code === 0) {
+ routeOptions.value = res.data.data
+ }
+}
// 关联算法
-const algorithmChange = (val) => {
- searchForm.ai_types = val;
-};
+const algorithmChange = val => {
+ searchForm.ai_types = val
+}
// 切换航线类型
-const radioChange = (val) => {
+const radioChange = val => {
// 清空选中航线值
- searchForm.file_id = '';
+ searchForm.file_id = ''
// 航线ID也清空
- waylineId.value = '';
- wayLineFile.value = '';
- waylineType.value = val;
- searchForm.type = val;
+ waylineId.value = ''
+ wayLineFile.value = ''
+ waylineType.value = val
+ searchForm.type = val
// 清空列表数据
nextTick(() => {
- if (taskTableRef.value) {
- taskTableRef.value.clearTableData();
- }
- });
-};
+ if (taskTableRef.value) {
+ taskTableRef.value.clearTableData()
+ }
+ })
+}
// 获取航线文件
-const getWayLineFile = async (val) => {
- searchForm.type = 0;
- waylineType.value = 0;
- waylineId.value = val;
- const currentRoute = routeOptions.value.find(item => item.wayline_id === val);
- wayLineFile.value = currentRoute.object_key;
-};
+const getWayLineFile = async val => {
+ searchForm.type = 0
+ waylineType.value = 0
+ waylineId.value = val
+ const currentRoute = routeOptions.value.find(item => item.wayline_id === val)
+ wayLineFile.value = currentRoute.object_key
+}
// 获取选中机场列表数据,并且发布
-let checkedTableData = ref([]);
-const handleSelected = (val) => {
- searchForm.dock_sns = val.map(item => item.device_sn);
- checkedTableData.value = val;
-};
+let checkedTableData = ref([])
+const handleSelected = val => {
+ searchForm.dock_sns = val.map(item => item.device_sn)
+ checkedTableData.value = val
+}
// 地图点击事件 表格重新刷新数据
-let singlePoint = ref({});
-const clickSignPosition = (val) => {
- singlePoint.value = val;
- searchForm.longitude = val.longitude;
- searchForm.latitude = val.latitude;
-};
+let singlePoint = ref({})
+const clickSignPosition = val => {
+ singlePoint.value = val
+ searchForm.longitude = val.longitude
+ searchForm.latitude = val.latitude
+}
// 保存面状航线
-let planarPoints = ref([]);
-const savePlanerWayline = (val) => {
- planarPoints.value = val;
- const polygonArray = val.map(point => [point.longitude, point.latitude]);
- searchForm.polygon = polygonArray;
-};
+let planarPoints = ref([])
+const savePlanerWayline = val => {
+ planarPoints.value = val
+ const polygonArray = val.map(point => [point.longitude, point.latitude])
+ searchForm.polygon = polygonArray
+}
// 提交
const submitClick = () => {
if (!taskData.value) {
- ElMessage({
- message: '请选择任务日期',
- type: 'warning'
- });
- return;
- }
+ ElMessage({
+ message: '请选择任务日期',
+ type: 'warning',
+ })
+ return
+ }
if (!searchForm.name) {
- ElMessage({
- message: '请输入任务名称',
- type: 'warning'
- });
- return;
- }
+ ElMessage({
+ message: '请输入任务名称',
+ type: 'warning',
+ })
+ return
+ }
// 检查任务时间
- if (timeSlot.value) {
- const now = new Date();
- const today = now.toDateString();
- const selectedDate = new Date(taskData.value).toDateString();
-
- if (today === selectedDate) {
- const [hours, minutes] = timeSlot.value.split(':');
- const selectedTime = new Date();
- selectedTime.setHours(parseInt(hours), parseInt(minutes));
-
- if (selectedTime < now) {
- ElMessage({
- message: '任务时间不能小于当前时间',
- type: 'warning'
- });
- return;
- }
- }
- }
+ if (timeSlot.value) {
+ const now = new Date()
+ const today = now.toDateString()
+ const selectedDate = new Date(taskData.value).toDateString()
+
+ if (today === selectedDate) {
+ const [hours, minutes] = timeSlot.value.split(':')
+ const selectedTime = new Date()
+ selectedTime.setHours(parseInt(hours), parseInt(minutes))
+
+ if (selectedTime < now) {
+ ElMessage({
+ message: '任务时间不能小于当前时间',
+ type: 'warning',
+ })
+ return
+ }
+ }
+ }
if (searchForm.dock_sns.length === 0) {
ElMessage({
message: '请选择机场',
- type: 'warning'
- });
- return;
+ type: 'warning',
+ })
+ return
}
- searchForm.begin_time = `${taskData.value} 00:00:00`;
- searchForm.end_time = `${taskData.value} 23:59:59`;
- searchForm.execute_time_arr = timeSlot.value ? [timeSlot.value] : [];
- createTask(searchForm).then((res) => {
+ searchForm.begin_time = `${taskData.value} 00:00:00`
+ searchForm.end_time = `${taskData.value} 23:59:59`
+ searchForm.execute_time_arr = timeSlot.value ? [timeSlot.value] : []
+ createTask(searchForm).then(res => {
if (res.data.code === 0) {
- ElMessage.success('任务创建成功');
+ ElMessage.success('任务创建成功')
// 关闭当前窗口,刷新任务管理列表
- isShowAddTask.value = false;
+ isShowAddTask.value = false
// 清除数据
- cancel();
- emit('refresh');
+ cancel()
+ emit('refresh')
}
- });
-};
+ })
+}
const cancel = () => {
- isShowAddTask.value = false;
+ isShowAddTask.value = false
// 清除搜索数据
- searchForm.name = '';
- searchForm.ai_types = [];
- searchForm.file_id = '';
- searchForm.begin_time = '';
- searchForm.end_time = '';
- timeSlot.value = '';
- searchForm.remark = '';
- searchForm.dock_sns = [];
- rangDate.value = [];
- waylineId.value = '';
- wayLineFile.value = '';
- taskData.value = '';
-};
+ searchForm.name = ''
+ searchForm.ai_types = []
+ searchForm.file_id = ''
+ searchForm.begin_time = ''
+ searchForm.end_time = ''
+ timeSlot.value = ''
+ searchForm.remark = ''
+ searchForm.dock_sns = []
+ rangDate.value = []
+ waylineId.value = ''
+ wayLineFile.value = ''
+ taskData.value = ''
+}
onMounted(() => {
- getRouteList();
+ getRouteList()
})
</script>
<style lang="scss">
-.add-task{
+.add-task {
.el-pagination {
text-align: left;
padding: 20px;
@@ -273,52 +298,72 @@
<style lang="scss" scoped>
.task-contain {
display: flex;
+ padding: 20px 32px 32px 27px;
.left {
width: 68%;
+ margin-right: 35px;
.search {
display: grid;
- grid-template-columns: repeat(3, 1fr);
- grid-template-rows: repeat(2, 1fr);
- gap: 30px; // 增加间距使布局更合理
- margin-bottom: 8px; // 添加底部间距
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+ gap: 30px; // 增加间距使布局更合理
+ margin-bottom: 8px; // 添加底部间距
.item {
position: relative;
- display: flex;
- align-items: center;
- :deep(.el-input),
- :deep(.el-select),
- :deep(.el-date-picker),
- :deep(.el-time-picker) {
- width: 240px;
- // margin-left: 10px;
- }
- :deep(.el-date-editor.el-input__wrapper) {
- width: 200px; // 调整日期选择器宽度
- }
- .required {
- color: #f56c6c;
- margin-left: 4px;
- position: absolute;
- left: -10px;
- top: 8px;
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ color: #ffffff;
+ .itemchild {
+ width: 68px;
+ white-space: nowrap;
+ margin-right: 5px;
}
- }
+ :deep(.el-date-editor.el-input__wrapper) {
+ width: 200px; // 调整日期选择器宽度
+ }
+
+ }
}
}
.right {
width: 32%;
display: flex;
- flex-direction: column;
- justify-content: space-between;
-
- .btn {
- margin-top: 20px;
- text-align: center;
-
- .el-button {
- margin: 0 10px;
- }
- }
+ flex-direction: column;
+ justify-content: space-between;
+
+ .btn {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ img {
+ width: 137px;
+ height: 32px;
+ cursor: pointer;
+ }
+
+ }
+ }
+ :deep(.tasktimer .el-input__wrapper) {
+ background: none !important;
+ color: #8ac3fd !important;
+
+ }
+ :deep(.el-input__inner) {
+ color: #8ac3fd !important;
+ &::placeholder {
+ color: #8ac3fd !important;
+ }
+ }
+ :deep(.el-radio__inner){
+ background: none !important;
+ border: 1px solid #1B5D9A !important;
+ }
+ :deep(.el-radio__label){
+ color: #fff !important;
+ }
+ :deep(.el-radio__inner:after ){
+ background: #65B5FF !important;
}
}
</style>
diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskMap.vue b/src/views/TaskManage/TaskIntermediateContent/TaskMap.vue
index b360db9..73653d1 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskMap.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskMap.vue
@@ -14,7 +14,7 @@
import { getCenterPoint } from '@/utils/cesium/mapUtil'
import { getWaylineByArea } from '@/api/home/task';
import { useStore } from 'vuex';
-
+import { addBlueFilter } from '@/utils/cesium/common'
const store = useStore();
const userAreaPosition = computed(() => store.state.home.userAreaPosition);
@@ -74,7 +74,14 @@
fullscreenButton: false,
// sceneMode: Cesium.SceneMode.COLUMBUS_VIEW,
})
- viewer.imageryLayers.addImageryProvider(imageryProvider_ammapSL)
+ const gdLayer = viewer.imageryLayers.addImageryProvider(imageryProvider_ammapSL)
+ const options = {
+ bInvertColor: true,
+ bFilterColor: true,
+ filterColor: '#4e70a6'
+ }
+ // 添加蓝色滤镜
+ addBlueFilter(options,viewer,gdLayer)
viewer.scene.morphTo2D(0);
//设置默认点
const { longitude = 115.763819, latitude = 28.787374, height = 10 } = userAreaPosition.value || {};
diff --git a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
index 6d1b608..b165cf9 100644
--- a/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
+++ b/src/views/TaskManage/TaskIntermediateContent/TaskTable.vue
@@ -1,189 +1,226 @@
<template>
- <div class="table-container">
- <el-table :data="tableData" style="width: 100%" height="400"
- @selection-change="handleSelectionChange"
- @select="handleSelect">
- <el-table-column type="selection" width="55" :selectable="checkSelectable" />
- <el-table-column type="index" label="序号" width="60" />
- <el-table-column prop="nickname" label="机巢名称" />
- <el-table-column prop="estimated_arrival_time" label="预计到达时间" />
- <el-table-column prop="exe_distance" label="执行里程" />
- </el-table>
- <div class="pagination">
- <el-pagination
- v-model:current-page="pagingParams.page"
- v-model:page-size="pagingParams.size"
- :page-sizes="[10, 20, 30]"
- layout="total, sizes, prev, pager, next"
- :total="total"
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- />
- </div>
- </div>
+ <div class="table-container ztzf-table">
+ <div class="taskTableTitle"><span>可飞行机巢列表</span></div>
+ <el-table
+ :data="tableData"
+ style="width: 100%"
+ height="400"
+ :row-style="{ height: '38px', fontSize: '14px', 'text-align': 'center' }"
+ :header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }"
+ @selection-change="handleSelectionChange"
+ @select="handleSelect"
+ >
+ <el-table-column type="selection" width="55" :selectable="checkSelectable" />
+ <el-table-column type="index" label="序号" width="60" />
+ <el-table-column show-overflow-tooltip prop="nickname" label="机巢名称" />
+ <el-table-column show-overflow-tooltip width="120" prop="estimated_arrival_time" label="预计到达时间" />
+ <el-table-column show-overflow-tooltip prop="exe_distance" label="执行里程" />
+ </el-table>
+ <div class="pagination">
+ <el-pagination
+ class="ztzf-pagination"
+ v-model:current-page="pagingParams.page"
+ v-model:page-size="pagingParams.size"
+ :page-sizes="[10, 20, 30]"
+ layout=" prev, pager, next"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
</template>
<script setup>
-import { getFlyingNestBy } from '@/api/home/task';
+import { getFlyingNestBy } from '@/api/home/task'
const props = defineProps({
- waylineId: {
- type: String,
- default: ''
- },
- waylineType: {
- type: Number,
- default: 3
- },
- singlePoint: {
- type: Object,
- default: () => ({})
- },
- planarPoints: {
- type: Array,
- default: () => ([])
- }
-});
+ waylineId: {
+ type: String,
+ default: '',
+ },
+ waylineType: {
+ type: Number,
+ default: 3,
+ },
+ singlePoint: {
+ type: Object,
+ default: () => ({}),
+ },
+ planarPoints: {
+ type: Array,
+ default: () => [],
+ },
+})
// 选中的数据
-const selectedRows = ref([]);
+const selectedRows = ref([])
// 分页参数
let pageParams = ref({
- wayline_id: props.waylineId,
- type: props.waylineType,
- longitude: props.singlePoint.longitude,
- latitude: props.singlePoint.latitude,
- polygon: [],
-});
+ wayline_id: props.waylineId,
+ type: props.waylineType,
+ longitude: props.singlePoint.longitude,
+ latitude: props.singlePoint.latitude,
+ polygon: [],
+})
let pagingParams = ref({
- current: 1,
- size: 10
-});
+ current: 1,
+ size: 10,
+})
// 获取可用机巢列表数据
-const total = ref(0);
-const tableData = ref([]);
+const total = ref(0)
+const tableData = ref([])
const getNestList = async () => {
- tableData.value = [];
- const res = await getFlyingNestBy(pageParams.value, pagingParams.value);
- if (res.data.code === 0) {
- tableData.value = res.data.data;
- }
-};
+ tableData.value = []
+ const res = await getFlyingNestBy(pageParams.value, pagingParams.value)
+ if (res.data.code === 0) {
+ tableData.value = res.data.data
+ }
+}
// 分页大小改变
-const handleSizeChange = (val) => {
- pagingParams.value.size = val;
- getNestList();
-};
+const handleSizeChange = val => {
+ pagingParams.value.size = val
+ getNestList()
+}
// 页码改变
-const handleCurrentChange = (val) => {
- pagingParams.value.current = val;
- getNestList();
-};
+const handleCurrentChange = val => {
+ pagingParams.value.current = val
+ getNestList()
+}
// 刷新数据
const refreshData = () => {
- tableData.value = [];
- pagingParams.value.current = 1;
- getNestList();
-};
+ tableData.value = []
+ pagingParams.value.current = 1
+ getNestList()
+}
-const emit = defineEmits(['update:selected']);
-const handleSelectionChange = (val) => {
- // 如果不是智能规划选区模式,才更新所有选中数据
- if (props.waylineType !== 2) {
- selectedRows.value = val;
- emit('update:selected', val);
- }
-};
+const emit = defineEmits(['update:selected'])
+const handleSelectionChange = val => {
+ // 如果不是智能规划选区模式,才更新所有选中数据
+ if (props.waylineType !== 2) {
+ selectedRows.value = val
+ emit('update:selected', val)
+ }
+}
// 控制表格行是否可选
-const checkSelectable = (row) => {
- if (props.waylineType === 2) {
- // 如果已经有选中的行,且当前行未被选中,则不允许选择
- return selectedRows.value.length === 0 || selectedRows.value.some(selected => selected.device_sn === row.device_sn);
- }
- return true;
-};
+const checkSelectable = row => {
+ if (props.waylineType === 2) {
+ // 如果已经有选中的行,且当前行未被选中,则不允许选择
+ return selectedRows.value.length === 0 || selectedRows.value.some(selected => selected.device_sn === row.device_sn)
+ }
+ return true
+}
// 处理单行选择
const handleSelect = (selection, row) => {
- if (props.waylineType === 2) {
- // 如果是智能规划选区模式,确保只能选中一行
- if (selection.length > 1) {
- // 保留最后选中的那一行
- const lastSelected = selection[selection.length - 1];
- selectedRows.value = [lastSelected];
- // 触发更新事件
- emit('update:selected', selectedRows.value);
- }
- }
-};
+ if (props.waylineType === 2) {
+ // 如果是智能规划选区模式,确保只能选中一行
+ if (selection.length > 1) {
+ // 保留最后选中的那一行
+ const lastSelected = selection[selection.length - 1]
+ selectedRows.value = [lastSelected]
+ // 触发更新事件
+ emit('update:selected', selectedRows.value)
+ }
+ }
+}
// 监听航线ID变化
-watch(() => props.waylineId, (newVal) => {
- pageParams.value.type = 0;
- if (newVal) {
- pageParams.value.wayline_id = newVal;
- refreshData();
- } else {
- // 数据为空时,清除列表数据
- tableData.value = [];
- }
-}, { deep: true });
+watch(
+ () => props.waylineId,
+ newVal => {
+ pageParams.value.type = 0
+ if (newVal) {
+ pageParams.value.wayline_id = newVal
+ refreshData()
+ } else {
+ // 数据为空时,清除列表数据
+ tableData.value = []
+ }
+ },
+ { deep: true }
+)
// 监听单点返回的数据
-watch(() => props.singlePoint, (newVal) => {
- pageParams.value.wayline_id = '';
- pageParams.value.type = 1;
- if (newVal && newVal.latitude && newVal.longitude) {
- pageParams.value.latitude = newVal.latitude;
- pageParams.value.longitude = newVal.longitude;
- refreshData();
- }
-}, { deep: true });
+watch(
+ () => props.singlePoint,
+ newVal => {
+ pageParams.value.wayline_id = ''
+ pageParams.value.type = 1
+ if (newVal && newVal.latitude && newVal.longitude) {
+ pageParams.value.latitude = newVal.latitude
+ pageParams.value.longitude = newVal.longitude
+ refreshData()
+ }
+ },
+ { deep: true }
+)
// 监听面状航线返回的数据
-watch(() => props.planarPoints, (newVal) => {
- pageParams.value.wayline_id = '';
- pageParams.value.type = 2;
- if (newVal && newVal.length > 0) {
- const polygonArray = newVal.map(point => [point.longitude, point.latitude]);
- pageParams.value.polygon = polygonArray;
- refreshData();
- }
-}, { deep: true });
+watch(
+ () => props.planarPoints,
+ newVal => {
+ pageParams.value.wayline_id = ''
+ pageParams.value.type = 2
+ if (newVal && newVal.length > 0) {
+ const polygonArray = newVal.map(point => [point.longitude, point.latitude])
+ pageParams.value.polygon = polygonArray
+ refreshData()
+ }
+ },
+ { deep: true }
+)
// 暴露给父组件的方法
const clearTableData = () => {
- tableData.value = [];
-};
+ tableData.value = []
+}
defineExpose({
- clearTableData
-});
-
-
-onMounted(() => {});
-
+ clearTableData,
+})
+// 表格隔行变色
+const tableRowClassName = ({ row, rowIndex }) => {
+ if (rowIndex % 2 === 1) {
+ return 'warning-row'
+ } else {
+ return 'success-row'
+ }
+}
+onMounted(() => {})
</script>
<style lang="scss" scoped>
.table-container {
- height: 500px;
- // display: flex;
- // flex-direction: column;
-
- .pagination {
- margin-top: 10px;
- }
-
- // :deep(.el-table) {
- // flex: 1;
- // background-color: transparent;
- // --el-table-border-color: rgba(255, 255, 255, 0.1);
- // --el-table-header-bg-color: rgba(31, 62, 122, 0.5);
- // --el-table-header-text-color: #fff;
- // --el-table-text-color: #fff;
- // }
+ height: 500px;
+ .pagination {
+ margin-top: 10px;
+ }
+
+ // 分页
+ :deep(.el-pagination) {
+ display: flex;
+ justify-content: center;
+ }
+ .taskTableTitle {
+ margin-bottom: 16px;
+ background: url('/src/assets/images/signMachineNest/machineRight/detailtitle.png') no-repeat center;
+ background-size: 100% 100%;
+ span {
+ display: inline-block;
+ margin-left: 10px;
+ font-size: 16px;
+ color: #ddf0ff;
+ line-height: 20px;
+ text-align: left;
+ margin-bottom: 8px;
+ }
+ }
+ :deep(.el-checkbox__inner){
+ background: none !important;
+ border: 1px solid #3194EF !important;
+ }
}
</style>
\ No newline at end of file
diff --git a/src/views/TaskManage/TaskTop/TaskTime.vue b/src/views/TaskManage/TaskTop/TaskTime.vue
index d4a7c31..c9cb869 100644
--- a/src/views/TaskManage/TaskTop/TaskTime.vue
+++ b/src/views/TaskManage/TaskTop/TaskTime.vue
@@ -107,7 +107,6 @@
// 添加监听
watch(() => store.state.task.taskSearchParams, (newVal) => {
- console.log(newVal, '33333');
if (newVal) {
getJobNumBar(newVal);
(newVal);
diff --git a/vite.config.mjs.timestamp-1744707003737-1868137d88f2d.mjs b/vite.config.mjs.timestamp-1744707003737-1868137d88f2d.mjs
new file mode 100644
index 0000000..9ccffb4
--- /dev/null
+++ b/vite.config.mjs.timestamp-1744707003737-1868137d88f2d.mjs
@@ -0,0 +1,187 @@
+// vite.config.mjs
+import {
+ defineConfig,
+ loadEnv
+} from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/vite/dist/node/index.js";
+import { resolve } from "path";
+
+// vite/plugins/index.js
+import vue from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/@vitejs/plugin-vue/dist/index.mjs";
+
+// vite/plugins/auto-import.js
+import autoImport from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/unplugin-auto-import/dist/vite.js";
+function createAutoImport() {
+ return autoImport({
+ imports: ["vue", "vue-router", "vuex"],
+ dts: false
+ });
+}
+
+// vite/plugins/compression.js
+import compression from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/vite-plugin-compression/dist/index.mjs";
+function createCompression(env) {
+ const { VITE_BUILD_COMPRESS } = env;
+ const plugin = [];
+ if (VITE_BUILD_COMPRESS) {
+ const compressList = VITE_BUILD_COMPRESS.split(",");
+ if (compressList.includes("gzip")) {
+ plugin.push(
+ compression({
+ ext: ".gz",
+ deleteOriginFile: false
+ })
+ );
+ }
+ if (compressList.includes("brotli")) {
+ plugin.push(
+ compression({
+ ext: ".br",
+ algorithm: "brotliCompress",
+ deleteOriginFile: false
+ })
+ );
+ }
+ }
+ return plugin;
+}
+
+// vite/plugins/setup-extend.js
+import setupExtend from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/vite-plugin-vue-setup-extend/dist/index.mjs";
+function createSetupExtend() {
+ return setupExtend();
+}
+
+// vite/plugins/svg-plugin.js
+import { createSvgIconsPlugin } from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/vite-plugin-svg-icons/dist/index.mjs";
+import path from "path";
+function createSvgPlugin() {
+ return createSvgIconsPlugin({
+ iconDirs: [path.resolve(process.cwd(), "src/assets/svg")],
+ //svg图片存放的目录
+ symbolId: "icon-[name]",
+ // symbol的id
+ inject: "body-last",
+ // 插入的位置
+ customDomId: "__svg__icons__dom__"
+ // svg的id
+ });
+}
+
+// vite/plugins/index.js
+function createVitePlugins(viteEnv, isBuild = false) {
+ const vitePlugins = [vue()];
+ vitePlugins.push(createAutoImport());
+ vitePlugins.push(createSetupExtend());
+ vitePlugins.push(createSvgPlugin());
+ isBuild && vitePlugins.push(...createCompression(viteEnv));
+ return vitePlugins;
+}
+
+// vite.config.mjs
+import postCssPxToRem from "file:///E:/%E9%99%88%E7%91%B6/%E4%B8%AD%E5%9B%BE%E6%99%BA%E9%A3%9E/command-center-dashboard/node_modules/postcss-pxtorem/index.js";
+var __vite_injected_original_dirname = "E:\\\u9648\u7476\\\u4E2D\u56FE\u667A\u98DE\\command-center-dashboard";
+var vite_config_default = ({
+ mode,
+ command
+}) => {
+ const env = loadEnv(mode, process.cwd());
+ const {
+ VITE_APP_ENV,
+ VITE_APP_BASE,
+ VITE_APP_API_URL
+ } = env;
+ const isProd = VITE_APP_ENV === "production";
+ const buildConfig = {
+ target: "esnext",
+ minify: isProd ? "terser" : "esbuild"
+ // 根据环境选择压缩工具
+ };
+ if (isProd) {
+ buildConfig.terserOptions = {
+ compress: {
+ drop_console: true,
+ // 删除 console
+ drop_debugger: true
+ // 删除 debugger
+ },
+ format: {
+ comments: false
+ // 删除所有注释
+ }
+ };
+ buildConfig.rollupOptions = {
+ output: {
+ manualChunks: {
+ "element-plus": ["element-plus"],
+ "@smallwei/avue": ["@smallwei/avue"]
+ }
+ }
+ };
+ }
+ return defineConfig({
+ base: VITE_APP_BASE,
+ define: {
+ __VUE_I18N_FULL_INSTALL__: true,
+ __VUE_I18N_LEGACY_API__: true,
+ __INTLIFY_PROD_DEVTOOLS__: false
+ },
+ server: {
+ // port: 2888,
+ proxy: {
+ "/api": {
+ target: VITE_APP_API_URL,
+ changeOrigin: true,
+ rewrite: (path2) => path2.replace(/^\/api/, "")
+ }
+ }
+ },
+ resolve: {
+ alias: {
+ "~": resolve(__vite_injected_original_dirname, "./"),
+ "@": resolve(__vite_injected_original_dirname, "./src"),
+ components: resolve(__vite_injected_original_dirname, "./src/components"),
+ styles: resolve(__vite_injected_original_dirname, "./src/styles"),
+ utils: resolve(__vite_injected_original_dirname, "./src/utils")
+ }
+ },
+ css: {
+ preprocessorOptions: {
+ scss: {
+ api: "modern-compiler",
+ additionalData: `@use "@/styles/variables.scss" as *;`
+ }
+ },
+ postcss: {
+ plugins: [
+ postCssPxToRem({
+ rootValue: 10,
+ // 指定转换基准值,通常是设计稿宽度的1/10
+ propList: ["*"],
+ // 可以从px转换为rem的属性,这里是所有属性
+ unitPrecision: 5,
+ // 允许REM单位增长到的十进制数
+ selectorBlackList: [],
+ // 选择器黑名单,忽略转换的选择器
+ replace: true,
+ // 替换包含rem的规则,而不是添加回退
+ mediaQuery: false,
+ // 允许在媒体查询中转换px
+ minPixelValue: 0
+ // 设置要替换的最小像素值
+ })
+ ]
+ }
+ },
+ plugins: createVitePlugins(env, command === "build"),
+ build: buildConfig,
+ optimizeDeps: {
+ esbuildOptions: {
+ target: "esnext"
+ }
+ }
+ });
+};
+export {
+ vite_config_default as default
+};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubWpzIiwgInZpdGUvcGx1Z2lucy9pbmRleC5qcyIsICJ2aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQuanMiLCAidml0ZS9wbHVnaW5zL2NvbXByZXNzaW9uLmpzIiwgInZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQuanMiLCAidml0ZS9wbHVnaW5zL3N2Zy1wbHVnaW4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxcdTk2NDhcdTc0NzZcXFxcXHU0RTJEXHU1NkZFXHU2NjdBXHU5OERFXFxcXGNvbW1hbmQtY2VudGVyLWRhc2hib2FyZFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcXHU5NjQ4XHU3NDc2XFxcXFx1NEUyRFx1NTZGRVx1NjY3QVx1OThERVxcXFxjb21tYW5kLWNlbnRlci1kYXNoYm9hcmRcXFxcdml0ZS5jb25maWcubWpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi8lRTklOTklODglRTclOTElQjYvJUU0JUI4JUFEJUU1JTlCJUJFJUU2JTk5JUJBJUU5JUEzJTlFL2NvbW1hbmQtY2VudGVyLWRhc2hib2FyZC92aXRlLmNvbmZpZy5tanNcIjtpbXBvcnQge1xyXG4gIGRlZmluZUNvbmZpZyxcclxuICBsb2FkRW52XHJcbn0gZnJvbSAndml0ZSc7XHJcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgY3JlYXRlVml0ZVBsdWdpbnMgZnJvbSAnLi92aXRlL3BsdWdpbnMnO1xyXG5pbXBvcnQgcG9zdENzc1B4VG9SZW0gZnJvbSAncG9zdGNzcy1weHRvcmVtJ1xyXG5cclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGRlZmF1bHQgKHtcclxuICBtb2RlLFxyXG4gIGNvbW1hbmRcclxufSkgPT4ge1xyXG4gIGNvbnN0IGVudiA9IGxvYWRFbnYobW9kZSwgcHJvY2Vzcy5jd2QoKSlcclxuICBjb25zdCB7XHJcbiAgICBWSVRFX0FQUF9FTlYsXHJcbiAgICBWSVRFX0FQUF9CQVNFLFxyXG4gICAgVklURV9BUFBfQVBJX1VSTFxyXG4gIH0gPSBlbnZcclxuICAvLyBcdTUyMjRcdTY1QURcdTY2MkZcdTYyNTNcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdTUzMDVcclxuICBjb25zdCBpc1Byb2QgPSBWSVRFX0FQUF9FTlYgPT09ICdwcm9kdWN0aW9uJ1xyXG5cclxuICAvLyBcdTY4MzlcdTYzNkVcdTY2MkZcdTU0MjZcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdUZGMENcdTUyQThcdTYwMDFcdThCQkVcdTdGNkVcdTUzOEJcdTdGMjlcdTkxNERcdTdGNkVcclxuICBjb25zdCBidWlsZENvbmZpZyA9IHtcclxuICAgIHRhcmdldDogJ2VzbmV4dCcsXHJcbiAgICBtaW5pZnk6IGlzUHJvZCA/ICd0ZXJzZXInIDogJ2VzYnVpbGQnLCAvLyBcdTY4MzlcdTYzNkVcdTczQUZcdTU4ODNcdTkwMDlcdTYyRTlcdTUzOEJcdTdGMjlcdTVERTVcdTUxNzdcclxuICB9O1xyXG5cclxuICAvLyBcdTU5ODJcdTY3OUNcdTY2MkZcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdUZGMENcdTZERkJcdTUyQTBUZXJzZXJcdTc2ODRcdTkxNERcdTdGNkVcclxuICBpZiAoaXNQcm9kKSB7XHJcbiAgICBidWlsZENvbmZpZy50ZXJzZXJPcHRpb25zID0ge1xyXG4gICAgICBjb21wcmVzczoge1xyXG4gICAgICAgIGRyb3BfY29uc29sZTogdHJ1ZSwgLy8gXHU1MjIwXHU5NjY0IGNvbnNvbGVcclxuICAgICAgICBkcm9wX2RlYnVnZ2VyOiB0cnVlLCAvLyBcdTUyMjBcdTk2NjQgZGVidWdnZXJcclxuICAgICAgfSxcclxuICAgICAgZm9ybWF0OiB7XHJcbiAgICAgICAgY29tbWVudHM6IGZhbHNlIC8vIFx1NTIyMFx1OTY2NFx1NjI0MFx1NjcwOVx1NkNFOFx1OTFDQVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRDb25maWcucm9sbHVwT3B0aW9ucyA9IHtcclxuICAgICAgb3V0cHV0OiB7XHJcbiAgICAgICAgbWFudWFsQ2h1bmtzOiB7XHJcbiAgICAgICAgICAnZWxlbWVudC1wbHVzJzogWydlbGVtZW50LXBsdXMnXSxcclxuICAgICAgICAgICdAc21hbGx3ZWkvYXZ1ZSc6IFsnQHNtYWxsd2VpL2F2dWUnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyh7XHJcbiAgICBiYXNlOiBWSVRFX0FQUF9CQVNFLFxyXG4gICAgZGVmaW5lOiB7XHJcbiAgICAgIF9fVlVFX0kxOE5fRlVMTF9JTlNUQUxMX186IHRydWUsXHJcbiAgICAgIF9fVlVFX0kxOE5fTEVHQUNZX0FQSV9fOiB0cnVlLFxyXG4gICAgICBfX0lOVExJRllfUFJPRF9ERVZUT09MU19fOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHNlcnZlcjoge1xyXG4gICAgICAvLyBwb3J0OiAyODg4LFxyXG4gICAgICBwcm94eToge1xyXG4gICAgICAgICcvYXBpJzoge1xyXG4gICAgICAgICAgdGFyZ2V0OiBWSVRFX0FQUF9BUElfVVJMLFxyXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxyXG4gICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UoL15cXC9hcGkvLCAnJyksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICByZXNvbHZlOiB7XHJcbiAgICAgIGFsaWFzOiB7XHJcbiAgICAgICAgJ34nOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vJyksXHJcbiAgICAgICAgJ0AnOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjJyksXHJcbiAgICAgICAgY29tcG9uZW50czogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9jb21wb25lbnRzJyksXHJcbiAgICAgICAgc3R5bGVzOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjL3N0eWxlcycpLFxyXG4gICAgICAgIHV0aWxzOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjL3V0aWxzJyksXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgY3NzOiB7XHJcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcclxuICAgICAgICBzY3NzOiB7XHJcbiAgICAgICAgICBhcGk6ICdtb2Rlcm4tY29tcGlsZXInLFxyXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyaWFibGVzLnNjc3NcIiBhcyAqO2AsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAgcG9zdGNzczoge1xyXG4gICAgICAgIHBsdWdpbnM6IFtcclxuICAgICAgICAgIHBvc3RDc3NQeFRvUmVtKHtcclxuICAgICAgICAgICAgcm9vdFZhbHVlOiAxMCwgLy8gXHU2MzA3XHU1QjlBXHU4RjZDXHU2MzYyXHU1N0ZBXHU1MUM2XHU1MDNDXHVGRjBDXHU5MDFBXHU1RTM4XHU2NjJGXHU4QkJFXHU4QkExXHU3QTNGXHU1QkJEXHU1RUE2XHU3Njg0MS8xMFxyXG4gICAgICAgICAgICBwcm9wTGlzdDogWycqJ10sIC8vIFx1NTNFRlx1NEVFNVx1NEVDRXB4XHU4RjZDXHU2MzYyXHU0RTNBcmVtXHU3Njg0XHU1QzVFXHU2MDI3XHVGRjBDXHU4RkQ5XHU5MUNDXHU2NjJGXHU2MjQwXHU2NzA5XHU1QzVFXHU2MDI3XHJcbiAgICAgICAgICAgIHVuaXRQcmVjaXNpb246IDUsIC8vIFx1NTE0MVx1OEJCOFJFTVx1NTM1NVx1NEY0RFx1NTg5RVx1OTU3Rlx1NTIzMFx1NzY4NFx1NTM0MVx1OEZEQlx1NTIzNlx1NjU3MFxyXG4gICAgICAgICAgICBzZWxlY3RvckJsYWNrTGlzdDogW10sIC8vIFx1OTAwOVx1NjJFOVx1NTY2OFx1OUVEMVx1NTQwRFx1NTM1NVx1RkYwQ1x1NUZGRFx1NzU2NVx1OEY2Q1x1NjM2Mlx1NzY4NFx1OTAwOVx1NjJFOVx1NTY2OFxyXG4gICAgICAgICAgICByZXBsYWNlOiB0cnVlLCAvLyBcdTY2RkZcdTYzNjJcdTUzMDVcdTU0MkJyZW1cdTc2ODRcdTg5QzRcdTUyMTlcdUZGMENcdTgwMENcdTRFMERcdTY2MkZcdTZERkJcdTUyQTBcdTU2REVcdTkwMDBcclxuICAgICAgICAgICAgbWVkaWFRdWVyeTogZmFsc2UsIC8vIFx1NTE0MVx1OEJCOFx1NTcyOFx1NUE5Mlx1NEY1M1x1NjdFNVx1OEJFMlx1NEUyRFx1OEY2Q1x1NjM2MnB4XHJcbiAgICAgICAgICAgIG1pblBpeGVsVmFsdWU6IDAgLy8gXHU4QkJFXHU3RjZFXHU4OTgxXHU2NkZGXHU2MzYyXHU3Njg0XHU2NzAwXHU1QzBGXHU1MENGXHU3RDIwXHU1MDNDXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwbHVnaW5zOiBjcmVhdGVWaXRlUGx1Z2lucyhlbnYsIGNvbW1hbmQgPT09ICdidWlsZCcpLFxyXG4gICAgYnVpbGQ6IGJ1aWxkQ29uZmlnLFxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGVzYnVpbGRPcHRpb25zOiB7XHJcbiAgICAgICAgdGFyZ2V0OiAnZXNuZXh0JyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfSk7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcXHU5NjQ4XHU3NDc2XFxcXFx1NEUyRFx1NTZGRVx1NjY3QVx1OThERVxcXFxjb21tYW5kLWNlbnRlci1kYXNoYm9hcmRcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxcdTk2NDhcdTc0NzZcXFxcXHU0RTJEXHU1NkZFXHU2NjdBXHU5OERFXFxcXGNvbW1hbmQtY2VudGVyLWRhc2hib2FyZFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcaW5kZXguanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6LyVFOSU5OSU4OCVFNyU5MSVCNi8lRTQlQjglQUQlRTUlOUIlQkUlRTYlOTklQkElRTklQTMlOUUvY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkL3ZpdGUvcGx1Z2lucy9pbmRleC5qc1wiO2ltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJztcclxuXHJcbmltcG9ydCBjcmVhdGVBdXRvSW1wb3J0IGZyb20gJy4vYXV0by1pbXBvcnQnO1xyXG5pbXBvcnQgY3JlYXRlQ29tcHJlc3Npb24gZnJvbSAnLi9jb21wcmVzc2lvbic7XHJcbmltcG9ydCBjcmVhdGVTZXR1cEV4dGVuZCBmcm9tICcuL3NldHVwLWV4dGVuZCc7XHJcbmltcG9ydCBjcmVhdGVTdmdQbHVnaW4gZnJvbSAnLi9zdmctcGx1Z2luJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVZpdGVQbHVnaW5zKHZpdGVFbnYsIGlzQnVpbGQgPSBmYWxzZSkge1xyXG4gIGNvbnN0IHZpdGVQbHVnaW5zID0gW3Z1ZSgpXTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZUF1dG9JbXBvcnQoKSk7XHJcbiAgdml0ZVBsdWdpbnMucHVzaChjcmVhdGVTZXR1cEV4dGVuZCgpKTtcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZVN2Z1BsdWdpbigpKTtcclxuICBpc0J1aWxkICYmIHZpdGVQbHVnaW5zLnB1c2goLi4uY3JlYXRlQ29tcHJlc3Npb24odml0ZUVudikpO1xyXG4gIHJldHVybiB2aXRlUGx1Z2lucztcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFx1OTY0OFx1NzQ3NlxcXFxcdTRFMkRcdTU2RkVcdTY2N0FcdTk4REVcXFxcY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcXHU5NjQ4XHU3NDc2XFxcXFx1NEUyRFx1NTZGRVx1NjY3QVx1OThERVxcXFxjb21tYW5kLWNlbnRlci1kYXNoYm9hcmRcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXGF1dG8taW1wb3J0LmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9FOi8lRTklOTklODglRTclOTElQjYvJUU0JUI4JUFEJUU1JTlCJUJFJUU2JTk5JUJBJUU5JUEzJTlFL2NvbW1hbmQtY2VudGVyLWRhc2hib2FyZC92aXRlL3BsdWdpbnMvYXV0by1pbXBvcnQuanNcIjtpbXBvcnQgYXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUF1dG9JbXBvcnQoKSB7XHJcbiAgcmV0dXJuIGF1dG9JbXBvcnQoe1xyXG4gICAgaW1wb3J0czogWyd2dWUnLCAndnVlLXJvdXRlcicsICd2dWV4J10sXHJcbiAgICBkdHM6IGZhbHNlLFxyXG4gIH0pO1xyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcXHU5NjQ4XHU3NDc2XFxcXFx1NEUyRFx1NTZGRVx1NjY3QVx1OThERVxcXFxjb21tYW5kLWNlbnRlci1kYXNoYm9hcmRcXFxcdml0ZVxcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJFOlxcXFxcdTk2NDhcdTc0NzZcXFxcXHU0RTJEXHU1NkZFXHU2NjdBXHU5OERFXFxcXGNvbW1hbmQtY2VudGVyLWRhc2hib2FyZFxcXFx2aXRlXFxcXHBsdWdpbnNcXFxcY29tcHJlc3Npb24uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6LyVFOSU5OSU4OCVFNyU5MSVCNi8lRTQlQjglQUQlRTUlOUIlQkUlRTYlOTklQkElRTklQTMlOUUvY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkL3ZpdGUvcGx1Z2lucy9jb21wcmVzc2lvbi5qc1wiO2ltcG9ydCBjb21wcmVzc2lvbiBmcm9tICd2aXRlLXBsdWdpbi1jb21wcmVzc2lvbic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb21wcmVzc2lvbihlbnYpIHtcclxuICBjb25zdCB7IFZJVEVfQlVJTERfQ09NUFJFU1MgfSA9IGVudjtcclxuICBjb25zdCBwbHVnaW4gPSBbXTtcclxuICBpZiAoVklURV9CVUlMRF9DT01QUkVTUykge1xyXG4gICAgY29uc3QgY29tcHJlc3NMaXN0ID0gVklURV9CVUlMRF9DT01QUkVTUy5zcGxpdCgnLCcpO1xyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnZ3ppcCcpKSB7XHJcbiAgICAgIHBsdWdpbi5wdXNoKFxyXG4gICAgICAgIGNvbXByZXNzaW9uKHtcclxuICAgICAgICAgIGV4dDogJy5neicsXHJcbiAgICAgICAgICBkZWxldGVPcmlnaW5GaWxlOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXByZXNzTGlzdC5pbmNsdWRlcygnYnJvdGxpJykpIHtcclxuICAgICAgcGx1Z2luLnB1c2goXHJcbiAgICAgICAgY29tcHJlc3Npb24oe1xyXG4gICAgICAgICAgZXh0OiAnLmJyJyxcclxuICAgICAgICAgIGFsZ29yaXRobTogJ2Jyb3RsaUNvbXByZXNzJyxcclxuICAgICAgICAgIGRlbGV0ZU9yaWdpbkZpbGU6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwbHVnaW47XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxcdTk2NDhcdTc0NzZcXFxcXHU0RTJEXHU1NkZFXHU2NjdBXHU5OERFXFxcXGNvbW1hbmQtY2VudGVyLWRhc2hib2FyZFxcXFx2aXRlXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXFx1OTY0OFx1NzQ3NlxcXFxcdTRFMkRcdTU2RkVcdTY2N0FcdTk4REVcXFxcY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkXFxcXHZpdGVcXFxccGx1Z2luc1xcXFxzZXR1cC1leHRlbmQuanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6LyVFOSU5OSU4OCVFNyU5MSVCNi8lRTQlQjglQUQlRTUlOUIlQkUlRTYlOTklQkElRTklQTMlOUUvY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkL3ZpdGUvcGx1Z2lucy9zZXR1cC1leHRlbmQuanNcIjtpbXBvcnQgc2V0dXBFeHRlbmQgZnJvbSAndml0ZS1wbHVnaW4tdnVlLXNldHVwLWV4dGVuZCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTZXR1cEV4dGVuZCgpIHtcclxuICByZXR1cm4gc2V0dXBFeHRlbmQoKTtcclxufVxyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkU6XFxcXFx1OTY0OFx1NzQ3NlxcXFxcdTRFMkRcdTU2RkVcdTY2N0FcdTk4REVcXFxcY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkXFxcXHZpdGVcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcXHU5NjQ4XHU3NDc2XFxcXFx1NEUyRFx1NTZGRVx1NjY3QVx1OThERVxcXFxjb21tYW5kLWNlbnRlci1kYXNoYm9hcmRcXFxcdml0ZVxcXFxwbHVnaW5zXFxcXHN2Zy1wbHVnaW4uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6LyVFOSU5OSU4OCVFNyU5MSVCNi8lRTQlQjglQUQlRTUlOUIlQkUlRTYlOTklQkElRTklQTMlOUUvY29tbWFuZC1jZW50ZXItZGFzaGJvYXJkL3ZpdGUvcGx1Z2lucy9zdmctcGx1Z2luLmpzXCI7aW1wb3J0IHsgY3JlYXRlU3ZnSWNvbnNQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1zdmctaWNvbnMnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnUGx1Z2luKCkge1xyXG4gIHJldHVybiAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xyXG4gICAgaWNvbkRpcnM6IFtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJzcmMvYXNzZXRzL3N2Z1wiKV0sIC8vc3ZnXHU1NkZFXHU3MjQ3XHU1QjU4XHU2NTNFXHU3Njg0XHU3NkVFXHU1RjU1XHJcbiAgICBzeW1ib2xJZDogXCJpY29uLVtuYW1lXVwiLCAvLyBzeW1ib2xcdTc2ODRpZFxyXG4gICAgaW5qZWN0OiBcImJvZHktbGFzdFwiLCAvLyBcdTYzRDJcdTUxNjVcdTc2ODRcdTRGNERcdTdGNkVcclxuICAgIGN1c3RvbURvbUlkOiBcIl9fc3ZnX19pY29uc19fZG9tX19cIiAvLyBzdmdcdTc2ODRpZFxyXG4gIH0pO1xyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBcVY7QUFBQSxFQUNuVjtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxlQUFlOzs7QUNKMFYsT0FBTyxTQUFTOzs7QUNBSixPQUFPLGdCQUFnQjtBQUV0WSxTQUFSLG1CQUFvQztBQUN6QyxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTLENBQUMsT0FBTyxjQUFjLE1BQU07QUFBQSxJQUNyQyxLQUFLO0FBQUEsRUFDUCxDQUFDO0FBQ0g7OztBQ1A4WCxPQUFPLGlCQUFpQjtBQUV2WSxTQUFSLGtCQUFtQyxLQUFL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
--
Gitblit v1.9.3