Commit 647e391c authored by Damon's avatar Damon
parents ca27b067 ef79a171
......@@ -159,7 +159,8 @@ export default {
setUserData(userInfo) {
if (userInfo && userInfo.token) {
// 如果已经登录则直接获取相关信息
this.$u.vuex('vuex_token',userInfo.token); // RTOKENf22df8e7b9db396f560e8f61bebceea2000cb05c
this.$u.vuex('vuex_token',userInfo.token);
this.$u.vuex('vuex_token',"RTOKEN7493e6defc2f1a77782f105dc297a9366763fec5");
this.$u.vuex('vuex_user', userInfo);
this.$u.vuex('vuex_wx_uid', userInfo.wxopenid);
} else {
......
......@@ -8,110 +8,93 @@ let orderApiFun = function(vm){
* 工单数量查询接口
*/
let listOrderCount = async (params = {}) => await vm.$u.get(prefix + vm.vuex_token + '/wokerOrder/queryOrdersCount/V2', params);
/**
* 工单列表接口
*/
let listOrder = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/revision/' + vm.vuex_token + '/list', params);
/**
* 获取师傅的预约日历
*/
let workerCalendar = async (params = {}) => await vm.$u.get(prefix + vm.vuex_token + '/wokerOrder/appointment/calendar', params);
/**
* 师傅预约
*/
let workerAppointment = async (params = {}, orderId) => await vm.$u.post('/wxh-worker-rest/rest/order/traceAndAppointment/trace/V2/' + vm.vuex_token + '/'+orderId, params)
// 联系顾客时间更新接口,暂时没有
/**
* 师傅签到接口
* 师傅签到接口
*/
let maintainWorkerCheckin = async (params = {},orderId) => await vm.$u.post(prefix + vm.vuex_token + '/order/'+orderId+'/maintainWorkerCheckin', params,{'content-type': 'application/x-www-form-urlencoded'});
/**
* 订单详情查询
* 订单详情查询
*/
let orderDetail = async (params = {},orderId) => await vm.$u.get('/wxh-worker-rest/rest/order/revision/'+ vm.vuex_token+'/'+orderId, params);
/* 过程反馈查询接口 */
let feedbackConfig = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/v2/getFeedBack/' + vm.vuex_token, params)
/* 预约+过程反馈 接口 */
let traceAndAppointment = async (params = {}, orderId) => await vm.$u.post('/wxh-worker-rest/rest/order/traceAndAppointment/trace/V2/' + vm.vuex_token + `/`+orderId, params)
/* 师傅拒单 */
let rejectOrder = async (params = {}, orderId) => await vm.$u.get(prefix + vm.vuex_token + `/order/${orderId}/workerReject/V2`, params)
/**
* 查询工单操作记录列表接口
*/
let listOrderRecord = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/record/'+ vm.vuex_token+'/listOrderRecord/'+params.orderId, params);
/**
* 接单
*/
let orderAccept = async (params = {},orderId) => await vm.$u.post(prefix + vm.vuex_token+'/order/'+orderId+'/accept', params);
/**
* 抢单
*/
let orderGan = async (params = {},orderId) => await vm.$u.post('/wxh-worker-rest/rest/order/revision/applets/'+ vm.vuex_token+'/order/acceptAppletsOrder', params,{'content-type': 'application/x-www-form-urlencoded'});
/**
* 获取拍照标准
*/
let orderStandard = async (params = {}) => await vm.$u.get(prefix + vm.vuex_token+'/photo/standard', params);
/**
* 保存图片信息
*/
let saveImage = async (params = {},orderId) => await vm.$u.post(prefix + vm.vuex_token + '/order/'+orderId+'/maintain/saveImage', params);
/**
* 获取师傅水印 or 默认水印
*/
let getWatermark = async (params = {}) => await vm.$u.get(prefix + vm.vuex_token + '/photo/watermark', params);
/**
* 获取师傅开放可选时间段
*/
let openTimerange = async (params = {}) => await vm.$u.get(prefix + vm.vuex_token + '/wokerOrder/appointment/timerange', params);
/**
* 联系时间接口
*/
let contactTime = async (params = {},orderId) => await vm.$u.get('/wxh-worker-rest/rest/order/record/'+ vm.vuex_token+'/contact/'+orderId, params);
/**
* 检查是否可以拒单
*/
let checkRejectable = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/'+ vm.vuex_token+'/wokerOrder/checkRejectable', params);
/**
* 获取签到距离
*/
let getSignDistance = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/' + vm.vuex_token + `/wokerOrder/sign/distance`, params)
/**
* 获取订单的完工项目(配置+数据)
*/
let getCompleteConfigAndData= async (orderId) => await vm.$u.get(prefix+ vm.vuex_token+'/order/'+ orderId +'/maintain/info');
/**
* 查询措施
*/
let getMeasure= async (params = {}) => await vm.$u.get('wxh-worker-rest/rest/service/'+ vm.vuex_token+'/measure/queryMeasureItems', params);
/**
* 保存售后记录
*/
let saveCompleteData = async (params = {},orderId) => await vm.$u.post(prefix+ vm.vuex_token+'/order/'+ orderId +'/maintain/saveMaintainInfoV2', params);
let getSignDistance = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/' + vm.vuex_token + `/wokerOrder/sign/distance`, params)
const orderApi = {
listByRecommendOrder,
listOrderCount,
......@@ -123,6 +106,7 @@ let orderApiFun = function(vm){
listOrderRecord,
orderAccept,
orderGan,
maintainWorkerCheckin,
feedbackConfig,
traceAndAppointment,
rejectOrder,
......@@ -132,13 +116,10 @@ let orderApiFun = function(vm){
openTimerange,
contactTime,
checkRejectable,
getSignDistance,
getCompleteConfigAndData,
getMeasure,
saveCompleteData
getSignDistance
}
return orderApi
}
module.exports = {
orderApiFun
}
}
\ No newline at end of file
......@@ -96,9 +96,9 @@
},
data() {
return {
currentDay: 0,
currentDay: null,
currentTime: null,
appointTime: now,
appointTime: null,
appointRange: "",
num: 0,
hasLast: false
......@@ -106,9 +106,9 @@
},
watch: {
title() {
this.currentDay = 0
this.appointTime = now
this.currentDay = null
this.currentTime = null
this.appointTime = null
this.appointRange = ""
}
},
......
......@@ -126,12 +126,6 @@
"disableScroll": true
}
},
{
"path": "pages/settle/file-upload",
"style": {
"navigationBarTitleText": "图片上传"
}
},
{
"path": "pages/settle/pay-ensure",
"style": {
......
......@@ -313,11 +313,13 @@
this.takeStatus = true
},
closeTake(img) {
console.log("image",img)
this.takeStatus = false
// 获取返回的图片 ,如果返回的图片存在则直接异常签约,成功后跳转到去完工页面,
if(img){ // 拍照完成
if(img && img.length>0){ // 拍照完成
this.isErrorSign = true
this.errorSignUrl = img
this.errorSignUrl = process.uniEnv.qn_base_url +img[img.length-1].key
this.handleBtn()
}else{
this.$refs.uToast.show({
......@@ -527,7 +529,7 @@
clickFeedback(){
// 过程反馈
uni.navigateTo({
url: 'pages/order/feedback?orderId='+this.order.orderId
url: 'pages/order/feedback?orderId='+this.order.orderId+'&categoryId='+this.order.categoryId
})
},
filish(){
......@@ -588,7 +590,7 @@
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2),Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
s = s * 6378.137;//地球半径
s = Math.round(s * 10000) / 10000;
// console.log("计算结果",s,'KM');
console.log("计算结果",s,'KM');
return s?s.toFixed(2):0;
},
timestampDiff(currentOverTime){ // 计算超时时间
......
This diff is collapsed.
This diff is collapsed.
<template>
<view class="back_view">
选择可服务的城市
</view>
</template>
<script>
export default {
data() {
return {
protocolContent:''
}
},
onLoad(e) {
},
methods: {
//拨打客服 点击
phoneCallClick: function (phone) {
uni.makePhoneCall({
phoneNumber: phone
});
},
}
}
</script>
<style>
.back_view{
background-color: #F3F3F3;
position: absolute;
top: 0;
left: 0;
width: 100%;
display: flex;
flex-direction: column;
}
</style>
<template>
<view class="img-wrap rel">
<view class="upload-box">
<view class="img-item pic" v-for="(file,index) in imgList" :key="index" >
<!-- <view class="tip-sucess u-flex u-row-center" v-if="file && (file.status == status.QUEUED || file.status == status.UPLOADING)">
<span>正在上传中...{{file.percent}}%</span>
</view> -->
<img :src="file.src" mode="aspectFill" @click="perviewImg(index)">
<view class="close" @click="removeImg(index)">
<u-icon name="close" color="#fff" size="20"></u-icon>
</view>
</view>
<view>
<view class="pic upload" @click="chooseImage('qiniu')">
<u-icon name="camera" color="#fff" size="100"></u-icon>
<span class="txt">点击拍摄</span>
</view>
</view>
</view>
</view>
</template>
<script>
import base from '@/components/upload/index';
export default {
mixins:[base],
data() {
return {
initImgList:[],
currentIndex: 0,
uploadType: '',
pageTitle:''
}
},
computed: {
},
onLoad(option) {
this.initPage(option)
// this.initworkingAgeList();
// this.getareaList()
},
beforeDestroy(){
this.setPrevPageData()
},
methods: {
goBack(type) {
// if (type) {
// this.setPrevPageData()
// }
this.setPrevPageData()
uni.navigateBack({
delta: 2
});
},
initPage(option) {
const uploadType = option.uploadType
this.uploadType = uploadType
let pages = getCurrentPages()
if (pages.length < 2) {
return
}
let prevVue = pages[pages.length - 2].$vm
this.imgList = prevVue.imgObj[uploadType] || []
const formShowList = prevVue.formShowList
formShowList.map(item=>{
if(item.filedName===uploadType){
this.pageTitle = item.label || '图片上传'
}
})
if(this.uploadType!=='other_certificates'){
this.selectNum = 1
}
uni.setNavigationBarTitle({
title: this.pageTitle
});
},
setPrevPageData() {
let pages = getCurrentPages()
if (pages.length < 2) {
return
}
let selected = this.selected
let prevVue = pages[pages.length - 2].$vm
const uploadType = this.uploadType
prevVue.imgObj[uploadType] = this.imgList
},
initworkingAgeList() {
let list = [{
value: 0,
name: "1年内",
}, ];
for (let i = 1; i < 10; i++) {
const item = {
value: i,
name: i + "年",
};
list.push(item);
}
list.push({
value: 10,
name: "10年+",
});
this.workingAgeList = list;
},
getareaList(code, level, provinceIndex) {
provinceIndex = provinceIndex || 0
this.currentIndex = provinceIndex
let areaList = this.areaList
if (level) {
if (areaList[provinceIndex].children) {
return
}
}
uni.showLoading({
title: '加载中'
});
let params = {
type: '充电桩安装',
level: level || 0,
code: code
}
const res = this.$u.api.getSettleArea(params)
uni.hideLoading()
if (res.status != 200) {
return;
}
if (!level) {
this.areaList = res.data
const parmas = [res.data[0].id, 1]
this.getareaList(...parmas)
} else {
this.$set(areaList[provinceIndex], 'children', res.data)
}
},
selectAge(item) {
this.selected.working_age = item.value
this.selected.workingAgeTxt = item.name
},
selectArea(areaItem) {
const code = areaItem.id
const selected = this.selected
const idx = selected.areaIds.indexOf(code)
const currentProvince = this.areaList[this.currentIndex]
let txt = currentProvince.name + '-' + areaItem.name
if (idx >= 0) {
selected.areaTxts.splice(idx, 1)
selected.areaIds.splice(idx, 1)
} else {
selected.areaIds.push(code)
selected.areaTxts.push(txt)
}
this.selected = selected
},
},
}
</script>
<style lang="scss">
.upload-box {
padding: 30rpx 16rpx;
.pic {
position: relative;
display: block;
width: 720rpx;
height: 450rpx;
// overflow: hidden;
border-radius: 12rpx;
margin-bottom: 30rpx;
img {
width: 100%;
height: 100%;
}
}
.pic.upload {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
img {
display: block;
width: 60rpx;
height: 52rpx;
}
.txt {
font-weight: bold;
margin-top: 18rpx;
font-size: 32rpx;
color: #fff;
&.iconfont {
font-size: 60rpx;
}
}
background-color: rgba(0, 0, 0, 0.3);
}
}
.close{
position: absolute;
width:50rpx;
height:50rpx;
right:0;
top:0;
text-align: center;
line-height:50rpx;
border-radius: 50%;
background: red;
color: #fff;
}
.tip-sucess {
position: absolute;
bottom: 0;
left: 0;
padding: 20rpx 0;
width: 100%;
z-index: 5;
background: rgba(0, 0, 0, .4);
border-radius: 0;
color: #fff;
font-size: 28rpx;
&.tip-fail i {
background: red;
}
i {
margin-right: 12rpx;
width: 50rpx;
height: 50rpx;
background: #7fbe4c;
border-radius: 50%;
text-align: center;
line-height: 50rpx;
font-size: 24rpx;
}
}
</style>
<template>
<view class="wrap">
<process :process="0" :type="0" title="业务流程"></process>
<view class="introduction">
<view class="item">
<view class="label">
<text>招募要求</text>
</view>
<view class="content">
<text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean euismod bibendum laoreet. Proin gravida dolor sit
amet lacus accumsan et viverra justo commodo. Proin sodales
pulvinar sic tempor. Sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Nam fermentum,
nulla luctus pharetra vulputate, felis tellus 。
</text>
</view>
</view>
<view class="item">
<view class="label">
<text>结算价格</text>
</view>
<view class="content">
<text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean euismod bibendum laoreet. Proin gravida dolor sit
amet lacus accumsan et viverra justo commodo. Proin sodales
pulvinar sic tempor. Sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Nam fermentum,
nulla luctus pharetra vulputate, felis tellus 。
</text>
</view>
</view>
<view class="item">
<view class="label">
<text>入驻资料</text>
</view>
<view class="content">
<text>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean euismod bibendum laoreet. Proin gravida dolor sit
amet lacus accumsan et viverra justo commodo. Proin sodales
pulvinar sic tempor. Sociis natoque penatibus et magnis dis
parturient montes, nascetur ridiculus mus. Nam fermentum,
nulla luctus pharetra vulputate, felis tellus 。
</text>
</view>
</view>
<view class="item careful-color">
<view class="careful-content">
<text>注意事项:</text>
<text>
身份证、银行卡、签约人均为同一人,否则无法入驻;
</text>
<text>
充电桩材料按要求自行准备
</text>
</view>
</view>
</view>
<view class="bottom_view">
<button :class="isStop ? 'bottom_btn apply_color' : 'bottom_btn default_color' " @click="$u.debounce(applyClick, 500)">
<text class="bottom_title" v-if="!isStop">浏览 {{count}} 秒后可申请入驻</text>
<text class="bottom_title" v-if="isStop">申请入驻</text>
</button>
</view>
</view>
</template>
<script>
import { process } from '@/components/process/process'
export default {
components: {
process
},
data() {
return {
theme_url:'https://qn-static.banshouhui.com/settle_theme.png?v=' + new Date().getTime(),
count:9,
isStop:false,
settledInfo:null,
status:'',
saving:true
}
},
onLoad(e) {
this.initpageData(e)
this.startCounting()
},
onShow(){
// if(!this.settledInfo){
// this.getBaseInfo()
// }
uni.hideLoading()
},
methods: {
initpageData(option){
let recommender = ''
if(option && option.q){
const urlLink = decodeURIComponent(option.q)
recommender = this.getQueryVariable(urlLink,'recommender')
getApp().globalData.settleRecommend = recommender
}
if(option && option.recommender){
recommender = decodeURI(option.recommender)
getApp().globalData.settleRecommend = recommender
}
},
getQueryVariable(url,key){
const queryStringArr = url.split('?')
let val = ''
let queryStr = queryStringArr && queryStringArr.length > 1 && queryStringArr[1]
if(!queryStr){
return
}
let queryArr = queryStr.split("&");
for (let i=0;i<queryArr.length;i++) {
let pair = queryArr[i].split("=");
if(pair[0] == key){
val = pair[1];
}
}
return val
},
async getBaseInfo(){
const app = getApp()
const callBack = (vm,result)=>{
vm.settledInfo = result
vm.status = result.record.status
}
let settledInfo = await app.getBaseInfo(this,callBack)
if(!settledInfo){
return
}
this.settledInfo = settledInfo
this.status = settledInfo.record.status
},
startCounting : function () {
if(this.isStop){
return
}
this.count = this.count - 1
if(this.count > 0){
setTimeout(this.startCounting, 1000);
}else{
this.isStop = true
}
},
applyClick: async function () {
if(!this.isStop){
return
}
this.saving = true
if(!this.settledInfo){
await this.getBaseInfo()
this.jumpJudge()
this.saving = false
return
}
this.jumpJudge()
},
jumpJudge(){
if(this.status>0){
uni.navigateTo({
url:'/pages/settle/prompt'
})
return
}
uni.navigateTo({
url:'/pages/settle/base'
})
}
}
}
</script>
<style>
/* page {
background-color: rgb(240, 242, 244);
} */
</style>
<style lang="scss" scoped>
.u-cell-icon {
width: 36rpx;
height: 36rpx;
margin-right: 8rpx;
}
.back_view{
background-color: #FFFFFF;
position: absolute;
top: 0;
left: 0;
width: 100%;
display: flex;
flex-direction: column;
}
.theme_image{
width: 100%;
height: 3000rpx;
margin-bottom:164rpx;
}
.bottom_view{
position:fixed;
box-shadow: 0 -1rpx 6rpx rgba(0,0,0,0.05);
bottom:0;
background-color: #DAEBFF;;
width: 100%;
height: 164rpx;
display: flex;
align-content: center;
justify-content: center;
}
.bottom_btn{
margin-top: 30rpx;
width: 600rpx;
height: 104rpx;
line-height:96rpx;
border-radius: 54rpx;
// border: 4rpx solid #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
&.apply_color{
// border: 4rpx solid #2272FF;
.bottom_title{
color: #fff;
}
}
}
.bottom_title{
font-weight: bold;
font-size: 32rpx;
color: #2272FF;
}
.default_color{
background-color: #fff;
}
.apply_color{
background-color: #2272FF;
}
.introduction {
border: 4rpx solid #2272FF;
border-radius: 10rpx;
background-color: #FFFFFF;
margin: 20rpx;
margin-bottom: 200rpx;
}
.introduction .item {
padding: 20rpx;
}
.introduction .item .label {
font-size: 32rpx;
padding: 10rpx;
}
.introduction .item .content {
font-size: 28rpx;
padding: 20rpx 40rpx 20rpx 40rpx;
}
.careful-color{
color: red;
}
.careful-content {
padding: 10rpx;
font-size: 32rpx;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment