| | |
| | | <view class="bottom-content" v-if="mapOperationStatus =='teaching'"> |
| | | <view class="tip">路径记录中...</view> |
| | | <view v-if="mapOperationType =='public_teaching'"> |
| | | <!-- 主路/支路 --> |
| | | <view>正在记录搬运车行进路径,完成后点按钮以结束示教。在示教过程中可以添加站点。</view> |
| | | <!-- <view class="switch-type">可随时切换主路/支路示教, |
| | | <view class="switch-type">可随时切换示教模式 |
| | | <view class="switch-button-group"> |
| | | <view class="switch-button" |
| | | :class="teachingModeCur.main_road ==1?'switch-button-checked':''" |
| | | @click="onTeachingModeMainRoad(1)">主路示教</view> |
| | | :class="teachingModeCur.mode_type ==0?'switch-button-checked':''" |
| | | @click="onTeachingModeType(0)">默认</view> |
| | | <view class="switch-button " |
| | | :class="teachingModeCur.main_road ==0?'switch-button-checked':''" |
| | | @click="onTeachingModeMainRoad(0)">支路示教</view> |
| | | :class="teachingModeCur.mode_type ==1?'switch-button-checked':''" |
| | | @click="onTeachingModeType(1)">双向</view> |
| | | <view class="switch-button " |
| | | :class="teachingModeCur.mode_type ==2?'switch-button-checked':''" |
| | | @click="onTeachingModeType(2)">智能</view> |
| | | </view> |
| | | </view> --> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-else> |
| | |
| | | <view class="bottom-content" v-else> |
| | | <view class="tip">即将开始公共示教</view> |
| | | <view> |
| | | 请选择要进行主路还是支路示教,点【开始记录】后将记录搬运车的行进路线作为公共示教路线。开始记录后可随时切换主路/支路示教。 |
| | | 请选择要进行主路还是支路示教,点【开始记录】后将记录搬运车的行进路线作为公共示教路线。开始记录后可随时切换示教模式。 |
| | | </view> |
| | | <view class="text-button-group"> |
| | | <view class="switch-type"> |
| | | <view class="switch-button-group"> |
| | | <view class="switch-button" |
| | | :class="teachingModeCur.main_road ==1?'switch-button-checked':''" |
| | | @click="onTeachingModeMainRoad(1)">主路示教</view> |
| | | :class="teachingModeCur.mode_type ==0?'switch-button-checked':''" |
| | | @click="onTeachingModeType(0)">默认</view> |
| | | <view class="switch-button " |
| | | :class="teachingModeCur.main_road ==0?'switch-button-checked':''" |
| | | @click="onTeachingModeMainRoad(0)">支路示教</view> |
| | | :class="teachingModeCur.mode_type ==1?'switch-button-checked':''" |
| | | @click="onTeachingModeType(1)">双向</view> |
| | | <view class="switch-button " |
| | | :class="teachingModeCur.mode_type ==2?'switch-button-checked':''" |
| | | @click="onTeachingModeType(2)">智能</view> |
| | | </view> |
| | | </view> |
| | | <a-button type="primary" class="button" :disabled="loading" |
| | |
| | | |
| | | </view> |
| | | </uni-popup> |
| | | <uni-popup ref="refPopupTeachingUpdate" type="dialog"> |
| | | <uni-popup-dialog type="info" cancelText="取消" confirmText="确定" title="示教更新" |
| | | @confirm="dialogTeachingUpdateConfirm" @close="dialogTeachingUpdateClose"> |
| | | |
| | | <view class="popup-dialog-content"> |
| | | <view class="popup-content-item"> |
| | | <radio-group @change="radioTeachinMainRoadChange"> |
| | | <label class="radio"> |
| | | <radio :value="1" :checked="selectTeachingMode.main_road == 1" />主路 |
| | | </label> |
| | | <label class="radio"> |
| | | <radio :value="0" :checked="selectTeachingMode.main_road != 1" />支路 |
| | | </label> |
| | | </radio-group> |
| | | |
| | | |
| | | </view> |
| | | <view class="popup-content-item"> |
| | | <radio-group @change="radioTeachinBidirectionChange"> |
| | | <label class="radio"> |
| | | <radio :value="1" :checked="selectTeachingMode.bidirection == 1" />双向 |
| | | </label> |
| | | <label class="radio"> |
| | | <radio :value="0" :checked="selectTeachingMode.bidirection != 1" />单向 |
| | | </label> |
| | | </radio-group> |
| | | |
| | | </view> |
| | | </view> |
| | | </uni-popup-dialog> |
| | | </uni-popup> |
| | | |
| | | |
| | | |
| | | </view> |
| | | </view> |
| | |
| | | delTeachingMode, |
| | | delTeachingModeData, |
| | | checkAgvLocationDistanceError, |
| | | splitTeachingMode, |
| | | updateSplitTeachingData, |
| | | deleteSplitTeachingData |
| | | } from "@/api/vehicle.js" |
| | | export default { |
| | | name: "PagesMap", |
| | |
| | | unlinked: false, |
| | | showTeachingPathFlag: true, |
| | | curTeachingPathFlag: false, |
| | | curTeachingPathTime: 0, |
| | | curMapInfo: { |
| | | proportion: 1, |
| | | img_proportion: 1, |
| | |
| | | 'save') { |
| | | try { |
| | | await delTeachingMode(this.vehicleIp, [this.teachingModeCur]) |
| | | |
| | | listDataStr.push({ |
| | | method: "remove_teaching_path", |
| | | param: { |
| | |
| | | } |
| | | |
| | | } else { |
| | | |
| | | |
| | | const eventChannel = this.getOpenerEventChannel(); |
| | | eventChannel.emit('check_connect', !this.unlinked); |
| | | uni.navigateBack({ |
| | |
| | | height: param.view?.height || 0, |
| | | } |
| | | const angle = this.getStantardAngle(this.stationEdit.angle * 180 / Math.PI) |
| | | |
| | | |
| | | this.angleSvg = `/static/images/angle${angle}.svg` |
| | | this.mapOperationType = "" |
| | | |
| | |
| | | } else if (param.type == "public") { |
| | | this.selectTeachingMode = { |
| | | mode: "Public", |
| | | edge_name: param.data?.edge_name || "", |
| | | name: param.data?.name || "", |
| | | point: param.point |
| | | point: param.point, |
| | | main_road: param.data?.main_road || 0, |
| | | bidirection: param.data?.bidirection || 0, |
| | | } |
| | | console.log(this.selectTeachingMode.main_road, this.selectTeachingMode) |
| | | } |
| | | this.$refs.refPopupOperateTeaching.open("bottom") |
| | | } else if (param.method == "cancel_positioning_agv") { |
| | | if (this.mapOperationType == "public_teaching" |
| | | && this.mapOperationStatus == "teaching") { |
| | | if (this.mapOperationType == "public_teaching" && |
| | | this.mapOperationStatus == "teaching") { |
| | | this.positioningAgv = true |
| | | } else |
| | | this.positioningAgv = false |
| | |
| | | this.mapOperationStatus = "" |
| | | this.teachingModeCur = { |
| | | mode: "Public", |
| | | main_road: 1, |
| | | mode_type: 0, |
| | | } |
| | | this.positioningAgv = true |
| | | this.mapOperationType = "public_teaching" |
| | |
| | | async loadSceneList() { |
| | | try { |
| | | |
| | | |
| | | |
| | | const _this = this |
| | | const res = await getAllScene(this.vehicleIp) || [] |
| | | const list = res?.sceneList || [] |
| | |
| | | |
| | | } catch (ex) { |
| | | showError(ex) |
| | | } |
| | | } |
| | | }, |
| | | clickDelete() { |
| | | const _this = this |
| | |
| | | try { |
| | | const { |
| | | data |
| | | } = await getTeachingMode(this.vehicleIp) |
| | | } = await splitTeachingMode(this.vehicleIp) |
| | | return data || { |
| | | Public: [], |
| | | Stations: [] |
| | |
| | | } |
| | | }) |
| | | if (list.length > 0) { |
| | | this.curTeachingPathTime += 1 |
| | | this.curTeachingPathFlag = true |
| | | if (this.curTeachingPathTime % 5 == 0) { |
| | | const listStationCtxData = await this.getRefreshStationCtxData() || [] |
| | | if (listStationCtxData.length > 0) { |
| | | listCtrData.push(...listStationCtxData) |
| | | } |
| | | } |
| | | } else { |
| | | if (this.curTeachingPathFlag) { |
| | | this.curTeachingPathFlag = false |
| | | this.curTeachingPathTime = 0 |
| | | |
| | | const teaching = await this.loadTeachingMode() |
| | | |
| | | const publicOld = this.teachingMode.Public || [] |
| | |
| | | const stationAdd = [] |
| | | for (let i in publicNew) { |
| | | const item = publicNew[i] |
| | | const curIndex = publicOld.findIndex((a) => a.name == item.name) |
| | | console.log(curIndex, item) |
| | | const curIndex = publicOld.findIndex((a) => a.name == item.name && a.edge_name == item.edge_name ) |
| | | |
| | | if (curIndex < 0) { |
| | | publicAdd.push(item) |
| | | publicOld.push(item) |
| | |
| | | show: this.showTeachingPathFlag |
| | | } |
| | | }) |
| | | } |
| | | const listStationCtxData = await this.getRefreshStationCtxData() || [] |
| | | if (listStationCtxData.length > 0) { |
| | | listCtrData.push(...listStationCtxData) |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | }, |
| | | async getRefreshStationCtxData() { |
| | | try { |
| | | const listCtrData = [] |
| | | const listOld = this.stationList |
| | | const listId = listOld.map((a) => a.stationID) |
| | | const stationLst = await this.loadStations() |
| | | const listNew = stationLst.filter((a) => { |
| | | return !listId.includes(a.stationID) |
| | | }) |
| | | // console.log(listId.length,listNew.length,stationLst.length) |
| | | // console.log(listId) |
| | | if (listId.length + listNew.length > stationLst.length) { |
| | | const listId2 = stationLst.map((a) => a.stationID) |
| | | |
| | | const listRemove = listOld.filter((a) => { |
| | | return !listId2.includes(a.stationID) |
| | | }) |
| | | if (listRemove.length > 0) { |
| | | listCtrData.push({ |
| | | method: "remove_station", |
| | | param: listRemove |
| | | }) |
| | | this.stationList = stationLst |
| | | } |
| | | } |
| | | if (listNew.length > 0) { |
| | | listCtrData.push({ |
| | | method: "add_station", |
| | | param: listNew |
| | | }) |
| | | this.stationList = stationLst |
| | | } |
| | | return listCtrData |
| | | } catch (ex) { |
| | | |
| | | showToast(ex) |
| | | return [] |
| | | } |
| | | }, |
| | | askTeachingBiDirection(teachingMode) { |
| | | showModal("选择当前示教路线类型?", "示教结束", true, "双向路线", |
| | | "单向路线").then((res) => { |
| | |
| | | } |
| | | } else {*/ |
| | | |
| | | const main_road = this |
| | | const mode_type = this |
| | | .teachingModeCur |
| | | .main_road |
| | | .mode_type |
| | | this.teachingModeCur = { |
| | | mode: "Public", |
| | | src_dst: ``, |
| | | name: "", |
| | | teaching_flag: 1, |
| | | main_road |
| | | mode_type |
| | | } |
| | | const res2 = |
| | | await teachingModeFlag( |
| | |
| | | // } else { |
| | | // this.askTeachingBiDirection(this.teachingModeCur) |
| | | // } |
| | | this.askTeachingBiDirection( |
| | | this |
| | | .teachingModeCur |
| | | ) |
| | | // this.askTeachingBiDirection( |
| | | // this |
| | | // .teachingModeCur |
| | | // ) |
| | | this.teachingModeCur.teaching_flag = 0 |
| | | await this.finishTeaching(this.teachingModeCur) |
| | | } catch (ex) { |
| | | showError(ex) |
| | | } finally { |
| | |
| | | } |
| | | |
| | | }, |
| | | async onTeachingModeMainRoad(val) { |
| | | async onTeachingModeType(val) { |
| | | try { |
| | | if (this.mapOperationStatus) { |
| | | |
| | | if (this.teachingModeCur.main_road == val) { |
| | | if (this.teachingModeCur.mode_type == val) { |
| | | return |
| | | } |
| | | this.teachingModeCur.teaching_flag = 0 |
| | | const oldName = this.teachingModeCur.name |
| | | await teachingModeFlag(this.vehicleIp, this.teachingModeCur) |
| | | this.teachingModeCur.main_road = val |
| | | this.teachingModeCur.mode_type = val |
| | | this.teachingModeCur.teaching_flag = 1 |
| | | this.teachingModeCur.mode = "Public" |
| | | this.teachingModeCur.name = "" |
| | | const res = await teachingModeFlag(this.vehicleIp, this.teachingModeCur) |
| | | if (val == 0) |
| | | const res = await teachingModeFlag(this.vehicleIp, this |
| | | .teachingModeCur) |
| | | if (val == 1) |
| | | showToast("已将示教切换成双向模式") |
| | | else if (val == 2) |
| | | showToast("已将示教切换成智能模式") |
| | | else |
| | | showToast("已将示教切换成默认模式") |
| | | /*if (val == 0) |
| | | showToast( |
| | | "已将该路段路径保存为主路示教路线" |
| | | ) |
| | |
| | | |
| | | const { |
| | | data |
| | | } = await getTeachingMode(this.vehicleIp) |
| | | } = await splitTeachingMode(this.vehicleIp) |
| | | |
| | | const publicList = data.Public || [] |
| | | const curIndex = publicList.findIndex((a) => a.name == oldName) |
| | |
| | | }]) |
| | | |
| | | } |
| | | |
| | | */ |
| | | |
| | | } else { |
| | | this.teachingModeCur |
| | | .main_road = |
| | | val |
| | | this.teachingModeCur.mode_type = val |
| | | } |
| | | |
| | | } catch (ex) { |
| | |
| | | }, |
| | | |
| | | clickTeachingEdit() { |
| | | this.$refs |
| | | .refPopupOperateTeaching |
| | | .close() |
| | | this.mapOperationType = |
| | | "edit_teaching" |
| | | this.ctxDataStr = JSON |
| | | .stringify([{ |
| | | method: "edit_teaching", |
| | | param: this.selectTeachingMode, |
| | | }]) |
| | | this.$refs.refPopupOperateTeaching.close() |
| | | this.$refs.refPopupTeachingUpdate.open("") |
| | | |
| | | // this.mapOperationType = |
| | | // "edit_teaching" |
| | | // this.ctxDataStr = JSON |
| | | // .stringify([{ |
| | | // method: "edit_teaching", |
| | | // param: this.selectTeachingMode, |
| | | // }]) |
| | | }, |
| | | radioTeachinMainRoadChange(evt) { |
| | | this.selectTeachingMode.main_road = evt.detail.value |
| | | }, |
| | | radioTeachinBidirectionChange(evt) { |
| | | this.selectTeachingMode.bidirection = evt.detail.value |
| | | }, |
| | | async dialogTeachingUpdateConfirm() { |
| | | try { |
| | | uni.showLoading({ |
| | | title: "更新示教中" |
| | | }) |
| | | const item = this.selectTeachingMode |
| | | await updateSplitTeachingData(this.vehicleIp, item) |
| | | this.ctxDataStr = |
| | | JSON.stringify( |
| | | [{ |
| | | method: "update_teaching", |
| | | param: item, |
| | | }]) |
| | | this.selectTeachingMode = {} |
| | | showToast("更新示教成功") |
| | | } catch (ex) { |
| | | showError( |
| | | ex) |
| | | } finally { |
| | | uni.hideLoading() |
| | | } |
| | | }, |
| | | dialogTeachingUpdateClose() { |
| | | this.$refs.refPopupTeachingUpdate.close() |
| | | |
| | | }, |
| | | |
| | | async removeTeachingMode(item) { |
| | |
| | | uni.showLoading({ |
| | | title: "删除示教中" |
| | | }) |
| | | await delTeachingMode(this.vehicleIp, [item]) |
| | | await deleteSplitTeachingData(this.vehicleIp, item |
| | | .edge_name, item.name) |
| | | //await delTeachingMode(this.vehicleIp, [item]) |
| | | this.ctxDataStr = |
| | | JSON.stringify( |
| | | [{ |
| | | method: "remove_teaching_path", |
| | | param: item, |
| | | }]) |
| | | showToast("删除示教成功") |
| | | } catch (ex) { |
| | | showError( |
| | | ex) |
| | |
| | | title: "删除示教数据中" |
| | | }) |
| | | await delTeachingModeData(this.vehicleIp, data) |
| | | showToast("删除示教成功") |
| | | this.reloadTeachingMode() |
| | | } catch (ex) { |
| | | showError(ex) |
| | |
| | | height: 32px; |
| | | line-height: 32px; |
| | | text-align: center; |
| | | box-shadow: 0px 2px 8px 0px #0000000C; |
| | | } |
| | | |
| | | .switch-button-checked { |
| | | box-shadow: 0px 2px 8px 0px #0000000C; |
| | | background-color: #fff; |
| | | color: #262626; |
| | | color: #1890FF; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | background-color: transparent; |
| | | } |
| | | |
| | | .popup-dialog-content { |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .popup-content-item { |
| | | padding: 10rpx; |
| | | } |
| | | } |
| | | |
| | | .popup-content-menu { |
| | | margin-top: 140rpx; |
| | | margin-left: 225rpx; |