qingyiay
2023-05-15 6087ba7d24f2353c2d01a5e5a384d5a20f97a19b
增加路线规划,样式修改
15个文件已修改
4个文件已添加
1个文件已删除
2390 ■■■■ 已修改文件
App.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages.json 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/customer-page/customer-index/fayunPlanDetails/fayunPlanMore/fayunPlanMore.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/driver-page/driver-index/driver-index.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/public-page/faYunstatisticsDetails/faYunstatisticsDetails.vue 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/public-page/forward/forward.vue 296 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/public-page/mapRoute/mapRoute.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/public-page/message/message.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar-page/index-tabbar/index-tabbar.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/image/banner/location.png 补丁 | 查看 | 原始文档 | blame | 历史
static/image/banner/notice.png 补丁 | 查看 | 原始文档 | blame | 历史
store/index.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/amap-wx.130.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/qqmap-wx-jssdk.js 1122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
App.vue
@@ -1,19 +1,22 @@
<script>
import { mapState, mapMutations } from 'vuex';
export default {
    onShow() {},
    methods: {}
    // created() {
    //     uni.loadFontFace({
    //         family: 'siYuanLight', // 字体名称,可以自定义
    //         source: 'url("/utils/fonts/siyuan.OTF")', // 字体文件路径
    //         success() {
    //             console.log('字体加载成功');
    //         },
    //         fail() {
    //             console.log('字体加载失败');
    //         }
    //     });
    // }
    onHide() {
        console.log('appvue隐藏后台');
        this.changeisconnect(false);
        if (!this.globalisconnect) {
            uni.switchTab({
                url: '/pages/tabbar-page/index-tabbar/index-tabbar'
            });
        }
    },
    methods: {
        ...mapMutations(['changeisconnect'])
    },
    computed: {
        ...mapState(['globalisconnect'])
    }
};
</script>
@@ -22,7 +25,7 @@
@import '@/uni_modules/uview-ui/index.scss';
@font-face {
    font-family: siYuanLight;
    src: url('https://mx.jzeg.cn:9095/appimg/fonts/siyuan.OTF');
    src: url('https://mx.jzeg.cn:9095/appimg/fonts/siyuannormal.OTF');
}
@font-face {
    font-family: weighting;
@@ -31,8 +34,4 @@
body {
    font-family: siYuanLight, sans-serif;
}
// @font-face {
//     font-family: 'weighting';
//     src: url('./utils/fonts/weighing.TTF');
// }
</style>
manifest.json
@@ -53,7 +53,7 @@
        "appid": "wx4a62fc1684c429a9",
        "permission": {
            "scope.userFuzzyLocation": {
                "desc": "你的位置信息将用于小程序位置接口的效果展示"
                "desc": "你的位置信息将用于小程序定位"
            }
        },
        "optimization": {
pages.json
@@ -189,17 +189,15 @@
                "enablePullDownRefresh": false
            }
        }, {
            "path": "pages/customer-page/customer-my/userMange/userManageEdit/userManageEdit",
            "style": {
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false
            }
        }
        ,{
            "path" : "pages/customer-page/customer-my/userMange/userManageEdit/userManageEdit",
            "style" :
            {
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false
            }
        }
    ],
    ],
    "subPackages": [{
            "root": "pages/register",
            "pages": [{
@@ -215,7 +213,8 @@
                "path": "forward/forward",
                "style": {
                    "navigationBarTitleText": "转发",
                    "enablePullDownRefresh": false
                    "enablePullDownRefresh": false,
                    "navigationStyle": "custom"
                }
            }, {
                "path": "message/message",
@@ -234,11 +233,20 @@
            }, {
                "path": "faYunstatisticsDetails/faYunstatisticsDetails",
                "style": {
                    "navigationBarTitleText": "",
                    "navigationBarTitleText": "发运详情",
                    "enablePullDownRefresh": false
                }
            }]
            }    ,{
                    "path" : "mapRoute/mapRoute",
                    "style" :
                {
                    "navigationBarTitleText": "",
                    "enablePullDownRefresh": false
                }
                }
            ]
        }, {
            "root": "pages/driver-page/appointment",
            "pages": [{
pages/customer-page/customer-index/fayunPlanDetails/fayunPlanDetails.vue
@@ -7,7 +7,10 @@
                    <view class="top-title">发运计划详情</view>
                </view>
                <view class="middle-container">
                    <view class="dept-name" v-show="deptName">{{ deptName }}({{ coalName }})</view>
                    <view class="dept-name">
                        {{ deptName }}
                        <text v-show="deptName">({{ coalName }})</text>
                    </view>
                    <view class="dept-num">
                        <text
                            style="font-size: 46rpx;
@@ -54,7 +57,7 @@
                </view>
            </view>
            <view class="block-top">
                <combined-title title="提煤单详情"></combined-title>
                <combined-title title="提煤单历史"></combined-title>
                <view class="total">
                    总净重
                    <text>{{ total || 0 }}</text>
@@ -64,7 +67,7 @@
                <view class="empty-pointer" v-if="!yyDailyList">暂无更多数据</view>
                <view class="main-block">
                    <view class="main-container">
                        <view class="main-container_content" v-for="(item, index) in yyDailyList" :key="index" @click="showMore(index)">
                        <view class="main-container_content" v-for="(item, index) in yyDailyList" :key="index" @click="showMore(item)">
                            <view class="arrow-icon"><u-icon name="arrow-right" size="30" color="#999999"></u-icon></view>
                            <view class="divider"><u-divider></u-divider></view>
                            <view class="first-line">
@@ -127,9 +130,9 @@
                delta: 1
            });
        },
        showMore(index) {
        showMore(item) {
            uni.navigateTo({
                url: `/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanMore/fayunPlanMore?orderPlanId=${this.orderPlanId}&index=${index}`
                url: `/pages/customer-page/customer-index/fayunPlanDetails/fayunPlanMore/fayunPlanMore?orderPlanId=${this.orderPlanId}&id=${item.id}`
            });
        },
        init() {
@@ -214,6 +217,7 @@
            position: relative;
            top: vww(54);
            .dept-name {
                min-width: 100rpx;
                font-size: 32rpx;
                font-weight: normal;
                color: #ffffff;
pages/customer-page/customer-index/fayunPlanDetails/fayunPlanMore/fayunPlanMore.vue
@@ -23,25 +23,25 @@
                <view class="body-container">
                    <view class="container-block">
                        <view class="">皮重</view>
                        <view class="">{{ yyDailyList.skin || '' }}</view>
                        <view class="">{{ yyDailyList.skin || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">毛重</view>
                        <view class="">{{ yyDailyList.hair || '' }}</view>
                        <view class="">{{ yyDailyList.hair || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">净重</view>
                        <view class="">{{ yyDailyList.clean || '' }}</view>
                        <view class="">{{ yyDailyList.clean || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">订单剩余量</view>
                        <view class="">{{ yyDailyList.allowance || '' }}</view>
                        <view class="">{{ yyDailyList.allowance || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
@@ -57,6 +57,27 @@
                    </view>
                </view>
            </view>
            <view class="origin-info" v-if="yyDailyList.orderType == '外购' || yyDailyList.orderType == '内购' || yyDailyList.orderType == '转出'">
                <combined-title title="原发信息"></combined-title>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">皮重</view>
                        <view class="">{{ yyDailyList.skinTwo || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">毛重</view>
                        <view class="">{{ yyDailyList.hairTwo || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">净重</view>
                        <view class="">{{ yyDailyList.cleanTwo || 0 }}</view>
                    </view>
                </view>
            </view>
        </view>
    </view>
</template>
@@ -69,15 +90,14 @@
        combinedTitle
    },
    onLoad(params) {
        this.orderPlanId = params.orderPlanId;
        this.index = params.index;
        this.id = params.id;
    },
    onShow() {
        this.GetOrderPlanDetail();
    },
    data() {
        return {
            orderPlanId: '',
            id: '',
            yyDailyList: {},
            orderPlanDetail: {},
            coalStatus: ['领取', '预约', '签到', '入场', '称皮', '称毛', '离场', '入磅房', '出磅房', '入煤仓', '出煤仓', '放空', '作废', '入场申请', '进入场院'],
@@ -89,10 +109,10 @@
            uni.showLoading({
                title: '加载中...'
            });
            this.$reqGet('xiangqingList', { orderPlanId: this.orderPlanId }).then(res => {
            this.$reqGet('getTakeCoal', { takeCoalId: this.id }).then(res => {
                if (res.code == 0) {
                    this.orderPlanDetail = res.data;
                    this.yyDailyList = res.data.yyDailyList.filter((v, i) => i == this.index)[0];
                    this.yyDailyList = res.data;
                    console.log(this.yyDailyList);
                    uni.hideLoading();
                } else {
@@ -113,7 +133,9 @@
.main {
    width: 100%;
    margin-top: vww(10);
    @include flex justify-content: center;
    color: #303030;
    @include flex;
    flex-direction: column;
    .main-body {
        width: 690rpx;
        height: 1062rpx;
@@ -123,6 +145,7 @@
        @include flex flex-direction: column;
        align-items: flex-start;
        .body-container {
            color: #303030;
            width: 100%;
            height: vww(56);
            border-bottom: vww(1) solid #d6d6d6;
@@ -138,27 +161,27 @@
            border-bottom: none;
        }
    }
}
.uni-table {
    .uni-table-tr {
        padding: 0;
        border: vww(1) solid #c6c6c6;
        .uni-table-th {
            font-size: vww(14);
            height: vww(30);
            line-height: vww(30);
            padding: vww(5) vww(10);
            color: #111111;
            font-weight: 500;
            background: #e2e2e2;
        }
        .uni-table-td {
            font-size: vww(14);
            font-weight: 400;
            height: vww(30);
            line-height: vww(30);
            padding: vww(5) vww(10);
            color: #111111;
    .origin-info {
        width: 690rpx;
        min-height: 300rpx;
        margin-top: 20rpx;
        margin-bottom: 20rpx;
        background: #ffffff;
        box-shadow: 0rpx 0rpx 14rpx 0rpx rgba(73, 120, 240, 0.14), 0rpx 7rpx 45rpx 0rpx rgba(73, 120, 240, 0.12);
        border-radius: 20rpx;
        @include flex;
        flex-direction: column;
        align-items: flex-start;
        .body-container {
            width: 100%;
            height: vww(56);
            border-bottom: vww(1) solid #d6d6d6;
            @include flex;
            justify-content: center;
            .container-block {
                width: 94%;
                @include flex;
            }
        }
    }
}
pages/customer-page/customer-my/faYunstatistics/faYunstatistics.vue
@@ -40,7 +40,19 @@
                        </view>
                        <view class="card-main" v-for="(value, i) in item.taskCoalList" :key="i" @click="faYunDetail(value.id)">
                            <view class="first-line">
                                <view class="dispatch-receive">
                                <view class="main-information">
                                    <view class="sign">装</view>
                                    <view class="filedname">
                                        <text v-if="value.orderType == '外销' || value.orderType == '内销' || value.orderType == '转出'">{{ value.deptName.slice(0, 16) }}</text>
                                        <text v-else-if="value.orderType == '外购' || value.orderType == '内购' || value.orderType == '转入'">
                                            {{ value.customerName.slice(0, 16) }}
                                        </text>
                                        <text v-show="value.deptName.length >= 15 || value.customerName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="main-divider"></view>
                                <view class="point-number">{{ value.clean.toFixed(2) || 0 }}</view>
                                <!-- <view class="dispatch-receive">
                                    <view v-if="value.orderType == '外销' || value.orderType == '内销' || value.orderType == '转出'" class="container">
                                        <view class="dispatch">{{ value.deptName }}</view>
                                        <view class="receive-icon"></view>
@@ -51,8 +63,22 @@
                                        <view class="receive-icon"></view>
                                        <view class="receive">{{ value.deptName }}</view>
                                    </view>
                                </view> -->
                                <!-- <view class="point-number">{{ value.clean.toFixed(2) || 0 }}</view> -->
                            </view>
                            <view class="first-extra">
                                <view class="main-information">
                                    <view class="sign">卸</view>
                                    <view class="filedname">
                                        <text v-if="value.orderType == '外销' || value.orderType == '内销' || value.orderType == '转出'">
                                            {{ value.customerName.slice(0, 16) }}
                                        </text>
                                        <text v-else-if="value.orderType == '外购' || value.orderType == '内购' || value.orderType == '转入'">
                                            {{ value.deptName.slice(0, 16) }}
                                        </text>
                                        <text v-show="value.customerName.length >= 15 || value.deptName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="point-number">{{ value.clean.toFixed(2) || 0 }}</view>
                            </view>
                            <view class="second-line">
                                <view class="coal-name">
@@ -600,6 +626,13 @@
    justify-content: space-between;
    align-items: center;
}
@mixin firstLine {
    width: 80%;
    height: vww(68);
    margin: vww(10) vww(16) 0 0;
    display: flex;
    justify-content: space-between;
}
::v-deep .toggle-button .u-button {
    width: vww(40);
}
@@ -752,7 +785,7 @@
                }
                .card-main {
                    width: 100%;
                    height: vww(120);
                    height: vww(150);
                    border-bottom: vww(1) solid #d6d6d6;
                    margin-top: vww(12);
                    padding-bottom: vww(12);
@@ -760,45 +793,71 @@
                    @include flex flex-direction: column;
                    align-items: flex-start;
                    .first-line {
                        width: 94%;
                        width: 80%;
                        height: vww(32);
                        color: #303030;
                        display: flex;
                        justify-content: space-between;
                        align-items: center;
                        .dispatch-receive {
                            width: 90%;
                        .main-information {
                            width: 88%;
                            height: vww(28);
                            display: flex;
                            justify-content: space-between;
                            justify-content: flex-start;
                            align-items: center;
                            margin-right: vww(12);
                            .container {
                                width: 100%;
                                display: flex;
                                justify-content: space-between;
                                align-items: center;
                            .sign {
                                width: vww(28);
                                height: vww(28);
                                line-height: vww(28);
                                text-align: center;
                                background: url('https://mx.jzeg.cn:9095/appimg/image/banner/blueblock.png') no-repeat;
                                background-size: contain;
                                font-size: 30rpx;
                                font-weight: 400;
                                color: #ffffff;
                                margin-right: vww(20);
                            }
                            .receive-icon {
                                width: 62rpx;
                                height: 14rpx;
                                border-bottom: 3px solid #275fa5;
                                position: relative;
                                &:after {
                                    content: '';
                                    position: absolute;
                                    width: 3px;
                                    height: 10px;
                                    background-color: #275fa5;
                                    right: 0;
                                    transform: rotate(-45deg);
                                }
                            }
                        }
                        .main-divider {
                            width: 548rpx;
                            height: 1rpx;
                            background: #e3e3e3;
                            position: absolute;
                            top: 80rpx;
                            left: vww(50);
                        }
                        .point-number {
                            width: 20%;
                            font-size: 40rpx;
                            font-weight: 400;
                            color: #f81414;
                            position: absolute;
                            right: -10rpx;
                            display: flex;
                            flex-wrap: wrap;
                        }
                    }
                    .first-extra {
                        @include firstLine;
                        height: vww(32);
                        .main-information {
                            width: 100%;
                            height: vww(28);
                            display: flex;
                            justify-content: flex-start;
                            align-items: center;
                            .sign {
                                width: vww(28);
                                height: vww(28);
                                line-height: vww(28);
                                text-align: center;
                                background: url('https://mx.jzeg.cn:9095/appimg/image/banner/redblock.png') no-repeat;
                                background-size: contain;
                                font-size: 30rpx;
                                font-weight: 400;
                                color: #ffffff;
                                margin-right: vww(20);
                            }
                        }
                    }
                    .second-line {
pages/driver-page/driver-index/bill-of-lading-details/bill-of-lading-details.vue
@@ -19,7 +19,7 @@
                            style="background: url('https://mx.jzeg.cn:9095/appimg/image/banner/statusbutton.png') no-repeat;
                                        background-size: cover;"
                        >
                            {{ coalStatus[coalDetailsData.status] }}
                            {{ coalStatus[coalDetailsData.status] || '' }}
                        </view>
                    </view>
                    <view class="time">
@@ -27,7 +27,7 @@
                        <view class="send-date">{{ coalDetailsData.sendDate }}</view>
                    </view>
                    <view class="coal-code">提煤单编号:&nbsp;&nbsp;{{ coalDetailsData.code || '' }}</view>
                    <view class="order-code">订单编号:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ coalDetailsData.orderCode || '' }}</view>
                    <view class="order-code">订单编号:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ coalDetailsData.orderCode || '' }}</view>
                    <view class="weigh-item">
                        <view class="item">
                            <view class="concrete" style="background: url('https://mx.jzeg.cn:9095/appimg/image/banner/skin.png') no-repeat;background-size: cover;">皮</view>
@@ -58,7 +58,7 @@
                    <u-button text="入场申请" type="primary" plain @click="rcsqClick" shape="circle"></u-button>
                </view>
                <view class="bottom-button">
                    <u-button text="放空" type="primary" plain @click="evacuation" throttleTime="500" shape="circle"></u-button>
                    <u-button text="放空" type="primary" plain @click="evacuation" throttleTime="500" shape="circle" :disabled="!isEvacuation"></u-button>
                    <u-button text="呼叫客服" type="primary" plain @click="callCustomerService" shape="circle"></u-button>
                </view>
            </view>
@@ -163,6 +163,10 @@
            let date = time.getDate();
            date = date < 10 ? '0' + date : date;
            return `${year}-${month}-${date}`;
        },
        //
        isEvacuation() {
            return this.coalDetailsData.hair == 0 || this.coalDetailsData.skin == 0;
        }
    },
    methods: {
pages/driver-page/driver-index/bill-of-lading-details/coal-pick-up-bill/coal-pick-up-bill.vue
@@ -75,39 +75,43 @@
            color: #896227;
        }
        &-coalTwo {
            width: 84%;
            margin-top: 20%;
            margin: 20% auto 0;
            font-size: vww(20);
            font-weight: 700;
            text-align: center;
            color: #2e363f;
            view:nth-child(2) {
                margin-top: vww(15);
                font-size: 40px;
                font-size: 30px;
            }
            view:nth-child(3) {
                margin-top: vww(15);
                font-size: 40px;
                font-size: 30px;
            }
            view:nth-child(4) {
                margin-top: vww(15);
                font-size: 40px;
                font-size: 30px;
            }
        }
        &-coalThree {
            margin-top: vww(46);
            margin-top: vww(15);
            font-size: vww(18);
            font-weight: 700;
            text-align: center;
            color: #2e363f;
            view:nth-child(2) {
                margin-top: vww(8);
                margin-top: vww(15);
            }
        }
        &-coalFour {
            display: flex;
            justify-content: center;
            align-items: center;
            margin-top: vww(78);
            position: absolute;
            bottom: 161rpx;
            left: 42.5%;
            image {
                width: vww(52);
                height: vww(52);
pages/driver-page/driver-index/bill-of-lading-details/weighingDevice/weighingDevice.vue
@@ -39,21 +39,35 @@
                <view class="first-line"><combined-title title="原发信息"></combined-title></view>
                <view class="second-line">
                    <view class="label-text" :class="{ focusClass: isfocus1 }">皮重</view>
                    <view class="input-container" :class="{ inputClass: isfocus1 }">
                        <u--input placeholder="请输入皮重" border="surround" v-model="weighData.coalContactSkin" @focus="inputFocus(1)" @blur="inputBlur"></u--input>
                    <view class="input-container" :class="{ inputClass: isfocus1, disabledClass: isInputOrigin }">
                        <u--input
                            placeholder="请输入皮重"
                            border="surround"
                            v-model="weighData.coalContactSkin"
                            @focus="inputFocus(1)"
                            @blur="inputBlur"
                            :disabled="isInputOrigin"
                        ></u--input>
                    </view>
                    <view class="unit" :class="{ focusClass: isfocus1 }">吨</view>
                </view>
                <view class="second-line">
                    <view class="label-text" :class="{ focusClass: isfocus2 }">毛重</view>
                    <view class="input-container" :class="{ inputClass: isfocus2 }">
                        <u--input placeholder="请输入毛重" border="surround" v-model="weighData.coalContactHair" @focus="inputFocus(2)" @blur="inputBlur"></u--input>
                    <view class="input-container" :class="{ inputClass: isfocus2, disabledClass: isInputOrigin }">
                        <u--input
                            placeholder="请输入毛重"
                            border="surround"
                            v-model="weighData.coalContactHair"
                            @focus="inputFocus(2)"
                            @blur="inputBlur"
                            :disabled="isInputOrigin"
                        ></u--input>
                    </view>
                    <view class="unit" :class="{ focusClass: isfocus2 }">吨</view>
                </view>
                <view class="second-line">
                    <view class="label-text">净重</view>
                    <view class="input-container"><u--input placeholder="请输入净重" border="surround" v-model="coalContactClean"></u--input></view>
                    <view class="input-container"><u--input placeholder="净重" border="surround" v-model="coalContactClean" :disabled="isInputOrigin"></u--input></view>
                    <view class="unit">吨</view>
                </view>
            </view>
@@ -75,7 +89,7 @@
                </view>
            </view>
        </view>
        <view v-else style="width: 100%;height: vww(20);"></view>
        <view v-else style="width: 100%;height: 40rpx;"></view>
        <view class="bottom-block">
            <view class="block-main">
                <view class="main-information">
@@ -119,14 +133,14 @@
            <u-button
                type="primary"
                text="确定称重"
                :disabled="realTimeWeigh == 0 || globalinfraredStatus || isweigh"
                :disabled="realTimeWeigh == 0 || globalinfraredStatus || isweigh || isInputOrigin"
                :loading="isConfirmWeighLoading"
                loadingText="确认"
                @click="confirmWeigh"
            ></u-button>
            <u-button type="primary" text="返回加减吨" :disabled="addAndSubtractCoalDisabled" @click="addAndSubtractCoal" class="jiajian"></u-button>
            <u-button type="primary" text="返回加减吨" :disabled="addAndSubtractCoalDisabled" @click="addAndSubtractCoal" class="jiajian" v-if="outBuy"></u-button>
        </view>
        <view class="four" v-if="weighList.orderType !== '外购'">如您需要调整装载货品吨数,请点击返回加减吨</view>
        <!-- <view class="four" v-if="weighList.orderType !== '外购'">如您需要调整装载货品吨数,请点击返回加减吨</view> -->
        <!-- 放空弹窗 -->
        <view class="evacuationModal">
            <u-modal
@@ -179,6 +193,8 @@
                coalContactHair: 0,
                coalContactSkin: 0
            },
            // 是否填写原发信息
            isInputOrigin: false,
            takeCoalId: null,
            weighHouseCode: '',
            isConfirmWeighLoading: false, //确定称重按钮
@@ -207,7 +223,9 @@
            coalContactSkin: '',
            // 聚焦时改变样式
            isfocus1: false,
            isfocus2: false
            isfocus2: false,
            // 外购第一次称毛重不需要加减吨
            outBuy: true
        };
    },
    watch: {
@@ -239,11 +257,11 @@
        // 监听重量变化
        globalweigh: {
            handler(v) {
                // this.weighData.weigh = this.realTimeWeigh = v;
                // console.log(this.realTimeWeigh, '真实重量改变了');
                setTimeout(() => {
                    this.weighData.weigh = this.realTimeWeigh = v;
                }, 0);
                this.weighData.weigh = this.realTimeWeigh = v;
                console.log(this.realTimeWeigh, '真实重量改变了');
                // setTimeout(() => {
                //     this.weighData.weigh = this.realTimeWeigh = v;
                // }, 0);
            },
            deep: true,
            immediate: true
@@ -299,8 +317,16 @@
                    this.weighData.carNo = res.data.carNo;
                    this.weighData.tmCode = res.data.code;
                    this.weighData.filedId = res.data.filedId;
                    if (this.weighList.orderType == '外购' && this.weighList.hair == 0) {
                    this.weighData.coalContactHair = res.data.hairTwo ? res.data.hairTwo : 0;
                    this.weighData.coalContactSkin = res.data.skinTwo ? res.data.skinTwo : 0;
                    if (this.weighList.orderType == '外购') {
                        this.firstHairCustomernameShow = true;
                        if (this.weighList.hair == 0) {
                            this.outBuy = false;
                        }
                    }
                    if (this.weighData.coalContactHair > 0 && this.weighData.coalContactSkin > 0) {
                        this.isInputOrigin = true;
                    }
                }
            });
@@ -493,6 +519,9 @@
                    box-shadow: 0rpx 5rpx 13rpx 0rpx rgba(73, 95, 252, 0.6) !important;
                    border-radius: 12rpx !important;
                }
                .isInputOrigin {
                    background-color: #f4f4fc;
                }
                .input-container {
                    border: 2px solid #c5c5c5;
                    box-shadow: 0rpx 5rpx 13rpx 0rpx #c5c5c5;
@@ -593,8 +622,9 @@
        }
    }
    .four {
        margin: vww(10) auto;
        flex: 0.5;
        width: 100%;
        margin-top: vww(5);
        text-align: center;
    }
}
.secondary-confirmation__main {
pages/driver-page/driver-index/driver-index.vue
@@ -2,41 +2,39 @@
    <view class="">
        <view class="driver-index">
            <view class="driver-index-body">
                <!-- <combined-title title="待领取"></combined-title> -->
                <!-- <u-empty
                    mode="data"
                    icon="http://cdn.uviewui.com/uview/empty/data.png"
                    textSize="30"
                    iconSize="1000"
                    v-if="driverBillOfLoadingData.list1 ? (driverBillOfLoadingData.list1.length == 0 ? true : false) : true"
                ></u-empty> -->
                <!-- 待领取提煤单 -->
                <view class="wait-collection" style="background: url('https://mx.jzeg.cn:9095/appimg/image/banner/diverbanner.png') no-repeat;background-size:contain"></view>
                <view class="collection-form">
                    <view class="collection-form-item" v-for="(item, index) in driverBillOfLoadingData.list1" :key="index">
                        <view class="first-line">
                            <view class="dispatch-receive">
                                <view v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'" class="container">
                                    <view class="dispatch">{{ item.deptName || '' }}</view>
                                    <view class="receive-icon"></view>
                                    <view class="receive">{{ item.customerNameCopy || '' }}}</view>
                                </view>
                                <view v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'" class="container">
                                    <view class="dispatch">{{ item.customerNameCopy || '' }}</view>
                                    <view class="receive-icon"></view>
                                    <view class="receive">{{ item.deptName || '' }}}</view>
                            <view class="main-information">
                                <view class="sign">装</view>
                                <view class="filedname">
                                    <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.deptName.slice(0, 16) }}</text>
                                    <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">
                                        {{ item.customerNameCopy.slice(0, 16) }}
                                    </text>
                                    <text v-show="item.deptName.length >= 15 || item.customerNameCopy.length >= 15">...</text>
                                </view>
                            </view>
                            <view class="main-divider"></view>
                            <view class="point-number">
                                <text class="residue">{{ item.carNum - item.taskNum }}</text>
                                <text>/{{ item.carNum }}</text>
                            </view>
                        </view>
                        <view class="first-extra">
                            <view class="main-information">
                                <view class="sign">卸</view>
                                <view class="filedname">
                                    <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.customerNameCopy.slice(0, 16) }}</text>
                                    <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.deptName.slice(0, 16) }}</text>
                                    <text v-show="item.customerNameCopy.length >= 15 || item.deptName.length >= 15">...</text>
                                </view>
                            </view>
                        </view>
                        <view class="second-line">
                            <view class="coal-name">{{ item.coalName }}</view>
                            <!-- <view class="black-block"><view class="black-bar"></view></view>
                            <view class="coal-type">{{ item.orderType }}</view> -->
                        </view>
                        <view class="third-line">
                            <view class="time-icon"><u-icon name="clock" color="#515151" size="40"></u-icon></view>
@@ -67,12 +65,15 @@
                                <view class="main-information">
                                    <view class="sign">装</view>
                                    <view class="filedname">
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.deptName }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.customerName }}</text>
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.deptName.slice(0, 16) }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">
                                            {{ item.customerName.slice(0, 16) }}
                                        </text>
                                        <text v-show="item.deptName.length >= 15 || item.customerName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="main-divider"></view>
                                <view class="map-icon">
                                <view class="map-icon" @click.stop="skipMap(item)">
                                    <view><u-icon name="map" color="#4978F0" size="40"></u-icon></view>
                                </view>
                            </view>
@@ -80,11 +81,12 @@
                                <view class="main-information">
                                    <view class="sign">卸</view>
                                    <view class="filedname">
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.customerName }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.deptName }}</text>
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.customerName.slice(0, 16) }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.deptName.slice(0, 16) }}</text>
                                        <text v-show="item.deptName.length >= 15 || item.customerName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="map-icon">
                                <view class="map-icon" @click.stop="skipMap(item)">
                                    <view><u-icon name="map" color="#4978F0" size="40"></u-icon></view>
                                </view>
                            </view>
@@ -119,12 +121,15 @@
                                <view class="main-information">
                                    <view class="sign">装</view>
                                    <view class="filedname">
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.deptName }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.customerName }}</text>
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.deptName.slice(0, 16) }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">
                                            {{ item.customerName.slice(0, 16) }}
                                        </text>
                                        <text v-show="item.deptName.length >= 15 || item.customerName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="main-divider"></view>
                                <view class="map-icon">
                                <view class="map-icon" @click.stop="skipMap(item)">
                                    <view><u-icon name="map" color="#4978F0" size="40"></u-icon></view>
                                </view>
                            </view>
@@ -132,11 +137,12 @@
                                <view class="main-information">
                                    <view class="sign">卸</view>
                                    <view class="filedname">
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.customerName }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.deptName }}</text>
                                        <text v-if="item.orderType == '外销' || item.orderType == '内销' || item.orderType == '转出'">{{ item.customerName.slice(0, 16) }}</text>
                                        <text v-else-if="item.orderType == '外购' || item.orderType == '内购' || item.orderType == '转入'">{{ item.deptName.slice(0, 16) }}</text>
                                        <text v-show="item.deptName.length >= 15 || item.customerName.length >= 15">...</text>
                                    </view>
                                </view>
                                <view class="map-icon">
                                <view class="map-icon" @click.stop="skipMap(item)">
                                    <view><u-icon name="map" color="#4978F0" size="40"></u-icon></view>
                                </view>
                            </view>
@@ -192,17 +198,21 @@
            qiangDanOrderPlanId: null,
            fleetId: '',
            xsUserId: '',
            customerId: '',
            // 集成高德地图
            amapPlugin: null,
            key: 'e3106700a6225e6a25727d3a41fa54c5',
            addressName: ''
            customerId: ''
        };
    },
    onShow() {
        this.init();
    },
    methods: {
        // 跳转地图
        skipMap(val) {
            uni.navigateTo({
                url: `/pages/public-page/mapRoute/mapRoute?customerId=${val.customerId}&filedId=${val.filedId}&orderType=${val.orderType}${
                    val.toFiledId ? `&toFiledId=${val.toFiledId}` : ''
                }`
            });
        },
        init() {
            this.qiangDanList();
        },
@@ -362,7 +372,7 @@
            top: vww(-120);
            .collection-form-item {
                width: vww(345);
                height: vww(150);
                height: vww(185);
                margin-top: vww(5);
                background: #ffffff;
                box-shadow: 4rpx 6rpx 25rpx 0rpx rgba(73, 120, 240, 0.15);
@@ -377,38 +387,39 @@
                    margin: vww(18) vww(16) 0 vww(16);
                    display: flex;
                    justify-content: space-between;
                    .dispatch-receive {
                        width: 70%;
                    .main-information {
                        width: 88%;
                        height: vww(28);
                        display: flex;
                        justify-content: space-between;
                        justify-content: flex-start;
                        align-items: center;
                        .container {
                            width: 100%;
                            display: flex;
                            justify-content: space-between;
                            align-items: center;
                        }
                        .receive-icon {
                            width: 62rpx;
                            height: 14rpx;
                            border-bottom: 3px solid #275fa5;
                            position: relative;
                            &:after {
                                content: '';
                                position: absolute;
                                width: 3px;
                                height: 10px;
                                background-color: #275fa5;
                                right: 0;
                                transform: rotate(-45deg);
                            }
                        .sign {
                            width: vww(28);
                            height: vww(28);
                            line-height: vww(28);
                            text-align: center;
                            background: url('https://mx.jzeg.cn:9095/appimg/image/banner/blueblock.png') no-repeat;
                            background-size: contain;
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #ffffff;
                            margin-right: vww(20);
                        }
                    }
                    .main-divider {
                        width: 548rpx;
                        height: 1rpx;
                        background: #e3e3e3;
                        position: absolute;
                        top: 115rpx;
                        left: vww(50);
                    }
                    .point-number {
                        position: absolute;
                        right: 0;
                        width: 15%;
                        text {
                            font-size: 24rpx;
                            font-weight: 400;
                            color: #c78a64;
                        }
@@ -416,6 +427,28 @@
                            font-size: 40rpx;
                            font-weight: 400;
                            color: #f81414;
                        }
                    }
                }
                .first-extra {
                    @include firstLine;
                    .main-information {
                        width: 100%;
                        height: vww(28);
                        display: flex;
                        justify-content: flex-start;
                        align-items: center;
                        .sign {
                            width: vww(28);
                            height: vww(28);
                            line-height: vww(28);
                            text-align: center;
                            background: url('https://mx.jzeg.cn:9095/appimg/image/banner/redblock.png') no-repeat;
                            background-size: contain;
                            font-size: 30rpx;
                            font-weight: 400;
                            color: #ffffff;
                            margin-right: vww(20);
                        }
                    }
                }
@@ -441,7 +474,6 @@
                        min-width: vww(50);
                        height: 30rpx;
                        font-size: 30rpx;
                        font-weight: 300;
                        color: #515151;
                        position: relative;
@@ -549,7 +581,8 @@
                    }
                }
                .second-line {
                    @include firstLine margin: 0;
                    @include firstLine;
                    margin: 0;
                    margin-left: vww(16);
                    .main-information {
                        width: 100%;
pages/public-page/faYunstatisticsDetails/faYunstatisticsDetails.vue
@@ -57,59 +57,37 @@
                    </view>
                </view>
            </view>
            <view class="origin-info" v-if="faYunDetailobj.orderType == '外购' || faYunDetailobj.orderType == '内购' || faYunDetailobj.orderType == '转出'">
                <combined-title title="原发信息"></combined-title>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">皮重</view>
                        <view class="">{{ faYunDetailobj.skinTwo || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">毛重</view>
                        <view class="">{{ faYunDetailobj.hairTwo || 0 }}</view>
                    </view>
                </view>
                <view class="body-container">
                    <view class="container-block">
                        <view class="">净重</view>
                        <view class="">{{ faYunDetailobj.cleanTwo || 0 }}</view>
                    </view>
                </view>
            </view>
        </view>
    </view>
    <!-- <view>
        <combined-title title="发运详情"></combined-title>
        <view class="compDetails">
            <uni-table border stripe emptyText="暂无更多数据">
                <uni-tr>
                    <uni-th align="left">提煤单编号</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.code || '' }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">提煤单状态</uni-th>
                    <uni-td align="left">{{ coalStatus[faYunDetailobj.status] }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">车牌号</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.carNo || '' }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">入场时间</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.inTime || '' }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">出场时间</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.outTime || '' }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">皮重</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.skin || 0 }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">毛重</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.hair || 0 }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">净重</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.clean || 0 }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">订单编号</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.orderCode || '' }}</uni-td>
                </uni-tr>
                <uni-tr>
                    <uni-th align="left">订单剩余量</uni-th>
                    <uni-td align="left">{{ faYunDetailobj.allowance || 0 }}</uni-td>
                </uni-tr>
            </uni-table>
        </view>
    </view> -->
</template>
<script>
import combinedTitle from '@/components/combined-title/combined-title.vue';
export default {
    components: {
        combinedTitle
    },
    data() {
        return {
            id: '',
@@ -142,14 +120,16 @@
.main {
    width: 100%;
    margin-top: vww(10);
    @include flex justify-content: center;
    @include flex;
    flex-direction: column;
    .main-body {
        width: 690rpx;
        height: 1062rpx;
        background: #ffffff;
        box-shadow: 0rpx 0rpx 14rpx 0rpx rgba(73, 120, 240, 0.14), 0rpx 7rpx 45rpx 0rpx rgba(73, 120, 240, 0.12);
        border-radius: 20rpx;
        @include flex flex-direction: column;
        @include flex;
        flex-direction: column;
        align-items: flex-start;
        .body-container {
            width: 100%;
@@ -167,27 +147,27 @@
            border-bottom: none;
        }
    }
}
.uni-table {
    .uni-table-tr {
        padding: 0;
        border: vww(1) solid #c6c6c6;
        .uni-table-th {
            font-size: vww(14);
            height: vww(30);
            line-height: vww(30);
            padding: vww(5) vww(10);
            color: #111111;
            font-weight: 500;
            background: #e2e2e2;
        }
        .uni-table-td {
            font-size: vww(14);
            font-weight: 400;
            height: vww(30);
            line-height: vww(30);
            padding: vww(5) vww(10);
            color: #111111;
    .origin-info {
        width: 690rpx;
        min-height: 300rpx;
        margin-top: 20rpx;
        margin-bottom: 20rpx;
        background: #ffffff;
        box-shadow: 0rpx 0rpx 14rpx 0rpx rgba(73, 120, 240, 0.14), 0rpx 7rpx 45rpx 0rpx rgba(73, 120, 240, 0.12);
        border-radius: 20rpx;
        @include flex;
        flex-direction: column;
        align-items: flex-start;
        .body-container {
            width: 100%;
            height: vww(56);
            border-bottom: vww(1) solid #d6d6d6;
            @include flex;
            justify-content: center;
            .container-block {
                width: 94%;
                @include flex;
            }
        }
    }
}
pages/public-page/forward/forward.vue
@@ -1,37 +1,59 @@
<template>
    <!-- 转发 -->
    <view class="forward">
        <view v-if="roleType == 1"><u-notice-bar :text="text" :fontSize="30" mode="link"></u-notice-bar></view>
        <view v-else-if="roleType == 2"><u-notice-bar :text="text1" :fontSize="30" mode="link"></u-notice-bar></view>
        <view class="forward-card" v-for="(val, index) in jhOrderPlanForwardList" :key="index">
            <u--form labelPosition="top" :model="forwardForm" ref="form1">
                <u-form-item label="转发对象" labelWidth="20%" ref="item1" @click="forwardObjectClick(index)">
                    <u--input v-model="val.name" placeholder="点击选择转发对象" :readonly="true"></u--input>
                </u-form-item>
                <u-form-item label="输入数量" labelWidth="20%" ref="item1">
                    <view class="forward-card-amount">
                        <view class="forward-card-amount-input">
                            <u--input
                                v-model="val.carNum"
                                placeholder="请输入转发数量"
                                @input="debouncecarNumInput(index, val.carNum)"
                                @blur="blurInput(index, val.carNum)"
                            ></u--input>
                        </view>
                        <u-checkbox-group v-model="val.checkboxValue1" placement="column" @change="v => checkboxChange(v, index, val)">
                            <u-checkbox :customStyle="{ marginBottom: '8px' }" size="30" labelSize="30" label="全部转发" name="全部转发" :disabled="val.ischecked"></u-checkbox>
                        </u-checkbox-group>
                    </view>
                </u-form-item>
                <u-form-item><u-button text="删除本组" :hairline="false" type="error" @click="deleteGroup(index, val)"></u-button></u-form-item>
            </u--form>
        <view class="forward-banner">
            <view class="banner-block">
                <view class="arrow-left" @click="back"><u-icon name="arrow-left" size="40" color="#ffffff"></u-icon></view>
                <view class="forward-text">转发</view>
            </view>
        </view>
        <view v-if="roleType == 1" class="notice-bar">
            <u-notice-bar :text="text" :fontSize="30"></u-notice-bar>
            <view class="notice-icon" style="background: url('../../../static/image/banner/notice.png') no-repeat;background-size: cover; width: 42rpx;height: 42rpx;"></view>
        </view>
        <view v-else-if="roleType == 2" class="notice-bar"><u-notice-bar :text="text1" :fontSize="30"></u-notice-bar></view>
        <view class="card-main">
            <view class="card-block">
                <view class="forward-card" v-for="(val, index) in jhOrderPlanForwardList" :key="index">
                    <u-swipe-action>
                        <u-swipe-action-item :options="options1" @click="deleteGroup(index, val)">
                            <view class="card-content">
                                <u--form labelPosition="left" :model="forwardForm" ref="form1">
                                    <u-form-item label="转发对象" labelWidth="21%" ref="item1" @click="forwardObjectClick(index)">
                                        <u--input v-model="val.name" placeholder="点击选择转发对象" :readonly="true" border="bottom"></u--input>
                                    </u-form-item>
                                    <u-form-item label="输入数量" ref="item2" labelWidth="21%">
                                        <view class="forward-card-amount">
                                            <view class="forward-card-amount-input">
                                                <u--input
                                                    v-model="val.carNum"
                                                    placeholder="请输入转发数量"
                                                    @input="debouncecarNumInput(index, val.carNum)"
                                                    @blur="blurInput(index, val.carNum)"
                                                    border="bottom"
                                                ></u--input>
                                            </view>
                                            <u-checkbox-group v-model="val.checkboxValue1" placement="column" @change="v => checkboxChange(v, index, val)">
                                                <u-checkbox size="30" shape="circle" labelSize="30" label="全部转发" name="全部转发" :disabled="val.ischecked"></u-checkbox>
                                            </u-checkbox-group>
                                        </view>
                                    </u-form-item>
                                    <!-- <u-form-item><u-button text="删除本组" :hairline="false" type="error" @click="deleteGroup(index, val)"></u-button></u-form-item> -->
                                </u--form>
                            </view>
                        </u-swipe-action-item>
                    </u-swipe-action>
                </view>
            </view>
        </view>
        <view class="utils-buttonGroup">
            <!-- 添加按钮 -->
            <view class="AdddBtn"><u-button text="添加" :hairline="false" @click.stop="addForm" :disabled="whetherClick"></u-button></view>
            <!-- 提交按钮 -->
            <view class="forwardBtn"><u-button text="提交" :hairline="false" type="warning" @click.stop="submitForm" :disabled="whetherClick1"></u-button></view>
        </view>
        <!-- 增加按钮 -->
        <view class="AdddBtn">
            <u-button text="添加" :hairline="false" type="primary" :customStyle="{ marginBottom: '8px' }" @click="addForm" :disabled="whetherClick"></u-button>
        </view>
        <!-- 按钮 -->
        <view class="forwardBtn"><u-button text="提交" :hairline="false" type="warning" @click="submitForm" :disabled="whetherClick1"></u-button></view>
        <!-- 选择货代或车队弹出框 -->
        <view class="selectHuoDaiOrFleet-container">
@@ -146,7 +168,16 @@
            // 个人转发数据
            personalForward: {},
            whetherClick: false,
            whetherClick1: false
            whetherClick1: false,
            // 滑动单元格配置
            options1: [
                {
                    text: '删除',
                    style: {
                        backgroundColor: '#FB0101'
                    }
                }
            ]
        };
    },
    onShow() {
@@ -168,6 +199,12 @@
        }
    },
    methods: {
        // 返回上一页
        back() {
            uni.navigateBack({
                delta: 1
            });
        },
        init() {
            switch (this.roleType) {
                case 1:
@@ -235,7 +272,7 @@
                    this.calculate(this.jhOrderPlanForwardList);
                }
                if (this.roleType == 2) {
                    this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.forwardSurplus, this.jhOrderPlanForwardList[index].carNum);
                    this.jhOrderPlanForwardList[index].carNum = this.allrelay(this.carNumSurplusHuodai, this.jhOrderPlanForwardList[index].carNum);
                    this.calculate(this.jhOrderPlanForwardList);
                }
                // 选择一个后其余禁止复选
@@ -319,15 +356,26 @@
                    this.whetherClick1 = true;
                }
            }
            return total;
            if (this.roleType == 2) {
                if (this.carNum >= total) {
                    this.carNumSurplusHuodai = this.carNum - total;
                    this.whetherClick = false;
                    this.whetherClick1 = false;
                } else {
                    this.carNumSurplusHuodai = 0;
                    this.$u.toast('剩余提煤单数量不足');
                    this.whetherClick = true;
                    this.whetherClick1 = true;
                }
            }
        },
        debouncecarNumInput(index, value) {
            let time;
            let that = this;
            that.$set(that.jhOrderPlanForwardList[index], 'carNum', Number(value));
            return (function() {
                if (!time) {
                    time = setTimeout(() => {
                        that.$set(that.jhOrderPlanForwardList[index], 'carNum', Number(value));
                        that.calculate(that.jhOrderPlanForwardList);
                        time = null;
                    }, 800);
@@ -368,7 +416,7 @@
        // 删除一组表单
        deleteGroup(index, v) {
            let tempcarNum = v.carNum;
            if (v.id && this.jhOrderPlanForwardList[index].carNum !== tempcarNum) {
            if (v.id) {
                this.$reqPost('deleteForward', { id: v.id }, 'params').then(res => {
                    if (res.code === 0) {
                        this.jhOrderPlanForwardList.splice(index, 1);
@@ -433,33 +481,125 @@
</script>
<style lang="scss" scoped>
::v-deep.forward {
    width: 90%;
    margin: 0 auto;
    // 卡片
    .forward-card {
        margin-top: vww(10);
        .notice-bar {
            width: 100%;
            height: vww(24);
@mixin flex {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
/deep/ .u-notice-bar {
    background: rgba(255, 255, 255, 0.3) !important;
    box-shadow: 0rpx 0rpx 5rpx 0rpx rgba(27, 103, 255, 0);
    border-radius: 28rpx;
    .u-notice__content {
        text {
            text-shadow: 3rpx 3rpx 8rpx #4784fe;
            font-size: 24rpx;
            color: #fd1446 !important;
            font-weight: 400;
        }
        .u-form {
            .u-form-item {
                .u-form-item__body {
                    .u-form-item__body__right {
                        .u-form-item__body__right__content {
                            .u-form-item__body__right__content__slot {
                                .forward-card-amount {
                                    display: flex;
                                    justify-content: space-between;
                                    align-items: flex-end;
                                    .forward-card-amount-input {
                                        width: vww(245);
    }
}
/deep/ .u-input {
    border-bottom: 1px solid #c4c4c4;
    width: 458rpx;
}
::v-deep.forward {
    width: 100%;
    margin: 0 auto;
    .forward-banner {
        width: 100%;
        height: 430rpx;
        background: linear-gradient(0deg, #ffffff 0%, #0055fe 100%);
        @include flex;
        justify-content: flex-start;
        overflow: hidden;
        .banner-block {
            width: 50%;
            @include flex;
            position: relative;
            top: -75rpx;
            left: 32rpx;
            .forward-text {
                width: 80rpx;
                font-size: 40rpx;
                font-weight: 400;
                color: #ffffff;
                line-height: 69rpx;
            }
        }
    }
    .notice-bar {
        width: 688rpx;
        height: 56rpx;
        margin: 0 auto;
        position: relative;
        top: -200rpx;
        background: transparent;
        .notice-icon {
            position: absolute;
            top: 21rpx;
            left: 7rpx;
        }
    }
    .card-main {
        width: 100%;
        @include flex;
        justify-content: center;
        position: relative;
        top: -100rpx;
        .card-block {
            width: 690rpx;
            @include flex;
            flex-direction: column;
            .forward-card {
                margin-top: vww(10);
                width: 690rpx;
                height: 275rpx;
                background: #ffffff;
                box-shadow: 4rpx 6rpx 25rpx 0rpx rgba(73, 120, 240, 0.15);
                border-radius: 20rpx;
                .card-content {
                    width: 612rpx;
                    margin-left: 48rpx;
                    margin-top: 24rpx;
                    // margin: 56rpx 30rpx 70rpx 48rpx;
                    .u-form {
                        .u-form-item {
                            .u-form-item__body {
                                .u-form-item__body__left {
                                    .u-form-item__body__left__content {
                                        .u-form-item__body__left__content__label {
                                            font-weight: 400 !important;
                                            color: #898989 !important;
                                            font-size: 30rpx !important;
                                        }
                                    }
                                }
                                .u-input {
                                    border: 1px solid #dddddd;
                                .u-form-item__body__right {
                                    .u-form-item__body__right__content {
                                        .u-form-item__body__right__content__slot {
                                            .forward-card-amount {
                                                display: flex;
                                                justify-content: space-between;
                                                align-items: flex-end;
                                                .forward-card-amount-input {
                                                    .u-input {
                                                        width: 263rpx;
                                                    }
                                                }
                                                .u-checkbox-group {
                                                    position: relative;
                                                    top: vww(8);
                                                    left: vww(4);
                                                    .u-checkbox {
                                                        .u-checkbox__icon-wrap {
                                                            border-color: rgba(42, 97, 255, 1) !important;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
@@ -467,21 +607,41 @@
                }
            }
        }
        .forward-card-amount {
            display: flex;
    }
    .utils-buttonGroup {
        width: 610rpx;
        @include flex;
        position: fixed;
        bottom: vww(50);
        left: vww(25);
        z-index: 2;
        .AdddBtn,
        .forwardBtn {
            width: 290rpx;
        }
        .AdddBtn {
            .u-button {
                height: 74rpx;
                border: 1px solid #3b56eb;
                border-radius: 37rpx 37rpx 37rpx 37rpx;
                background: transparent;
                color: #3b56eb;
            }
        }
        .forwardBtn {
            .u-button {
                height: 74rpx;
                color: #ffffff;
                background: rgba(73, 123, 251, 1);
                border: 0;
                border-radius: 37rpx 37rpx 37rpx 37rpx;
            }
        }
    }
    .forwardBtn {
        width: 100%;
        // position: fixed;
        bottom: vww(50);
    }
    .selectHuoDaiOrFleet-container {
        .u-popup {
            .u-transition {
                height: 95%;
                height: 80%;
                .u-popup__content {
                    overflow: scroll !important;
pages/public-page/mapRoute/mapRoute.vue
New file
@@ -0,0 +1,223 @@
<template>
    <view>
        <view class="page-body" style="margin-top: 4rpx;">
            <view class="page-section page-section-gap">
                <map style="width: 100%; height: 600px;" :latitude="latitude" :longitude="longitude" :markers="markers" :polyline="polyline"></map>
            </view>
        </view>
        <view class="tip">
            <view class="first">
                通行距离
                <text>{{ distance || '' }}Km</text>
            </view>
            <view class="first">
                预计到达时间
                <text>{{ duration || '' }}</text>
            </view>
        </view>
    </view>
</template>
<script>
export default {
    data() {
        return {
            latitude: 38.04606544104117,
            longitude: 114.48735479816793,
            customerId: '',
            filedId: '',
            orderType: '',
            toFiledId: '',
            // 起点经纬度
            originlongitude: 39.909,
            originlatitude: 116.39742,
            // 终点
            finishlongitude: null,
            finishlatitude: null,
            markers: [
                {
                    latitude: null,
                    longitude: null,
                    iconPath: '../../../static/image/banner/location.png',
                    width: 23,
                    height: 33,
                    id: 0,
                    callout: {
                        content: '起点', //文本
                        color: '#ffffff', //文字颜色
                        fontSize: 14, //文本大小
                        borderRadius: 15, //边框圆角
                        borderWidth: '10',
                        bgColor: '#e51860', //背景颜色
                        display: 'ALWAYS' //常显
                    }
                },
                {
                    latitude: null,
                    longitude: null,
                    iconPath: '../../../static/image/banner/location.png',
                    width: 23,
                    height: 33,
                    id: 1,
                    callout: {
                        content: '终点', //文本
                        color: '#ffffff', //文字颜色
                        fontSize: 14, //文本大小
                        borderRadius: 15, //边框圆角
                        borderWidth: '10',
                        bgColor: '#e51860', //背景颜色
                        display: 'ALWAYS' //常显
                    }
                }
            ],
            polyline: [
                {
                    // 每个点的经纬度
                    points: [{ latitude: 38.04606544104117, longitude: 114.48735479816793 }, { latitude: 38.049531, longitude: 114.53521899999998 }],
                    // 颜色
                    color: '#0091ff',
                    // 宽度
                    width: 10
                }
            ],
            distance: null,
            duration: null
        };
    },
    methods: {
        getLocation() {
            uni.showLoading({
                title: '加载中’'
            });
            let QQMapWX = require('../../../utils/qqmap-wx-jssdk.js');
            let qqmapsdk = new QQMapWX({
                key: 'HTNBZ-LZGRQ-YDB5S-B4KAS-KLHJH-GHBUE' // 必填
            });
            const params = this.toFiledId ? { toFiledId: this.toFiledId } : { customerId: this.customerId, filedId: this.filedId };
            this.$reqGet('getAppLocation', params).then(res => {
                console.log(res, '腾讯经纬度');
                let _this = this;
                let fromLocation;
                let toLocation;
                if (_this.orderType == '外购' || _this.orderType == '外销') {
                    _this.$set(_this.markers[0], 'longitude', res.data.customerLongitude);
                    _this.$set(_this.markers[0], 'latitude', res.data.customerLatitude);
                    fromLocation = {
                        longitude: res.data.customerLongitude,
                        latitude: res.data.customerLatitude
                    };
                    _this.$set(_this.markers[1], 'longitude', res.data.filedLongitude);
                    _this.$set(_this.markers[1], 'latitude', res.data.filedLatitude);
                    toLocation = {
                        longitude: res.data.filedLongitude,
                        latitude: res.data.filedLatitude
                    };
                } else if (_this.orderType == '内购' || _this.orderType == '内销') {
                    _this.$set(_this.markers[0], 'longitude', res.data.filedLongitude);
                    _this.$set(_this.markers[0], 'latitude', res.data.filedLatitude);
                    fromLocation = {
                        longitude: res.data.filedLongitude,
                        latitude: res.data.filedLatitude
                    };
                    _this.$set(_this.markers[1], 'longitude', res.data.customerLongitude);
                    _this.$set(_this.markers[1], 'latitude', res.data.customerLatitude);
                    toLocation = {
                        longitude: res.data.customerLongitude,
                        latitude: res.data.customerLatitude
                    };
                }
                //调用距离计算接口
                qqmapsdk.direction({
                    mode: 'driving',
                    //from参数不填默认当前地址
                    from: fromLocation,
                    to: toLocation,
                    success: function(res) {
                        console.log(res);
                        let ret = res;
                        let coors = ret.result.routes[0].polyline,
                            pl = [];
                        //坐标解压(返回的点串坐标,通过前向差分进行压缩)
                        let kr = 1000000;
                        for (let i = 2; i < coors.length; i++) {
                            coors[i] = Number(coors[i - 2]) + Number(coors[i]) / kr;
                        }
                        //将解压后的坐标放入点串数组pl中
                        for (let i = 0; i < coors.length; i += 2) {
                            pl.push({ latitude: coors[i], longitude: coors[i + 1] });
                        }
                        console.log(pl);
                        //设置polyline属性,将路线显示出来,将解压坐标第一个数据作为起点
                        _this.longitude = pl[0].longitude;
                        _this.latitude = pl[0].latitude;
                        _this.polyline = [
                            {
                                points: pl,
                                color: '#FF0000DD',
                                width: 4,
                                arrowLine: true
                            }
                        ];
                    },
                    fail: function(error) {
                        console.error(error);
                    },
                    complete: function(res) {
                        console.log(res);
                        uni.hideLoading();
                        _this.distance = res.result.routes[0].distance;
                        _this.distance = (_this.distance / 1000).toFixed(2);
                        _this.duration = _this.handleTime(res.result.routes[0].duration);
                    }
                });
            });
        },
        //
        handleTime(time) {
            let now = new Date(); // 获取当前时间
            now.setMinutes(now.getMinutes() + time);
            let hours = now
                .getHours()
                .toString()
                .padStart(2, '0');
            let minutes = now
                .getMinutes()
                .toString()
                .padStart(2, '0');
            return hours + ':' + minutes;
        }
    },
    onLoad(params) {
        this.customerId = params.customerId;
        this.filedId = params.filedId;
        this.orderType = params.orderType;
        if (params.toFiledId) {
            this.toFiledId = params.toFiledId;
        }
    },
    onShow() {
        if (this.orderType !== '转入' || this.orderType !== '转出') {
            this.getLocation();
        } else {
        }
    }
};
</script>
<style lang="scss" scoped>
.tip {
    margin-top: 60rpx;
    width: 94%;
    height: 40rpx;
    font-size: 40rpx;
    display: flex;
    justify-content: space-around;
    .first {
        color: #c78a64;
        text {
            font-size: 45rpx;
            color: #f81414;
        }
    }
}
</style>
pages/public-page/message/message.vue
@@ -63,10 +63,31 @@
                if (res.code == 0) {
                    uni.hideLoading();
                    this.total = res.data.total;
                    const regex = /<[^>]*>([^<]*)<\/[^>]*>/g;
                    const solveHandle = v => {
                        const regex = /<[^>]*>([^<]*)<\/[^>]*>/g;
                        let result = v.replace(regex, (match, p1) => {
                            return p1.length > 8 ? p1.slice(0, 8) + '...' : p1;
                        });
                        return result;
                    };
                    if (this.pageNum > 1) {
                        this.messageList = this.messageList.concat(res.data.records);
                        this.messageList = this.messageList.map(v => {
                            return {
                                ...v,
                                content: solveHandle(v.content)
                            };
                        });
                    } else if (this.pageNum == 1) {
                        this.messageList = res.data.records;
                        this.messageList = this.messageList.map(v => {
                            return {
                                ...v,
                                content: solveHandle(v.content)
                            };
                        });
                    }
                } else {
                    this.$u.toast('加载失败');
pages/tabbar-page/index-tabbar/index-tabbar.vue
@@ -40,7 +40,10 @@
        freightForwarderIndex
    },
    computed: {
        ...mapState(['globalweighHouseCode', 'globalweigh'])
        ...mapState(['globalweighHouseCode', 'globalweigh', 'globalisconnect'])
    },
    watch: {
        globalisconnect(v, oldv) {}
    },
    //首页下拉刷新
    onPullDownRefresh() {
@@ -111,18 +114,6 @@
                console.log('开启双人通话成功Complete');
            }
        });
        let amap = require('../../../utils/amap-wx.130.js');
        let amapPlugin = new amap.AMapWX({
            key: 'e3106700a6225e6a25727d3a41fa54c5'
        });
        amapPlugin.getRegeo({
            success: data => {
                console.log(data, '获取位置');
            },
            fail: info => {
                console.log(info, '错误信息');
            }
        });
    },
    data() {
        return {
@@ -134,15 +125,12 @@
            messagePushShow: false,
            messageList: {},
            isconnect: false,
            dotShow: false,
            amapPlugin: null,
            key: 'e3106700a6225e6a25727d3a41fa54c5',
            addressName: ''
            dotShow: false
        };
    },
    onShow() {
        this.init();
        if (!this.isconnect) {
        if (!this.globalisconnect || !this.isconnect) {
            this.initWebsocket();
        }
        this.userAuthorization();
@@ -150,7 +138,10 @@
    },
    onHide() {
        console.log('页面隐藏');
        if (!this.isconnect) {
        // this.isconnect = false;
        // this.changeisconnect(false);
        // socket.close();
        if (!this.globalisconnect || !this.isconnect) {
            this.initWebsocket();
        }
    },
@@ -160,7 +151,7 @@
        clearInterval(this.intervalId);
    },
    methods: {
        ...mapMutations(['pushMessage', 'changeWeigh', 'changeinfraredStatus']),
        ...mapMutations(['pushMessage', 'changeWeigh', 'changeinfraredStatus', 'changeisconnect']),
        messagePage() {
            uni.navigateTo({
                url: '/pages/public-page/message/message'
@@ -239,6 +230,7 @@
                complete: res => {
                    console.log(res, 'socket结果');
                    if (res.errMsg == 'connectSocket:ok') {
                        this.changeisconnect(true);
                        this.isconnect = true;
                    }
                }
static/image/banner/location.png
static/image/banner/notice.png
store/index.js
@@ -71,6 +71,7 @@
            weight: '',
            userId: ''
        },
        globalisconnect: false
    },
    mutations: {
        lengthchange(state, payload) {
@@ -110,6 +111,10 @@
        },
        changeuserInfo(state, payload) {
            state.globaluserInfo = payload
        },
        // 改版全局websocket状态
        changeisconnect(state, payload) {
            state.globalisconnect = payload
        }
    }
})
utils/amap-wx.130.js
File was deleted
utils/qqmap-wx-jssdk.js
New file
@@ -0,0 +1,1122 @@
/**
 * 微信小程序JavaScriptSDK
 *
 * @version 1.2
 * @date 2019-03-06
 */
var ERROR_CONF = {
    KEY_ERR: 311,
    KEY_ERR_MSG: 'key格式错误',
    PARAM_ERR: 310,
    PARAM_ERR_MSG: '请求参数信息有误',
    SYSTEM_ERR: 600,
    SYSTEM_ERR_MSG: '系统错误',
    WX_ERR_CODE: 1000,
    WX_OK_CODE: 200
};
var BASE_URL = 'https://apis.map.qq.com/ws/';
var URL_SEARCH = BASE_URL + 'place/v1/search';
var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
var URL_CITY_LIST = BASE_URL + 'district/v1/list';
var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
var URL_DISTANCE = BASE_URL + 'distance/v1/';
var URL_DIRECTION = BASE_URL + 'direction/v1/';
var MODE = {
  driving: 'driving',
  transit: 'transit'
};
var EARTH_RADIUS = 6378136.49;
var Utils = {
  /**
  * md5加密方法
  * 版权所有©2011 Sebastian Tschan,https://blueimp.net
  */
  safeAdd(x, y) {
    var lsw = (x & 0xffff) + (y & 0xffff);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xffff);
  },
  bitRotateLeft(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt));
  },
  md5cmn(q, a, b, x, s, t) {
    return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b);
  },
  md5ff(a, b, c, d, x, s, t) {
    return this.md5cmn((b & c) | (~b & d), a, b, x, s, t);
  },
  md5gg(a, b, c, d, x, s, t) {
    return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t);
  },
  md5hh(a, b, c, d, x, s, t) {
    return this.md5cmn(b ^ c ^ d, a, b, x, s, t);
  },
  md5ii(a, b, c, d, x, s, t) {
    return this.md5cmn(c ^ (b | ~d), a, b, x, s, t);
  },
  binlMD5(x, len) {
    /* append padding */
    x[len >> 5] |= 0x80 << (len % 32);
    x[((len + 64) >>> 9 << 4) + 14] = len;
    var i;
    var olda;
    var oldb;
    var oldc;
    var oldd;
    var a = 1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d = 271733878;
    for (i = 0; i < x.length; i += 16) {
      olda = a;
      oldb = b;
      oldc = c;
      oldd = d;
      a = this.md5ff(a, b, c, d, x[i], 7, -680876936);
      d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586);
      c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819);
      b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
      a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897);
      d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
      c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
      b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983);
      a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
      d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
      c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063);
      b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
      a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
      d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101);
      c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
      b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
      a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510);
      d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
      c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713);
      b = this.md5gg(b, c, d, a, x[i], 20, -373897302);
      a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691);
      d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083);
      c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335);
      b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848);
      a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438);
      d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
      c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961);
      b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
      a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
      d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784);
      c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
      b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
      a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558);
      d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
      c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
      b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556);
      a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
      d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
      c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632);
      b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
      a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174);
      d = this.md5hh(d, a, b, c, x[i], 11, -358537222);
      c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979);
      b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189);
      a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487);
      d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835);
      c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520);
      b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651);
      a = this.md5ii(a, b, c, d, x[i], 6, -198630844);
      d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
      c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
      b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055);
      a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
      d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
      c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523);
      b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
      a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
      d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744);
      c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
      b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
      a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070);
      d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
      c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259);
      b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551);
      a = this.safeAdd(a, olda);
      b = this.safeAdd(b, oldb);
      c = this.safeAdd(c, oldc);
      d = this.safeAdd(d, oldd);
    }
    return [a, b, c, d];
  },
  binl2rstr(input) {
    var i;
    var output = '';
    var length32 = input.length * 32;
    for (i = 0; i < length32; i += 8) {
      output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
    }
    return output;
  },
  rstr2binl(input) {
    var i;
    var output = [];
    output[(input.length >> 2) - 1] = undefined;
    for (i = 0; i < output.length; i += 1) {
      output[i] = 0;
    }
    var length8 = input.length * 8;
    for (i = 0; i < length8; i += 8) {
      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
    }
    return output;
  },
  rstrMD5(s) {
    return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8));
  },
  rstrHMACMD5(key, data) {
    var i;
    var bkey = this.rstr2binl(key);
    var ipad = [];
    var opad = [];
    var hash;
    ipad[15] = opad[15] = undefined;
    if (bkey.length > 16) {
      bkey = this.binlMD5(bkey, key.length * 8);
    }
    for (i = 0; i < 16; i += 1) {
      ipad[i] = bkey[i] ^ 0x36363636;
      opad[i] = bkey[i] ^ 0x5c5c5c5c;
    }
    hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
    return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128));
  },
  rstr2hex(input) {
    var hexTab = '0123456789abcdef';
    var output = '';
    var x;
    var i;
    for (i = 0; i < input.length; i += 1) {
      x = input.charCodeAt(i);
      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
    }
    return output;
  },
  str2rstrUTF8(input) {
    return unescape(encodeURIComponent(input));
  },
  rawMD5(s) {
    return this.rstrMD5(this.str2rstrUTF8(s));
  },
  hexMD5(s) {
    return this.rstr2hex(this.rawMD5(s));
  },
  rawHMACMD5(k, d) {
    return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d));
  },
  hexHMACMD5(k, d) {
    return this.rstr2hex(this.rawHMACMD5(k, d));
  },
  md5(string, key, raw) {
    if (!key) {
      if (!raw) {
        return this.hexMD5(string);
      }
      return this.rawMD5(string);
    }
    if (!raw) {
      return this.hexHMACMD5(key, string);
    }
    return this.rawHMACMD5(key, string);
  },
  /**
   * 得到md5加密后的sig参数
   * @param {Object} requestParam 接口参数
   * @param {String} sk签名字符串
   * @param {String} featrue 方法名
   * @return 返回加密后的sig参数
   */
  getSig(requestParam, sk, feature, mode) {
    var sig = null;
    var requestArr = [];
    Object.keys(requestParam).sort().forEach(function(key){
      requestArr.push(key + '=' + requestParam[key]);
    });
    if (feature == 'search') {
      sig = '/ws/place/v1/search?' + requestArr.join('&') + sk;
    }
    if (feature == 'suggest') {
      sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk;
    }
    if (feature == 'reverseGeocoder') {
      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
    }
    if (feature == 'geocoder') {
      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
    }
    if (feature == 'getCityList') {
      sig = '/ws/district/v1/list?' + requestArr.join('&') + sk;
    }
    if (feature == 'getDistrictByCityId') {
      sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk;
    }
    if (feature == 'calculateDistance') {
      sig = '/ws/distance/v1/?' + requestArr.join('&') + sk;
    }
    if (feature == 'direction') {
      sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk;
    }
    sig = this.md5(sig);
    return sig;
  },
    /**
     * 得到终点query字符串
     * @param {Array|String} 检索数据
     */
    location2query(data) {
        if (typeof data == 'string') {
            return data;
        }
        var query = '';
        for (var i = 0; i < data.length; i++) {
            var d = data[i];
            if (!!query) {
                query += ';';
            }
            if (d.location) {
                query = query + d.location.lat + ',' + d.location.lng;
            }
            if (d.latitude && d.longitude) {
                query = query + d.latitude + ',' + d.longitude;
            }
        }
        return query;
    },
    /**
     * 计算角度
     */
    rad(d) {
      return d * Math.PI / 180.0;
    },
    /**
     * 处理终点location数组
     * @return 返回终点数组
     */
    getEndLocation(location){
      var to = location.split(';');
      var endLocation = [];
      for (var i = 0; i < to.length; i++) {
        endLocation.push({
          lat: parseFloat(to[i].split(',')[0]),
          lng: parseFloat(to[i].split(',')[1])
        })
      }
      return endLocation;
    },
    /**
     * 计算两点间直线距离
     * @param a 表示纬度差
     * @param b 表示经度差
     * @return 返回的是距离,单位m
     */
    getDistance(latFrom, lngFrom, latTo, lngTo) {
      var radLatFrom = this.rad(latFrom);
      var radLatTo = this.rad(latTo);
      var a = radLatFrom - radLatTo;
      var b = this.rad(lngFrom) - this.rad(lngTo);
      var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
      distance = distance * EARTH_RADIUS;
      distance = Math.round(distance * 10000) / 10000;
      return parseFloat(distance.toFixed(0));
    },
    /**
     * 使用微信接口进行定位
     */
    getWXLocation(success, fail, complete) {
        wx.getLocation({
            type: 'gcj02',
            success: success,
            fail: fail,
            complete: complete
        });
    },
    /**
     * 获取location参数
     */
    getLocationParam(location) {
        if (typeof location == 'string') {
            var locationArr = location.split(',');
            if (locationArr.length === 2) {
                location = {
                    latitude: location.split(',')[0],
                    longitude: location.split(',')[1]
                };
            } else {
                location = {};
            }
        }
        return location;
    },
    /**
     * 回调函数默认处理
     */
    polyfillParam(param) {
        param.success = param.success || function () { };
        param.fail = param.fail || function () { };
        param.complete = param.complete || function () { };
    },
    /**
     * 验证param对应的key值是否为空
     *
     * @param {Object} param 接口参数
     * @param {String} key 对应参数的key
     */
    checkParamKeyEmpty(param, key) {
        if (!param[key]) {
            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
            param.fail(errconf);
            param.complete(errconf);
            return true;
        }
        return false;
    },
    /**
     * 验证参数中是否存在检索词keyword
     *
     * @param {Object} param 接口参数
     */
    checkKeyword(param){
        return !this.checkParamKeyEmpty(param, 'keyword');
    },
    /**
     * 验证location值
     *
     * @param {Object} param 接口参数
     */
    checkLocation(param) {
        var location = this.getLocationParam(param.location);
        if (!location || !location.latitude || !location.longitude) {
            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
            param.fail(errconf);
            param.complete(errconf);
            return false;
        }
        return true;
    },
    /**
     * 构造错误数据结构
     * @param {Number} errCode 错误码
     * @param {Number} errMsg 错误描述
     */
    buildErrorConfig(errCode, errMsg) {
        return {
            status: errCode,
            message: errMsg
        };
    },
    /**
     *
     * 数据处理函数
     * 根据传入参数不同处理不同数据
     * @param {String} feature 功能名称
     * search 地点搜索
     * suggest关键词提示
     * reverseGeocoder逆地址解析
     * geocoder地址解析
     * getCityList获取城市列表:父集
     * getDistrictByCityId获取区县列表:子集
     * calculateDistance距离计算
     * @param {Object} param 接口参数
     * @param {Object} data 数据
     */
    handleData(param,data,feature){
      if (feature == 'search') {
        var searchResult = data.data;
        var searchSimplify = [];
        for (var i = 0; i < searchResult.length; i++) {
          searchSimplify.push({
            id: searchResult[i].id || null,
            title: searchResult[i].title || null,
            latitude: searchResult[i].location && searchResult[i].location.lat || null,
            longitude: searchResult[i].location && searchResult[i].location.lng || null,
            address: searchResult[i].address || null,
            category: searchResult[i].category || null,
            tel: searchResult[i].tel || null,
            adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
            city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
            district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
            province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
          })
        }
        param.success(data, {
          searchResult: searchResult,
          searchSimplify: searchSimplify
        })
      } else if (feature == 'suggest') {
        var suggestResult = data.data;
        var suggestSimplify = [];
        for (var i = 0; i < suggestResult.length; i++) {
          suggestSimplify.push({
            adcode: suggestResult[i].adcode || null,
            address: suggestResult[i].address || null,
            category: suggestResult[i].category || null,
            city: suggestResult[i].city || null,
            district: suggestResult[i].district || null,
            id: suggestResult[i].id || null,
            latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
            longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
            province: suggestResult[i].province || null,
            title: suggestResult[i].title || null,
            type: suggestResult[i].type || null
          })
        }
        param.success(data, {
          suggestResult: suggestResult,
          suggestSimplify: suggestSimplify
          })
      } else if (feature == 'reverseGeocoder') {
        var reverseGeocoderResult = data.result;
        var reverseGeocoderSimplify = {
          address: reverseGeocoderResult.address || null,
          latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
          longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
          adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
          city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
          district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
          nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
          province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
          street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
          street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
          recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
          rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
        };
        if (reverseGeocoderResult.pois) {//判断是否返回周边poi
          var pois = reverseGeocoderResult.pois;
          var poisSimplify = [];
          for (var i = 0;i < pois.length;i++) {
            poisSimplify.push({
              id: pois[i].id || null,
              title: pois[i].title || null,
              latitude: pois[i].location && pois[i].location.lat || null,
              longitude: pois[i].location && pois[i].location.lng || null,
              address: pois[i].address || null,
              category: pois[i].category || null,
              adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
              city: pois[i].ad_info && pois[i].ad_info.city || null,
              district: pois[i].ad_info && pois[i].ad_info.district || null,
              province: pois[i].ad_info && pois[i].ad_info.province || null
            })
          }
          param.success(data,{
            reverseGeocoderResult: reverseGeocoderResult,
            reverseGeocoderSimplify: reverseGeocoderSimplify,
            pois: pois,
            poisSimplify: poisSimplify
          })
        } else {
          param.success(data, {
            reverseGeocoderResult: reverseGeocoderResult,
            reverseGeocoderSimplify: reverseGeocoderSimplify
          })
        }
      } else if (feature == 'geocoder') {
        var geocoderResult = data.result;
        var geocoderSimplify = {
          title: geocoderResult.title || null,
          latitude: geocoderResult.location && geocoderResult.location.lat || null,
          longitude: geocoderResult.location && geocoderResult.location.lng || null,
          adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
          province: geocoderResult.address_components && geocoderResult.address_components.province || null,
          city: geocoderResult.address_components && geocoderResult.address_components.city || null,
          district: geocoderResult.address_components && geocoderResult.address_components.district || null,
          street: geocoderResult.address_components && geocoderResult.address_components.street || null,
          street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
          level: geocoderResult.level || null
        };
        param.success(data,{
          geocoderResult: geocoderResult,
          geocoderSimplify: geocoderSimplify
        });
      } else if (feature == 'getCityList') {
        var provinceResult = data.result[0];
        var cityResult = data.result[1];
        var districtResult = data.result[2];
        param.success(data,{
          provinceResult: provinceResult,
          cityResult: cityResult,
          districtResult: districtResult
        });
      } else if (feature == 'getDistrictByCityId') {
        var districtByCity = data.result[0];
        param.success(data, districtByCity);
      } else if (feature == 'calculateDistance') {
        var calculateDistanceResult = data.result.elements;
        var distance = [];
        for (var i = 0; i < calculateDistanceResult.length; i++){
          distance.push(calculateDistanceResult[i].distance);
        }
        param.success(data, {
          calculateDistanceResult: calculateDistanceResult,
          distance: distance
          });
      } else if (feature == 'direction') {
        var direction = data.result.routes;
        param.success(data,direction);
      } else {
        param.success(data);
      }
    },
    /**
     * 构造微信请求参数,公共属性处理
     *
     * @param {Object} param 接口参数
     * @param {Object} param 配置项
     * @param {String} feature 方法名
     */
    buildWxRequestConfig(param, options, feature) {
        var that = this;
        options.header = { "content-type": "application/json" };
        options.method = 'GET';
        options.success = function (res) {
            var data = res.data;
            if (data.status === 0) {
              that.handleData(param, data, feature);
            } else {
                param.fail(data);
            }
        };
        options.fail = function (res) {
            res.statusCode = ERROR_CONF.WX_ERR_CODE;
            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
        };
        options.complete = function (res) {
            var statusCode = +res.statusCode;
            switch(statusCode) {
                case ERROR_CONF.WX_ERR_CODE: {
                    param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
                    break;
                }
                case ERROR_CONF.WX_OK_CODE: {
                    var data = res.data;
                    if (data.status === 0) {
                        param.complete(data);
                    } else {
                        param.complete(that.buildErrorConfig(data.status, data.message));
                    }
                    break;
                }
                default:{
                    param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
                }
            }
        };
        return options;
    },
    /**
     * 处理用户参数是否传入坐标进行不同的处理
     */
    locationProcess(param, locationsuccess, locationfail, locationcomplete) {
        var that = this;
        locationfail = locationfail || function (res) {
            res.statusCode = ERROR_CONF.WX_ERR_CODE;
            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
        };
        locationcomplete = locationcomplete || function (res) {
            if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
                param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
            }
        };
        if (!param.location) {
            that.getWXLocation(locationsuccess, locationfail, locationcomplete);
        } else if (that.checkLocation(param)) {
            var location = Utils.getLocationParam(param.location);
            locationsuccess(location);
        }
    }
};
class QQMapWX {
    /**
     * 构造函数
     *
     * @param {Object} options 接口参数,key 为必选参数
     */
    constructor(options) {
        if (!options.key) {
            throw Error('key值不能为空');
        }
        this.key = options.key;
    };
    /**
     * POI周边检索
     *
     * @param {Object} options 接口参数对象
     *
     * 参数对象结构可以参考
     * @see http://lbs.qq.com/webservice_v1/guide-search.html
     */
    search(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        if (!Utils.checkKeyword(options)) {
            return;
        }
        var requestParam = {
            keyword: options.keyword,
            orderby: options.orderby || '_distance',
            page_size: options.page_size || 10,
            page_index: options.page_index || 1,
            output: 'json',
            key: that.key
        };
        if (options.address_format) {
            requestParam.address_format = options.address_format;
        }
        if (options.filter) {
            requestParam.filter = options.filter;
        }
        var distance = options.distance || "1000";
        var auto_extend = options.auto_extend || 1;
        var region = null;
        var rectangle = null;
        //判断城市限定参数
        if (options.region) {
          region = options.region;
        }
        //矩形限定坐标(暂时只支持字符串格式)
        if (options.rectangle) {
          rectangle = options.rectangle;
        }
        var locationsuccess = function (result) {
          if (region && !rectangle) {
            //城市限定参数拼接
            requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
            if (options.sig) {
              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
            }
          } else if (rectangle && !region) {
            //矩形搜索
            requestParam.boundary = "rectangle(" + rectangle + ")";
            if (options.sig) {
              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
            }
            } else {
              requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
            if (options.sig) {
              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
            }
            }
            wx.request(Utils.buildWxRequestConfig(options, {
                url: URL_SEARCH,
                data: requestParam
            }, 'search'));
        };
        Utils.locationProcess(options, locationsuccess);
    };
    /**
     * sug模糊检索
     *
     * @param {Object} options 接口参数对象
     *
     * 参数对象结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-suggestion.html
     */
    getSuggestion(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        if (!Utils.checkKeyword(options)) {
            return;
        }
        var requestParam = {
            keyword: options.keyword,
            region: options.region || '全国',
            region_fix: options.region_fix || 0,
            policy: options.policy || 0,
            page_size: options.page_size || 10,//控制显示条数
            page_index: options.page_index || 1,//控制页数
            get_subpois : options.get_subpois || 0,//返回子地点
            output: 'json',
            key: that.key
        };
        //长地址
        if (options.address_format) {
          requestParam.address_format = options.address_format;
        }
        //过滤
        if (options.filter) {
          requestParam.filter = options.filter;
        }
        //排序
        if (options.location) {
          var locationsuccess = function (result) {
            requestParam.location = result.latitude + ',' + result.longitude;
            if (options.sig) {
              requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
            }
            wx.request(Utils.buildWxRequestConfig(options, {
              url: URL_SUGGESTION,
              data: requestParam
            }, "suggest"));
          };
          Utils.locationProcess(options, locationsuccess);
        } else {
          if (options.sig) {
            requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
          }
          wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_SUGGESTION,
            data: requestParam
          }, "suggest"));
        }
    };
    /**
     * 逆地址解析
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-gcoder.html
     */
    reverseGeocoder(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        var requestParam = {
            coord_type: options.coord_type || 5,
            get_poi: options.get_poi || 0,
            output: 'json',
            key: that.key
        };
        if (options.poi_options) {
            requestParam.poi_options = options.poi_options
        }
        var locationsuccess = function (result) {
            requestParam.location = result.latitude + ',' + result.longitude;
          if (options.sig) {
            requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder');
          }
            wx.request(Utils.buildWxRequestConfig(options, {
                url: URL_GET_GEOCODER,
                data: requestParam
            }, 'reverseGeocoder'));
        };
        Utils.locationProcess(options, locationsuccess);
    };
    /**
     * 地址解析
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-geocoder.html
     */
    geocoder(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        if (Utils.checkParamKeyEmpty(options, 'address')) {
            return;
        }
        var requestParam = {
            address: options.address,
            output: 'json',
            key: that.key
        };
        //城市限定
        if (options.region) {
          requestParam.region = options.region;
        }
        if (options.sig) {
          requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder');
        }
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_GET_GEOCODER,
            data: requestParam
        },'geocoder'));
    };
    /**
     * 获取城市列表
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-region.html
     */
    getCityList(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        var requestParam = {
            output: 'json',
            key: that.key
        };
        if (options.sig) {
          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList');
        }
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_CITY_LIST,
            data: requestParam
        },'getCityList'));
    };
    /**
     * 获取对应城市ID的区县列表
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-region.html
     */
    getDistrictByCityId(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        if (Utils.checkParamKeyEmpty(options, 'id')) {
            return;
        }
        var requestParam = {
            id: options.id || '',
            output: 'json',
            key: that.key
        };
        if (options.sig) {
          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId');
        }
        wx.request(Utils.buildWxRequestConfig(options, {
            url: URL_AREA_LIST,
            data: requestParam
        },'getDistrictByCityId'));
    };
    /**
     * 用于单起点到多终点的路线距离(非直线距离)计算:
     * 支持两种距离计算方式:步行和驾车。
     * 起点到终点最大限制直线距离10公里。
     *
     * 新增直线距离计算。
     *
     * @param {Object} options 接口参数对象
     *
     * 请求参数结构可以参考
     * http://lbs.qq.com/webservice_v1/guide-distance.html
     */
    calculateDistance(options) {
        var that = this;
        options = options || {};
        Utils.polyfillParam(options);
        if (Utils.checkParamKeyEmpty(options, 'to')) {
            return;
        }
        var requestParam = {
            mode: options.mode || 'walking',
            to: Utils.location2query(options.to),
            output: 'json',
            key: that.key
        };
        if (options.from) {
          options.location = options.from;
        }
        //计算直线距离
        if(requestParam.mode == 'straight'){
          var locationsuccess = function (result) {
            var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
            var data = {
              message:"query ok",
              result:{
                elements:[]
              },
              status:0
            };
            for (var i = 0; i < locationTo.length; i++) {
              data.result.elements.push({//将坐标存入
                distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
                duration:0,
                from:{
                  lat: result.latitude,
                  lng:result.longitude
                },
                to:{
                  lat: locationTo[i].lat,
                  lng: locationTo[i].lng
                }
              });
            }
            var calculateResult = data.result.elements;
            var distanceResult = [];
            for (var i = 0; i < calculateResult.length; i++) {
              distanceResult.push(calculateResult[i].distance);
            }
            return options.success(data,{
              calculateResult: calculateResult,
              distanceResult: distanceResult
            });
          };
          Utils.locationProcess(options, locationsuccess);
        } else {
          var locationsuccess = function (result) {
            requestParam.from = result.latitude + ',' + result.longitude;
            if (options.sig) {
              requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance');
            }
            wx.request(Utils.buildWxRequestConfig(options, {
              url: URL_DISTANCE,
              data: requestParam
            },'calculateDistance'));
          };
          Utils.locationProcess(options, locationsuccess);
        }
    };
  /**
   * 路线规划:
   *
   * @param {Object} options 接口参数对象
   *
   * 请求参数结构可以参考
   * https://lbs.qq.com/webservice_v1/guide-road.html
   */
  direction(options) {
    var that = this;
    options = options || {};
    Utils.polyfillParam(options);
    if (Utils.checkParamKeyEmpty(options, 'to')) {
      return;
    }
    var requestParam = {
      output: 'json',
      key: that.key
    };
    //to格式处理
    if (typeof options.to == 'string') {
      requestParam.to = options.to;
    } else {
      requestParam.to = options.to.latitude + ',' + options.to.longitude;
    }
    //初始化局部请求域名
    var SET_URL_DIRECTION = null;
    //设置默认mode属性
    options.mode = options.mode || MODE.driving;
    //设置请求域名
    SET_URL_DIRECTION = URL_DIRECTION + options.mode;
    if (options.from) {
      options.location = options.from;
    }
    if (options.mode == MODE.driving) {
      if (options.from_poi) {
        requestParam.from_poi = options.from_poi;
      }
      if (options.heading) {
        requestParam.heading = options.heading;
      }
      if (options.speed) {
        requestParam.speed = options.speed;
      }
      if (options.accuracy) {
        requestParam.accuracy = options.accuracy;
      }
      if (options.road_type) {
        requestParam.road_type = options.road_type;
      }
      if (options.to_poi) {
        requestParam.to_poi = options.to_poi;
      }
      if (options.from_track) {
        requestParam.from_track = options.from_track;
      }
      if (options.waypoints) {
        requestParam.waypoints = options.waypoints;
      }
      if (options.policy) {
        requestParam.policy = options.policy;
      }
      if (options.plate_number) {
        requestParam.plate_number = options.plate_number;
      }
    }
    if (options.mode == MODE.transit) {
      if (options.departure_time) {
        requestParam.departure_time = options.departure_time;
      }
      if (options.policy) {
        requestParam.policy = options.policy;
      }
    }
    var locationsuccess = function (result) {
      requestParam.from = result.latitude + ',' + result.longitude;
      if (options.sig) {
        requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction',options.mode);
      }
      wx.request(Utils.buildWxRequestConfig(options, {
        url: SET_URL_DIRECTION,
        data: requestParam
      }, 'direction'));
    };
    Utils.locationProcess(options, locationsuccess);
  }
};
module.exports = QQMapWX;