| src/views/tickets/component/AddEditDetails.vue | ●●●●● patch | view | raw | blame | history | |
| src/views/tickets/orderLogCopy.vue | ●●●●● patch | view | raw | blame | history |
src/views/tickets/component/AddEditDetails.vue
@@ -1,22 +1,15 @@ <template> <el-dialog class="ztzf-dialog-mange" modal-class="add-edit-details" v-model="isShowAddEditDetails" :title="txtTitle" width="70%" :close-on-click-modal="false" :destroy-on-close="true" @close="cancel" :before-close="handleBeforeClose" > <el-dialog class="ztzf-dialog-mange" modal-class="add-edit-details" v-model="isShowAddEditDetails" :title="txtTitle" width="70%" :close-on-click-modal="false" :destroy-on-close="true" @close="cancel" :before-close="handleBeforeClose"> <div class="add-edit-details"> <div class="process" v-if="txtTitle !=='新建工单'"> <div class="process" v-if="txtTitle !== '新建工单'"> <div class="order_title">{{ formParams.name }}</div> <div class="custom-steps-container"> <!-- 标题行 --> <div class="steps-titles"> <div class="step-title" v-for="(record, index) in formParams.record_list" :class="{ active: record.user_id >= 0 }" :key="index"> <div class="step-title" v-for="(record, index) in formParams.record_list" :class="{ active: record.user_id >= 0 }" :key="index"> {{ record.status_str }} </div> </div> @@ -42,44 +35,52 @@ <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="工单名称" prop="name"> <el-input v-model="formParams.name" placeholder="请输入工单名称" maxlength="100" show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> <el-input v-model="formParams.name" placeholder="请输入工单名称" maxlength="100" show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="关联航线" prop="file_id"> <el-select v-model="formParams.file_id" placeholder="请选择航线" filterable @change="getFlyingNest" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-select v-model="formParams.file_id" placeholder="请选择航线" filterable @change="getFlyingNest" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-option v-for="item in lineList" :key="item.wayline_id" :label="item.name" :value="item.wayline_id" /> :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height"> <el-input-number v-model="formParams.rth_altitude" :min="50" :max="500" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input-number> <el-input-number v-model="formParams.rth_altitude" :min="50" :max="500" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input-number> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="关联机巢" prop="device_sns"> <el-select v-model="formParams.device_sns" placeholder="请选择机巢" multiple :disabled="(txtTitle === '工单审核' || txtTitle === '工单详情')"> <el-option v-for="item in drone_sns" :key="item.device_sn" :label="item.nickname" :value="item.device_sn" /> <el-select v-model="formParams.device_sns" placeholder="请选择机巢" multiple :disabled="(txtTitle === '工单审核' || txtTitle === '工单详情')"> <el-option v-for="item in drone_sns" :key="item.device_sn" :label="item.nickname" :value="item.device_sn" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="关联算法" prop="ai_types"> <el-select v-model="formParams.ai_types" placeholder="请选择关联算法" multiple :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-option v-for="item in aiTypeList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> <el-select v-model="formParams.ai_types" placeholder="请选择关联算法" multiple :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-option v-for="item in aiTypeList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12" v-if="txtTitle === '新建工单'"> <el-col :span="12" v-if="txtTitle === '新建工单'"> <el-form-item label="工单内容" prop="content"> <el-input type="textarea" v-model="formParams.content" rows="4" placeholder="请输入工单内容" maxlength="255" show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> <el-input type="textarea" v-model="formParams.content" rows="4" placeholder="请输入工单内容" maxlength="255" show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> </el-form-item> </el-col> @@ -91,27 +92,21 @@ <el-col :span="7"> <el-form-item label="周期频次" prop="date_range"> <el-date-picker :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'" v-model="formParams.date_range" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" <el-date-picker :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'" v-model="formParams.date_range" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :disabled-date="disabledDate" /> </el-form-item> </el-col> <el-col :span="2"> <el-select v-model="formParams.rep_fre_type" placeholder="请选择频次" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-select v-model="formParams.rep_fre_type" placeholder="请选择频次" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"> <el-option v-for="item in weeks" :key="item" :label="item" :value="item" /> </el-select> </el-col> <el-col :span="3"> <el-time-picker :style="{ width: pxToRem(140) }" v-model="formParams.deal_time" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'" prop="deal_time" value-format="HH:mm" :picker-options="{ selectableRange: '00:00 - 23:59'}" /> <el-time-picker :style="{ width: pxToRem(140) }" v-model="formParams.deal_time" :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'" prop="deal_time" value-format="HH:mm" :picker-options="{ selectableRange: '00:00 - 23:59' }" /> </el-col> </el-row> @@ -119,7 +114,7 @@ <el-col :span="12"> <el-form-item label="工单内容" prop="content"> <el-input type="textarea" v-model="formParams.content" rows="4" placeholder="请输入工单内容" maxlength="255" show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> show-word-limit :disabled="txtTitle === '工单审核' || txtTitle === '工单详情'"></el-input> </el-form-item> </el-col> </el-row> @@ -134,19 +129,17 @@ <template #footer v-if="txtTitle === '新建工单'"> <div class="dialog-footer"> <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 type="primary" @click="submitForm(0)" icon="el-icon-document-add">存草稿</el-button>--> <el-button @click="cancel" icon="el-icon-circle-close">取消</el-button> </div> </template> <template #footer v-if="txtTitle === '工单审核'"> <div class="dialog-footer"> <el-button type="primary" v-if="formParams.status == 1 && permission.orderLogpass" @click="orderPass(formParams.id)">通过 <el-button type="primary" v-if="formParams.status == 1 && permission.orderLogpass" @click="orderPass(formParams.id)">通过 </el-button> <el-button type="danger" v-if="formParams.status == 1 && permission.rejection_btn" @click="orderReject(formParams.id)">驳回 <el-button type="danger" v-if="formParams.status == 1 && permission.rejection_btn" @click="orderReject(formParams.id)">驳回 </el-button> <el-button @click="cancel" icon="el-icon-circle-close">取消</el-button> </div> @@ -154,8 +147,8 @@ <template #footer v-if="txtTitle === '工单编辑'"> <div class="dialog-footer"> <el-button type="danger" v-if="formParams.status == 0 || (formParams.status == 2 && userInfo.user_id === formParams.create_user)" @click="submitForm(1)" icon="el-icon-position">发布 v-if="formParams.status == 0 || (formParams.status == 2 && userInfo.user_id === formParams.create_user)" @click="submitForm(1)" icon="el-icon-position">发布 </el-button> <el-button @click="cancel" icon="el-icon-circle-close">取消</el-button> </div> @@ -165,7 +158,7 @@ <script setup> import { pxToRem, pxToRemNum } from '@/utils/rem' import { ref, shallowRef, onMounted, computed } from 'vue'; import { ref, shallowRef, onMounted, computed } from 'vue' import { newGetWorkspacesPage } from '@/api/resource/wayline' import { getDictionaryByCode } from '@/api/system/dictbiz' import { getFlyingNestBy } from '@/api/device/device' @@ -175,21 +168,21 @@ orderLogPass, orderLogReject, orderLogRecall, getWaylineMaxTerrainHeight } from '@/api/tickets/orderLog'; } from '@/api/tickets/orderLog' import dayjs from 'dayjs' import 'dayjs/locale/zh-cn' // 导入中文语言包 import _ from 'lodash' import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus' import weekday from 'dayjs/plugin/weekday' dayjs.extend(weekday) dayjs.locale('zh-cn') import { useStore } from 'vuex' const emit = defineEmits(['refresh']); const emit = defineEmits(['refresh']) const store = useStore() const userInfo = computed(() => store.state.user.userInfo) const permission = computed(() => store.state.user.permission); const permission = computed(() => store.state.user.permission) // safeHeight 计算属性 const safeHeight = computed(() => { @@ -215,15 +208,15 @@ { required: true, message: '请输入工单名称', trigger: 'blur' }, { max: 100, message: '工单名称不能超过100个字', trigger: 'blur' } ], file_id: [{ required: true, message: '需要选择航线', trigger: 'change' }], device_sns: [{ required: true, message: '请选择机巢', trigger: 'change' }], content: [ file_id: [{ required: true, message: '需要选择航线', trigger: 'change' }], device_sns: [{ required: true, message: '请选择机巢', trigger: 'change' }], content: [ { required: true, message: '请输入工单内容', trigger: 'blur' }, { max: 255, message: '工单内容不能超过255个字', trigger: 'blur' } ], date_range: [{ required: true, message: '请选择时间不能为空', trigger: 'blur' }], rep_fre_type: [{ required: true, message: '请选择周期', trigger: 'blur' }], deal_time: [{ required: true, message: '请选择执行时间', trigger: 'blur' }] date_range: [{ required: true, message: '请选择时间不能为空', trigger: 'blur' }], rep_fre_type: [{ required: true, message: '请选择周期', trigger: 'blur' }], deal_time: [{ required: true, message: '请选择执行时间', trigger: 'blur' }] }) //周期 const weeks = ref(['每天', '周一', '周二', '周三', '周四', '周五', '周六', '周末', '周天', '工作日']) @@ -268,7 +261,7 @@ initMapLine({}, polygon => { const currentLine = lineList.value.find(item => item.wayline_id === waylineId) const params = { type: ['2', '4', '5'].includes(currentLine.wayline_type) ? 2 : 0, type: ['2', '4', '5', '7', '8', '9', '10'].includes(currentLine.wayline_type) ? 2 : 0, wayline_id: waylineId, polygon } @@ -291,7 +284,7 @@ // } // initMapLine 方法 const initMapLine = async (infos = {}, cb = () => {}) => { const initMapLine = async (infos = {}, cb = () => { }) => { const currentLine = lineList.value.find(item => item.wayline_id == formParams.value.file_id) @@ -316,18 +309,18 @@ ).padStart(2, '0')} 00:00:00` } async function returnHeight() { let checkedList = drone_sns.value.filter(item => formParams.value.device_sns.includes(item.device_sn)); async function returnHeight () { let checkedList = drone_sns.value.filter(item => formParams.value.device_sns.includes(item.device_sn)) const maxItem = checkedList.reduce((max, item) => { return item.drone_height > max.drone_height ? item : max; }); return item.drone_height > max.drone_height ? item : max }) // 返航绝对高度 let backHeight = formParams.value.rth_altitude // + maxItem.drone_height console.log(backHeight,'backHeight') console.log(backHeight, 'backHeight') // 安全起飞高度 let positions = positionsArr.value positions.unshift({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height }) positions.push({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height}) positions.unshift({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) positions.push({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) let resultHeight = 0 await getWaylineMaxTerrainHeight(positions).then(res => { resultHeight = safeHeight.value > (res.data.data + 30) ? safeHeight.value : (res.data.data + 30) @@ -336,7 +329,7 @@ return _.round(backHeight - resultHeight, 2) } function submitForm(status) { function submitForm (status) { orderFormRef.value?.validate(async (valid, fields) => { if (valid) { console.log('表单验证通过') @@ -349,25 +342,25 @@ const now = new Date() if (selectedDate === dayjs().format('YYYY-MM-DD') && selectedTime < now) { return ElMessage({message: '任务时间不能小于当前时间', type: 'warning'}) return ElMessage({ message: '任务时间不能小于当前时间', type: 'warning' }) } } let checkedList = drone_sns.value.filter(item => formParams.value.device_sns.includes(item.device_sn)); let checkedList = drone_sns.value.filter(item => formParams.value.device_sns.includes(item.device_sn)) const maxItem = checkedList.reduce((max, item) => { return item.drone_height > max.drone_height ? item : max; }); return item.drone_height > max.drone_height ? item : max }) // 返航绝对高度 let backHeight = formParams.value.rth_altitude // + maxItem.drone_height console.log(backHeight,'backHeight') console.log(backHeight, 'backHeight') // 安全起飞高度 let positions = positionsArr.value positions.unshift({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height }) positions.push({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height}) positions.unshift({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) positions.push({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) let resultHeight = 0 let valueHeight = 0 await getWaylineMaxTerrainHeight(positions).then(res => { resultHeight = (safeHeight.value + maxItem.drone_height) > (res.data.data + 30) ? (safeHeight.value + maxItem.drone_height) : (res.data.data + 30) console.log(resultHeight,maxItem.drone_height, '999') console.log(resultHeight, maxItem.drone_height, '999') valueHeight = (resultHeight - maxItem.drone_height) > backHeight ? _.round(resultHeight - maxItem.drone_height) : 0 }) if (valueHeight > 0) { @@ -384,9 +377,9 @@ } await saveUpdateOrderLog(submitData) if (txtTitle === '新建工单') { ElMessage({message: '工单创建成功', type: 'success'}) ElMessage({ message: '工单创建成功', type: 'success' }) } else { ElMessage({message: '工单发布成功', type: 'success'}) ElMessage({ message: '工单发布成功', type: 'success' }) } cancel() } else { @@ -395,7 +388,7 @@ }) } // 审核通过 function orderPass(id) { function orderPass (id) { orderLogPass(id).then(res => { ElMessage.success('审核通过') cancel() @@ -438,7 +431,7 @@ // 监听txtTitle watch(isShowAddEditDetails, async (newVal, oldVal) => { console.log('txtTitle 发生变化:', newVal, oldVal) formParams.value = {rth_altitude:120} formParams.value = { rth_altitude: 120 } if (txtTitle.value === '工单审核' || txtTitle.value === '工单详情' || txtTitle.value === '工单编辑') { const response = await orderLogDetails(rowObj.value.id) const data = response.data.data @@ -454,13 +447,13 @@ }, { immediate: true // 立即执行一次 }) function handleBeforeClose() { function handleBeforeClose () { cancel() } function cancel() { function cancel () { formParams.value = {} isShowAddEditDetails.value = false emit('refresh'); emit('refresh') } // onMounted(async () => { @@ -483,6 +476,7 @@ .week_pc_one { flex: 1; .week-r { margin-right: 4px; } @@ -491,6 +485,7 @@ width: 100% !important; } } .process { .order_title { height: 30px; @@ -500,6 +495,7 @@ font-weight: bold; color: #333; } .custom-steps-container { width: 100%; margin: 7px 0; src/views/tickets/orderLogCopy.vue
@@ -10,7 +10,7 @@ <el-col :span="4"> <el-form-item label="关键字:"> <el-input v-model="filters.key_word" placeholder="编号/名称/内容/姓名" clearable @keyup.enter="handleSearch" /> @keyup.enter="handleSearch" /> </el-form-item> <!-- <div class="search-bar-box-item">--> @@ -23,16 +23,16 @@ <el-col :span="8"> <el-form-item label="选择日期:"> <el-date-picker @change="handleSearch" v-model="filters.dateRange" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :default-value="datePickerDefaultVal" /> range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :default-value="datePickerDefaultVal" /> </el-form-item> </el-col> <el-col :span="4"> <el-form-item label="关联航线:"> <el-select @change="handleSearch" v-model="filters.file_id" placeholder="请选择关联航线" filterable clearable> clearable> <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" :value="item.wayline_id" /> :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> @@ -40,7 +40,7 @@ <el-form-item label="关联算法:"> <el-select @change="handleSearch" v-model="filters.ai_types" placeholder="关联算法" clearable> <el-option v-for="item in ai_types" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey" /> :value="item.dictKey" /> </el-select> </el-form-item> @@ -55,7 +55,7 @@ <el-col :span="4"> <el-form-item label="工单状态:"> <el-select @change="handleSearch" v-model="filters.status" placeholder="请选择工单状态" clearable :disabled="activeTab !== 'all'"> :disabled="activeTab !== 'all'"> <el-option v-for="item in statuses" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> @@ -65,8 +65,8 @@ <el-col :span="8"> <el-form-item label="工单周期:"> <el-date-picker @change="handleSearch" v-model="filters.cycleDateRange" type="daterange" range-separator="至" start-placeholder="工单周期开始日期" end-placeholder="工单周期结束日期" :default-value="datePickerDefaultVal" /> range-separator="至" start-placeholder="工单周期开始日期" end-placeholder="工单周期结束日期" :default-value="datePickerDefaultVal" /> </el-form-item> </el-col> <el-col :span="4"> @@ -79,7 +79,7 @@ <el-col :span="4"> <el-form-item label="执行时间:"> <el-time-picker @change="handleSearch" v-model="filters.deal_time" placeholder="请选择执行时间" prop="deal_time" value-format="HH:mm" :picker-options="{ prop="deal_time" value-format="HH:mm" :picker-options="{ selectableRange: '00:00 - 23:59', }" /> </el-form-item> @@ -95,8 +95,8 @@ <!-- 表格部分 --> <avue-crud class="ztzf-public-general-avue-crud" :data="tableData" :option="option" v-model:page="page" ref="crud" :table-loading="loading" @current-change="currentChange" @refresh-change="refreshChange" @on-load="onLoad" @search-change="searchChange" @size-change="sizeChange" v-if="activeTab === tab.name"> ref="crud" :table-loading="loading" @current-change="currentChange" @refresh-change="refreshChange" @on-load="onLoad" @search-change="searchChange" @size-change="sizeChange" v-if="activeTab === tab.name"> <template #job_info_num="{ row }"> <el-tooltip-copy :content="row.job_info_num" :showCopyText="true" textAlign="left"> {{ row.job_info_num }} @@ -111,7 +111,7 @@ <template #menu-left> <el-button v-if="hasAddBtnPermission() && activeTab != 'WAIT_AUDIT'" type="primary" icon="el-icon-plus" @click="handleAdd">新建工单 @click="handleAdd">新建工单 </el-button> <el-button type="success" plain icon="el-icon-download" @click="exportData">导出 </el-button> @@ -121,7 +121,7 @@ <div class="menu-custom-box"> <template v-if="row.status == 1"> <el-button v-if="hasPaddingBtnPermission()" type="text" icon="el-icon-view" @click="handleCheckDetail(row)">审核 @click="handleCheckDetail(row)">审核 </el-button> </template> <!-- v-if=" @@ -131,7 +131,7 @@ <template v-if="row.status == 1"> <!--待审核状态--> <el-button type="text" icon="el-icon-warning" v-if="hasRecallPaddingBtnPermission()" @click="orderLogRecall(row.id)">撤回 @click="orderLogRecall(row.id)">撤回 </el-button> <!-- <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情</el-button> --> </template> @@ -140,7 +140,7 @@ <el-button type="text" icon="el-icon-warning" @click="rejectDetail(row.id)">驳回原因 </el-button> <el-button v-if="userInfo.user_id == row.create_user" type="text" icon="el-icon-view" @click="handleViewDetail(row)">编辑 @click="handleViewDetail(row)">编辑 </el-button> <el-button v-else type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情 </el-button> @@ -176,7 +176,7 @@ <!-- 新建工单对话框 --> <el-dialog class="ztzf-dialog-mange" v-model="dialogVisible" title="新建工单" width="70%" :close-on-click-modal="false" @close="resetForm"> @close="resetForm"> <el-form :model="form" :rules="rules" ref="testform" label-width="100px"> <el-row :gutter="20"> <el-col :span="12"> @@ -188,7 +188,7 @@ <el-form-item label="关联航线" prop="file_id"> <el-select v-model="form.file_id" placeholder="请选择航线" filterable @change="getFlyingNestBy"> <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" :value="item.wayline_id" /> :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> @@ -203,7 +203,7 @@ <el-form-item label="关联机巢" prop="device_sns"> <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple :disabled="!device_sns.length"> <el-option v-for="item in device_sns" :key="item.device_sn" :label="item.nickname" :value="item.device_sn" /> :value="item.device_sn" /> </el-select> </el-form-item> </el-col> @@ -220,14 +220,14 @@ <el-col :span="12"> <el-form-item label="工单内容" prop="content"> <el-input type="textarea" v-model="form.content" rows="4" placeholder="请输入工单内容" maxlength="255" show-word-limit></el-input> show-word-limit></el-input> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label="周期频次" prop="date_range"> <el-date-picker v-model="form.date_range" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :disabled-date="disabledDate" /> end-placeholder="结束日期" :disabled-date="disabledDate" /> </el-form-item> </el-col> <el-col :span="4"> @@ -239,7 +239,7 @@ </div> <div class="flex-1"> <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" value-format="HH:mm" :picker-options="{ :picker-options="{ selectableRange: '00:00 - 23:59', }" /> </div> @@ -272,14 +272,14 @@ <!-- 工单详情对话框 --> <el-dialog class="ztzf-dialog-mange" align-center v-model="detailVisible" :title="detailTitle" width="70%" :close-on-click-modal="false" @close="resetForm"> :close-on-click-modal="false" @close="resetForm"> <div class="event-title-center">{{ form.name }}</div> <el-form :model="form" :rules="rules" ref="testform" label-width="100px"> <div class="custom-steps-container"> <!-- 标题行 --> <div class="steps-titles" v-if="filters.status !== '0'"> <div v-for="(record, index) in form.record_list" :class="{ active: record.user_id >= 0 }" :key="index" class="step-title"> class="step-title"> {{ record.status_str }} </div> </div> @@ -311,16 +311,16 @@ <el-col :span="6"> <el-form-item label="关联航线" prop="file_id"> <el-select v-model="form.file_id" placeholder="请选择航线" @change="getFlyingNestBy" filterable :disabled="detailTitle === '工单详情'"> :disabled="detailTitle === '工单详情'"> <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" :value="item.wayline_id" /> :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height"> <el-input-number :disabled="detailTitle === '工单详情'" v-model="form.rth_altitude" :min="50" :max="500"></el-input-number> :max="500"></el-input-number> </el-form-item> </el-col> </el-row> @@ -329,7 +329,7 @@ <el-form-item label="关联机巢" prop="device_sns"> <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple :disabled="detailTitle === '工单详情'"> <el-option v-for="item in device_sns" :key="item.device_sn" :label="item.nickname" :value="item.device_sn" /> :value="item.device_sn" /> </el-select> </el-form-item> </el-col> @@ -352,7 +352,7 @@ <el-col :span="6"> <el-form-item label="周期频次" prop="date_range"> <el-date-picker v-model="form.date_range" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :disabled-date="disabledDate" :disabled="detailTitle === '工单详情'" /> end-placeholder="结束日期" :disabled-date="disabledDate" :disabled="detailTitle === '工单详情'" /> </el-form-item> </el-col> @@ -364,7 +364,7 @@ <el-col :span="3"> <el-time-picker class="timeStyle" :style="{ width: pxToRem(140) }" v-model="form.deal_time" prop="deal_time" value-format="HH:mm" :picker-options="{ value-format="HH:mm" :picker-options="{ selectableRange: '00:00 - 23:59', }" :disabled="detailTitle === '工单详情'" /> </el-col> @@ -374,7 +374,7 @@ <el-col :span="12"> <el-form-item label="工单内容" prop="content"> <el-input type="textarea" v-model="form.content" rows="4" placeholder="请输入工单内容" maxlength="255" show-word-limit :disabled="detailTitle === '工单详情'"></el-input> show-word-limit :disabled="detailTitle === '工单详情'"></el-input> </el-form-item> </el-col> </el-row> @@ -388,20 +388,20 @@ <template #footer> <div class="dialog-footer"> <el-button type="danger" v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)" @click="submitForm(1)" icon="el-icon-position">发布 @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">保存 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" @click="submitForm(0)">保存</el-button> --> <el-button type="primary" v-if="form.status == 1 && hasPaddingBtnPermission()" @click="orderLogPass(form.id)">通过 @click="orderLogPass(form.id)">通过 </el-button> <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()" @click="orderLogReject(form.id)">驳回 @click="orderLogReject(form.id)">驳回 </el-button> </div> </template> @@ -409,14 +409,14 @@ <!-- 工单详情 --> <el-dialog class="ztzf-dialog-mange" align-center v-model="detailVisibleCopy" title="工单详情" width="70%" :close-on-click-modal="false" @close="resetForm"> :close-on-click-modal="false" @close="resetForm"> <div class="event-title-center">{{ form.name }}</div> <el-form :model="form" ref="testform" label-width="100px"> <div class="custom-steps-container"> <!-- 标题行 --> <div class="steps-titles" v-if="filters.status !== '0'"> <div v-for="(record, index) in form.record_list" :class="{ active: record.user_id >= 0 }" :key="index" class="step-title"> class="step-title"> {{ record.status_str }} </div> </div> @@ -449,7 +449,7 @@ <el-form-item label="关联航线" prop="file_id"> <el-select v-model="form.file_id" placeholder="请选择航线" :disabled="true"> <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" :value="item.wayline_id" /> :value="item.wayline_id" /> </el-select> </el-form-item> </el-col> @@ -465,7 +465,7 @@ <el-form-item label="关联机巢" prop="device_sns"> <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple :disabled="true"> <el-option v-for="item in device_sns" :key="item.device_sn" :label="item.nickname" :value="item.device_sn" /> :value="item.device_sn" /> </el-select> </el-form-item> </el-col> @@ -488,7 +488,7 @@ <el-col :span="6"> <el-form-item label="周期频次" prop="date_range"> <el-date-picker v-model="form.date_range" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :disabled="true" /> end-placeholder="结束日期" :disabled="true" /> </el-form-item> </el-col> <el-col :span="3"> @@ -499,7 +499,7 @@ <el-col :span="3"> <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true" value-format="HH:mm" :picker-options="{ value-format="HH:mm" :picker-options="{ selectableRange: '00:00 - 23:59', }" /> </el-col> @@ -509,7 +509,7 @@ <el-col :span="12"> <el-form-item label="工单内容" prop="content"> <el-input type="textarea" v-model="form.content" rows="2" placeholder="请输入工单内容" maxlength="255" show-word-limit :readonly="true" :disabled="true"></el-input> show-word-limit :readonly="true" :disabled="true"></el-input> </el-form-item> </el-col> </el-row> @@ -524,16 +524,16 @@ <template #footer> <div class="dialog-footer"> <el-button type="danger" v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)" @click="submitForm(1)" icon="el-icon-position">发布 @click="submitForm(1)" icon="el-icon-position">发布 </el-button> <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user" @click="submitForm(0)">保存</el-button> --> <el-button type="primary" v-if="form.status == 1 && hasPaddingBtnPermission()" @click="orderLogPass(form.id)" icon="el-icon-check">通过 icon="el-icon-check">通过 </el-button> <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()" @click="orderLogReject(form.id)" icon="el-icon-close">驳回 @click="orderLogReject(form.id)" icon="el-icon-close">驳回 </el-button> <el-button @click="detailVisibleCopy = false" icon="el-icon-circle-close">取消</el-button> </div> @@ -993,17 +993,17 @@ return this.$message.warning('任务时间不能小于当前时间') } } let checkedList = this.device_sns.filter(item => this.form.device_sns.includes(item.device_sn)); let checkedList = this.device_sns.filter(item => this.form.device_sns.includes(item.device_sn)) const maxItem = checkedList.reduce((max, item) => { return item.drone_height > max.drone_height ? item : max; }); return item.drone_height > max.drone_height ? item : max }) // 返航绝对高度 let backHeight = this.form.rth_altitude // + maxItem.drone_height console.log(backHeight,'backHeight') console.log(backHeight, 'backHeight') // 安全起飞高度 let positions = this.positionsArr positions.unshift({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height }) positions.push({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height}) positions.unshift({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) positions.push({ latitude: maxItem.latitude, longitude: maxItem.longitude, height: maxItem.drone_height }) let resultHeight = 0 await getWaylineMaxTerrainHeight(positions).then(res => { resultHeight = this.safeHeight > (res.data.data + 30) ? this.safeHeight : (res.data.data + 30) @@ -1200,10 +1200,10 @@ } // 更新机巢列表 this.device_sns = data.device_map_infos;// data.device_list; this.device_sns = data.device_map_infos// data.device_list; this.permission && (this.permission.order_log_review || this.permission.order_log_recall) && (data.status == 1 || data.status == 3 || (data.status == 2 && this.userInfo.user_id !== this.form.create_user)) (this.permission.order_log_review || this.permission.order_log_recall) && (data.status == 1 || data.status == 3 || (data.status == 2 && this.userInfo.user_id !== this.form.create_user)) ? (this.detailTitle = '工单详情') : (this.detailTitle = '编辑工单') @@ -1341,7 +1341,7 @@ if (this.$refs.MapContainer && this.$refs.MapContainer.initAddEntity) { this.$refs.MapContainer.initAddEntity('polyline', { url: `${import.meta.env.VITE_APP_AIRLINE_URL + currentLine.object_key }?_t=${new Date().getTime()}`, }?_t=${new Date().getTime()}`, type: currentLine.wayline_type, cb, infos @@ -1362,7 +1362,7 @@ const currentLine = that.wayLineList.find(item => item.wayline_id === waylineId) //按照航线来 const params = { type: ['2', '4', '5'].includes(currentLine.wayline_type) ? 2 : 0, type: ['2', '4', '5', '7', '8', '9', '10'].includes(currentLine.wayline_type) ? 2 : 0, wayline_id: waylineId, polygon }