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