diff --git a/src/api/les.js b/src/api/les.js
new file mode 100644
index 0000000..c325703
--- /dev/null
+++ b/src/api/les.js
@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+export function add(data) {
+  return request({
+    url: 'api/les',
+    method: 'post',
+    data
+  })
+}
+
+export function del(ids) {
+  return request({
+    url: 'api/les/',
+    method: 'delete',
+    data: ids
+  })
+}
+
+export function edit(data) {
+  return request({
+    url: 'api/les',
+    method: 'put',
+    data
+  })
+}
+
+export default { add, edit, del }
diff --git a/src/views/business-data/businessTask/agvTask.vue b/src/views/business-data/businessTask/agvTask.vue
index 1a55756..bc408d4 100644
--- a/src/views/business-data/businessTask/agvTask.vue
+++ b/src/views/business-data/businessTask/agvTask.vue
@@ -57,6 +57,7 @@
           待执行
           执行中
           顶升
+          到达
           已完成
           任务取消
         
@@ -65,16 +66,17 @@
       
       
       
-      
-      
-        
-          
-            
+      
+      
+        
+          
+            
           
         
         
       
       
@@ -132,9 +134,9 @@
       >
         
         
-        
-        
-        
+        
+        
+        
         
           
             
               顶升
             
+
+            
+              到达
+            
             
             
 import crudAgvTask from '@/api/agvTask'
 import crudKmres from '@/api/kmres'
-import CRUD, { presenter, header, form, crud } from '@crud/crud'
+import CRUD, {presenter, header, form, crud} from '@crud/crud'
 import rrOperation from '@crud/RR.operation'
 import crudOperation from '@crud/CRUD.operation'
 import udOperation from '@crud/UD.operation'
@@ -242,7 +252,7 @@ const defaultForm = {
 }
 export default {
   name: 'AgvTask',
-  components: { DateRangePicker, pagination, crudOperation, rrOperation, udOperation },
+  components: {DateRangePicker, pagination, crudOperation, rrOperation, udOperation},
   mixins: [presenter(), header(), form(defaultForm), crud()],
   dicts: ['base_staus', 'task_status', 'task_type'],
   cruds() {
@@ -251,7 +261,7 @@ export default {
       url: 'api/agvTask',
       idField: 'id',
       sort: 'id,desc',
-      crudMethod: { ...crudAgvTask },
+      crudMethod: {...crudAgvTask},
       optShow: {
         add: false,
         edit: false,
@@ -267,6 +277,11 @@ export default {
   data() {
     return {
       radio3: '执行中',
+      agvTaskArrivedDialog: false,
+      agvTaskArrivedForm: {
+        currentPositionCode: null,
+        missionCode: null
+      },
       permission: {
         add: ['admin', 'agvTask:add'],
         edit: ['admin', 'agvTask:edit'],
@@ -274,46 +289,48 @@ export default {
       },
       rules: {
         stockCode: [
-          { required: true, message: '容器码不能为空', trigger: 'blur' }
+          {required: true, message: '容器码不能为空', trigger: 'blur'}
         ],
         stockTypeCode: [
-          { required: true, message: '容器类型不能为空', trigger: 'blur' }
+          {required: true, message: '容器类型不能为空', trigger: 'blur'}
         ],
         startSlotCode: [
-          { required: true, message: '起点位置不能为空', trigger: 'blur' }
+          {required: true, message: '起点位置不能为空', trigger: 'blur'}
         ],
         endSlotCode: [
-          { required: true, message: '终点位置不能为空', trigger: 'blur' }
+          {required: true, message: '终点位置不能为空', trigger: 'blur'}
         ],
         slotCode: [
-          { required: true, message: '容器当前位置不能为空', trigger: 'blur' }
+          {required: true, message: '容器当前位置不能为空', trigger: 'blur'}
         ],
         status: [
-          { required: true, message: '任务状态不能为空', trigger: 'blur' }
+          {required: true, message: '任务状态不能为空', trigger: 'blur'}
         ],
         jobType: [
-          { required: true, message: '工作类型不能为空', trigger: 'blur' }
+          {required: true, message: '工作类型不能为空', trigger: 'blur'}
         ],
         boxCode: [
-          { required: true, message: '容器号不能为空', trigger: 'blur' }
+          {required: true, message: '容器号不能为空', trigger: 'blur'}
+        ]
+      },
+      agvTaskArrivedRules: {
+        currentPositionCode: [
+          {required: true, message: '当前位置不能为空', trigger: 'blur'}
         ]
       },
       queryTypeOptions: [
-        { key: 'dstStockCode', display_name: '终点位置' },
-        { key: 'srcLocCode', display_name: '起点位置' },
-        { key: 'stockCode', display_name: '容器码' },
-        { key: 'stockTypeCode', display_name: '容器类型' },
-        { key: 'startSlotCode', display_name: '起点位置' },
-        { key: 'endSlotCode', display_name: '终点位置' },
-        { key: 'slotCode', display_name: '容器当前位置' },
-        { key: 'status', display_name: '任务状态' },
-        { key: 'type', display_name: '任务类型' },
-        { key: 'jobId', display_name: '下游任务号' },
-        { key: 'jobMessage', display_name: '返回报文' }
+        {key: 'dstStockCode', display_name: '终点位置'},
+        {key: 'srcLocCode', display_name: '起点位置'},
+        {key: 'stockCode', display_name: '容器码'},
+        {key: 'stockTypeCode', display_name: '容器类型'},
+        {key: 'startSlotCode', display_name: '起点位置'},
+        {key: 'endSlotCode', display_name: '终点位置'},
+        {key: 'slotCode', display_name: '容器当前位置'},
+        {key: 'status', display_name: '任务状态'},
+        {key: 'type', display_name: '任务类型'},
+        {key: 'jobId', display_name: '下游任务号'},
+        {key: 'jobMessage', display_name: '返回报文'}
       ],
-      // boxCode
-      agvTaskCallbackStatus: false,
-      form1: { boxCode: null, missionCode: null }
     }
   },
   methods: {
@@ -325,9 +342,6 @@ export default {
       return row.endSlotCode
     },
     toAgvTaskFinish(data) {
-      if (data.status != 'UP_CONTAINER') {
-        return this.crud.notify('容器未顶升,需顶升之后在做操作!', CRUD.NOTIFICATION_TYPE.ERROR)
-      }
       crudKmres.missionStateCallback({
         missionCode: data.id,
         containerCode: data.stockCode,
@@ -357,31 +371,51 @@ export default {
       }).catch(() => {
       })
     },
-    agvTaskCallbackMethod() {//顶升
-      this.$refs['form1'].validate((valid) => {
+    toAgvTaskUp(data) {//顶升
+      crudKmres.missionStateCallback({
+        missionCode: data.id,
+        containerCode: data.stockCode,
+        missionStatus: 'UP_CONTAINER'
+      }).then(res => {
+        if (res.status == 200) {
+          this.crud.notify('顶升成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
+          this.crud.toQuery()
+        } else {
+          this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
+        }
+      }).catch(e => {
+        this.crud.notify('顶升失败!', CRUD.NOTIFICATION_TYPE.ERROR)
+      })
+
+    },
+    toAgvTaskArrived(data) {
+      //弹出顶升盒子
+      this.agvTaskArrivedForm.missionCode = data.id
+      this.agvTaskArrivedDialog = true
+    },
+    toAgvTaskArrivedContainer() {
+      //到达
+      this.$refs['agvTaskArrivedForm'].validate((valid) => {
         if (valid) {
           crudKmres.missionStateCallback({
-            missionCode: this.form1.missionCode,
-            containerCode: this.form1.boxCode,
-            missionStatus: 'UP_CONTAINER'
+            missionCode: this.agvTaskArrivedForm.missionCode,
+            missionStatus: 'ARRIVED',
+            currentPosition: this.agvTaskArrivedForm.currentPositionCode
           }).then(res => {
-            this.agvTaskCallbackStatus = false
-            this.crud.notify('顶升成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
-            this.crud.toQuery()
-            this.form1 = { boxCode: null, missionCode: null }
-          }).catch(e => {
-            this.crud.notify('顶升失败!', CRUD.NOTIFICATION_TYPE.ERROR)
+            if (res.status == 200) {
+              this.agvTaskArrivedDialog = false
+              this.crud.notify('到达成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
+              this.crud.toQuery()
+              this.agvTaskArrivedForm = {currentPositionCode: null, missionCode: null}
+            } else {
+              this.crud.notify(res.message, CRUD.NOTIFICATION_TYPE.ERROR)
+            }
           })
         } else {
           return false
         }
       })
     },
-    popUpBox(data) {//弹出顶升盒子
-      this.form1.missionCode = data.id
-      this.form1.boxCode = data.stockCode
-      this.agvTaskCallbackStatus = true
-    },
     resetQuery() {
       this.radio3 = '执行中'
       this.query.status = 'ATCALL'
@@ -400,6 +434,9 @@ export default {
       } else if (lab === '顶升') {
         this.query.status = 'UP_CONTAINER'
         this.crud.toQuery()
+      } else if (lab === '到达') {
+        this.query.status = 'ARRIVED'
+        this.crud.toQuery()
       } else if (lab === '已完成') {
         this.query.status = 'FINISH'
         this.crud.toQuery()
@@ -413,8 +450,9 @@ export default {
         case '待执行':
           return 'info'
         case '执行中':
-          return 'warning'
         case '顶升':
+          return 'warning'
+        case '到达':
           return 'primary'
         case '已完成':
           return 'success'
diff --git a/src/views/business-data/les/index.vue b/src/views/business-data/les/index.vue
new file mode 100644
index 0000000..7131e57
--- /dev/null
+++ b/src/views/business-data/les/index.vue
@@ -0,0 +1,125 @@
+
+  
+    
+    
+      
+        
+        
+        
+        
+        
+        
+      
+
+      
+      
+
+      
+    
+
+    
+    
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+    
+    
+
+    
+
+  
 
+
+
+
+
+
diff --git a/vue.config.js b/vue.config.js
index d06cc62..065e93f 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -8,7 +8,7 @@ function resolve(dir) {
 }
 
 const name = defaultSettings.title // 网址标题
-const port = 8081 // 端口配置
+const port = 8080 // 端口配置
 
 // All configuration  explanations can be find in https://cli.vuejs.org/config/
 module.exports = {