| | |
| | | <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> |
| | | |
| | |
| | | @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; |
| | |
| | | body { |
| | | font-family: siYuanLight, sans-serif; |
| | | } |
| | | // @font-face { |
| | | // font-family: 'weighting'; |
| | | // src: url('./utils/fonts/weighing.TTF'); |
| | | // } |
| | | </style> |
| | |
| | | "appid": "wx4a62fc1684c429a9", |
| | | "permission": { |
| | | "scope.userFuzzyLocation": { |
| | | "desc": "你的位置信息将用于小程序位置接口的效果展示" |
| | | "desc": "你的位置信息将用于小程序定位" |
| | | } |
| | | }, |
| | | "optimization": { |
| | |
| | | "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": [{ |
| | |
| | | "path": "forward/forward", |
| | | "style": { |
| | | "navigationBarTitleText": "转发", |
| | | "enablePullDownRefresh": false |
| | | "enablePullDownRefresh": false, |
| | | "navigationStyle": "custom" |
| | | } |
| | | }, { |
| | | "path": "message/message", |
| | |
| | | }, { |
| | | "path": "faYunstatisticsDetails/faYunstatisticsDetails", |
| | | "style": { |
| | | "navigationBarTitleText": "", |
| | | "navigationBarTitleText": "发运详情", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | |
| | | }] |
| | | } ,{ |
| | | "path" : "mapRoute/mapRoute", |
| | | "style" : |
| | | { |
| | | "navigationBarTitleText": "", |
| | | "enablePullDownRefresh": false |
| | | } |
| | | |
| | | } |
| | | ] |
| | | }, { |
| | | "root": "pages/driver-page/appointment", |
| | | "pages": [{ |
| | |
| | | <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; |
| | |
| | | </view> |
| | | </view> |
| | | <view class="block-top"> |
| | | <combined-title title="提煤单详情"></combined-title> |
| | | <combined-title title="提煤单历史"></combined-title> |
| | | <view class="total"> |
| | | 总净重 |
| | | <text>{{ total || 0 }}</text> |
| | |
| | | <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"> |
| | |
| | | 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() { |
| | |
| | | position: relative; |
| | | top: vww(54); |
| | | .dept-name { |
| | | min-width: 100rpx; |
| | | font-size: 32rpx; |
| | | font-weight: normal; |
| | | color: #ffffff; |
| | |
| | | <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"> |
| | |
| | | </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> |
| | |
| | | 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: ['领取', '预约', '签到', '入场', '称皮', '称毛', '离场', '入磅房', '出磅房', '入煤仓', '出煤仓', '放空', '作废', '入场申请', '进入场院'], |
| | |
| | | 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 { |
| | |
| | | .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; |
| | |
| | | @include flex flex-direction: column; |
| | | align-items: flex-start; |
| | | .body-container { |
| | | color: #303030; |
| | | width: 100%; |
| | | height: vww(56); |
| | | border-bottom: vww(1) solid #d6d6d6; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | </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> |
| | |
| | | <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"> |
| | |
| | | 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); |
| | | } |
| | |
| | | } |
| | | .card-main { |
| | | width: 100%; |
| | | height: vww(120); |
| | | height: vww(150); |
| | | border-bottom: vww(1) solid #d6d6d6; |
| | | margin-top: vww(12); |
| | | padding-bottom: vww(12); |
| | |
| | | @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 { |
| | |
| | | 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"> |
| | |
| | | <view class="send-date">{{ coalDetailsData.sendDate }}</view> |
| | | </view> |
| | | <view class="coal-code">提煤单编号: {{ coalDetailsData.code || '' }}</view> |
| | | <view class="order-code">订单编号: {{ coalDetailsData.orderCode || '' }}</view> |
| | | <view class="order-code">订单编号: {{ 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> |
| | |
| | | <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> |
| | |
| | | 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: { |
| | |
| | | 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); |
| | |
| | | <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> |
| | |
| | | </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"> |
| | |
| | | <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 |
| | |
| | | coalContactHair: 0, |
| | | coalContactSkin: 0 |
| | | }, |
| | | // 是否填写原发信息 |
| | | isInputOrigin: false, |
| | | takeCoalId: null, |
| | | weighHouseCode: '', |
| | | isConfirmWeighLoading: false, //确定称重按钮 |
| | |
| | | coalContactSkin: '', |
| | | // 聚焦时改变样式 |
| | | isfocus1: false, |
| | | isfocus2: false |
| | | isfocus2: false, |
| | | // 外购第一次称毛重不需要加减吨 |
| | | outBuy: true |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | // 监听重量变化 |
| | | 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 |
| | |
| | | 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; |
| | | } |
| | | } |
| | | }); |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | .four { |
| | | margin: vww(10) auto; |
| | | flex: 0.5; |
| | | width: 100%; |
| | | margin-top: vww(5); |
| | | text-align: center; |
| | | } |
| | | } |
| | | .secondary-confirmation__main { |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | 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(); |
| | | }, |
| | |
| | | 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); |
| | |
| | | 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; |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | |
| | | min-width: vww(50); |
| | | height: 30rpx; |
| | | font-size: 30rpx; |
| | | |
| | | font-weight: 300; |
| | | color: #515151; |
| | | position: relative; |
| | |
| | | } |
| | | } |
| | | .second-line { |
| | | @include firstLine margin: 0; |
| | | @include firstLine; |
| | | margin: 0; |
| | | margin-left: vww(16); |
| | | .main-information { |
| | | width: 100%; |
| | |
| | | </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: '', |
| | |
| | | .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%; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <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"> |
| | |
| | | // 个人转发数据 |
| | | personalForward: {}, |
| | | whetherClick: false, |
| | | whetherClick1: false |
| | | whetherClick1: false, |
| | | // 滑动单元格配置 |
| | | options1: [ |
| | | { |
| | | text: '删除', |
| | | style: { |
| | | backgroundColor: '#FB0101' |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | onShow() { |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | // 返回上一页 |
| | | back() { |
| | | uni.navigateBack({ |
| | | delta: 1 |
| | | }); |
| | | }, |
| | | init() { |
| | | switch (this.roleType) { |
| | | case 1: |
| | |
| | | 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); |
| | | } |
| | | // 选择一个后其余禁止复选 |
| | |
| | | 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); |
| | |
| | | // 删除一组表单 |
| | | 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); |
| | |
| | | </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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | .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; |
New file |
| | |
| | | <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> |
| | |
| | | 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('加载失败'); |
| | |
| | | freightForwarderIndex |
| | | }, |
| | | computed: { |
| | | ...mapState(['globalweighHouseCode', 'globalweigh']) |
| | | ...mapState(['globalweighHouseCode', 'globalweigh', 'globalisconnect']) |
| | | }, |
| | | watch: { |
| | | globalisconnect(v, oldv) {} |
| | | }, |
| | | //首页下拉刷新 |
| | | onPullDownRefresh() { |
| | |
| | | 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 { |
| | |
| | | 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(); |
| | |
| | | }, |
| | | onHide() { |
| | | console.log('页面隐藏'); |
| | | if (!this.isconnect) { |
| | | // this.isconnect = false; |
| | | // this.changeisconnect(false); |
| | | // socket.close(); |
| | | if (!this.globalisconnect || !this.isconnect) { |
| | | this.initWebsocket(); |
| | | } |
| | | }, |
| | |
| | | clearInterval(this.intervalId); |
| | | }, |
| | | methods: { |
| | | ...mapMutations(['pushMessage', 'changeWeigh', 'changeinfraredStatus']), |
| | | ...mapMutations(['pushMessage', 'changeWeigh', 'changeinfraredStatus', 'changeisconnect']), |
| | | messagePage() { |
| | | uni.navigateTo({ |
| | | url: '/pages/public-page/message/message' |
| | |
| | | complete: res => { |
| | | console.log(res, 'socket结果'); |
| | | if (res.errMsg == 'connectSocket:ok') { |
| | | this.changeisconnect(true); |
| | | this.isconnect = true; |
| | | } |
| | | } |
| | |
| | | weight: '', |
| | | userId: '' |
| | | }, |
| | | globalisconnect: false |
| | | }, |
| | | mutations: { |
| | | lengthchange(state, payload) { |
| | |
| | | }, |
| | | changeuserInfo(state, payload) { |
| | | state.globaluserInfo = payload |
| | | }, |
| | | // 改版全局websocket状态 |
| | | changeisconnect(state, payload) { |
| | | state.globalisconnect = payload |
| | | } |
| | | } |
| | | }) |
New file |
| | |
| | | /** |
| | | * 微信小程序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; |