From 2af5f043b60c1f7ac38ecccc8f5bf44743134325 Mon Sep 17 00:00:00 2001
From: cuiqian2004 <cuiqian2004@163.com>
Date: 星期五, 12 十二月 2025 18:08:00 +0800
Subject: [PATCH] test
---
pages/map/index.vue | 1215 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 737 insertions(+), 478 deletions(-)
diff --git a/pages/map/index.vue b/pages/map/index.vue
index e176d03..899a0db 100644
--- a/pages/map/index.vue
+++ b/pages/map/index.vue
@@ -7,47 +7,46 @@
<view class="uni-navbar-container-inner">
<text class="uni-nav-bar-text">{{navigationBarTitle }}</text>
<image class="icon" v-if="sceneList.length > 1 && !mapOperationType" src="/images/Vector.svg"
- alt="SVG 鍥剧墖" @click="clickShowMenu" />
+ alt="SVG" @click="clickShowMenu" />
</view>
<template v-slot:left>
- <view>
- <uni-icons type="left" size="24" @click="clickBack"></uni-icons>
+ <view @click="clickBack">
+ <uni-icons type="left" size="24"></uni-icons>
</view>
</template>
- <template v-slot:right>
+ <!-- <template v-slot:right>
<view v-if="sceneList.length > 0 && !mapOperationType">
<a @click="clickMore">
<uni-icons class="uni-panel-bar-icon" type="more-filled" size="24"></uni-icons>
</a>
</view>
- </template>
+ </template> -->
</uni-nav-bar>
<view class="no-content" v-if="unlinked">
- <image class="img" src="/images/image 25.png" alt=" 鍥剧墖" mode="aspectFit" />
- <view class="title">杞﹁締杩炴帴澶辫触</view>
- <view class="space">璇锋鏌ヤ綘鐨勭綉缁滆缃垨閲嶆柊鍔犺浇</view>
+ <image class="img" src="/images/image_25.png" alt=" picture" mode="aspectFit" />
+ <view class="title">{{translate('failed_vehicle_connection')}}</view>
+ <view class="space">{{translate('check_network_or_reload')}}</view>
</view>
- <!-- <SceneCreateInfo v-else-if="mapOperationType =='scene_create'" class="map-content" :ip="vehicleIp"
- v-model:opSceneType="opSceneType" @create-ok="onCreateSceneOk"></SceneCreateInfo> -->
- <view class="map-content" v-show="mapOperationType !='scene_create'">
+ <view class="map-content">
<view class="content">
- <view class="fabric" :message="ctxDataStr" :change:message="ctx.receiveMsg" id="canvasMap"></view>
+ <view ref="canvasCtx" class="fabric" id="canvasMap" :message="ctxDataStr"
+ :change:message="ctx.receiveMsg">
+ </view>
<view class="loading-overlay" v-if="bgLoading">
<view class="loading-content">
<view class="loading-spinner"></view>
- <text>鍔犺浇涓�.. {{ bgProgressPercent }}%</text>
+ <text>{{translate('loading')}}... {{ bgProgressPercent }}%</text>
</view>
</view>
<view class="position-site" v-if="mapOperationStatus =='pos' " @click="clickPositionStation">
<text class="ico my-location-rounded"></text>
-
- 鑾峰彇鎼繍杞︿綅缃拰鏈濆悜
+ {{translate('obtain_positon_and_orientation_of_vehicle')}}
</view>
<view class="position" v-else @click="clickVehiclePosition">
<text class="ico my-location-rounded"></text>
- <!-- <image class="img" src="/images/material-symbols_my-location-rounded.svg" alt="SVG 鍥剧墖" /> -->
+ <!-- <image class="img" src="/images/material-symbols_my-location-rounded.svg" alt="SVG picture" /> -->
</view>
<view v-if="this.mapOperationType ==''" class="teaching-path-show"
:class="showTeachingPathFlag?'selected':''" @click="clickShowTeachingPath">
@@ -59,11 +58,11 @@
v-if="mapOperationType =='edit_station'">
<view class=" left">
- <view class="line">绔欑偣鍚嶇О锛�+ <view class="line">{{translate('station_name')}}锛� </view>
- <view class="line"> 鍧愭爣(x,y)锛�+ <view class="line"> {{translate('coordinates')}}(x,y)锛� </view>
- <view class="line">鏈濆悜锛�+ <view class="line">{{translate('angle')}}锛� </view>
</view>
@@ -83,194 +82,193 @@
</view>
</view>
<view class="bottom">
- <view class="bottom-content" v-if="mapOperationType =='edit_scene_name'">
- <view class="tip">璇疯緭鍏ュ満鏅悕绉�/view>
- <view class="name-input">
- <input ref="refInputName" :focus="true" placeholder="璇疯緭鍏ュ満鏅悕绉� :value="sceneInputName"
- @input="onInputName"></input>
- <uni-icons class="clear" color="#ccc" type="clear" size="20" v-if="sceneInputName"
- @click="clickClearName"></uni-icons>
- </view>
- <view class="text-button-group">
- <a-button type="primary" class="button" :disabled="loading || sceneInputName.trim() == ''"
- @click="clickNameOK">纭</a-button>
- <a-button type="ghost" class="button" :disabled="loading" @click="clickNameCancel">鍙栨秷</a-button>
- </view>
- </view>
+ <SceneRenameInfo class="bottom-content" :ip="vehicleIp" :sceneName="sceneId"
+ v-if="mapOperationType =='edit_scene_name'" @finish="onFinishRenameScene" />
+ <PalletSizeInfo class="bottom-content" v-else-if="mapOperationType =='set_pallet_size'" :ip="vehicleIp">
+ </PalletSizeInfo>
<template
v-else-if="mapOperationType =='teaching_add_station' || mapOperationType =='add_station' || mapOperationType =='edit_station'">
<view class="bottom-content" v-if="mapOperationStatus =='pos' ">
- <view class="tip">璋冭妭浣嶇疆</view>
+ <view class="tip">{{translate("adjust_position")}}</view>
<view class="row-group">
<view class="coordinate">
- <text class="name">妯潗鏍�</text>
+ <text class="name">{{translate("x_axis")}}:</text>
<input ref="refInputX" class="number-input" type="number" :value="stationEdit.x"
- @input="onInputStationX" :maxlength="4"></input>
+ @blur="onInputStationX" :maxlength="8" />
<uni-icons class="clear" color="#ccc" type="clear" size="20"
v-if="stationEdit.x && stationEdit.x!='0'" @click="clickClearStationX"></uni-icons>
</view>
<view class="coordinate">
- <text class="name">绔栧潗鏍�</text>
- <input ref="refInputX" class="number-input" type="number" :value="stationEdit.y"
- @input="onInputStationY" :maxlength="4"></input>
+ <text class="name">{{translate("y_axis")}}:</text>
+ <input ref="refInputY" class="number-input" type="number" :value="stationEdit.y"
+ @blur="onInputStationY" :maxlength="8" />
<uni-icons class="clear" color="#ccc" type="clear" size="20"
v-if="stationEdit.y&& stationEdit.y!='0'" @click="clickClearStationY"></uni-icons>
</view>
</view>
- <view class="tip">璋冭妭鏈濆悜</view>
+ <view class="tip">{{translate('adjust_orientation')}}</view>
<view class="angle-group">
- <image class="img-angle" :src="angleSvg" alt="SVG 鍥剧墖" />
- <image class="img-angle-pos" src="/images/Frame 153.svg" alt="SVG 鍥剧墖"
+ <image class="img-angle" :src="angleSvg" alt="SVG picture" />
+ <image class="img-angle-pos" src="/images/Frame_153.svg" alt="SVG picture"
@touchstart="handleAngleTouchStart" @touchmove="handleAngleTouchMove" />
</view>
</view>
<view class="bottom-content" v-else>
- <view class="tip">璇疯緭鍏ョ珯鐐瑰悕绉�/view>
+ <view class="tip">{{translate("input_station_name")}}</view>
<view class="name-input">
- <input ref="refInputName" :focus="true" placeholder="杈撳叆绔欑偣鍚嶇О" :value="stationEdit.name"
- @input="onInputStationName"></input>
+ <input ref="refInputName" :focus="true" :placeholder="translate('input_station_name')"
+ :value="stationEdit.name" @input="onInputStationName" />
<uni-icons class="clear" color="#ccc" type="clear" size="20" v-if="stationEdit.name"
@click="clickClearStationName"></uni-icons>
</view>
<view class="text-button-group">
- <a-button class="button" :disabled="loading" @click="clickStationNameCancel">鍙栨秷</a-button>
+ <a-button class="button" :disabled="loading"
+ @click="clickStationNameCancel">{{translate('cancel')}}</a-button>
<a-button type="primary" class="button" :disabled="loading || stationEdit.name.trim() == ''"
- @click="clickStationNameOK">纭畾</a-button>
+ @click="clickStationNameOK">{{translate('confirm')}}</a-button>
</view>
</view>
</template>
+
<view class="bottom-content" v-else-if="mapOperationType =='regiona_planning'">
<view class="img-button-group">
<view fill="none" class="button" @click="clickManualPlan">
<text class="ico conversion-path"></text>
- <view class="text">浜哄伐瑙勫垝</view>
+ <view class="text">{{translate('manual_plan')}}</view>
</view>
<view type="text" class="button " @click="clickVehicleTrajectoryPlan">
<text class="ico conversion-path"></text>
- <view class="text ">杞﹁締杞ㄨ抗瑙勫垝</view>
+ <view class="text ">{{translate('vehicle_trajectory_plan')}}</view>
</view>
</view>
</view>
<view class="bottom-content" v-else-if="mapOperationType =='vehicle_trajectory_planning'">
<template v-if="mapOperationStatus=='feasible_region' || mapOperationStatus=='prohibition_region'">
- <view class="tip">鍖哄煙瑙勫垝</view>
- <view>鍙寜浣忓悇绔偣璋冩暣铏氭嫙澧欎綅缃紝鎸夈�+銆戞寜閽彲娣诲姞椤剁偣锛屽尯鍩熼渶涓洪棴鍚堝浘褰�/view>
+ <view class="tip">{{translate("regiona_plan")}}</view>
+ <view>{{translate("endpoint_adjust_position_to_closed_shape")}}</view>
</template>
<view class="img-button-group" v-else>
<view fill="none" class="button" @click="clickPlanFeasibleRegion">
<!-- <text class="ico conversion-path"></text> -->
<uni-icons class="img" type="checkmarkempty" size="36" color="#1890FF"></uni-icons>
- <view class="text">鍙鍖�/view>
+ <view class="text">{{translate("feasible_region")}}</view>
</view>
<view type="text" class="button " @click="clickPlanProhibitionRegion">
<text class="ico placeholder-bold"></text>
- <view class="text ">绂佽鍖�/view>
+ <view class="text ">{{translate("prohibition_region")}}</view>
</view>
</view>
</view>
<view class="bottom-content" v-else-if="mapOperationType =='manual_planning'">
<template v-if="mapOperationStatus=='feasible_region' || mapOperationStatus=='prohibition_region'">
- <view class="tip">鍖哄煙瑙勫垝</view>
- <view>鍙寜浣忓悇绔偣璋冩暣铏氭嫙澧欎綅缃紝鎸夈�+銆戞寜閽彲娣诲姞椤剁偣锛屽尯鍩熼渶涓洪棴鍚堝浘褰�/view>
+ <view class="tip">{{translate("regiona_plan")}}</view>
+ <view>{{translate("endpoint_adjust_position_to_closed_shape")}}</view>
</template>
<template v-else-if="mapOperationStatus=='virtual_wall'">
- <view class="tip">鍖哄煙瑙勫垝</view>
- <view>鍙寜浣忎袱绔偣璋冩暣铏氭嫙澧欎綅缃�/view>
+ <view class="tip">{{translate("regiona_plan")}}</view>
+ <view>{{translate("endpoint_adjust_virtual_wall_position")}}</view>
</template>
<view class="img-button-group" v-else>
<view fill="none" class="button" @click="clickPlanFeasibleRegion">
<!-- <text class="ico conversion-path"></text> -->
<uni-icons class="img" type="checkmarkempty" size="36" color="#1890FF"></uni-icons>
- <view class="text">鍙鍖�/view>
+ <view class="text">{{translate("feasible_region")}}</view>
</view>
<view type="text" class="button " @click="clickPlanProhibitionRegion">
<text class="ico placeholder-bold"></text>
- <view class="text ">绂佽鍖�/view>
+ <view class="text ">{{translate("prohibition_region")}}</view>
</view>
<view type="text" class="button " @click="clickPlanVirtualWall">
<text class="dashed-line"></text>
- <view class="text ">铏氭嫙澧�/view>
+ <view class="text ">{{translate("virtual_wall")}}</view>
</view>
</view>
</view>
- <view class="bottom-content" v-else-if="mapOperationType =='scene_create'"></view>
+
<template v-else-if="mapOperationType =='public_teaching' ">
<view class="bottom-content" v-if="mapOperationStatus =='teaching'">
- <view class="tip">璺緞璁板綍涓�..</view>
+ <view class="tip">{{translate("in_path_record")}}...</view>
<view v-if="mapOperationType =='public_teaching'">
- <view>姝e湪璁板綍鎼繍杞﹁杩涜矾寰勶紝鍙殢鏃跺垏鎹富璺�鏀矾绀烘暀锛屽畬鎴愬悗鐐规寜閽互缁撴潫绀烘暀銆傚湪绀烘暀杩囩▼涓彲浠ユ坊鍔犵珯鐐广�</view>
- <view class="switch-type">
+ <!-- 涓昏矾/鏀矾 -->
+ <view>{{translate("recording_path_of_vehicle_can_add_station")}}</view>
+ <view class="switch-type">{{translate("any_time_switch_teaching_modes")}}
<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)">{{translate("default")}}</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)">{{translate("bidirectional")}}</view>
+ <view class="switch-button "
+ :class="teachingModeCur.mode_type ==2?'switch-button-checked':''"
+ @click="onTeachingModeType(2)">{{translate("intelligent")}}</view>
</view>
</view>
</view>
<view v-else>
- 姝e湪璁板綍鎼繍杞﹁杩涜矾寰勶紝瀹屾垚鍚庣偣鎸夐挳浠ョ粨鏉熺ず鏁�+ {{translate("recording_path_of_vehicle_click_btn_to_finish")}}
</view>
<view class="text-button-group">
<a-button v-if="mapOperationType =='public_teaching'" type="ghost" class="button"
- @click="clickAddStation">娣诲姞绔欑偣</a-button>
- <a-button type="primary" class="button" @click="clickTeachingEnd">缁撴潫璁板綍</a-button>
+ @click="clickAddStation">{{translate("add_station")}}</a-button>
+ <a-button type="primary" class="button" @click="clickTeachingEnd">{{translate("end_teaching")}}</a-button>
</view>
</view>
<view class="bottom-content" v-else-if="mapOperationStatus =='end'">
- <view class="tip">璺緞璁板綍瀹屾垚</view>
+ <view class="tip">{{translate("path_recording_completed")}}</view>
<view>
- 瑕佸皢璇ユ璺緞淇濆瓨涓虹ず鏁欒矾寰勫悧锛�+ {{translate("ask_save_this_path")}}
</view>
<view class="text-button-group">
<a-button type="primary" class="button" :disabled="loading"
- @click="clickTeachingSave">淇濆瓨涓虹ず鏁欒矾寰�/a-button>
+ @click="clickTeachingSave">{{translate("save_as_teaching_path")}}</a-button>
<a-button type="ghost" class="button" :disabled="loading"
- @click="clickTeachingReset">閲嶆柊璁板綍</a-button>
+ @click="clickTeachingReset">{{translate("re_record")}}</a-button>
</view>
</view>
<view class="bottom-content" v-else-if="mapOperationStatus =='save'">
- <view class="tip">绀烘暀瀹屾垚</view>
+ <view class="tip">{{translate("teaching_completed")}}</view>
<view>
- 宸插皢璺緞淇濆瓨涓虹ず鏁欒矾寰�+ {{translate("path_saved_as_teaching_path")}}
</view>
<view class="text-button-group">
<a-button type="primary" class="button" :disabled="loading"
- @click="clickTeachingFinish">瀹屾垚</a-button>
+ @click="clickTeachingFinish">{{translate("complete")}}</a-button>
</view>
</view>
<view class="bottom-content" v-else>
- <view class="tip">鍗冲皢寮�鍏叡绀烘暀</view>
+ <view class="tip">{{translate("public_teaching_to_begin")}}</view>
<view>
- 璇烽�鎷╄杩涜涓昏矾杩樻槸鏀矾绀烘暀锛岀偣銆愬紑濮嬭褰曘�鍚庡皢璁板綍鎼繍杞︾殑琛岃繘璺嚎浣滀负鍏叡绀烘暀璺嚎銆傚紑濮嬭褰曞悗鍙殢鏃跺垏鎹富璺�鏀矾绀烘暀銆�+ {{translate("public_teaching_start_tip_select_teaching_mode")}}
</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)">{{translate("default")}}</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)">{{translate("bidirectional")}}</view>
+ <view class="switch-button "
+ :class="teachingModeCur.mode_type ==2?'switch-button-checked':''"
+ @click="onTeachingModeType(2)">{{translate("intelligent")}}</view>
</view>
</view>
<a-button type="primary" class="button" :disabled="loading"
- @click="clickTeachingStart">寮�璁板綍</a-button>
+ @click="clickTeachingStart">{{translate("start_teaching")}}</a-button>
</view>
</view>
@@ -279,24 +277,28 @@
<view class="img-button-group">
<view fill="none" class="button" @click="clickRename">
<text class="ico rename"></text>
- <view class="text">閲嶅懡鍚�/view>
+ <view class="text">{{translate("rename")}}</view>
</view>
- <view type="text" class="button " @click="clickRegionaPlan">
+ <!-- <view type="text" class="button " @click="clickRegionaPlan">
<text class="ico zone"></text>
- <view class="text">鍖哄煙瑙勫垝</view>
+ <view class="text">{{translate("regiona_plan")}}</view>
+ </view> -->
+ <view type="text" class="button " @click="clickPalletSize">
+ <text class="ico dimensions"></text>
+ <view class="text">{{translate('pallet_size')}}</view>
</view>
<view fill="none" class="button" @click="clickExtendMap">
<text class="ico expand"></text>
- <view class="text">鎵╁睍鍦板浘</view>
+ <view class="text">{{translate("extend_map")}}</view>
</view>
<!-- <view type="text" class="button" @click="clickMapEdit">
<text class="ico edit-line"></text>
<view class="text"> 缂栬緫鍦板浘</view>
</view> -->
<view type="text" class="button" @click="clickDelete">
- <text class="ico delete-outline"></text>
- <view class="text">鍒犻櫎鍦烘櫙</view>
+ <text class="ico red delete-outline"></text>
+ <view class="text">{{translate('delete_scene')}}</view>
</view>
</view>
@@ -305,11 +307,11 @@
<view class="img-button-group">
<view fill="none" class="button" @click="clickMapStation">
<text class="ico location1"></text>
- <view class="text">娣诲姞绔欑偣</view>
+ <view class="text">{{translate("add_station")}}</view>
</view>
<view fill="none" class="button" @click="clickTeaching">
<text class="ico teach"></text>
- <view class="text">璺緞绀烘暀</view>
+ <view class="text">{{translate("path_teaching")}}</view>
</view>
<!-- <view type="text" class="button " @click="clickRegionaPlan">
<text class="ico layer"></text>
@@ -317,11 +319,11 @@
</view> -->
<view type="text" class="button" @click="clickMapEdit">
<text class="ico edit-line"></text>
- <view class="text"> 缂栬緫鍦板浘</view>
+ <view class="text"> {{translate("edit_map")}}</view>
</view>
<view type="text" class="button" @click="clickMapTask">
<text class="ico task-list"></text>
- <view class="text">浠诲姟璁剧疆</view>
+ <view class="text">{{translate("task_set")}}</view>
</view>
</view>
</view>
@@ -345,15 +347,15 @@
<view class="img-button-group">
<view fill="none" class="button" @click.stop="clickStationDelete">
<text class="ico delete-outline"></text>
- <view class="text"> 鍒犻櫎绔欑偣</view>
+ <view class="text"> {{translate("batch_delete")}}</view>
</view>
<view type="text" class="button" @click.stop="clickStationPostion">
<text class="ico edit-line"></text>
- <view class="text">璋冩暣浣嶇疆鏈濆悜</view>
+ <view class="text">{{translate("adjust_position")}}</view>
</view>
<view type="text" class="button" @click.stop="clickStationRename">
<text class="ico rename"></text>
- <view class="text">閲嶅懡鍚�/view>
+ <view class="text">{{translate("rename")}}</view>
</view>
</view>
@@ -369,11 +371,11 @@
<view fill="none" class="button" @click.stop="clickTeachingEdit">
<text class="ico edit-line"></text>
- <view class="text">缂栬緫</view>
+ <view class="text">{{translate('edit_path')}}</view>
</view>
<view fill="none" class="button" @click.stop="clickTeachingDelete">
<text class="ico red delete-outline "></text>
- <view class="text">鍒犻櫎</view>
+ <view class="text">{{translate('delete_path')}}</view>
</view>
</view>
@@ -381,27 +383,70 @@
</view>
</uni-popup>
+ <uni-popup ref="refPopupTeachingUpdate" type="dialog">
+ <uni-popup-dialog type="info" :cancelText="translate('cancel')" :confirmText="translate('ok')"
+ :title="translate('teaching_update')" @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" />
+ {{translate("main_road")}}
+ </label>
+ <label class="radio">
+ <radio :value="0" :checked="selectTeachingMode.main_road != 1" />
+ {{translate("branch_road")}}
+ </label>
+ </radio-group>
+
+
+ </view>
+ <view class="popup-content-item">
+ <radio-group @change="radioTeachinBidirectionChange">
+ <label class="radio">
+ <radio :value="1" :checked="selectTeachingMode.bidirection == 1" />
+ {{translate("bidirectional")}}
+ </label>
+ <label class="radio">
+ <radio :value="0" :checked="selectTeachingMode.bidirection != 1" />
+ {{translate("unidirectional")}}
+ </label>
+ </radio-group>
+
+ </view>
+ </view>
+ </uni-popup-dialog>
+ </uni-popup>
+
+
</view>
</view>
</template>
<script src="./js/ctx.js" module="ctx" lang="renderjs"></script>
-
-
<script>
+ import {
+ ref
+ } from "vue";
+ import {
+ Base64
+ } from '@/comm/Base64.js';
import {
showToast,
showModal,
session,
showError,
- showInfo
+ showInfo,
+
} from "@/comm/utils.js"
// import OIFabric from "@/components/oi-fabric/index.vue"
import {
Button
} from 'antd-mobile-vue-next'
- import SceneCreateInfo from './infos/scene-create.vue'
-
+ import PalletSizeInfo from './infos/pallet-size.vue'
+ import SceneRenameInfo from './infos/scene-rename.vue'
import {
getAllScene,
@@ -420,12 +465,16 @@
delTeachingMode,
delTeachingModeData,
checkAgvLocationDistanceError,
+ splitTeachingMode,
+ updateSplitTeachingData,
+ deleteSplitTeachingData
} from "@/api/vehicle.js"
export default {
name: "PagesMap",
components: {
'a-button': Button,
- SceneCreateInfo
+ PalletSizeInfo,
+ SceneRenameInfo
},
data() {
return {
@@ -440,6 +489,7 @@
list: []
},
sceneList: [],
+
ctxDataStr: "[]",
mapOperationType: "",
mapOperationStatus: "",
@@ -460,8 +510,7 @@
y: 0,
angle: 0
},
- sceneInputName: "",
- showClearName: false,
+
stationList: [],
angleSvg: "/static/images/angle0.svg",
windowWidth: 375,
@@ -471,7 +520,9 @@
wallList: [],
regionList: [],
unlinked: false,
- showTeachingPathFlag: false,
+ showTeachingPathFlag: true,
+ curTeachingPathFlag: false,
+ curTeachingPathTime: 0,
curMapInfo: {
proportion: 1,
img_proportion: 1,
@@ -482,7 +533,11 @@
img_x: 1,
img_y: 1
},
- positioningAgv: false
+ positioningAgv: false,
+ isPageVisible: true,
+ destroyFlag: false,
+
+
}
},
computed: {
@@ -499,21 +554,21 @@
},
watch: {
mapOperationType(val) {
- let name = this.sceneId || "鍦板浘"
+ let name = this.sceneId || this.translate("map")
if (val == "add_station" || val == "teaching_add_station") {
- name = "娣诲姞绔欑偣"
+ name = this.translate("add_station")
} else if (val == "edit_station") {
- name = "缂栬緫绔欑偣"
- } else if (val == "scene_create") {
- name = "鏋勫缓鍦烘櫙"
+ name = this.translate("edit_station")
} else if (val == "edit_map") {
- name = "缂栬緫鍦板浘"
+ name = this.translate("edit_map")
} else if (val == "manual_planning") {
- name = "浜哄伐瑙勫垝"
+ name = this.translate("manual_plan")
} else if (val == "vehicle_trajectory_planning") {
- name = "杞﹁締杞ㄨ抗瑙勫垝"
+ name = this.translate("vehicle_trajectory_plan")
} else if (val == "public_teaching") {
- name = "璺緞绀烘暀"
+ name = this.translate("path_teaching")
+ } else if (val == "set_pallet_size") {
+ name = this.translate("pallet_size")
}
this.setData({
navigationBarTitle: name
@@ -539,10 +594,29 @@
},
onHide() {
this.isPageVisible = false
+
},
- onUnload() {
+ async onUnload() {
+
this.isPageVisible = false
+
+ console.log("onUnload")
+
+
},
+ onBackPress() {
+ this.isPageVisible = false
+ if (this.destroyFlag)
+ return false
+ else {
+ this.ctxDataStr = JSON.stringify([{
+ method: "destroy",
+ }])
+ return true
+ }
+
+ },
+
methods: {
setData(obj) {
let that = this;
@@ -572,17 +646,25 @@
this.mapOperationType = ''
const scene = this.sceneList[0]
this.changeMap(scene)
+ } else {
+ uni.navigateBack({
+ delta: 1, //杩斿洖灞傛暟锛�鍒欎笂涓婇〉
+ })
}
this.refreshAgvPosition()
} catch (ex) {
this.setData({
unlinked: true
})
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
clickShowMenu() {
+ // const list = [...this.sceneList]
+ // for(let i =0; i < 20;i++){
+ // list.push("test" + i)
+ // }
this.menuPopup = {
type: "scene",
list: this.sceneList,
@@ -594,7 +676,9 @@
clickMore() {
this.menuPopup = {
type: "menu",
- list: ["鏋勫缓鍦烘櫙", "鍦板浘鎵╁睍", "閲嶅懡鍚�, "鍒犻櫎"],
+ list: [this.translate("build_scene"), this.translate("extend_map"), this.translate("rename"), this
+ .translate("delete")
+ ],
left: 450,
top: 140
}
@@ -602,43 +686,7 @@
},
async clickBack() {
- if (this.mapOperationType == "scene_create") {
- if (this.opSceneType == "scan") {
- showModal("宸叉瀯寤哄満鏅皢浼氳鍒犻櫎", "鏄惁涓柇鍦烘櫙鏋勫缓锛�).then((res) => {
- if (res) {
- if (this.sceneList.length == 0) {
- const eventChannel = this.getOpenerEventChannel();
- eventChannel.emit('check_connect', !this.unlinked);
- uni.navigateBack({
- delta: 1
- })
- } else {
- this.opSceneType = ""
- this.mapOperationType = ""
- }
-
- }
- })
- } else {
- if (this.opSceneType != "") {
- await this.loadSceneList()
- if (this.sceneList.length == 0) {
-
- const eventChannel = this.getOpenerEventChannel();
- eventChannel.emit('check_connect', !this.unlinked);
- uni.navigateBack({
- delta: 1
- })
- }
- } else {
- const eventChannel = this.getOpenerEventChannel();
- eventChannel.emit('check_connect', !this.unlinked);
- uni.navigateBack({
- delta: 1
- })
- }
- }
- } else if (this.mapOperationType == "edit_map") {
+ if (this.mapOperationType == "edit_map") {
this.mapOperationType = ""
} else if (this.mapOperationType == "regiona_planning") {
this.mapOperationType = "edit_map"
@@ -646,11 +694,18 @@
if (this.mapOperationStatus == "feasible_region" || this.mapOperationStatus ==
"prohibition_region") {
- showModal("姝e湪杩涜鍖哄煙瑙勫垝銆�, "鏄惁瑕侀�鍑哄尯鍩熻鍒掞紵").then((res) => {
- if (res) {
- this.mapOperationStatus = ""
- }
- })
+ showModal({
+ title: this.translate("ask_exit_regional_planning"),
+ content: `${this.translate('regional_planning')}`,
+ confirmText: this.translate('yes'),
+ cancelText: this.translate("no"),
+
+ })
+ .then((res) => {
+ if (res) {
+ this.mapOperationStatus = ""
+ }
+ })
} else {
this.mapOperationType = "regiona_planning"
@@ -660,24 +715,30 @@
if (this.mapOperationStatus == "virtual_wall" ||
this.mapOperationStatus == "feasible_region" ||
this.mapOperationStatus == "prohibition_region") {
- showModal("姝e湪杩涜鍖哄煙瑙勫垝銆�, "鏄惁瑕侀�鍑哄尯鍩熻鍒掞紵").then((res) => {
- if (res) {
- if (this.mapOperationStatus == "virtual_wall") {
- this.ctxDataStr = JSON.stringify([{
- method: "remove_wall",
- param: [this.wallEdit]
- }])
- this.wallEdit = {}
- } else {
- this.ctxDataStr = JSON.stringify([{
- method: "remove_region",
- param: [this.regionEdit]
- }])
- this.regionEdit = {}
+ showModal({
+ title: this.translate("ask_exit_regional_planning"),
+ content: `${this.translate('regional_planning')}`,
+ confirmText: this.translate('yes'),
+ cancelText: this.translate("no"),
+ })
+ .then((res) => {
+ if (res) {
+ if (this.mapOperationStatus == "virtual_wall") {
+ this.ctxDataStr = JSON.stringify([{
+ method: "remove_wall",
+ param: [this.wallEdit]
+ }])
+ this.wallEdit = {}
+ } else {
+ this.ctxDataStr = JSON.stringify([{
+ method: "remove_region",
+ param: [this.regionEdit]
+ }])
+ this.regionEdit = {}
+ }
+ this.mapOperationStatus = ""
}
- this.mapOperationStatus = ""
- }
- })
+ })
} else {
this.mapOperationType = "regiona_planning"
}
@@ -720,24 +781,38 @@
if (this.mapOperationStatus) {
- showModal("宸茶褰曠殑璺緞灏嗕細琚垹闄ゃ�", "鏄惁瑕侀�鍑虹ず鏁欙紵").then(async (res) => {
- if (res) {
- if (this.mapOperationStatus == 'end' || this.mapOperationStatus ==
- 'save') {
- try {
- await delTeachingMode(this.vehicleIp, [this.teachingModeCur])
- } catch (ex) {
- showError(ex)
+ showModal({
+ title: this.translate("ask_exit_teaching"),
+ content: `${this.translate('recorded_path_will_be_deleted')}`,
+ confirmText: this.translate('yes'),
+ cancelText: this.translate("no"),
+ })
+ .then(async (res) => {
+ if (res) {
+ const listDataStr = []
+ if (this.mapOperationStatus == 'end' || this.mapOperationStatus ==
+ 'save') {
+ try {
+ await delTeachingMode(this.vehicleIp, [this.teachingModeCur])
+
+ listDataStr.push({
+ method: "remove_teaching_path",
+ param: {
+ name: this.teachingModeCur.name,
+ mode: "Public"
+ },
+ })
+ } catch (ex) {
+ showError(ex, this.translate('error'))
+ }
}
-
+ listDataStr.push({
+ method: "teaching_finish",
+ })
+ this.ctxDataStr = JSON.stringify(listDataStr)
+ this.mapOperationType = ""
}
- this.ctxDataStr = JSON.stringify([{
- method: "teaching_finish",
- }])
-
- this.mapOperationType = ""
- }
- })
+ })
} else {
this.ctxDataStr = JSON.stringify([{
method: "teaching_finish",
@@ -747,11 +822,7 @@
}
} else {
- // const eventChannel = this.getOpenerEventChannel();
- // eventChannel.emit('udapte_station', this.unlinked);
- // uni.navigateBack({
- // delta: 1
- // })
+
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit('check_connect', !this.unlinked);
uni.navigateBack({
@@ -782,11 +853,9 @@
if (type == "scene") {
this.changeMap(item)
} else if (type == "menu") {
- if (item == "鏋勫缓鍦烘櫙") {
- // this.mapOperationType = 'scene_create'
- // this.opSceneType = 'add_name'
+ if (item == this.translate("build_scene")) {
uni.navigateTo({
- url: `/pages/map/scene?ip=${this.vehicleIp}`,
+ url: `/pages/map/scene?ip=${_this.vehicleIp}&opType=create`,
events: {
// 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁
create_finish: function(data) {
@@ -794,23 +863,21 @@
},
}
})
- } else if (item == "鍦板浘鎵╁睍") {
+ } else if (item == this.translate("extend_map")) {
this.clickExtendMap()
- } else if (item == "閲嶅懡鍚�) {
+ } else if (item == this.translate('rename')) {
this.clickRename()
- } else if (item == "鍒犻櫎") {
+ } else if (item == this.translate('delete')) {
this.clickDelete()
}
}
-
-
},
async loadAgvState() {
try {
const info = await getAgvState(this.vehicleIp)
return info
} catch (ex) {
- showError(ex)
+ showToast(ex)
return {}
}
},
@@ -819,7 +886,7 @@
const paths = await getCurrentTeachingData(this.vehicleIp) || []
return paths
} catch (ex) {
- showError(ex)
+ showToast(ex)
return []
}
},
@@ -829,7 +896,7 @@
const info = await stations(this.vehicleIp)
return info.station_list || []
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
return []
}
},
@@ -838,7 +905,7 @@
const info = await getMapUrl(this.vehicleIp, id)
return info
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
return {}
}
},
@@ -847,11 +914,11 @@
this.mapShowAgv = false
this.setData({
sceneId: id,
- navigationBarTitle: id || "鍦板浘"
+ navigationBarTitle: id || this.translate("map")
})
try {
uni.showLoading({
- title: "鍒囨崲鍦烘櫙涓�
+ title: this.translate("switching_scene")
})
this.setData({
unlinked: false
@@ -884,11 +951,11 @@
img_x: parseInt(infoMap.img_x) || 1,
img_y: parseInt(infoMap.img_y) || 1
}
- // getApp().globalData.curScene = infoMap
this.setData({
bgProgressPercent: 30,
bgLoading: infoMap.filedata ? true : false
})
+
this.stationList = stationLst
this.teachingMode = await this.loadTeachingMode()
this.ctxDataStr = JSON.stringify([{
@@ -909,13 +976,25 @@
param: stationLst
},
{
+ method: "show_teaching_path",
+ param: {
+ show: this.showTeachingPathFlag
+ }
+ },
+ {
method: "public_teaching_path",
- param: this.teachingMode.Public || []
+ param: {
+ list: this.teachingMode.Public || [],
+ show: this.showTeachingPathFlag
+ }
},
{
method: "station_teaching_path",
- param: this.teachingMode.Stations || []
+ param: {
+ list: this.teachingMode.Stations || [],
+ show: this.showTeachingPathFlag
+ }
},
{
@@ -933,13 +1012,20 @@
bgProgressPercent: 0,
bgLoading: false
})
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
receiveRenderData(param) {
console.log('鎺ユ敹鍒拌鍥惧眰鐨勬暟鎹細', param);
- if (param.method == "set_backgroud_progress") {
+ if (param.method === "destroy_complete") {
+ if (param.param) {
+ this.destroyFlag = true
+ uni.navigateBack({
+ delta: 1
+ })
+ }
+ } else if (param.method == "set_backgroud_progress") {
if (param.type == "start") {
this.setData({
bgProgressPercent: 50,
@@ -969,12 +1055,17 @@
} else if (param.method == "edit_station") {
this.stationEdit = param.station
+ this.stationEdit.x = Math.round(Number(param.station.x || 0) * 1000) / 1000
+ this.stationEdit.y = Math.round(Number(param.station.y || 0) * 1000) / 1000
this.stationViewPos = {
- x: param.view?.x || 0,
- y: param.view?.y || 0,
+ x: Math.round(Number(param.view?.x || 0) * 1000) / 1000,
+ y: Math.round(Number(param.view?.y || 0) * 1000) / 1000,
width: param.view?.width || 0,
height: param.view?.height || 0,
}
+ const angle = this.getStantardAngle(this.stationEdit.angle * 180 / Math.PI)
+
+ this.angleSvg = `/static/images/angle${angle}.svg`
this.mapOperationType = ""
this.$refs.refPopupOperateStation.open("bottom")
@@ -982,8 +1073,8 @@
} else if (param.method == "update_station") {
this.stationEdit.stationID = param.station?.stationID
this.stationEdit.angle = param.station.angle
- this.stationEdit.x = param.station.x
- this.stationEdit.y = param.station.y
+ this.stationEdit.x = Math.round(Number(param.station.x || 0) * 1000) / 1000
+ this.stationEdit.y = Math.round(Number(param.station.y || 0) * 1000) / 1000
this.stationViewPos.x = param.view?.x || 0
this.stationViewPos.y = param.view?.y || 0
} else if (param.method == "edit_finish") {
@@ -995,12 +1086,15 @@
this.stationEdit.stationID = param.data?.stationID
this.stationEdit.name = param.data?.name
this.stationEdit.angle = param.data?.angle
- this.stationEdit.x = param.data?.x
- this.stationEdit.y = param.data?.y
+ this.stationEdit.x = Math.round(Number(param.data?.x || 0) * 1000) / 1000
+ this.stationEdit.y = Math.round(Number(param.data?.y || 0) * 1000) / 1000
const angle = this.getStantardAngle(this.stationEdit.angle * 180 / Math.PI)
this.angleSvg = `/static/images/angle${angle}.svg`
+ if (this.mapOperationType == "teaching_add_station") {
+ this.positioningAgv = true
+ }
this.clickStationPositonOk()
} else if (param.type == "edit_teaching") {
// console.log(param.type,JSON.stringify(param.data))
@@ -1048,7 +1142,7 @@
this.stationEdit.stationID = ""
this.mapOperationType = "public_teaching"
this.mapOperationStatus = "teaching"
-
+ this.positioningAgv = true
} else if (this.mapOperationType == "edit_station") {
this.mapOperationType = ""
this.mapOperationStatus = ""
@@ -1070,12 +1164,10 @@
param: true
}])
}
-
}
} else if (param.method == "select_teaching_path") {
console.log("point", param.point)
if (param.type == "station") {
-
this.selectTeachingMode = {
mode: "Stations",
name: param.data?.name || "",
@@ -1086,21 +1178,26 @@
} 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") {
- this.positioningAgv = false
+ if (this.mapOperationType == "public_teaching" &&
+ this.mapOperationStatus == "teaching") {
+ this.positioningAgv = true
+ } else
+ this.positioningAgv = false
} else if (param.method == "show_log") {
const listLog = session.getValue("request_log") || []
listLog.unshift(param.data)
session.setValue("request_log", listLog)
}
-
-
},
clickMapStation() {
this.stationEdit = {
@@ -1128,7 +1225,11 @@
this.mapOperationType = "edit_map"
},
+ clickPalletSize() {
+ this.mapOperationType = "set_pallet_size"
+ },
clickExtendMap() {
+ const _this = this
uni.navigateTo({
url: `/pages/map/scene?ip=${this.vehicleIp}&opType=extend&sceneId=${this.sceneId}`,
events: {
@@ -1149,7 +1250,7 @@
this.mapOperationStatus = ""
this.teachingModeCur = {
mode: "Public",
- main_road: 1,
+ mode_type: 0,
}
this.positioningAgv = true
this.mapOperationType = "public_teaching"
@@ -1165,14 +1266,12 @@
this.mapOperationType = "regiona_planning"
},
clickRename() {
- this.sceneInputName = this.sceneId
this.mapOperationType = 'edit_scene_name'
},
async loadSceneList() {
try {
- uni.showLoading({
- title: "鍔犺浇鍦烘櫙涓�
- })
+
+
const _this = this
const res = await getAllScene(this.vehicleIp) || []
const list = res?.sceneList || []
@@ -1183,43 +1282,40 @@
this.sceneList = list
if (list.length === 0) {
this.opSceneType = ''
- // this.mapOperationType = 'scene_create'
- // this.setData({
- // sceneId: "",
- // navigationBarTitle: "鍦板浘"
- // })
- uni.navigateTo({
- url: `/pages/map/scene?ip=${this.vehicleIp}&opType=create`,
- events: {
- // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁
- create_finish: function(data) {
- _this.onCreateSceneOk(data)
- },
- }
+
+ uni.navigateBack({
+ delta: 1, //杩斿洖灞傛暟锛�鍒欎笂涓婇〉
})
return
}
} catch (ex) {
- showError(ex)
- } finally {
- uni.hideLoading()
+ showError(ex, this.translate('error'))
}
},
clickDelete() {
- showModal(`鍒犻櫎鍦烘櫙[${this.sceneId}]浼氭妸鍦烘櫙瀵瑰簲鐨勫湴鍥句换鍔′俊鎭兘浼氬垹闄わ紝鏄惁纭鍒犻櫎锛焋, "鍒犻櫎鍦烘櫙").then(async (res) => {
+ const _this = this
+
+
+ showModal({
+ title: this.translate("ask_deleting_scene"),
+ content: `${this.translate('delete_scene_will_be_deleted_map_and_tasks')}`,
+ confirmText: this.translate('yes'),
+ cancelText: this.translate("no"),
+ }).then(async (res) => {
if (res) {
try {
uni.showLoading({
- title: "鍒犻櫎鍦烘櫙涓�
+ title: this.translate("deleting_scene")
})
this.mapShowAgv = false
await delScene(this.vehicleIp, this.sceneId)
await this.loadSceneList()
if (this.sceneList.length > 0)
this.changeMap(this.sceneList[0])
+
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
@@ -1283,7 +1379,7 @@
])
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async clickPlanProhibitionRegion() {
@@ -1329,7 +1425,7 @@
])
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
@@ -1369,54 +1465,25 @@
}
])
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
- clickNameCancel() {
- this.mapOperationType = ''
- },
- async clickNameOK() {
- try {
- uni.showLoading({
- title: "鏇存柊鍦烘櫙鍚嶇О"
- })
- this.loading = true
- const name = this.sceneInputName.trim()
- if (!name) {
- showToast("鍦烘櫙鍚嶇О涓嶈兘涓虹┖锛�)
- return
- }
- console.log(name, this.sceneId)
- if (name == this.sceneId) {
- showToast("鍦烘櫙鍚嶇О鏈彉鍖栵紒")
- return
- }
- this.mapOperationType = ""
- await updateScene(this.vehicleIp, this.sceneId, name)
+ onFinishRenameScene(name) {
+
+ if (name) {
+ const curIndex = this.sceneList.findIndex((param) => param == this.sceneId)
this.sceneId = name
- showToast("鍦烘櫙閲嶅懡鍚嶆垚鍔燂紒")
- } catch (ex) {
- this.mapOperationType = "edit_scene_name"
- showError(ex)
- } finally {
- uni.hideLoading()
- this.loading = false
+ if (curIndex > -1) {
+ this.sceneList[curIndex] = name
+ }
+ this.setData({
+ navigationBarTitle: name
+ })
}
-
+ this.mapOperationType = ""
},
- clickClearName() {
- this.showClearName = false
- this.sceneInputName = ""
- },
- onInputName(event) {
- this.sceneInputName = event.detail.value.trim();
- if (this.sceneInputName)
- this.showClearName = true
- else
- this.showClearName = false
- },
closePopuBtn() {
@@ -1427,18 +1494,32 @@
this.mapOperationType = ""
},
clickStationDelete() {
- this.stationDelete(this.stationEdit)
- // const _this = this
- // showModal("璇ョ珯鐐瑰凡缁戝畾浠诲姟锛屽垹闄ょ珯鐐瑰悗缁戝畾鐨勪换鍔′細鍋滄骞跺垹闄�, "鏄惁纭鍒犻櫎锛�).then((res) => {
- // if (res) {
+ const _this = this
+ uni.navigateTo({
+ url: `/pages/station/delete?ip=${ this.vehicleIp}`,
+ events: {
+ // 涓烘寚瀹氫簨浠舵坊鍔犱竴涓洃鍚櫒锛岃幏鍙栬鎵撳紑椤甸潰浼犻�鍒板綋鍓嶉〉闈㈢殑鏁版嵁
+ delete_finish: function(data) {
+ console.log(data)
+ const list = data.map((a) => {
+ return {
+ stationID: a
+ }
- // }
- // })
+ })
+ _this.ctxDataStr = JSON.stringify([{
+ method: "remove_station",
+ param: list
+ }])
+ }
+ }
+ })
+
},
async stationAdd(item) {
try {
uni.showLoading({
- title: "姝e湪鏂板缓绔欑偣"
+ title: this.translate("creating_station")
})
await addStation(this.vehicleIp, item)
await updateStation(this.vehicleIp, item)
@@ -1452,7 +1533,7 @@
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
@@ -1460,7 +1541,7 @@
async stationUpdate(item) {
try {
uni.showLoading({
- title: "姝e湪鏇存柊绔欑偣"
+ title: this.translate("updating_station")
})
await updateStation(this.vehicleIp, item)
const curIndex = this.stationList.findIndex((a) => a.stationID ==
@@ -1475,7 +1556,7 @@
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
@@ -1500,13 +1581,13 @@
}])
this.mapOperationType = ''
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async stationDelete(item) {
try {
uni.showLoading({
- title: "姝e湪鍒犻櫎绔欑偣"
+ title: this.translate("deleting_station")
})
this.$refs.refPopupOperateStation.close()
await delStation(this.vehicleIp, [item.stationID])
@@ -1527,7 +1608,7 @@
}])
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
@@ -1575,7 +1656,7 @@
const name = this.stationEdit.name.trim()
if (!name) {
- showToast("绔欑偣鍚嶇О杩樻湭杈撳叆")
+ showToast(this.translate("input_station_name"))
return
}
this.loading = true
@@ -1584,8 +1665,8 @@
this.stationEdit = {
stationID: this.getMaxStationNo + 1,
name: name,
- x: agv.x || 0,
- y: agv.y || 0,
+ x: Math.round(Number(agv.x || 0) * 1000) / 1000,
+ y: Math.round(Number(agv.y || 0) * 1000) / 1000,
angle: agv.angle || 0,
}
const angle = this.getStantardAngle(this
@@ -1626,7 +1707,7 @@
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
this.loading = false
}
@@ -1644,8 +1725,22 @@
else
this.showClearName = false
},
+ validateNumber(input) {
+ // 甯哥敤姝e垯妯″紡
+ const patterns = {
+ integer: /^-?\d+$/, // 鏁存暟锛屽寘鎷礋鏁�[citation:6]
+ positiveInt: /^[1-9]\d*$/, // 姝f暣鏁�[citation:7]
+ decimal: /^-?\d*\.?\d+$/, // 灏忔暟 (鏀寔鍍�".1" 杩欐牱鐨勬牸寮�
+ decimalFixed: /^-?\d*\.?\d{0,3}$/, // 鏈�涓や綅灏忔暟 [citation:5][citation:8]
+ };
+ // 閫夋嫨闇�鐨勬ā寮忚繘琛屾祴璇曪紝渚嬪浣跨敤 decimal
+ return patterns.decimalFixed.test(input);
+ },
onInputStationX(event) {
- console.log(event)
+ if (!this.validateNumber(event.detail.value)) {
+ showToast(this.translate("input_content_only_numbers_and_signs_and_decimal"))
+ return
+ }
this.stationEdit.x = Number(event.detail.value);
console.log(this.stationEdit.x)
this.ctxDataStr = JSON.stringify([{
@@ -1661,6 +1756,10 @@
},
onInputStationY(event) {
+ if (!this.validateNumber(event.detail.value)) {
+ showToast(this.translate("input_content_only_numbers_and_signs_and_decimal"))
+ return
+ }
this.stationEdit.y = Number(event.detail.value);
console.log(this.stationEdit.y)
this.ctxDataStr = JSON.stringify([{
@@ -1674,6 +1773,8 @@
}
}])
},
+
+
clickClearStationX() {
this.stationEdit.x = 0
this.ctxDataStr = JSON.stringify([{
@@ -1726,10 +1827,8 @@
return resAngle
},
-
touchAngleChange(e) {
let angle = 0
-
const ptX = e.touches[0].clientX
const offX = ptX // ptX - e.target.offsetLeft
@@ -1792,14 +1891,14 @@
}
}])
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async clickPositionStation() {
try {
const infoAgv = await this.loadAgvState()
- this.stationEdit.x = infoAgv.x
- this.stationEdit.y = infoAgv.y
+ this.stationEdit.x = Math.round(Number(infoAgv.x) * 1000) / 1000;
+ this.stationEdit.y = Math.round(Number(infoAgv.y) * 1000) / 1000;
this.stationEdit.angle = infoAgv.angle
const angle = this.getStantardAngle(this
.stationEdit.angle * 180 / Math.PI)
@@ -1825,50 +1924,59 @@
])
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async loadTeachingMode() {
try {
const {
data
- } = await getTeachingMode(this.vehicleIp)
+ } = await splitTeachingMode(this.vehicleIp)
return data || {
Public: [],
Stations: []
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
return {
Public: [],
Stations: []
}
}
},
- async reloadTeachingMode() {
+ async reloadTeachingMode(finish) {
try {
this.teachingMode = await this.loadTeachingMode()
- this.ctxDataStr = JSON.stringify([{
+
+ const list = [{
method: "clear_teaching_path",
},
{
method: "public_teaching_path",
- param: this.teachingMode.Public || []
+ param: {
+ list: this.teachingMode.Public || [],
+ show: this.showTeachingPathFlag
+ }
},
{
method: "station_teaching_path",
- param: this.teachingMode.Stations || []
- }, {
- method: "show_teaching_path",
param: {
+ list: this.teachingMode.Stations || [],
show: this.showTeachingPathFlag
}
}
- ])
+
+ ]
+ if (finish) {
+ list.push({
+ method: "teaching_finish",
+ })
+ }
+ this.ctxDataStr = JSON.stringify(list)
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
@@ -1910,7 +2018,7 @@
}
])
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async refreshAgvPosition() {
@@ -1921,85 +2029,193 @@
method: "update_agv_state",
param: agv
}]
+ // if (this.mapOperationType === "public_teaching" && this.mapOperationStatus ===
+ // "teaching") {
+ const list = await this.loadCurrentTeachingData()
- if (this.mapOperationType === "public_teaching" && this.mapOperationStatus ===
- "teaching") {
- const list = await this.loadCurrentTeachingData()
- listCtrData.push({
- method: "update_current_teaching",
- param: {
- main_road: this.teachingModeCur.main_road,
- pos_list: list
+ listCtrData.push({
+ method: "update_current_teaching",
+ param: {
+ main_road: 1, //this.teachingModeCur.main_road,
+ pos_list: list
+ }
+ })
+ 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 stationOld = this.teachingMode.Stations || []
+ const publicNew = teaching.Public || []
+ const stationNew = teaching.Stations || []
+ const publicAdd = []
+ const stationAdd = []
+ for (let i in publicNew) {
+ const item = publicNew[i]
+ const curIndex = publicOld.findIndex((a) => a.name == item.name && a.edge_name ==
+ item.edge_name)
+
+ if (curIndex < 0) {
+ publicAdd.push(item)
+ publicOld.push(item)
+ }
+
+ }
+ for (let i in stationNew) {
+ const item = stationNew[i]
+ const curIndex = stationOld.findIndex((a) => a.name == item.name)
+ if (curIndex < 0) {
+ stationAdd.push(item)
+ stationOld.push(item)
+ }
+
+ }
+ this.teachingMode.Public = publicOld
+ this.teachingMode.Stations = stationOld
+
+ if (publicAdd.length > 0) {
+ listCtrData.push({
+ method: "public_teaching_path",
+ param: {
+ list: publicAdd,
+ show: this.showTeachingPathFlag
+ }
+ })
+ }
+ if (stationAdd.length > 0) {
+ listCtrData.push({
+ method: "station_teaching_path",
+ param: {
+ list: stationAdd,
+ show: this.showTeachingPathFlag
+ }
+ })
+ }
+ const listStationCtxData = await this.getRefreshStationCtxData() || []
+ if (listStationCtxData.length > 0) {
+ listCtrData.push(...listStationCtxData)
+ }
+ }
}
+
+ // }
+
if (this.positioningAgv) {
- listCtrData.push({
- method: "move_pt_visible",
- param: {
- x: agv.x,
- y: agv.y,
- width:80,
- height:80,
- }
- })
+ if (this.curTeachingPathFlag) {
+ listCtrData.push({
+ method: "move_pt_center",
+ param: {
+ x: agv.x,
+ y: agv.y,
+ }
+ })
+ } else {
+ listCtrData.push({
+ method: "move_pt_visible",
+ param: {
+ x: agv.x,
+ y: agv.y,
+ width: 80,
+ height: 80,
+ }
+ })
+
+ }
}
+
this.ctxDataStr = JSON.stringify(listCtrData)
}
- setTimeout(this.refreshAgvPosition, 1000);
+ //setTimeout(this.refreshAgvPosition, 1000);
} catch (ex) {
- showError(ex).then((res) => {
- setTimeout(this.refreshAgvPosition, 1000);
- })
+ // showError(ex,this.translate('error')).then((res) => {
+
+ // })
+ showToast(ex)
} finally {
// 鏃犺鎴愬姛澶辫触锛� 绉掑悗鍐嶆潵
-
+ setTimeout(this.refreshAgvPosition, 1000);
}
},
+ 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)
- askTeachingBiDirection(teachingMode) {
- showModal("閫夋嫨褰撳墠绀烘暀璺嚎绫诲瀷?", "绀烘暀缁撴潫", true, "鍙屽悜璺嚎",
- "鍗曞悜璺嚎").then((res) => {
- if (res) {
- teachingMode.bidirection = "1"
- } else {
- teachingMode.bidirection = "0"
+ const listRemove = listOld.filter((a) => {
+ return !listId2.includes(a.stationID)
+ })
+ if (listRemove.length > 0) {
+ listCtrData.push({
+ method: "remove_station",
+ param: listRemove
+ })
+ this.stationList = stationLst
+ }
}
- teachingMode.teaching_flag = 0
- this.finishTeaching(teachingMode)
- })
+ if (listNew.length > 0) {
+ listCtrData.push({
+ method: "add_station",
+ param: listNew
+ })
+ this.stationList = stationLst
+ }
+ return listCtrData
+ } catch (ex) {
+ showToast(ex)
+ return []
+ }
},
async finishTeaching(teachingMode) {
try {
uni.showLoading({
- title: "绀烘暀缁撴潫"
+ title: this.translate("teaching_end")
})
await teachingModeFlag(this.vehicleIp, teachingMode)
this.mapOperationStatus = "end"
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
},
-
async clickTeachingStart() {
const _this = this
try {
uni.showLoading({
- title: "绀烘暀寮�"
+ title: this.translate("teaching_start")
})
this.loading = false
this.mapOperationStatus = "teaching"
await _this.teachingStart("Public")
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
this.loading = false
uni.hideLoading()
@@ -2017,23 +2233,37 @@
},
clickTeachingReset() {
const _this = this
- showModal("宸茶褰曠殑璺緞灏嗕細琚垹闄ゃ�", "鏄惁瑕侀噸鏂拌褰曪紵")
+ showModal({
+ title: this.translate("ask_re_recording"),
+ content: `${this.translate('recorded_path_will_be_deleted')}`,
+ confirmText: this.translate('yes'),
+ cancelText: this.translate("no"),
+ })
.then(async (res) => {
if (res) {
try {
this.loading = true
await delTeachingMode(_this.vehicleIp, [_this.teachingModeCur])
_this.mapOperationStatus = ""
+ const listDataStr = []
+ listDataStr.push({
+ method: "remove_teaching_path",
+ param: {
+ name: _this.teachingModeCur.name,
+ mode: "Public"
+ },
+ })
+ _this.ctxDataStr = JSON.stringify(listDataStr)
+
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
this.loading = false
}
} else {
- _this.mapOperationStatus =
- "save"
+ _this.mapOperationStatus = "save"
}
})
@@ -2043,54 +2273,28 @@
this.mapOperationStatus = "save"
try {} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
clickTeachingFinish() {
this.mapOperationType = ""
- this.ctxDataStr = JSON.stringify([{
- method: "teaching_finish",
- }])
- this.reloadTeachingMode()
+
+ //this.reloadTeachingMode(true)
},
async teachingStart(mode) {
try {
- /*if (mode == "Stations") {
- const res = await checkAgvLocationDistanceError(this.vehicleIp, this.startStationID)
- if (res?.error) {
- this.calibratioStationType = "start"
- this.$refs.refPopupCalibration.open()
- } else {
- // const name =
- // `${ this.stationName(this.startStationID)}_${ this.stationName(this.endStationID)}`
- this.teachingModeCur = {
- mode: "Stations",
- src_dst: `${this.startStationID}_${this.endStationID}`,
- name: "",
- teaching_flag: 1,
- }
- this.ctxDataStr = JSON.stringify([{
- method: "set_selectable",
- param: false,
- }])
- const res2 = await teachingModeFlag(this.vehicleIp, this.teachingModeCur)
- if (res2?.name)
- this.teachingModeCur.name = res2.name
- }
- } 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(
@@ -2101,51 +2305,45 @@
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
async teachingEnd(mode) {
try {
this.loading = true
- // if (mode == "Stations") {
- // const res = await checkAgvLocationDistanceError(this.vehicleIp, this.endStationID)
- // if (res.error) {
- // this.calibratioStationType = "end"
- // this.$refs.refPopupCalibration.open()
- // } else {
- // this.askTeachingBiDirection(this.teachingModeCur)
- // }
- // } else {
- // this.askTeachingBiDirection(this.teachingModeCur)
- // }
- this.askTeachingBiDirection(
- this
- .teachingModeCur
- )
+ this.teachingModeCur.teaching_flag = 0
+ await this.finishTeaching(this.teachingModeCur)
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
this.loading = false
}
},
- 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(this.translate("teaching_switched_bidirectional_mode"))
+ else if (val == 2)
+ showToast(this.translate("teaching_switched_intelligent_mode"))
+ else
+ showToast(this.translate("teaching_switched_default_mode"))
+ /*if (val == 0)
showToast(
"宸插皢璇ヨ矾娈佃矾寰勪繚瀛樹负涓昏矾绀烘暀璺嚎"
)
@@ -2155,72 +2353,114 @@
)
if (res?.name)
this.teachingModeCur.name = res.name
-
- const {
- data
- } = await getTeachingMode(this.vehicleIp)
-
- const publicList = data.Public || []
- const curIndex = publicList.findIndex((a)=>a.name == oldName)
-
- if(curIndex > -1)
- {
- this.ctxDataStr = JSON.stringify([{
- method: "public_teaching_path",
- param: [publicList[curIndex]]
- } ])
-
- }
-
-
+
+ const {
+ data
+ } = await splitTeachingMode(this.vehicleIp)
+
+ const publicList = data.Public || []
+ const curIndex = publicList.findIndex((a) => a.name == oldName)
+
+ if (curIndex > -1) {
+ this.ctxDataStr = JSON.stringify([{
+ method: "public_teaching_path",
+ param: {
+ list: [publicList[curIndex]],
+ show: true
+ }
+ }])
+
+ }
+*/
+
} else {
- this.teachingModeCur
- .main_road =
- val
+ this.teachingModeCur.mode_type = val
}
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
}
},
clickTeachingDelete() {
this.$refs
.refPopupOperateTeaching
.close()
- this.removeTeachingMode(
- this
- .selectTeachingMode
- )
+ const _this = this
+ showModal({
+ title: this.translate("ask_deleting_teaching"),
+ content: `${this.translate('deleted_teaching_cannot_recovered')}`,
+ confirmText: this.translate('delete'),
+ cancelText: this.translate("cancel"),
+
+ })
+ .then((res) => {
+ if (res) {
+ _this.removeTeachingMode(_this.selectTeachingMode)
+ }
+ })
},
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: this.translate("teaching_updating")
+ })
+ const item = this.selectTeachingMode
+ await updateSplitTeachingData(this.vehicleIp, item)
+ this.ctxDataStr =
+ JSON.stringify(
+ [{
+ method: "update_teaching",
+ param: item,
+ }])
+ this.selectTeachingMode = {}
+ showToast(this.translate("teaching_update_success"))
+ } catch (ex) {
+ showError(ex, this.translate('error'))
+ } finally {
+ uni.hideLoading()
+ }
+ },
+ dialogTeachingUpdateClose() {
+ this.$refs.refPopupTeachingUpdate.close()
+
},
async removeTeachingMode(item) {
try {
uni.showLoading({
- title: "鍒犻櫎鍦烘櫙涓�
+ title: this.translate("teaching_deleting")
})
- 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(this.translate("teaching_delete_success"))
} catch (ex) {
- showError(
- ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
@@ -2228,15 +2468,20 @@
async removeTeachingModeData(data) {
try {
uni.showLoading({
- title: "鍒犻櫎鍦烘櫙鏁版嵁涓�
+ title: this.translate("teaching_data_deleting")
})
await delTeachingModeData(this.vehicleIp, data)
+ showToast(this.translate("teaching_delete_success"))
this.reloadTeachingMode()
} catch (ex) {
- showError(ex)
+ showError(ex, this.translate('error'))
} finally {
uni.hideLoading()
}
+ },
+ translate(t) {
+ if (typeof this.$t == "function") return this.$t(`page.${t}`)
+ else return t;
},
}
@@ -2407,7 +2652,7 @@
.left {
display: flex;
flex-direction: column;
- width: 180rpx;
+ width: 240rpx;
color: #aaa;
.line {
@@ -2632,6 +2877,7 @@
.text {
margin: auto;
+ white-space: nowrap;
}
}
@@ -2674,12 +2920,14 @@
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;
+
}
}
@@ -2701,10 +2949,21 @@
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;
width: 300rpx;
+ max-height: 50vh;
+ overflow: auto;
align-items: center;
justify-content: center;
flex-direction: column;
--
Gitblit v1.9.1