| | |
| | | <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">--> |
| | |
| | | <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> |
| | |
| | | <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> |
| | | |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | |
| | | <!-- 表格部分 --> |
| | | <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 }} |
| | |
| | | |
| | | <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> |
| | |
| | | <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=" |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | |
| | | <!-- 新建工单对话框 --> |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | </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> |
| | |
| | | |
| | | <!-- 工单详情对话框 --> |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | | |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | |
| | | <!-- 工单详情 --> |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | 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) |
| | |
| | | } |
| | | |
| | | // 更新机巢列表 |
| | | 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 = '编辑工单') |
| | | |
| | |
| | | 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 |
| | |
| | | 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 |
| | | } |