瀏覽代碼

修改图片上传

Tiroble 3 年之前
父節點
當前提交
1ea0727b77
共有 29 個文件被更改,包括 2263 次插入38 次删除
  1. 2 4
      build/utils.js
  2. 3 2
      config/index.js
  3. 二進制
      dist.rar
  4. 6 0
      package.json
  5. 二進制
      src/assets/img/smallcar.png
  6. 20 0
      src/components/OffFactoryMapShow/index.js
  7. 279 0
      src/components/OffFactoryMapShow/packages/src/GAODEMap.js
  8. 144 0
      src/components/OffFactoryMapShow/packages/src/GAODEMap.vue
  9. 214 0
      src/components/OffFactoryMapShow/packages/src/README.md
  10. 8 7
      src/views/RMS/components/addCapacity.vue
  11. 3 3
      src/views/RMS/components/addCarrier.vue
  12. 319 0
      src/views/RMS/components/addOtherCapacity.vue
  13. 8 2
      src/views/RMS/components/capacity.vue
  14. 2 0
      src/views/RMS/router/index.js
  15. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/LeaveFactory.vue
  16. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/Load.vue
  17. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/enFactory.vue
  18. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/grossWeight.vue
  19. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/tareWeight.vue
  20. 4 0
      src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/unload.vue
  21. 44 12
      src/views/SporadicManage/components/oldAreaSporadic/transportAppoint/addSporadicTransportAppoint.vue
  22. 2 2
      src/views/SporadicManage/router/index.js
  23. 81 2
      src/views/inward/components/truckAppoint/addRequirement2.vue
  24. 21 2
      src/views/inward/components/truckAppoint/plan.vue
  25. 58 0
      src/views/sale/app.js
  26. 434 0
      src/views/sale/components/offSiteTransportation/inTransit.vue
  27. 495 0
      src/views/sale/components/offSiteTransportation/mapTest.vue
  28. 90 0
      src/views/sale/components/offSiteTransportation/slider.vue
  29. 6 2
      src/views/sale/router/index.js

+ 2 - 4
build/utils.js

@@ -16,16 +16,14 @@ const devPathSrc = path.resolve(__dirname, '../../../src'); // node_modules应
 //       统计报表       组织机构/系统管理 采购  仓储
 //  'statisticalReport','systemConfig','TMS','WMS','workFlow']
 
-
-
-  // let devModules = ['all']
+// let devModules = ['all']
 // let devModules = ['index','inward','SporadicManage']
 // let devModules = ['index','inward']
 // let devModules = ['index','SporadicManage','RMS','statisticalReport']
 // let devModules = ['index','inward','statisticalReport']
 //  let devModules = ['index','WMS','sale','TMS','inward','SporadicManage']
 // let devModules = ['index','SporadicManage','TMS','statisticalReport','RMS'];
-let devModules = ['index','RMS'];
+let devModules = ['systemConfig','index','sale','RMS'];
 
 
 if (pathSrc.indexOf('node_modules') > -1) {

+ 3 - 2
config/index.js

@@ -64,9 +64,9 @@ let proxyTable = {
   },
   // 所有数据的请求域名地址
   "/api/v1": {
-    // target: "http://172.16.33.166:8080",
+     target: "http://172.16.33.166:8080",
     // target: "http://localhost:8080",
-     target: "http://localhost:8019",
+    // target: "http://localhost:8019",
     // target: "http://192.168.1.107:8019",
     // target: "http://192.168.1.112:8019",
     // target: "http://localhost:8019",
@@ -147,6 +147,7 @@ module.exports = {
     }
   },
 
+  
   build: {
     // Template for index.html
     index: path.resolve(__dirname, dist + '/index.html'),

二進制
dist.rar


+ 6 - 0
package.json

@@ -15,7 +15,10 @@
     "testc": "cross-env NODE_ENV=test nyc mocha-webpack --webpack-config build/webpack.test.conf.js --require test/setup.js test/**/*.spec.js"
   },
   "dependencies": {
+    "@amap/amap-jsapi-loader": "^1.0.1",
     "@antv/g6": "1.2.8",
+    "@vue/reactivity": "^3.2.31",
+    "amap-js": "^2.4.0",
     "apollo-cache-inmemory": "^1.5.1",
     "apollo-client": "^2.5.1",
     "apollo-link": "^1.2.11",
@@ -44,7 +47,9 @@
     "socket.io-stream": "^0.9.1",
     "sockjs-client": "^1.3.0",
     "uuid": "^3.3.2",
+    "view-design": "^4.7.0",
     "vue": "^2.5.2",
+    "vue-amap": "^0.5.10",
     "vue-apollo": "^3.0.0-beta.28",
     "vue-baidu-map": "^0.21.19",
     "vue-clipboard2": "^0.2.1",
@@ -52,6 +57,7 @@
     "vue-property-decorator": "^8.2.1",
     "vue-quill-editor": "^3.0.5",
     "vue-router": "^3.0.1",
+    "vue-social-share": "0.0.3",
     "vue-splitpane": "^1.0.2",
     "vuescroll": "^4.17.3",
     "vuex": "^3.0.1",

二進制
src/assets/img/smallcar.png


+ 20 - 0
src/components/OffFactoryMapShow/index.js

@@ -0,0 +1,20 @@
+import GAODEMap from "./packages/src/GAODEMap.js";
+
+
+const components = [GAODEMap];
+
+const install = function(Vue) {
+  components.forEach(component => {
+    Vue.component(component.name, component);
+  });
+};
+
+if (typeof window !== "undefined" && window.Vue) {
+  install(window.Vue);
+}
+
+export default {
+  version: "0.1.0",
+  install,
+  GAODEMap
+};

+ 279 - 0
src/components/OffFactoryMapShow/packages/src/GAODEMap.js

@@ -0,0 +1,279 @@
+
+import { Loading } from 'element-ui';
+
+export default {
+props:{
+    orderNumber:'',
+    capacityNumber:'',
+},
+data() {
+    return {
+        loading : null,
+       
+    };
+},
+watch:{
+    orderNumber:{
+         deep: true,
+        handler(val, oldVal) {
+            console.log("111111111234646")
+            this.reloadData();
+        }
+    }
+},
+created(){
+  
+     this.reloadData();
+},
+mounted: function () {
+             
+        },
+methods: {
+    startLoading (){
+        this.loading = Loading.service({ lock: true, text: '加载中……', background: 'rgba(0, 0, 0, 0.7)' });
+    },
+    reloadData() {
+        let resultData = {
+            orderNumber: this.orderNumber,
+        };
+        this.startLoading(this.orderNumber);
+        console.log()
+        this.$axios.post(
+            "api/v1/getway/fullPathVisualization",resultData
+            ).then((res) => {
+            this.loading.close(); 
+            if(res.data.startAndEndRoutes!=null){
+                this.initMap(res.data);
+
+            
+            }else{
+                this.$message('车辆未入网或没有开启定位,不能访问');
+                this.newMap();
+            }
+            
+            
+        })
+        .catch(error => {
+                this.loading.close(); 
+               
+            if((error+"").indexOf("500") !== -1){
+                    this.$message('车辆未入网或没有开启定位,不能访问');
+                    this.newMap();
+            }
+                    
+                    
+            
+            });
+        
+        
+            
+        },
+        newMap(){
+                var currentPointLat='32.483276';
+                var currentPointLon='114.03629';
+                this.map = new AMap.Map('container', {
+                    zoom:11,//级别
+                    center: [currentPointLon,currentPointLat],//中心点坐标
+                    viewMode:'3D'//使用3D视图
+                });
+                var content = [
+                        "<div  style='top:1px;width: 180px; background-color: rgba(0, 0, 0, 1);' ><b>"+this.capacityNumber+")</b>",
+                        "<div style='background-color:rgba(255, 255, 255, 0.5);'>提示 :"+'GPS没有开启'+"</div></div>"
+                
+                ];
+
+                // 创建 infoWindow 实例	
+                var infoWindow = new AMap.InfoWindow({
+                content: content.join("<br>")  //传入 dom 对象,或者 html 字符串
+                });
+                
+                // 打开信息窗体
+                infoWindow.open(this.map,[currentPointLon,currentPointLat]);
+               
+               
+        },
+        //startLonlat=114.03629,32.483276
+        initMap(data) {
+            console.log(1)
+                var currentPointLat='32.483276';
+                var currentPointLon='114.03629';
+                var polyline=[];
+                //初始化地图
+                if (data.startAndEndRoutes[0].currentPoint!=null){
+                    currentPointLat=data.startAndEndRoutes[0].currentPoint.lat;
+                    currentPointLon=data.startAndEndRoutes[0].currentPoint.lon;
+                }
+                
+            
+            
+                this.map = new AMap.Map('container', {
+                    zoom:11,//级别
+                    center: [currentPointLon,currentPointLat],//中心点坐标
+                    viewMode:'3D'//使用3D视图
+                });
+                var limeList= [];
+            
+                data.startAndEndRoutes.forEach((element,index) => {
+                    
+                    var startPaths=[];
+                    element.runRoute.forEach((element,index) => {
+                        var path= [element.lon,element.lat];
+                        startPaths.push(path);
+                    });
+                
+                    var endPaths=[];
+                    if(element.estimateRoute!=null){
+                        element.estimateRoute.forEach((element,index) => {
+                        var path= [element.lon,element.lat]
+                        endPaths.push(path);
+                    });
+                    }
+                    if (element.startPoint!=null){
+                    
+                        //当前点图标标记点
+                        let startPointicon = new AMap.Icon({
+                            size: new AMap.Size(25, 35), // 图标尺寸
+                            image: require('@/assets/img/start.png'), // Icon的图像
+                            imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
+                            imageSize: new AMap.Size(25, 35) // 根据所设置的大小拉伸或压缩图片
+                        });
+                        // 创建一个 Marker 实例:
+                        var startPointmarker = new AMap.Marker({
+                            position: new AMap.LngLat(element.startPoint.lon, element.startPoint.lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+                                icon: startPointicon, 
+                            title: '北京'
+                        });
+                        // 将创建的点标记添加到已有的地图实例:
+                        this.map.add(startPointmarker);
+                    }
+            
+
+
+
+                
+        
+
+                    
+            
+                    //终点
+                    if (element.endPoint!=null){
+
+                        //当前点图标标记点
+                        let endPointicon = new AMap.Icon({
+                            size: new AMap.Size(25, 35), // 图标尺寸
+                            image: require('@/assets/img/end.png'), // Icon的图像
+                            imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
+                            imageSize: new AMap.Size(25, 35) // 根据所设置的大小拉伸或压缩图片
+                        });
+                        // 创建一个 Marker 实例:
+                        var endPointmarker = new AMap.Marker({
+                            position: new AMap.LngLat(element.endPoint.lon, element.endPoint.lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+                                icon: endPointicon, 
+                            title: '北京'
+                        });
+
+                        // 将创建的点标记添加到已有的地图实例:
+                        this.map.add(endPointmarker);
+                    }
+                    
+                
+                //已行驶轨迹
+                    if(startPaths.length>0){
+                    
+                        var startLine = new AMap.Polyline({
+                            map:this.map,
+                            path: startPaths,
+                            isOutline: true,
+                            outlineColor: '#00FF00',
+                            borderWeight: 0,
+                            strokeColor: "#00FF00", 
+                            strokeOpacity: 1,
+                            strokeWeight: 5,
+                            // 折线样式还支持 'dashed'
+                            strokeStyle: "solid",
+                            // strokeStyle是dashed时有效
+                            strokeDasharray: [10, 5],
+                            lineJoin: 'round',
+                            lineCap: 'round',
+                            zIndex: 50,
+                        })
+                        
+                        limeList.push(startLine);
+                        
+                    }
+
+                if(endPaths.length>0){
+                    
+                        //预计轨迹
+                    
+                        var endLine = new AMap.Polyline({
+                            map:this.map,
+                            path: endPaths,
+                            isOutline: true,
+                            outlineColor: '#FF0000',
+                            borderWeight: 0,
+                            strokeColor: "#FF0000", 
+                            strokeOpacity: 1,
+                            strokeWeight: 5,
+                            // 折线样式还支持 'dashed'
+                            strokeStyle: "solid",
+                            // strokeStyle是dashed时有效
+                            strokeDasharray: [10, 5],
+                            lineJoin: 'round',
+                            lineCap: 'round',
+                            zIndex: 50,
+                        })
+                        limeList.push(endLine);
+                    
+                }
+                    
+                });
+
+                
+                var content = [
+                        "<div  style='top:1px;width: 180px; background-color: rgba(0, 0, 0, 1);' ><font color='white'>"+this.capacityNumber+'('+data.startAndEndRoutes[0].miled+")</font>",
+                        "<div style='background-color:rgba(255, 255, 255, 0.5);'><font color='white'>地址 :"+data.startAndEndRoutes[0].currentPointName+"</font></div></div>"
+                
+                ];
+                data.startAndEndRoutes.forEach((element,index) => {
+                        // 创建 infoWindow 实例	
+                        var infoWindow = new AMap.InfoWindow({
+                        content: content.join("<br>")  //传入 dom 对象,或者 html 字符串
+                        });
+                      
+
+                       //当前点图标标记点
+                    let currentPointicon = new AMap.Icon({
+                        size: new AMap.Size(40, 40), // 图标尺寸
+                        image: require('@/assets/img/car1.png'), // Icon的图像
+                        imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
+                        imageSize: new AMap.Size(40, 40) // 根据所设置的大小拉伸或压缩图片
+                    });
+                    // 创建一个 Marker 实例:
+                    var currentPointmarker = new AMap.Marker({
+                        position: new AMap.LngLat(element.runRoute[element.runRoute.length-1].lon,element.runRoute[element.runRoute.length-1].lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+                            icon: currentPointicon, 
+                        title: '北京'
+                    });
+
+                    // 将创建的点标记添加到已有的地图实例:
+                    this.map.add(currentPointmarker);
+                        // 打开信息窗体
+                        infoWindow.open(this.map,[element.runRoute[element.runRoute.length-1].lon,element.runRoute[element.runRoute.length-1].lat]);
+                });
+                
+            
+                this.map.setFitView([ limeList ])
+
+
+
+        
+
+            
+            
+                
+                // 缩放地图到合适的视野级别
+        
+            }
+    }
+};

+ 144 - 0
src/components/OffFactoryMapShow/packages/src/GAODEMap.vue

@@ -0,0 +1,144 @@
+<template>
+    <div id="demo">
+        <el-main id="container" style="position:relative;"></el-main>
+        <!--控制条-->
+        <div class="map-control" v-show="isActual">
+            <!--播放暂停按钮-->
+            <Icon
+                v-if="!isPlay"
+                class="play-icon"
+                type="ios-play"
+                @click="isPlay=true;navgControl('start')"
+            />
+            <Icon v-else class="play-icon" type="ios-pause" @click="isPlay=false;navgControl('pause')"/>
+            <!--已播放时间-->
+            <span class="passed-time">{{passedTime}}</span>
+            <!--进度条-->
+            <el-slider v-model="sliderVal" :format-tooltip="hideFormat" :step="0.0001"></el-slider>
+            <!--倍速-->
+            <div class="map-times" @mouseenter="isTimesChoose=true" @mouseleave="isTimesChoose=false">
+                <div class="times-show">倍速 {{times}}</div>
+                <div class="choose-box">
+                <ul v-show="isTimesChoose">
+                    <li v-for="item in speedList" :key="item.value" :class="{active:times==item.value}" @click="changeSpeed(item.value)">{{item.label}}</li>
+                </ul>
+            </div>
+        </div>
+        <!--结束时间-->
+        <span class="passed-time">{{totalTime}}</span>
+        </div>
+    </div>
+</template>
+
+<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=eed46ea40bbcadbf8a9cdd5dc1a94642"></script>
+<script>
+import GAODEMap from "./GAODEMap.js";
+export default {
+  name: "GAODEMap",
+  extends: GAODEMap,
+  data() {
+        return {
+            //地图展示中心点
+            centerPoint:{
+                pointLat:"",
+                pointLon:""
+            },
+        };
+    },
+}
+</script>
+<style>
+
+#container {
+	width: 100%;
+	height: 100%;
+	overflow: hidden;
+	margin: 0;
+	font-family: "微软雅黑";
+}
+.info_card {
+    display: inline-block;margin: 50px auto;position: absolute;width: 200px;height:150px;background-color: #c7c9c8AA;border: 5px solid #ffffff;color: #000000;
+}
+.info_card .title{
+    width: 100%;
+    height:40px;
+    background-color: #000000AA;
+    color: #ffffff;
+}
+
+.title span.title_name{
+    position: relative;
+    top: 7px;
+    left: 10px;
+    font-size: 18px;
+}
+
+
+.info_card .title .close_img{
+    position: absolute;
+    top:10px;
+    right: 10px;
+    width: 20px;
+    height: 20px;
+    background-color: #ffffff;
+}
+.info_card .title .close_img .min {
+    width: 0;
+    height: 0;
+    font-size:0;
+    overflow:hidden;
+    position:absolute;
+    border-width:10px;
+}
+
+.info_card .title .close_img .top_img {
+    border-style:solid dashed dashed;
+    border-color:#000000 transparent transparent transparent;
+    top:-2px;
+}
+
+.info_card .title .close_img .right_img {
+    border-style:solid dashed dashed;
+    border-color:transparent #000000 transparent transparent;
+    left:2px;
+}
+
+.info_card .title .close_img .bottom_img{
+    border-style:solid dashed dashed;
+    border-color:transparent transparent #000000 transparent;
+    top:2px;
+}
+
+.info_card .title .close_img .left_img{
+    border-style:solid dashed dashed;
+    border-color:transparent transparent transparent #000000;
+    left:-2px;
+}
+
+.info_card span.cancle{
+    width:0;
+    height:0;
+    font-size:0;
+    overflow:hidden;
+    position:absolute;
+}
+
+.info_card span.bot{
+    border-width:20px;
+    border-style:solid dashed dashed;
+    border-color:#ffffff transparent transparent;
+    left:80px;
+    bottom:-40px;
+}
+.info_card span.top{
+    border-width:20px;
+    border-style:solid dashed dashed;
+    border-color:#c7c9c8AA transparent transparent;
+    left:80px;
+    bottom:-33px;
+}
+.info_card .content{
+    margin-top: 10px;
+    margin-left: 10px;
+}
+</style>

+ 214 - 0
src/components/OffFactoryMapShow/packages/src/README.md

@@ -0,0 +1,214 @@
+## 通用表格使用说明
+### 属性说明
+
+
+
+#### requestUrl : string
+
+表格请求的地址
+
+示例:
+
+``` js
+//全地址
+requestUrl:http://192.168.10.113:8081/api/v1/truck/type/status2;
+//后半截地址
+requestUrl:/api/v1/truck/type/status2;
+```
+
+
+
+#### requestQuery : object
+
+表格请求的参数:用于自己触发筛选和排序时使用
+
+可传入参数
+
+
+
+
+
+#### current-page : number
+
+当前页数,支持 .sync 修饰符
+
+默认是第一页
+
+
+
+#### page-size : number
+
+每页显示条目个数,支持 .sync 修饰符
+
+默认是 每页十条
+
+
+
+#### page-sizes : number[]
+
+每页显示个数选择器的选项设置
+
+默认是 [1,2,5,10]
+
+
+
+#### type : string
+
+表格类型:目前支持:base , common
+
+之后会根据需求增加更多的类型
+
+
+
+#### lastColumnData : array[object]
+
+表格最右边列的数据信息,数组中是放一个对象,对象中的属性如下,
+
+基本和Table-column Attributes的相同,
+
+``` js
+lastColumnData:[{
+    // 表头显示的文案
+    label: "操作",
+    // 设置列的宽度
+    width: 100,
+    // 固定操作列
+    fixed: 'right',
+    // 注意!!!
+    // 操作列按钮点击触发的操作改为 $emit 抛事件的形式
+    // 默认可以获取 scope 属性;里面的具体内容和el-table一样
+    template: `
+		<el-button type="text" size="mini" @click="$emit('transportProgress',scope.row)" > 
+			运输进度 
+		</el-button>
+	`,
+}]
+```
+
+
+
+
+
+### 事件说明
+
+#### radio-change(row)
+
+用于当选表格,当用户改变选中行数据时调用,返回选中行的数据对象 **row**
+
+用户再次点击取消选中时,会返回一个**空对象 {}**
+
+
+
+#### selection-change(rows)
+
+用于多选表格,当选择项发生变化时会触发该事件
+
+返回所有被选中的行的数据的数组 rows[]
+
+即使换页,依然保留被选中的数据
+
+
+
+### 方法说明
+
+#### refreshData()
+
+用户主动刷新表格数据
+
+
+
+## 接口相关说明
+
+### 请求参数说明
+
+链接后的参数
+
+``` json
+// 表格头接口的唯一标识
+apiId:13
+// 控制当前显示第几页
+pageNum:1
+// 控制当前每页显示几条
+pageSize:10
+```
+
+请求体的参数
+
+``` json
+// 排序的数据的参数字段
+orderField:""
+// 排序类型 asc : 升序;  desc : 降序;
+orderType:""
+
+// 需要筛选时,键值对的键,是需要筛选的参数的字段名,
+// 键值对的值,是个数组,存放符合条件的字段值,
+// 筛选的字段可以同时存在多条
+[筛选字段名]:[筛选字段值1,筛选字段值2]
+```
+
+
+
+### 回调参数要求
+
+``` json
+{
+    // 状态码 0:标识成功
+    "code": "0",
+    // 后端自定义给前端的数据对象
+    "data": {
+        // 表格的数据源
+        "list": [
+            // 每行表的数据内容
+            {
+                // 每行数据的唯一标识 必设项
+                "ROW_ID":"",
+            }
+        ],
+
+        // 表头的数据内容
+        // 表头按需要的显示顺序排序
+        "columnData": [
+            // 每个表头的相关信息
+            // 这个之后会根据需求不断添加
+            {
+                // 唯一标识 必设项
+                "data_id": "",
+                // 对应列内容的字段名 必设项
+                "prop": "",
+                // 显示的标题 必设项
+                "label": "",
+
+                // 一下为 非必填选项
+                // 自定义列模板
+                // html的字符串
+                // 当有这个属性时,会忽略label属性
+                "template": "",
+
+                // 列的宽度 非必填选项
+                "width": "",
+                // 当前列对应的 筛选功能数组 非必填选项
+                "filters":[
+                    {
+                        // 筛选选项 所对应的后端数值
+                        value:0,
+                        // 筛选选项 的中文名称
+                        text:"",
+                    },
+                ],
+            },
+        ],
+        
+        // 总条目数
+        "total": 0
+    }
+}
+```
+
+
+
+## 相关网站说明
+
+### 配置表头数据地址
+
+https://diluitable.steerinfo.com/#/
+

+ 8 - 7
src/views/RMS/components/addCapacity.vue

@@ -30,7 +30,7 @@
           <el-upload
             class="upload-demo"
             ref="upload1"
-            action="http://172.16.33.166:8060/api/v1/rms/uploadCarrier1"
+            action="http://172.16.33.166:8080/api/v1/rms/uploadCarrier1"
             :before-upload="beforeUpload"
             :multiple="false"
             list-type="picture"
@@ -225,18 +225,18 @@ export default {
       var result = false;
       if (vehicleNumber.length == 7) {
         var express =
-          /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
+          /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
         result = express.test(vehicleNumber);
       }
       return result;
     },
     makeSure() {
       this.addLoading = true;
-      if (!this.isVehicleNumber(this.form1.capacityNumber.toUpperCase())) {
-        this.$message.error("车牌号格式不正确");
-        this.addLoading = false;
-        return;
-      }
+      // if (!this.isVehicleNumber(this.form1.capacityNumber.toUpperCase())) {
+      //   this.$message.error("车牌号格式不正确");
+      //   this.addLoading = false;
+      //   return;
+      // }
       if (this.carrierIds == null) {
         this.$message.error("请选择承运商");
         this.addLoading = false;
@@ -254,6 +254,7 @@ export default {
         carrierId: this.carrierIds,
         state: this.state,
       };
+      console.log(RmsCapacity)
       if (
         RmsCapacity.capacityNumber == null ||
         RmsCapacity.capacityCorlor == null ||

+ 3 - 3
src/views/RMS/components/addCarrier.vue

@@ -35,7 +35,7 @@
     <el-upload
       class="upload-demo"
       ref="upload1"
-      action="http://172.16.33.166:8060/api/v1/rms/uploadCarrier1"
+      action="http://172.16.33.166:8080/api/v1/rms/uploadCarrier1"
       :before-upload="beforeUpload"
       :multiple="false"
       list-type="picture"
@@ -59,7 +59,7 @@
     <el-upload
       class="upload-demo"
       ref="upload2"
-      action="http://172.16.33.166:8060/api/v1/rms/uploadCarrier1"
+      action="http://172.16.33.166:8080/api/v1/rms/uploadCarrier1"
       :before-upload="beforeUpload"
       :multiple="false"
       list-type="picture"
@@ -82,7 +82,7 @@
     <el-upload
       class="upload-demo"
       ref="upload3"
-      action="http://172.16.33.166:8060/api/v1/rms/uploadCarrier1"
+      action="http://172.16.33.166:8080/api/v1/rms/uploadCarrier1"
       :before-upload="beforeUpload"
       :multiple="false"
       list-type="picture"

+ 319 - 0
src/views/RMS/components/addOtherCapacity.vue

@@ -0,0 +1,319 @@
+<template>
+  <!-- 添加运力信息 -->
+  <div class="addCapacity">
+    <PageTitle>返回</PageTitle>
+    <div class="form_box" style="margin-right: 10rem">
+      <dil-form :formId="309" v-model="form1" ref="from1"></dil-form>
+    </div>
+    <div class="elForm">
+      <el-form :inline="true" class="demo-form-inline" label-width="80px">
+        <el-form-item label="选择承运商">
+          <el-autocomplete
+            class="inline-input"
+            v-model="state"
+            :fetch-suggestions="querySearch"
+            placeholder="请输入承运商名称"
+            :trigger-on-focus="false"
+            @select="handleSelect"
+          >
+            <template slot-scope="{ item }">
+              <div class="name" v-if="item.carrierName">
+                {{ item.carrierName }}
+              </div>
+            </template>
+          </el-autocomplete>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="button_box">
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary" @click="makeSure" :loading="addLoading"
+        >确定</el-button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+import PageTitle from "@/components/Page/Title";
+import { getCookie } from "@/utils/util.js";
+export default {
+  components: { PageTitle },
+  data() {
+    return {
+      addLoading: false,
+      form1: {},
+      form1Initialization: {
+        capacityTypeId: 1,
+        capacityNumber: "",
+        capacityCorlor: "黄",
+        capacityOwneris: "否",
+        capacityVip: "否",
+        capacityBlacklist: "否",
+      },
+      value: undefined,
+      carrierIds: null,
+      state: null,
+      userId: null,
+      restaurants: [],
+      accessToken: null,
+      userCode: null,
+      carrierUserId: null,
+      carrierId: null,
+    };
+  },
+  created() {
+    this.carrierUserId = getCookie("userId");
+    this.form1 = this.form1Initialization;
+    // console.log(this.carrierUserId, "carrierUserId");
+  },
+  mounted() {
+    this.axios
+      .post(
+        "/api/v1/rms/getCarrierNameBySSOId?carrierSSOId=" + this.carrierUserId
+      )
+      .then((res) => {
+        if (res.data.code == "200") {
+          // console.log(res.data.data);
+          if (res.data.data) {
+            this.state = res.data.data.carrierName;
+            this.carrierIds = res.data.data.carrierId;
+          }
+        }
+      });
+  },
+  methods: {
+    //承运商弹出层
+    handleSelect(item) {
+      this.carrierIds = item.carrierId;
+      item.carrierName = this.state;
+    },
+    //以下是承运商边输边查搜索
+    querySearch(queryString, cb) {
+      this.axios
+        .post("/api/v1/uc/getCarrierMesByLike?index=" + queryString)
+        .then((res) => {
+          if (res.data.code == "200") {
+            // console.log(res.data.data);
+            var restaurants = res.data.data;
+            // console.log(restaurants, "restaurants");
+            var results = queryString
+              ? restaurants.filter(this.createFilter(queryString))
+              : restaurants;
+            // 调用 callback 返回建议列表的数据
+            cb(results);
+          }
+        });
+    },
+    createFilter(queryString) {
+      return (restaurants) => {
+        return (
+          restaurants.value.toLowerCase().indexOf(queryString.toLowerCase()) >
+          -1
+        );
+      };
+    },
+    //以上是承运商边输边查搜索
+    deleteUser(userId) {
+      this.axios.delete("pass/v1/sysusers/" + userId).then((res) => {
+        this.$message.error("添加失败,车牌可能重复");
+      });
+    },
+    insertRole(userId, userCode) {
+      this.axios
+        .post(
+          "pass/v1/sysuserroles/addUserroles?userId=" +
+            userId +
+            "&userCode=" +
+            userCode +
+            "&roleId=" +
+            "923693668269953024"
+        )
+        .then((res) => {
+          if (res.code === "0") {
+            this.$message.success("操作成功");
+            this.saveLoading = false;
+            this.rolesTree.loading = false;
+          } else {
+            this.$message.error(res.message);
+          }
+        });
+    },
+    // isVehicleNumber(vehicleNumber) {
+    //   // console.log(vehicleNumber);
+    //   var result = false;
+    //   if (vehicleNumber.length == 7) {
+    //     var express =
+    //       /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
+    //     result = express.test(vehicleNumber);
+    //   }
+    //   return result;
+    // },
+    makeSure() {
+      this.addLoading = true;
+      // if (!this.isVehicleNumber(this.form1.capacityNumber.toUpperCase())) {
+      //   this.$message.error("车牌号格式不正确");
+      //   this.addLoading = false;
+      //   return;
+      // }
+      if(this.form1.capacityNumber.length<=2){
+        this.$message.error("车牌号必须大于三位");
+        this.addLoading = false;
+        return;
+
+      }
+      if (this.carrierIds == null) {
+        this.$message.error("请选择承运商");
+        this.addLoading = false;
+        return;
+      }
+      let RmsCapacity = {
+        capacityTypeId: this.form1.capacityTypeId,
+        capacityNumber: this.form1.capacityNumber.toUpperCase(),
+        capacityCorlor: this.form1.capacityCorlor,
+        capacityOwneris: this.form1.capacityOwneris,
+        capacityVip: this.form1.capacityVip,
+        capacityBlacklist: this.form1.capacityBlacklist,
+        remark: this.form1.remark,
+        carrierId: this.carrierIds,
+        state: this.state,
+      };
+      if (
+        RmsCapacity.capacityNumber == null ||
+        RmsCapacity.capacityCorlor == null ||
+        RmsCapacity.capacityOwneris == null ||
+        RmsCapacity.capacityVip == null ||
+        RmsCapacity.capacityBlacklist == null
+      ) {
+        this.$message.error("存在空值!");
+        this.addLoading = false;
+      } else {
+        //新增SSO运力账号
+        var formData = new FormData();
+        formData.append("userCode", this.form1.capacityNumber.toUpperCase());
+        formData.append("orgCode", "yunli");
+        formData.append("orgName", "运力");
+        formData.append("groupId", "506514577756917769");
+        formData.append("companyId", "713710108567277568");
+        formData.append("orgId", "924126716337721344");
+        // console.log(formData.get("userCode"));
+        // console.log(typeof formData);
+        this.$store
+          .dispatch("system/usersManage/addUser", formData)
+          .then((res) => {
+            // console.log(res);
+            if (res.code === "0") {
+              // console.log(res.data.userId);
+              this.userId = res.data.userId;
+              this.userCode = res.data.userCode;
+              RmsCapacity.ssoId = res.data.userId;
+              this.axios
+                .post("/api/v1/rms/insertCapacity", RmsCapacity)
+                .then((res) => {
+                  if (res.data.data == 1) {
+                    this.insertRole(this.userId, this.userCode);
+                    this.$message.success("添加成功");
+                    this.$router.push("capacity");
+                  } else if (res.data.code == "201") {
+                    this.deleteUser(this.userId);
+                  } else {
+                    this.deleteUser(this.userId);
+                  }
+                });
+            } else {
+              // console.log(RmsCapacity, "RmsCapacity");
+              if (res.message == "账号已被注册") {
+                this.$confirm(
+                  "该账号已经被注册, 是否确定新增承运商绑定关系?",
+                  "提示",
+                  {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning",
+                  }
+                )
+                  .then(() => {
+                    this.axios
+                      .post("/api/v1/rms/insertCapacity", RmsCapacity)
+                      .then((res) => {
+                        // console.log(res, "res");
+                        if (res.data.data == 0) {
+                          this.$message.success("新增承运商绑定关系成功!");
+                          this.$router.push("capacity");
+                        } else {
+                          this.$message.error("该绑定关系已存在!");
+                        }
+                      });
+                  })
+                  .catch(() => {
+                    this.$message({
+                      type: "info",
+                      message: "已取消删除",
+                    });
+                  });
+              }
+            }
+          });
+        this.addLoading = false;
+      }
+    },
+    // 取消
+    cancel() {
+      this.$router.go(-1);
+    },
+  },
+};
+</script>
+<style lang='scss' >
+.addCapacity {
+  .elForm {
+    margin-left: 40%;
+  }
+  .form_box {
+    width: 100%;
+    margin-top: 30px;
+    margin-left: 50px;
+    display: flex;
+    justify-content: center;
+    .el-form-item {
+      display: flex;
+      justify-content: center;
+      .el-form-item__label {
+        display: flex;
+        align-items: center;
+      }
+      .el-form-item__content {
+        .el-select {
+          width: 250px;
+        }
+        .el-input {
+          width: 250px;
+        }
+      }
+    }
+  }
+  .inputBox {
+    display: flex;
+    justify-content: center;
+    margin-bottom: 30px;
+    .text {
+      text-align: right;
+      display: flex;
+      align-items: center;
+      margin-right: 5px;
+    }
+    .input {
+      width: 250px;
+    }
+  }
+  .button_box {
+    display: flex;
+    justify-content: center;
+    .el-button {
+      width: 80px;
+      margin-right: 10px;
+    }
+  }
+}
+</style>

+ 8 - 2
src/views/RMS/components/capacity.vue

@@ -13,6 +13,9 @@
        <el-button type="primary" class="btn" @click="toInsert">
         <i class="el-icon-plus"></i>新增
       </el-button>
+      <el-button type="primary" class="btn" @click="toInsert1">
+        <i class="el-icon-plus"></i>新增特殊车牌
+      </el-button>
       <el-button type="primary" @click="exportData()"><i class="el-icon-download"></i>导出(Excel)</el-button>
     </div>
     <div class="table">
@@ -25,13 +28,13 @@
       >
         <el-table-column fixed="right" label="操作" width="100">
           <template slot-scope="scope">
-            <el-button
+            <!-- <el-button
               type="text"
               size="small"
               @click="updateCapacity(scope.row.capacityId)"
             >
               修改
-            </el-button>
+            </el-button> -->
             <el-button
               type="text"
               size="small"
@@ -120,6 +123,9 @@ export default {
      toInsert() {
       this.$router.push("/addCapacity");
     },
+    toInsert1() {
+      this.$router.push("/addOtherCapacity");
+    },
     updateCapacity(capacityId){
       this.$router.push("/editCapacity/" + capacityId)
     },

+ 2 - 0
src/views/RMS/router/index.js

@@ -24,6 +24,7 @@ import addTruckCalculate from '../components/addTruckCalculate.vue'
 import capacity from '../components/capacity.vue'
 import carDriver from '../components/carDriver.vue'
 import carrier from '../components/carrier.vue'
+import addOtherCapacity from '../components/addOtherCapacity'
 
 import editCapacity from '../components/editCapacity.vue'
 import editCarDriver from '../components/editCarDriver.vue'
@@ -82,6 +83,7 @@ const constantRouterMap = [
 		{path: 'addRmsShipper', name: 'addRmsShipper', meta: {code: 'xtpzgl-yhgl'}, component: addRmsShipper},
 		{path: 'addSupplier', name: 'addSupplier', meta: {code: 'xtpzgl-yhgl'}, component: addSupplier},
 		{path: 'addTruckCalculate', name: 'addTruckCalculate', meta: {code: 'xtpzgl-yhgl'}, component: addTruckCalculate},
+		{path: 'addOtherCapacity', name: 'addOtherCapacity', meta: {code: 'xtpzgl-yhgl'}, component: addOtherCapacity},
 		{path: 'capacity', name: 'capacity', meta: {code: 'xtpzgl-yhgl'}, component: capacity},
 		{path: 'carDriver', name: 'carDriver', meta: {code: 'xtpzgl-yhgl'}, component: carDriver},
 		{path: 'carrier', name: 'carrier', meta: {code: 'xtpzgl-yhgl'}, component: carrier},  

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/LeaveFactory.vue

@@ -61,6 +61,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/Load.vue

@@ -53,6 +53,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/enFactory.vue

@@ -61,6 +61,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/grossWeight.vue

@@ -54,6 +54,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/tareWeight.vue

@@ -54,6 +54,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 4 - 0
src/views/SporadicManage/components/oldAreaSporadic/inwardSporadicFactory/unload.vue

@@ -53,6 +53,10 @@ export default {
           value: 14,
           label: "中转",
         },
+        {
+          value: 19,
+          label: "退货",
+        },
         ]
     };
   },

+ 44 - 12
src/views/SporadicManage/components/oldAreaSporadic/transportAppoint/addSporadicTransportAppoint.vue

@@ -98,6 +98,23 @@
         :inline="true"
         class="demo-form-inline"
         label-width="80px"
+      >
+        <el-form-item label="趟次">
+         <el-input
+          class="inline-input"
+          v-model="materialTimes"
+          placeholder="趟次-非必填"
+          :trigger-on-focus="false"
+          @input="onInputTimes()"
+          @blur="onblur()"
+        >
+        </el-input>
+        </el-form-item>
+        </el-form>
+        <el-form
+        :inline="true"
+        class="demo-form-inline"
+        label-width="80px"
       >
         <el-form-item label="选择物资">      
         </el-form-item>
@@ -282,6 +299,10 @@ export default {
         {
           value:14,
           label:'中转'
+        },
+        {
+          value:19,
+          label:'退货'
         }
       ],
       orderType:null,
@@ -400,6 +421,16 @@ export default {
         this.$message.warning('趟次请输入数字')
       }
     },
+    onblur(){
+      this.isMoreTrips = false
+      if(this.materaialTimes <= 0){
+        this.$message.warning('趟次必须大于0')
+        this.materialTimes = null
+      }
+      if(this.materialTimes > 1 ){
+        this.isMoreTrips = true
+      }
+    },
     onInputPriority(scope){
       if(!isNumber(scope)){
         this.$message.warning('装卸货次序请输入数字')
@@ -426,6 +457,9 @@ export default {
       if(this.orderType == 14){
         this.inputLine = "零星中转"
       }
+      if(this.orderType == 19){
+        this.inputLine = "退货"
+      }
     },
     drawTable(){
       this.materialOptions.requestUrl = "/api/v1/uc/selectAllMaterialName?apiId=395" +"&test=" + new Date()
@@ -517,7 +551,8 @@ export default {
             materialSpecification:e.materialSpecification,
             materialName:e.materialName,
             materialCode:e.materialCode,
-            materialId:e.materialId
+            materialId:e.materialId,
+            materialPriority:1
           }
           this.tableData.push(addmap)
         })
@@ -562,18 +597,12 @@ export default {
     },
     // 确认
     makeSure() {
-        let amOrder = {
-          supplierId:this.supplierId,
-          lineId:this.lineId,
-          carrierId: this.carrierId,
-          orderType:this.orderType,
-          receiveId: this.consigneeId,
-          userId:getCookie("orgCode"),
-          mapList: this.tableData,
-          isMoreTrips:Number(this.isMoreTrips)
+        if(this.isMoreTrips == false){
+          this.materialTimes = 1
+        }
+        if(Number(this.materialTimes) != 0){
+          this.isMoreTrips = true
         }
-        console.log(amOrder)
-        debugger
         this.disabled = true
         if(this.supplierId==null||this.lineId==null||this.consigneeId==null||this.carrierId==null){
           this.disabled = false
@@ -609,10 +638,13 @@ export default {
           orderType:this.orderType,
           receiveId: this.consigneeId,
           userId:getCookie("orgCode"),
+          orderTime:this.materialTimes,
           mapList: this.tableData,
           isMoreTrips:Number(this.isMoreTrips)
           
         };
+        console.log(amsOrder)
+        debugger
         this.axios.post("/api/v1/ams/addSporadicOrders", amsOrder).then((res) => {
           if (res.data.code == "200") {
             this.onClickCancel()

+ 2 - 2
src/views/SporadicManage/router/index.js

@@ -44,7 +44,7 @@ import oldSporadicInwardTenfactory from '../components/oldAreaSporadic/inwardSpo
 import oldSporadicInwardGrossWeight from '../components/oldAreaSporadic/inwardSporadicFactory/grossWeight.vue'
 import oldSporadicInwardoutFactory from '../components/oldAreaSporadic/inwardSporadicFactory/LeaveFactory.vue'
 import oldSporadicInwardtareWeight from '../components/oldAreaSporadic/inwardSporadicFactory/tareWeight.vue'
-import oldSporadicInwardload from '../components/oldAreaSporadic/inwardSporadicFactory/tareWeight.vue'
+import oldSporadicInwardload from '../components/oldAreaSporadic/inwardSporadicFactory/Load.vue'
 import oldSporadicInwardUnload from '../components/oldAreaSporadic/inwardSporadicFactory/unload.vue'
 
 //钢材退货运输预约
@@ -177,7 +177,7 @@ const constantRouterMap = [
       {path:'oldSporadicInwardoutFactory',name:'oldSporadicInwardoutFactory',meta:{code:'xtpzgl-yhgl'},component:oldSporadicInwardoutFactory},
       {path:'oldSporadicInwardtareWeight',name:'oldSporadicInwardtareWeight',meta:{code:'xtpzgl-yhgl'},component:oldSporadicInwardtareWeight},
       {path:'oldSporadicInwardUnload',name:'oldSporadicInwardUnload',meta:{code:'xtpzgl-yhgl'},component:oldSporadicInwardUnload},
-
+      {path:'oldSporadicInwardload',name:'oldSporadicInwardload',meta:{code:'xtpzgl-yhgl'},component:oldSporadicInwardload},
     ]    
   }
 ];

+ 81 - 2
src/views/inward/components/truckAppoint/addRequirement2.vue

@@ -27,7 +27,7 @@
     </el-form>
       </div>
       <div class="form-box">
-        <dil-form :formId="300" v-model="form"></dil-form>
+        <dil-form :formId="377" v-model="form"></dil-form>
       </div>
 
       <div class="DueTime">
@@ -51,6 +51,51 @@
           </div>
           </el-form>
       </div>
+     <!--选择车辆类型--> 
+     <div class="capacity">
+      <div class="capacityName">
+         <el-form
+        :inline="true"
+        class="demo-form-inline"
+        label-width="80px"
+      >
+        <el-form-item label="选择车辆类型">    
+        </el-form-item>  
+        <el-form-item>
+         <el-input
+          el-input v-model="capacityTypeName" disabled>  
+       </el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="ondrawer(3)" class="truckBtn"
+          >浏览</el-button>
+        </el-form-item>
+        </el-form>
+      </div>
+      <el-drawer
+      title="选择车辆类型"
+      :visible.sync="drawer2"
+      direction="rtl"
+      size="40%"
+      :show-close="false"
+      >
+      <div style="margin-left:-300px">
+        <el-input placeholder="请输入内容" v-model="inputCapacityType" style="margin-left:20px;width: 250px" clearable > </el-input
+      ><el-button type="primary" class="btn" @click="onclickCapacity">
+        <i class="el-icon-search"></i>查询
+      </el-button>
+      </div>
+      
+     
+      <!-- <el-button @click="open">取消</el-button> -->
+    
+      <div class="tablecls">
+      
+        <dilTable ref="options3" v-bind.sync="options3" @radio-change="selectionChange1" :drawer="aaadrawer">
+        </dilTable>
+      </div>
+      </el-drawer>
+</div> 
       <div class="materialDrawer">
          <el-form
         :inline="true"
@@ -256,10 +301,12 @@ export default {
       options: [],
       value: '',
       isOpenDueTime : true,
+      inputCapacityType:null,
       DueTime:null,
       // 件数与重量的开关
       value: false,
       //物资模态框开关
+      drawer2:false,
       table: false,
       //物资表格表头
       tableTop: [
@@ -304,11 +351,14 @@ export default {
       materialId: null,
       requireUnitName:null,
       inputMaterial:null,
+      inputCapacityType:null,
       shipperId:null,
       truckPoint1: "",
       drawer: false,
       selectionList1: [],
       form: {},
+      capacityTypeId: "",
+      capacityTypeName:"",
       materialTable: {
         requestUrl: "",
         selectionType: "select",
@@ -319,6 +369,11 @@ export default {
         selectionType: "radio",
         mapList2: []
       },
+      options3:{
+        requestUrl:"",
+        selectionType:"radio",
+        mapList3: []
+      },
       form:{}
     };
   },
@@ -380,6 +435,7 @@ export default {
     selectionChange(selection) {
       this.selectionList1 = [];
       this.selectionList1 = selection;
+      console.log("selection",selection)
     },
     unloadPoint(index) {
       this.getUnloadRequestUrl()
@@ -398,6 +454,9 @@ export default {
       if(num==1){
         this.table = true
         this.materialTable.requestUrl = "/api/v1/uc/queryMaterialByLike?apiId=244&i=" + new Date()
+      }else if(num==3){
+        this.drawer2 = true
+        this.options3.requestUrl = "/api/v1/uc/getCapacityType?apiId=460"
       }else{
         this.drawer = true;
       }  
@@ -414,6 +473,14 @@ export default {
         this.inputMaterial = null
       }
     },
+    onclickCapacity(){
+      if(this.inputCapacityType == null){
+        this.options3.requestUrl = "/api/v1/uc/getCapacityType?apiId=460"
+      }else{
+        this.options3.requestUrl = "/api/v1/uc/getCapacityType?apiId=460&index="+this.inputCapacityType
+        this.inputCapacityType = null
+      }
+    },
     //删除行
     deleteRow(index, rows) {
       // console.log(index)
@@ -490,6 +557,9 @@ export default {
       }
       this.materialId = selection.materialId;
     },
+    selectionChange1(radio){
+      this.capacityTypeName  = radio.capacityTypeName
+    },
     currentRadioChange2(selection) {
       console.log(selection);
       if (this.a == 2) {
@@ -585,7 +655,7 @@ export default {
         DueTime:DueTime,
         mapList:this.tableData,
         orgCode:getCookie("orgCode"),
-        remark:this.form.Tel + this.form.capacityType
+        remark:this.form.Tel + this.capacityTypeName+this.form.typeRemarks
       };
       console.log("requirement",requiremnet);
       this.axios
@@ -639,6 +709,15 @@ export default {
       margin-right: 70px;
     }
   }
+.capacity{
+  display: flex;
+  text-align: center;
+  align-items: center;
+  justify-content: center;
+  margin-top: 2rem;
+  margin-bottom: 1.25rem;
+  margin-right: 10px;
+}
 .materialDrawer {
   display: flex;
   justify-content: center;

+ 21 - 2
src/views/inward/components/truckAppoint/plan.vue

@@ -1,10 +1,11 @@
 // 制定计划
 <template>
   <div class="inwardPlan">
+    
     <div class="sache">
       <el-input placeholder="请输入内容" v-model="inputText" clearable>
       </el-input>
-      <el-button type="primary" class="btn">
+      <el-button type="primary" class="btn" @click="bofang">
         <i class="el-icon-search"></i>查询
       </el-button>
       <el-badge :value="addPlanCount" class="item" v-if="activeName == 'second'">
@@ -17,7 +18,13 @@
         <i class="el-icon-plus"></i>制定计划
       </el-button>
       </el-badge>
-      
+      <!-- <audio 
+       id="audioId"
+       controls="controls"
+       preload="auto"
+       loop = "isloop"
+       src="/static/music/y682.mp3">
+      </audio> -->
       <el-button
         type="primary"
         class="btn"
@@ -26,6 +33,7 @@
       >
         <i class="el-icon-download"></i>下发
       </el-button>
+      
     </div>
     <template>
       <div>
@@ -219,6 +227,7 @@ export default {
     };
   },
   created(){
+      
       this.second.requestUrl = "/api/v1/ams/getTruckPlanList?apiId=257&planStatus=0",
       this.third.requestUrl = "/api/v1/ams/getTruckPlanList?apiId=258&planStatus=1",
       this.fourth.requestUrl = "/api/v1/ams/getTruckPlanList?apiId=258&planStatus=4"  
@@ -240,6 +249,16 @@ export default {
     start(){
         this.timer = setInterval(this.getAddPlan,60000)
     },
+    bofang(){
+      let obj = new Object();
+      obj = document.getElementById('audioId');
+      console.log(obj)
+      if(obj.paused){
+        obj.play()
+      }else{
+        obj.paused
+      }
+    },
     getRequirementMaterial(row) {
       // 记录重复点击次数
       if (this.oldRow === row) {

+ 58 - 0
src/views/sale/app.js

@@ -15,6 +15,64 @@ import VueApollo from 'vue-apollo'
 
 import apollo from '@/config/apolloConfig.js'
 
+
+import 'xe-utils' 
+import VXETable from 'vxe-table'
+import 'vxe-table/lib/style.css'
+Vue.use(VXETable)
+Vue.prototype.$XModal = VXETable.modal
+
+
+import AMap from 'vue-amap';
+
+Vue.use(AMap);
+  AMap.initAMapApiLoader({
+    key: 'eed46ea40bbcadbf8a9cdd5dc1a94642',
+    plugin: [
+      "AMap.Autocomplete", // 输入提示插件
+      "AMap.PlaceSearch", // POI搜索插件
+      "AMap.Scale", // 右下角缩略图插件 比例尺
+      "AMap.OverView", // 地图鹰眼插件
+      "AMap.ToolBar", // 地图工具条
+      "AMap.MapType", // 类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
+      "AMap.PolyEditor", // 编辑 折线多,边形
+      "AMap.CircleEditor", // 圆形编辑器插件
+      "AMap.Geolocation", // 定位控件,用来获取和展示用户主机所在的经纬度位置
+      "AMap.ControlBar"   // 缩放、尺寸控制器
+    ],
+    // 默认高德 sdk 版本为 1.4.4
+    v: '1.4.15',
+    uiVersion: '1.1.1'
+});
+
+import Share from 'vue-social-share'
+Vue.use(Share);
+
+import 'view-design/dist/styles/iview.css';
+import ViewUI from 'view-design';
+Vue.use(ViewUI);
+// import VueAMap from 'vue-amap'
+ 
+// Vue.use(VueAMap)
+ 
+// VueAMap.initAMapApiLoader({
+//   key: 'eed46ea40bbcadbf8a9cdd5dc1a94642',
+//   plugin: [//高德地图扩展插件(按需添加)
+//     'AMap.Autocomplete', // 输入提示插件
+//     'AMap.PlaceSearch', // POI搜索插件
+//     'AMap.Scale', // 右下角缩略图插件 比例尺
+//     'AMap.OverView', // 地图鹰眼插件
+//     'AMap.ToolBar', // 地图工具条
+//     'AMap.MapType', // 类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
+//     'AMap.PolyEditor', // 编辑 折线多,边形
+//     'AMap.CircleEditor', // 圆形编辑器插件
+//     'AMap.Geolocation' // 定位控件,用来获取和展示用户主机所在的经纬度位置
+//   ],
+  // uiVersion: '1.1', // ui库版本,不配置不加载,
+  // v: '2.0'
+// })
+
+
 // 关闭生产模式下给出的提示
 Vue.config.productionTip = false;
 

+ 434 - 0
src/views/sale/components/offSiteTransportation/inTransit.vue

@@ -0,0 +1,434 @@
+<template>
+  <!-- 在途运输信息选择页面 -->
+  <div class="inTransit">
+
+    <el-form :inline="true">
+  <el-form-item>
+    <label class="el-form-item__label" style="width: auto;">时间段</label>
+         <el-date-picker
+      v-model="dateValue"
+      type="daterange"
+      range-separator="至"
+      start-placeholder="开始日期"
+      end-placeholder="结束日期">
+    </el-date-picker>
+  </el-form-item>
+  <el-form-item>
+     <label class="el-form-item__label" style="width: auto;">产品分类</label>
+      <el-select v-model="inputValue" placeholder="产品分类">
+        <el-option
+          v-for="item in inputValues"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <!-- <label class="el-form-item__label" style="width: auto;">产品分类</label>
+      <el-autocomplete
+        popper-class="my-autocomplete"
+        v-model="inputValue"
+        :fetch-suggestions="querySearch"
+        placeholder="请输入内容" 
+      >
+        <i class="el-icon-edit el-input__icon" slot="suffix"> </i>
+      </el-autocomplete> -->
+  </el-form-item>
+  <el-form-item>
+      <label class="el-form-item__label" style="width: auto;">车牌号</label>
+      <el-input v-model="capacityNumber1" placeholder="请输入内容"></el-input>
+  </el-form-item>
+  <el-form-item>
+      <label class="el-form-item__label" style="width: auto;">收货单位</label>
+      <el-input v-model="consigneeCompanyName1" placeholder="请输入内容"></el-input>
+  </el-form-item> 
+  <el-form-item>
+      <label class="el-form-item__label" style="width: auto;">承运单位</label>
+      <el-input v-model="carrierName" placeholder="请输入内容"></el-input>
+  </el-form-item> 
+   <el-form-item>
+     <label class="el-form-item__label" style="width: auto;">门岗名称</label>
+      <el-select v-model="gatepostName" placeholder="门岗名称">
+        <el-option
+          v-for="item in gatepostNames1"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <!-- <label class="el-form-item__label" style="width: auto;">门岗名称</label>
+       <el-autocomplete
+            popper-class="my-autocomplete"
+            v-model="gatepostName"
+            :fetch-suggestions="querySearch2"
+            placeholder="请输入内容" 
+          >
+            <i class="el-icon-edit el-input__icon" slot="suffix"> </i>
+          </el-autocomplete> -->
+  </el-form-item> 
+  <el-form-item>
+    <label class="el-form-item__label" style="width: auto;">报警类型</label>
+      <el-select v-model="exceptionType" placeholder="报警类型">
+        <el-option
+          v-for="item in exceptionTypes"
+          :key="item.value"
+          :label="item.label"
+          :value="item.value">
+        </el-option>
+      </el-select>
+      <!-- <label class="el-form-item__label" style="width: auto;">报警类型</label>
+       <el-autocomplete
+            popper-class="my-autocomplete"
+            v-model="exceptionType"
+            :fetch-suggestions="querySearch3"
+            placeholder="请输入内容" 
+          >
+            <i class="el-icon-edit el-input__icon" slot="suffix"> </i>
+          </el-autocomplete> -->
+  </el-form-item> 
+  <el-form-item>
+    <el-button type="primary" @click="onSearch"><i class="el-icon-search"></i>查询</el-button>
+    <el-button type="primary" @click="exportData">导出</el-button>
+  </el-form-item>
+</el-form>
+  
+    <!-- 执行中 -->
+<el-tabs v-model="activeName" >
+    <el-tab-pane label="执行中" name="first">
+    <dilTable ref="tab" v-bind.sync="option">
+      <el-table-column fixed="right" label="操作" width="110">
+        <template slot-scope="scope">
+          <el-button @click="click(scope.row)" type="text" size="small" style="font-size: 17px"
+            >实时轨迹</el-button
+          >
+        </template>
+      </el-table-column>
+    </dilTable>
+    </el-tab-pane>
+    <!-- 已结束 -->
+      <el-tab-pane label="已结束" name="second">
+        <dilTable ref="tab2" v-bind.sync="option2">
+         <el-table-column fixed="right" label="操作" width="220">
+        <template slot-scope="scope">
+          <el-button @click="historyclick(scope.row)" type="text" size="small" style="font-size: 17px">历史轨迹</el-button>
+          <el-button @click="allDistanceclick(scope.row.orderNumber)" type="text" size="small" style="font-size: 17px">总距离</el-button>
+        </template>
+      </el-table-column>
+        </dilTable>
+      </el-tab-pane>
+      <!-- 有异常 -->
+      <el-tab-pane label="有异常" name="third">
+        <dilTable ref="tab3" v-bind.sync="option3">
+         <el-table-column fixed="right" label="操作" width="220">
+        <template slot-scope="scope">
+           <el-button @click="click(scope.row)" type="text" size="small" style="font-size: 17px"
+            >实时轨迹</el-button
+          >
+          <el-button @click="inTransitAlarmclick(scope.row.orderNumber)" type="text" size="small" style="font-size: 17px">运输报警</el-button>
+        </template>
+      </el-table-column>
+        </dilTable>
+      </el-tab-pane>
+    </el-tabs>
+    <div style="height: 100%">
+      <vxe-modal width="1237" height="731" v-model="value7" show-zoom resize>
+            <template #default>
+              
+              <PathView v-bind.sync="pathOption"></PathView>
+            </template>
+      </vxe-modal>
+    </div>
+    <!-- <div style="height: 100%">
+      <vxe-modal width="1237" height="731" v-model="value6" show-zoom resize>
+            <template #default>
+              
+              <inTransitOrderMileage v-bind.sync="mileOption"></inTransitOrderMileage>
+            </template>
+          </vxe-modal>
+    </div>
+     <div style="height: 100%">
+      <vxe-modal width="1237" height="731" v-model="value5" show-zoom resize>
+            <template #default>
+              
+              <inTransitAlarm v-bind.sync="alarmOption"></inTransitAlarm>
+            </template>
+          </vxe-modal>
+    </div> -->
+         
+  </div>
+</template>
+
+
+<script>
+import { sjTime } from "@/utils/sharedJsFile";
+
+//PathView组件注册
+// import PageTitle from "@/offSiteTransportation/mapTest.vue";
+import PathView from "./mapTest.vue"
+// import InTransitOrderMileage from "@/views/TMS/tms-offsite/inTransitOrderMileage.vue"
+// import inTransitAlarm from "@/views/TMS/tms-offsite/inTransitAlarm.vue"
+export default {
+  name: "inTransit",
+    components: { 
+      PathView,
+      // InTransitOrderMileage,
+      // inTransitAlarm
+  },
+  data() {
+    return {
+      
+      exceptionTypes:[{
+          value: '全部类型',
+          label: '全部类型'
+        }, {
+          value: '离线',
+          label: '离线'
+        },{
+          value: '停车',
+          label: '停车'
+        },{
+          value: '偏离',
+          label: '偏离'
+        }],
+        inputValues:[{
+          value: '螺纹钢',
+          label: '螺纹钢'
+        }, {
+          value: '微粉',
+          label: '微粉'
+        },{
+          value: '带钢',
+          label: '带钢'
+        },{
+          value: '钢坯',
+          label: '钢坯'
+        },{
+          value: '其他',
+          label: '其他'
+        }],
+       gatepostNames1: [{
+          value: '信钢北门出口',
+          label: '信钢北门出口'
+        }, {
+          value: '科创微粉出口',
+          label: '科创微粉出口'
+        },{
+          value: '象屿库',
+          label: '象屿库'
+        },{
+          value: '智同库',
+          label: '智同库'
+        },{
+          value: '中联厂出口',      
+          label: '中联厂出口'
+        }],
+      dateValue:[new Date(), new Date()],
+      inputValue:"螺纹钢",
+      exceptionType:"全部类型",
+      selectOrderNumber:"",
+      capacityNumber1:"",
+      carrierName:"",
+       gatepostName:"",
+       value7:false,
+       value6:false,
+       value5:false,
+       dialogVisible:false,
+      consigneeCompanyName1:"",
+      status: "",
+      state: "",
+      activeName: "first",
+      option: {       
+        // 表格请求数据的地址
+        requestUrl: "/api/v1/otms/getInTransitTransportation?apiId=468",
+      },
+       option2: {
+        // 表格请求数据的地址
+        // requestUrl: "/api/v1/tms/getFinishTruckOrderInfo?apiId=160",
+      },
+      pathOption:{
+           orderNumber:'',
+        capacityNumber:'',
+      },
+      mileOption:{
+        orderNumber:''
+      },
+      alarmOption:{
+        orderNumber:''
+      },
+       option3: {
+        // 表格请求数据的地址
+        // requestUrl: "/api/v1/tms/getHaveAbnormalTruckOrderInfo?apiId=160",
+      }
+    };
+  },
+  mounted() {
+    console.log("nijfdsojfosafj")
+    this.restaurants = this.loadAll();
+    // this.onSearch();
+    
+  },
+  methods: {
+    showPathView(data){
+      this.dialogVisible=!this.dialogVisible;
+      this.selectOrderNumber=data.orderNumber;
+    },
+    querySearch(queryString, cb) {
+      var restaurants = this.restaurants;
+      var results = queryString
+        ? restaurants.filter(this.createFilter(queryString))
+        : restaurants;
+      cb(results);
+    },
+     querySearch2(queryString, cb) {
+      var restaurants = [
+        { value: "信钢北门出口"},
+        { value: "科创微粉出口"},
+        { value: "象屿库"},
+        { value: "智同库"},
+      ];
+      var results = queryString
+        ? restaurants.filter(this.createFilter(queryString))
+        : restaurants;
+      cb(results);
+    },
+     querySearch3(queryString, cb) {
+      var restaurants = [
+        { value: "离线"},
+        { value: "停车"},
+        { value: "偏离"},
+        { value: "全部类型"},
+      ];
+      var results = queryString
+        ? restaurants.filter(this.createFilter(queryString))
+        : restaurants;
+      cb(results);
+    },
+    createFilter(queryString) {
+      return (restaurant) => {
+        return (
+          restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
+          0
+        );
+      };
+    },
+    loadAll() {
+      return [
+        { value: "螺纹钢"},
+         { value: "微粉"},
+        { value: "带钢"},
+        { value: "钢坯"},
+        { value: "其他"},
+      ];
+    },
+    exportData(){
+        
+
+        let tHeader = [];
+        let filterVal = [];
+        if(this.activeName=="first"){
+          this.$refs.tab.dataColumnData.filter( (item,i) =>{
+                    tHeader.push(item.label);
+                        filterVal.push(item.prop);
+                    } )
+            this.export2Excel(tHeader,filterVal,this.$refs.tab.dataTabel,'执行中表格');
+        }else if(this.activeName=="second"){
+            this.$refs.tab2.dataColumnData.filter( (item,i) =>{
+              tHeader.push(item.label);
+                  filterVal.push(item.prop);
+              } )
+          this.export2Excel(tHeader,filterVal,this.$refs.tab2.dataTabel,'已完成表格');
+        } else if(this.activeName=="third"){
+            this.$refs.tab3.dataColumnData.filter( (item,i) =>{
+                      tHeader.push(item.label);
+                          filterVal.push(item.prop);
+                      } )
+            this.export2Excel(tHeader,filterVal,this.$refs.tab3.dataTabel,'有异常表格');
+        }
+        
+        
+    },
+    export2Excel(tHeader,filterVal,dataTabel,exeName) {
+      var that = this;
+       this.downloadLoading = true
+      require.ensure([], () => {
+        const { export_json_to_excel } = require("@/assets/excel/Export2Excel.js"); //这里必须使用绝对路径,使用@/+存放export2Excel的路径
+        console.log("export_json_to_excel",export_json_to_excel)
+        let list = dataTabel;
+        let data = that.formatJson(filterVal, list);
+        export_json_to_excel(tHeader, data, exeName); // 导出的表格名称
+      });
+    },
+    //3.格式转换
+    formatJson(filterVal, jsonData) {
+      return jsonData.map((v) => filterVal.map((j) => v[j]));
+    },
+    onSearch(){
+  
+      if(this.activeName=="first"){
+      //改变执行中条件
+      this.$refs.tab.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
+                      "endTime": sjTime(this.dateValue[1]),
+                      "productClassification": this.inputValue,
+                      "capacityNumber1": this.capacityNumber1,
+                      "carrierName1":this.carrierName,
+                      "gatepostName1":this.gatepostName,
+                      "consigneeCompanyName1": this.consigneeCompanyName1});
+      }
+      if(this.activeName=="second"){
+      //改变已完成条件              
+      this.$refs.tab2.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
+                      "endTime": sjTime(this.dateValue[1]),
+                      "productClassification": this.inputValue,
+                      "capacityNumber1": this.capacityNumber1,
+                      "carrierName1":this.carrierName,
+                      "gatepostName1":this.gatepostName,
+                      "consigneeCompanyName1": this.consigneeCompanyName1});
+      }
+      if(this.activeName=="third"){
+      //改变有异常条件              
+      this.$refs.tab3.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
+                      "endTime": sjTime(this.dateValue[1]),
+                      "productClassification": this.inputValue,
+                      "capacityNumber1": this.capacityNumber1,
+                      "carrierName1":this.carrierName,
+                      "abnormalType":this.exceptionType=="全部类型"?"":this.exceptionType,
+                      "gatepostName1":this.gatepostName,
+                      "consigneeCompanyName1": this.consigneeCompanyName1});
+      }                              
+    },
+
+
+    //other
+    click(row) {
+      console.log(row,"row")
+        this.pathOption.orderNumber=row.orderNumber;
+        this.pathOption.capacityNumber=row.capacityNumber;
+        this.value7=true;
+      // this.$router.push("/offsite/pathView?orderNumber="+row.orderNumber+"&capacityNumber="+row.capacityNumber);
+    },
+    historyclick(row){
+      this.pathOption.orderNumber=row.orderNumber;
+        this.pathOption.capacityNumber=row.capacityNumber;
+        this.value7=true;
+      //this.$router.push("/offsite/pathView?orderNumber="+row.orderNumber+"&capacityNumber="+row.capacityNumber);
+    },
+    allDistanceclick(orderNumber){
+      //this.$router.push("/offsite/inTransitOrderMileage?orderNumber="+orderNumber);
+    
+      this.mileOption.orderNumber=orderNumber;
+      this.value6=true;
+    },
+    inTransitAlarmclick(orderNumber){
+      // this.$router.push("/offsite/inTransitAlarm?orderNumber="+orderNumber);
+      this.alarmOption.orderNumber=orderNumber;
+      this.value5=true;
+    },
+    },
+};
+</script>
+<style lang='scss' scoped>
+.homeworkPath {
+  .top {
+    padding: 20px 30px;
+  }
+}
+</style>

+ 495 - 0
src/views/sale/components/offSiteTransportation/mapTest.vue

@@ -0,0 +1,495 @@
+<template>
+    <div class="container">
+        <div id="amap-container"></div>
+         <div class="controller">
+             <div class="in_transit_information">
+                 <label class="item_details">起点:{{transportDetail.startPointName}}</label>
+                 <br/>
+                 <label class="item_details">终点:{{transportDetail.endPointName}}</label>
+                 <br/>
+             </div>
+             <div class="driving_information">  
+                <label class="item_details">时间:{{runRoute.gtm}}</label>
+                <br/>
+                <label class="item_details">车速:{{runRoute.spd}}千米/小时</label>
+                <br/>
+                <!-- <label class="item_details">当前位置:{{transportDetail.currentPointName}}</label>
+                <br/> -->
+                <!--控制条-->
+                <div class="map-control" v-show="isActual">
+                    <!--播放暂停按钮-->
+                    <Icon v-if="!isPlay" class="play-icon play"  type="ios-play" @click="isPlay=true;play();navgControl(playIcon)"/>
+                    <Icon v-else class="play-icon pause" type="ios-pause" @click="isPlay=false;stop();navgControl('pause')"/>
+                    <Icon class="play-icon quickly"  type="ios-play" @click="addIndex()"/>
+                    <!--已播放时间-->
+                    <!-- <span class="passed-time">{{passedTime}}</span> -->
+                    <!--进度条-->
+                    <div class="mySlider"><Slider class="map-slider" v-model="sliderVal" :tip-format="hideFormat" :step="0.0001"></Slider></div>
+                    <!--倍速-->
+                    <!-- <div class="map-times" @mouseenter="isTimesChoose=true" @mouseleave="isTimesChoose=false">
+                        <div class="times-show">倍速 {{times}}</div>
+                        <div class="choose-box">
+                        <ul >
+                            <li v-for="item in speedList" :key="item.value" :class="{active:times==item.value}" @click="changeSpeed(item.value)">{{item.label}}</li>
+                        </ul>
+                        </div>
+                    </div> -->
+                    <!--结束时间-->
+                    <!-- <span class="end-time">{{totalTime}}</span> -->
+                </div>
+             </div>
+         </div>
+    
+    </div>
+</template>
+
+<script>
+import AMapLoader from '@amap/amap-jsapi-loader';
+import { shallowRef } from '@vue/reactivity'
+import { Loading } from 'element-ui';
+import { lazyAMapApiLoaderInstance } from 'vue-amap';
+import Slider from './slider.vue'
+Vue.use(Slider)
+import AMapJS from "amap-js";
+import Vue from 'vue';
+export default {
+    name: "PathView",
+    props:{
+        orderNumber:'',
+        capacityNumber:'',
+        startTime:'',
+        endTime:'',
+    },
+    setup(){
+        const map = shallowRef(null);
+        return{
+            map,
+        }
+    },
+     watch:{
+        //监听车牌号变化
+        orderNumber:{
+            deep: true,
+            handler(val, oldVal) {
+                console.log(val)
+                this.initData(val);
+            }
+        }
+    },
+    data() {
+        return {
+            ///che
+            isTimesChoose:false,
+            isActual:true,
+            isPlay:true,
+            passedTime:"12:02:10",
+            sliderVal:0,
+            times:1,
+            totalTime:"11",
+            speedList:["1倍数","2倍数","3倍数"],
+            //已行驶轨迹
+            runRoute:
+            {
+                agl: "44",
+                gtm: "2022年03月09日 16:47:24",
+                hgt: "13",
+                lat: "32.906411535084985",
+                lon: "115.76177868692135",
+                mil: "429409.2",
+                spd: "17.0"
+            },
+            point:"",
+            pointNext:"",
+            loading : null,
+            navgtrSpeed:1,
+            //地图中心位置
+            centerPoint:{
+                    pointLat:"",
+                    pointLon:""
+            },
+            //自定义窗体信息
+            ctmarkes:{
+                lat:"33.015888071433764",
+                lon : "115.96995235868168",
+                title:"豫SE8888",
+                details:"安徽省阜阳市颍东区阜阳舜岳水泥公司,西北方向,155.1米"
+            },
+            //运输详情
+            transportDetail:{
+                //车牌号
+                capacityNumber:'',
+                //规划路线
+                estimateRoute:[
+                    {
+                        lat:"33.015888071433764",
+                        lon : "115.96995235868168"
+                    }
+                ],
+                //规划线路
+                estimatePath:[
+                    [
+                        114.03046212985384,
+                        32.49786984660489
+                    ],
+                    
+                ],
+                //已行驶轨迹
+                runRoute:[
+                      {
+                        agl: "44",
+                        gtm: "2022年03月09日 16:47:24",
+                        hgt: "13",
+                        lat: "32.906411535084985",
+                        lon: "115.76177868692135",
+                        mil: "429409.2",
+                        spd: "17.0"
+                    },
+                ],
+                runPath: [
+                    [
+                        114.03922119568348,
+                        32.49746162481379
+                    ],
+                ],
+                //当前位置
+                currentPointName:"中国达州市通川区",
+                //当前位置经纬度
+                currentPoint:{
+                    lat:"",
+                    lon:""
+                },
+                //起点位置
+                startPointName:"中国达州市通川区",
+                //起点位置经纬度
+                startPoint:{
+                    lon:"114.03922119568348",
+                    lat:"32.49746162481379"
+                },
+                //终点位置
+                endPointName:"中国成都萧山",
+                //终点位置经纬度   
+                endPoint:{
+                    lon:"115.96995737755431",
+                    lat:"33.01595479752097"
+                },
+                //自定义标记
+                content:[],
+                //异常位置
+                abnormalLocation:[],
+            
+            },
+            listPath:[
+                
+            ],
+            //组件
+            pathSimplifierIns:{},
+            pathNavigator:{}
+        };
+    },
+    created(){
+        let that=this;
+         that.initData(that.orderNumber)
+    },
+    mounted() {
+        
+    },
+    methods: {
+        geocoder(){
+            AMap.plugin('AMap.Geocoder', function() {
+            var geocoder = new AMap.Geocoder({
+                // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
+                city: '全球'
+            })
+            
+            var lnglat = [116.396574, 39.992706]
+            console.log("fsdaf")
+            geocoder.getAddress(lnglat, function(status, result) {
+                console.log(result)
+                if (status === 'complete' && result.info === 'OK') {
+                    // result为对应的地理位置详细信息
+                    console.log(result)
+                }
+            })
+            })
+        },
+        play(){
+            let that =this;
+            that.pathNavigator.resume();
+        },
+        stop(){
+            let that =this;
+            that.pathNavigator.pause();
+            this.geocoder()
+        },
+        addIndex(){
+            console.log("1123")
+
+            let that =this;
+            let increment=(that.listPath[0].runPath.length*0.1)
+            that.pathNavigator.start(((that.point+increment)%that.listPath[0].runPath.length))
+        },
+        ///che
+        navgControl(){
+
+        },
+        hideFormat(value){
+            let that=this;
+            that.sliderVal=value;
+        },
+        initData(orderNumber){
+            let that=this;
+             that.axios.post("/api/v1/otms/fullPath?orderNumber="+orderNumber).then((res) => {
+                that.listPath=res.data.startAndEndRoutes
+                // res.startAndEndRoutes.forEach((item,index)=>{
+                //     that.transportDetail.estimateRoute=item.estimateRoute;
+                     that.initMap();
+                // });
+            });
+        },
+        endline(){
+            let that=this;
+            that.initPolyline(that.listPath[0].estimatePath,"#FF0000");
+        },
+        //创建起点终点当前点
+        threeMarker(){
+            let that=this;
+            that.listPath.forEach((element,index) => {
+                //开始标记点
+                if(element.startPoint.lon!=''&&element.startPoint.lat!=''){
+                    that.initMarkes(20,35,require('@/assets/img/start.png'),element.startPoint.lon,element.startPoint.lat,'起点');
+                }
+                //结束标记点
+                if(element.endPoint.lon!=''&&element.endPoint.lat!=''){
+                    that.initMarkes(20,35,require('@/assets/img/end.png'),element.endPoint.lon,element.endPoint.lat,'终点');
+                }
+            });
+           
+        },
+        //初始化地图
+        initMap(){
+            lazyAMapApiLoaderInstance.load().then(() => {
+                let that=this;
+                that.map = new AMap.Map("amap-container",{  //设置地图容器id
+                    viewMode:"2D",    //是否为2D地图模式
+                    zoom:10,           //初始化地图级别
+                    center:[105.602725,37.076636], //初始化地图中心点位置
+                });
+                that.initPathSimplifier();
+                that.threeMarker();
+                console.log("that.listPath[0]",that.listPath)
+                that.initCustomMarkes(that.ctmarkes.title+"("+that.listPath[0].miled+")",that.listPath[0].currentPointName,that.listPath[0].currentPoint.lon,that.listPath[0].currentPoint.lat)
+                that.endline();
+            });
+        },
+        initCustomMarkes(title,details,lon,lat){
+             let that=this;
+            //自定义窗体内容
+            var content = [
+                "<div  style='top:1px;width: 180px; background-color: rgba(0, 0, 0, 1);' ><font color='white'>"+title+"</font>",
+                "<div style='background-color:rgba(255, 255, 255, 0.5);'><font color='white'>"+details+"</font></div></div>"
+            ];
+            // 创建 infoWindow 实例	
+            var infoWindow = new AMap.InfoWindow({
+                content: content.join("<br>")  //传入 dom 对象,或者 html 字符串
+            });
+            // 打开信息窗体
+            infoWindow.open(that.map,[lon,lat]);
+        },
+        initPolyline(path,color){
+            let that=this;
+             //预计轨迹
+            var endLine = new AMap.Polyline({
+                map:that.map,
+                path: path,
+                isOutline: true,
+                outlineColor: color,
+                borderWeight: 0,
+                strokeColor: "#FF0000", 
+                strokeOpacity: 1,
+                strokeWeight: 5,
+                // 折线样式还支持 'dashed'
+                strokeStyle: "solid",
+                // strokeStyle是dashed时有效
+                strokeDasharray: [10, 5],
+                lineJoin: 'round',
+                lineCap: 'round',
+                zIndex: 50,
+            })
+            that.map.setFitView([[ endLine ]])
+        },
+        //创建简单的标记
+        initMarkes(weight,height,image,lon,lat,title){
+            let that=this;
+            //图标标记点
+            let pointicon = new AMap.Icon({
+                size: new AMap.Size(weight, height), // 图标尺寸
+                image: image, // Icon的图像
+                imageOffset: new AMap.Pixel(0,0), // 图像相对展示区域的偏移量,适于雪碧图等
+                imageSize: new AMap.Size(weight, height) // 根据所设置的大小拉伸或压缩图片
+            });
+            // 创建一个 Marker 实例:
+            var pointmarker = new AMap.Marker({
+                position: new AMap.LngLat(lon, lat),   // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
+                icon: pointicon, 
+                title: title
+            });
+            // 将创建的点标记添加到已有的地图实例:
+            that.map.add(pointmarker);
+        },
+        //创建轨迹和巡航器
+        initPathSimplifier() {
+            let that=this;
+            // ...你的操作
+            new AMapUI.load(['ui/misc/PathSimplifier'], (PathSimplifier) => {
+                if (!PathSimplifier.supportCanvas) {
+                    alert('当前环境不支持 Canvas!')
+                    return
+                }
+                //创建轨迹和巡航器
+                // 创建组件实例
+                that.pathSimplifierIns = new PathSimplifier({
+                    map: that.map,
+                    zIndex: 100, // 图层叠加顺序
+                    data: that.listPath, // 巡航路径
+                    // 获取巡航路径中的路径坐标数组
+                    getPath: (pathData, pathIndex) => {
+                        return pathData.runPath;
+                    },
+                    //鼠标悬浮停时显示消息
+                    getHoverTitle: function(pathData, pathIndex, pointIndex) {
+                        //返回鼠标悬停时显示的信息
+                        if (pointIndex >= 0) {
+                            if(pathData.runRoute[pointIndex].gtm!=='undefined'){
+                                 //鼠标悬停在某个轨迹节点上
+                                return pathData.runRoute[pointIndex].gtm + ',速度'+ pathData.runRoute[pointIndex].spd+'千米/小时,点:' + pointIndex + '/' + pathData.runPath.length;
+                            }
+                        }
+                    },
+                    //设置轨迹样式
+                    renderOptions: {
+                        //轨迹线的样式
+                        pathLineStyle: {
+                            strokeStyle: 'black',
+                            lineWidth: 6,
+                            dirArrowStyle: true
+                        }
+                    }
+                })
+                // 创建巡航器
+                that.pathNavigator = that.pathSimplifierIns.createPathNavigator(0, {
+                    loop: true, // 是否循环
+                    speed: 40000 ,// 速度(km/h)
+                    pathNavigatorStyle: {
+                        width: 20,
+                        height: 40,
+                        content:PathSimplifier.Render.Canvas.getImageContent( require('@/assets/img/smallcar.png'), onload, onerror),
+                        strokeStyle: null,
+                        fillStyle: null
+                    }
+                })
+                //开启巡航
+                that.pathNavigator.start()
+                
+                //开始事件
+                that.pathNavigator.on("start resume", function() {
+                    // that.navgtr._startTime = Date.now();
+                    // that.navgtr._startDist = this.getMovedDistance();
+                });
+                //暂停
+                that.pathNavigator.on("stop pause", function() {
+                    // that.navgtr._movedTime = Date.now() - that.navgtr._startTime;
+                    // that.navgtr._movedDist = this.getMovedDistance() - that.navgtr._startDist;
+                });
+                that.pathNavigator.on('move', function (data,value) {
+                    that.updateLable(value)
+                });
+            })
+        },
+        updateLable(value){
+            let that=this;
+            that.point=value.dataItem.pointIndex;
+            that.runRoute=value.dataItem.pathData.runRoute[that.point];
+            that.sliderVal=(value.dataItem.pointIndex/value.dataItem.pathData.runRoute.length)*100;
+        },
+        changeSpeed(value){
+            // console.log(value)
+            // let that=this;
+            // that.times=value;
+            
+        },
+        playIcon(){
+            console.log("nihoa")
+        }
+                  
+    }
+};
+</script>
+<style>
+.controller{
+    width: 250px; height: 260px; 
+    background: white;
+   position: absolute;z-index:99;top:0;left:0
+}
+.container{
+    width: 100%;
+	height: 100%;
+    
+}
+.item_details {
+    display: block;
+    margin-top: 20px;
+    position: relative;
+    left: 30px;
+    height: 0px;
+}
+#amap-container {
+    position: relative;
+	width: 100%;
+	height: 100%;
+	overflow: hidden;
+	margin: 0;
+	font-family: "微软雅黑";
+}
+
+
+/* 进度条 */
+.mySlider {
+
+    width: 150px;
+    height: 20px;
+    display: inline-block;
+    position: relative;
+    left: 32px;
+}
+.play {
+    position: relative;
+    left: 28px;
+}
+.quickly
+{
+    float: right;
+    position: relative;
+    left: -20px;
+    top: 10px;
+}
+.pause {
+    position: relative;
+    left: 28px;
+}
+.passed-time{
+    position: relative;
+    left: 5px;
+}
+.end-time{
+    position: relative;
+    left: 5px;
+}
+.map-times {
+    position: relative;
+    background-color: red;
+    width: 40px;
+}
+
+
+
+</style>

+ 90 - 0
src/views/sale/components/offSiteTransportation/slider.vue

@@ -0,0 +1,90 @@
+<template>
+    <div class="slider" ref="slider">
+        <div class="process" :style="{width}"></div>
+        <div class="thunk" ref="trunk" :style="{left}">
+            <div class="block"></div>
+            <div class="tips">
+            <span>{{scale*100}}</span>
+            <i class="fas fa-caret-down" ></i>
+        </div>
+        </div>
+    </div>
+</template>
+<script>
+  /*
+  * min 进度条最小值
+  * max 进度条最大值
+  * v-model 对当前值进行双向绑定实时显示拖拽进度
+  * */
+  export default{
+      name: "slider",
+      props:['min','max','value'],
+      data(){
+        return{
+          slider:null,        //滚动条DOM元素
+          thunk:null,         //拖拽DOM元素
+          per:this.value,     //当前值
+        }
+      },
+      //渲染到页面的时候
+      mounted () {
+        this.slider = this.$refs.slider;
+        this.thunk = this.$refs.trunk;
+        var _this = this;
+        this.thunk.onmousedown = function (e) {
+            var width = parseInt(_this.width);
+            var disX = e.clientX;
+            document.onmousemove = function(e){
+                // value, left, width
+                // 当value变化的时候,会通过计算属性修改left,width
+
+                // 拖拽的时候获取的新width
+                var newWidth = e.clientX - disX + width;
+                // 拖拽的时候得到新的百分比
+                var scale = newWidth / _this.slider.offsetWidth;
+                _this.per = Math.ceil((_this.max - _this.min) * scale + _this.min);
+                _this.per = Math.max(_this.per,_this.min);
+                _this.per = Math.min(_this.per,_this.max);
+                _this.$emit('input', _this.per)
+            }
+            document.onmouseup = function(){
+                document.onmousemove = document.onmouseup = null;
+            }
+            return false;
+        }
+      },
+      computed:{
+        // 设置一个百分比,提供计算slider进度宽度和trunk的left值
+        // 对应公式为  当前值-最小值/最大值-最小值 = slider进度width / slider总width
+        // trunk left =  slider进度width + trunk宽度/2
+        scale(){
+          return (this.per - this.min) / (this.max - this.min);
+        },
+        width(){
+          if(this.slider){
+            return this.slider.offsetWidth * this.scale + 'px';
+          }else{
+            return 0 + 'px'
+          }
+        },
+       left(){
+          if(this.slider){
+            return this.slider.offsetWidth * this.scale -  this.thunk.offsetWidth/2  + 'px';
+          }else{
+            return 0 + 'px'
+          }
+        }
+      },
+  }
+</script>
+<style>
+  .box{margin:100px auto 0;width:80%}
+  .clear:after{content:'';display:block;clear:both}
+  .slider{position:relative;margin:20px 0;width:400px;height:10px;background:#e4e7ed;border-radius:5px;cursor:pointer}
+  .slider .process{position:absolute;left:0;top:0;width:112px;height:10px;border-radius:5px;background:#409eff}
+  .slider .thunk{position:absolute;left:100px;top:-7px;width:20px;height:20px}
+  .slider .block{width:20px;height:20px;border-radius:50%;border:2px solid #409eff;background:rgba(255,255,255,1);transition:.2s all}
+  .slider .tips{position:absolute;left:-7px;bottom:30px;min-width:15px;text-align:center;padding:4px 8px;background:#000;border-radius:5px;height:24px;color:#fff}
+  .slider .tips i{position:absolute;margin-left:-5px;left:50%;bottom:-9px;font-size:16px;color:#000}
+  .slider .block:hover{transform:scale(1.1);opacity:.6}
+</style>

+ 6 - 2
src/views/sale/router/index.js

@@ -60,7 +60,7 @@ import smsResult from '../components/transport_excute/outFactory/smsResult.vue'
 import arrivalPhoto from '../components/transport_excute/tms-offsite/arrivalPhoto.vue'
 import arrivalResult from '../components/transport_excute/tms-offsite/arrivalResult.vue'
 import distance from '../components/transport_excute/tms-offsite/distance.vue'
-import inTransit from '../components/transport_excute/tms-offsite/inTransit.vue'
+// import inTransit from '../components/transport_excute/offSiteTransportation/inTransit.vue'
 import inTransitAbnormal from '../components/transport_excute/tms-offsite/inTransitAbnormal.vue'
 import inTransitAlarm from '../components/transport_excute/tms-offsite/inTransitAlarm.vue'
 import inTransitOrderMileage from '../components/transport_excute/tms-offsite/inTransitOrderMileage.vue'
@@ -98,6 +98,10 @@ import bmsTruckInvoice from '../components/transportFreight/saleTruckSettlement/
 import bmsTruckStatement from '../components/transportFreight/saleTruckSettlement/bmsTruckStatement.vue'
 import getBmsTruckStatementOrder from '../components/transportFreight/saleTruckSettlement/getBmsTruckStatementOrder.vue'
 import getTransportResult from '../components/transportFreight/saleTruckSettlement/getTransportResult.vue'
+import mapTest from '../components/offSiteTransportation/mapTest.vue'
+import inTransit from '../components/offSiteTransportation/inTransit.vue'
+//测试数据
+
 Vue.use(Router)
 const constantRouterMap = [
 	{
@@ -200,10 +204,10 @@ const constantRouterMap = [
 		{path: 'bmsTruckStatement', name: 'bmsTruckStatement', meta: {code: 'xtpzgl-yhgl'}, component: bmsTruckStatement},
 		{path: 'getBmsTruckStatementOrder/:statementId', name: 'getBmsTruckStatementOrder', meta: {code: 'xtpzgl-yhgl'}, component: getBmsTruckStatementOrder},
 		{path: 'getTransportResult/:orderId', name: 'getTransportResult', meta: {code: 'xtpzgl-yhgl'}, component: getTransportResult},
+		{path: 'mapTest', name: 'mapTest', meta: {code: 'xtpzgl-yhgl'}, component: mapTest},
 	  ]
 	}
   ];
-  
   const router = new Router({
 	routes: constantRouterMap
   })