From 22d451eead1a292936427c79b8903771546f530f Mon Sep 17 00:00:00 2001 From: Mrxtyyp <1126084777@qq.com> Date: Fri, 13 Mar 2026 14:27:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=94=AE=E5=90=8E=E4=BD=99?= =?UTF-8?q?=E4=B8=8B=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/js/data.js | 21 +- common/js/dateUtil.js | 6 + common/js/request.js | 1584 +++++++------ common/js/validate.js | 3 + .../goods-card/horizontal-goods-card.vue | 43 +- components/uni-combox/my-uni-combox.vue | 30 +- components/vertify/vertify-worker-type.vue | 27 +- manifest.json | 5 +- pages.json | 12 + pages/area-proxy/my-team.vue | 2 +- pages/demand-center/accept-demand-center.vue | 301 ++- pages/demand-center/demand-detail.vue | 17 +- pages/demand-center/rule.vue | 105 +- pages/index/goods-manage.vue | 129 +- pages/index/index-home.vue | 110 +- pages/index/index.vue | 4 +- pages/index/my-home.vue | 55 +- pages/login/login.vue | 43 +- pages/my/edit-shop-address.vue | 420 ++++ pages/my/master-occupancy-parts.vue | 741 ++++++ pages/my/master-occupancy.vue | 20 +- pages/my/master-settled-info.vue | 40 +- pages/my/new-serv-parts.vue | 1301 ++++++++++ pages/my/new-serv.vue | 254 +- pages/my/personal-info.vue | 10 + pages/my/shop-list.vue | 130 + pages/order-manage/cancel-order.vue | 174 +- pages/order-manage/choose-shop.vue | 163 ++ .../components/afterServiceRecord.vue | 261 ++ .../components/afterServiceRecordGoods.vue | 394 +++ pages/order-manage/dispatch-order.vue | 50 +- .../modal/accept-order-notice.vue | 11 +- .../modal/agree-after-sale-goods.vue | 240 ++ .../modal/allocate-service-money.vue | 129 + pages/order-manage/modal/apply-charge.vue | 306 ++- pages/order-manage/modal/deliver-goods.vue | 207 ++ .../modal/delivery_flow_detail.vue | 70 + .../modal/dispatch-order-sure.vue | 271 +++ .../modal/dispatch-order-to-self.vue | 323 +++ .../order-manage/modal/edit-time-arrange.vue | 18 +- .../modal/handoff-goods-record.vue | 153 ++ pages/order-manage/modal/insurance-detail.vue | 70 + .../order-manage/modal/insurance-retinue.vue | 201 ++ .../order-manage/modal/insurance-vertify.vue | 114 + .../modal/new-serv-price-offline.vue | 54 +- .../modal/new-serv-price-online.vue | 50 +- pages/order-manage/modal/re-finish-submit.vue | 154 ++ .../order-manage/modal/reject-after-sale.vue | 23 +- .../modal/task_process_detail.vue | 2 +- pages/order-manage/modal/time-arrange.vue | 21 +- pages/order-manage/order-manage-parts.vue | 2108 +++++++++++++++++ pages/order-manage/order-manage.vue | 618 +++-- pages/order-manage/serv-detail.vue | 648 ++++- static/add-img.png | Bin 0 -> 470 bytes .../components/uni-popup/uni-popup.vue | 2 +- .../components/zb-tooltip/zb-tooltip.vue | 2 +- 56 files changed, 10694 insertions(+), 1556 deletions(-) create mode 100644 pages/my/edit-shop-address.vue create mode 100644 pages/my/master-occupancy-parts.vue create mode 100644 pages/my/new-serv-parts.vue create mode 100644 pages/my/shop-list.vue create mode 100644 pages/order-manage/choose-shop.vue create mode 100644 pages/order-manage/components/afterServiceRecord.vue create mode 100644 pages/order-manage/components/afterServiceRecordGoods.vue create mode 100644 pages/order-manage/modal/agree-after-sale-goods.vue create mode 100644 pages/order-manage/modal/allocate-service-money.vue create mode 100644 pages/order-manage/modal/deliver-goods.vue create mode 100644 pages/order-manage/modal/delivery_flow_detail.vue create mode 100644 pages/order-manage/modal/dispatch-order-sure.vue create mode 100644 pages/order-manage/modal/dispatch-order-to-self.vue create mode 100644 pages/order-manage/modal/handoff-goods-record.vue create mode 100644 pages/order-manage/modal/insurance-detail.vue create mode 100644 pages/order-manage/modal/insurance-retinue.vue create mode 100644 pages/order-manage/modal/insurance-vertify.vue create mode 100644 pages/order-manage/modal/re-finish-submit.vue create mode 100644 pages/order-manage/order-manage-parts.vue create mode 100644 static/add-img.png diff --git a/common/js/data.js b/common/js/data.js index bb00a78..38ef22f 100644 --- a/common/js/data.js +++ b/common/js/data.js @@ -86,15 +86,11 @@ const myTeamInfo = { } const masterRules = [ - '0规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '1规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '2规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '3规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '4规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '5规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '6规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '7规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容', - '8规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容' + '接单:属于您的订单请30分钟内接单。', + '预约:接单后立即预约,超时30分钟会提示,超1小时你有责;', + '排单:按约排单,30分钟未排单提示超时,超1小时你有责;', + '上门:按约准时上门,超时上门或被投诉未上门,你有责;', + '退单:当天订单不得私自退单,遇事可提前3小时与客户沟通妥善。紧急问题且沟通不畅的,请联系你上级或平台客服。上门时间3小时范围内退单的,产生责任由你承担。', ] // type: 0=升降序,1=功能按钮;order: 0=升序,1=降序; @@ -322,7 +318,12 @@ const timeRangeList = [ '18:00-18:30', '18:30-19:00', '19:00-19:30', - '19:30-20:00' + '19:30-20:00', + '19:00-20:00', + '20:00-21:00', + '21:00-22:00', + '22:00-23:00', + '23:00-24:00', ] const servDetail = { diff --git a/common/js/dateUtil.js b/common/js/dateUtil.js index 418493e..fc6f5a1 100644 --- a/common/js/dateUtil.js +++ b/common/js/dateUtil.js @@ -27,6 +27,12 @@ export default { } return this.countDownDiffCache; }, + addDays(dateStr, dayAmount) { + let date = new Date(dateStr); + // 使用时间戳计算,避免时区问题 + const timestamp = date.getTime() + (dayAmount * 24 * 60 * 60 * 1000); + return new Date(timestamp); + }, addHours(dateStr, hourAmount) { let date = new Date(dateStr); date.setHours(date.getHours() + hourAmount); diff --git a/common/js/request.js b/common/js/request.js index 3020eb1..3b522f7 100644 --- a/common/js/request.js +++ b/common/js/request.js @@ -1,53 +1,77 @@ import globalData from '@/common/js/globalData.js'; -export default { - // address: 'https://www.opsoul.com:8881', - address: 'https://gmhl.opsoul.com', +export default { + address: 'https://gmhl.gmjlb.com', + // address: 'https://gmhl.opsoul.com', // 异步接口拦截 - addInterceptor() { + addInterceptor() { let _this = this; uni.addInterceptor('request', { invoke(args) { - uni.showLoading({ - mask: true, - title: '加载中' - }) - let userInfo = _this.getCurUserInfo(); + if(!args.hideLoading) { + uni.showLoading({ + mask: true, + title: '加载中' + }) + } + + let userInfo = _this.getCurUserInfo(); + + // if(userInfo.loginStatus == 1) { + // // 禁止登录,退出登录 + // uni.clearStorageSync('userProfile'); + // uni.showToast({ + // icon: 'none', + // title: '您已被禁止登录', + // duration: 3000, + // success() { + // setTimeout(() => { + // uni.hideLoading(); + // uni.reLaunch({ + // url: '/pages/login/login' + // }) + // }, 3000) + // } + // }) + // return + // } // request 触发前拼接 url // args.url = 'https://www.opsoul.com:8881' + args.url; - // args.url = 'http://127.0.0.1:80' + args.url; - args.url = 'https://gmhl.opsoul.com' + args.url; - - if (!args.data) { - args.data = {} - } - if (args.data instanceof Object) { - args.data.deptId = globalData.deptId; - args.data.from = globalData.from; - if (args.data.workerId === undefined && userInfo && userInfo.workerId) { - args.data.workerId = userInfo.workerId; - } - } - - if (!args.header) { - args.header = {} - } - args.header.deptId = globalData.deptId; + // args.url = 'http://127.0.0.1:80' + args.url; + // args.url = 'https://gmhl.opsoul.com' + args.url; + args.url = 'https://gmhl.gmjlb.com' + args.url; + + if (!args.data) { + args.data = {} + } + if (args.data instanceof Object) { + args.data.deptId = globalData.deptId; + args.data.from = globalData.from; + if (args.data.workerId === undefined && userInfo && userInfo.workerId) { + args.data.workerId = userInfo.workerId; + } + } + + if (!args.header) { + args.header = {} + } + args.header.deptId = globalData.deptId; args.header.from = globalData.from; // console.log("停止触发"); - // return false; + // return false; }, - success(res) { + success(res) { uni.hideLoading(); if (!res || !res.data || res.data.code !== 0) { uni.showToast({ - title: '系统错误', + title: res.data.msg || '系统错误', icon: 'error' }) - } + } + // _this.getAndSetWorkerInfo() }, - fail(err) { - console.log(err); + fail(err) { + console.log(err); uni.hideLoading(); uni.showToast({ title: '请求失败', @@ -86,218 +110,246 @@ export default { } }) }, - async login() { - let userInfo = await wx.getUserProfile({ - desc: '用于小程序登录' - }); - // console.log("从微信获取基本用户信息:" + userInfo); - // 获取微信登录凭证 - const wxLoginRes = await wx.login(); - // console.log(wxLoginRes) - // 获取openid - const wxAuthRes = await uni.request({ - url: '/wx/auth', - header: { - code: wxLoginRes.code - } - }) - // console.log(wxAuthRes) - const openId = wxAuthRes[1].data.data.openid; - // 第一次从服务端获取用户信息 - let wxGetUserRes = await this.qryUserInfo(openId); - // 获取失败则获取微信信息再调用注册接口 - if (!wxGetUserRes.data) { - // 注册完成后再次从服务端获取用户信息 - let registerRes = await this.registerUser({ - openId: openId, - name: userInfo.userInfo.nickName, - workerLogoUrl: userInfo.userInfo.avatarUrl - }); - if (registerRes.code === 0) { - wxGetUserRes = await this.qryUserInfo(openId); - } - } - if (!wxGetUserRes.data) { - userInfo = null; - } else { - userInfo = { - ...wxGetUserRes.data, - wxLoginCode: wxLoginRes.code - } - } - // console.log("通过后台服务获取用户信息:" + userInfo); - if (!userInfo || userInfo.workerId == null || userInfo.workerId == undefined) { - uni.showToast({ - icon: 'none', - title: '微信用户信息获取失败,请退出小程序重试' - }) - return false; - } - // 页面存储用户登录有效信息,以便其他页面调用 - uni.setStorageSync('userProfile', userInfo); + async login() { + let userInfo = await wx.getUserProfile({ + desc: '用于小程序登录' + }); + // console.log("从微信获取基本用户信息:" + userInfo); + // 获取微信登录凭证 + const wxLoginRes = await wx.login(); + // console.log(wxLoginRes) + // 获取openid + const wxAuthRes = await uni.request({ + url: '/wx/auth', + header: { + code: wxLoginRes.code + } + }) + // console.log(wxAuthRes) + const openId = wxAuthRes[1].data.data.openid; + // 第一次从服务端获取用户信息 + let wxGetUserRes = await this.qryUserInfo(openId); + // 获取失败则获取微信信息再调用注册接口 + if (!wxGetUserRes.data) { + // 注册完成后再次从服务端获取用户信息 + let registerRes = await this.registerUser({ + openId: openId, + name: userInfo.userInfo.nickName, + workerLogoUrl: userInfo.userInfo.avatarUrl + }); + if (registerRes.code === 0) { + wxGetUserRes = await this.qryUserInfo(openId); + } + } + if (!wxGetUserRes.data) { + userInfo = null; + } else { + userInfo = { + ...wxGetUserRes.data, + wxLoginCode: wxLoginRes.code + } + } + // console.log("通过后台服务获取用户信息:" + userInfo); + if (!userInfo || userInfo.workerId == null || userInfo.workerId == undefined) { + uni.showToast({ + icon: 'none', + title: '微信用户信息获取失败,请退出小程序重试' + }) + return false; + } + // 页面存储用户登录有效信息,以便其他页面调用 + uni.setStorageSync('userProfile', userInfo); return true; + }, + async getWxUserInfo() { + // 获取微信登录凭证 + const wxLoginRes = await wx.login(); + // 获取openid + const wxAuthRes = await uni.request({ + url: '/wx/auth', + header: { + code: wxLoginRes.code + } + }) + const openId = wxAuthRes[1].data.data.openid; + // 从服务端获取用户信息 + let wxGetUserRes = await this.qryUserInfo(openId); + let userInfo = null; + if (wxGetUserRes.data) { + userInfo = { + ...wxGetUserRes.data, + wxLoginCode: wxLoginRes.code + } + } + return userInfo; + }, + async storageExistUser() { + // 获取微信登录凭证 + const wxLoginRes = await wx.login(); + // 获取openid + const wxAuthRes = await uni.request({ + url: '/wx/auth', + header: { + code: wxLoginRes.code + } + }) + const openId = wxAuthRes[1].data.data.openid; + // 从服务端获取用户信息 + let wxGetUserRes = await this.qryUserInfo(openId); + let userInfo = null; + if (wxGetUserRes.data) { + userInfo = { + ...wxGetUserRes.data, + wxLoginCode: wxLoginRes.code + } + } + uni.clearStorageSync('userProfile'); + uni.setStorageSync('userProfile', userInfo); }, - async getWxUserInfo() { - // 获取微信登录凭证 - const wxLoginRes = await wx.login(); - // 获取openid - const wxAuthRes = await uni.request({ - url: '/wx/auth', - header: { - code: wxLoginRes.code - } - }) - const openId = wxAuthRes[1].data.data.openid; - // 从服务端获取用户信息 - let wxGetUserRes = await this.qryUserInfo(openId); - let userInfo = null; - if (wxGetUserRes.data) { - userInfo = { - ...wxGetUserRes.data, - wxLoginCode: wxLoginRes.code - } + async GetCurrentLocation() { + let res = await this.wxGetLocation() + console.log(res); + if (!res || !res.latitude) { + return; } - return userInfo; - }, - async storageExistUser() { - // 获取微信登录凭证 - const wxLoginRes = await wx.login(); - // 获取openid - const wxAuthRes = await uni.request({ - url: '/wx/auth', - header: { - code: wxLoginRes.code - } - }) - const openId = wxAuthRes[1].data.data.openid; - // 从服务端获取用户信息 - let wxGetUserRes = await this.qryUserInfo(openId); - let userInfo = null; - if (wxGetUserRes.data) { - userInfo = { - ...wxGetUserRes.data, - wxLoginCode: wxLoginRes.code - } - } - uni.clearStorageSync('userProfile'); - uni.setStorageSync('userProfile', userInfo); - }, - async registerUser(params = {}) { - let res = await uni.request({ - url: '/wx/addWorker', - method: 'POST', - data: params - }) - return res[1].data; - }, - async noticeMsg(params = {}) { - let res = await uni.request({ - url: '/wx/noticeMsg', - method: 'POST', - data: params - }) - return res[1].data; - }, - async sendVertifyCode(params = {}) { - let res = await uni.request({ - url: '/tool/sms/send', - method: 'POST', - data: params - }) - return res[1].data; - }, - async realRegisterUser(params = {}) { - let res = await uni.request({ - url: '/worker/register', - method: 'POST', - data: params - }) - return res[1].data; - }, - async appLogin(params = {}) { - let res = await uni.request({ - url: '/worker/login', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryUserInfo(openId, phone) { - let res = await uni.request({ - url: '/wx/getWorkerInfo', + let res1 = await uni.request({ + url: '/tool/baidu/getLocation', method: 'POST', data: { - openId: openId, - phone: phone + location: res.latitude + ',' + res.longitude } }) - return res[1].data; + let areaRes = res1[1].data + return areaRes.data; }, - async qryUserPhone(code) { - let res = await uni.request({ - url: '/wx/auth/phone', - method: 'GET', - header: { - code: code - } - }) - return res[1].data; - }, - async updateUserPhone(params = {}) { - let res = await uni.request({ - url: '/worker/update', + async TransformLocation(params) { + let res1 = await uni.request({ + url: '/tool/baidu/getLocation', method: 'POST', - data: params + data: { + location: params.latitude + ',' + params.longitude + } }) - // 更新用户信息的方法顺便更新本地缓存 - if (res[1].data.code === 0) { - let userInfo = this.getCurUserInfo(); - userInfo.phone = params.phone; - userInfo.account = params.account; - uni.setStorageSync('userProfile', userInfo); - } - return res[1].data; - }, - async storagePhoneIntoUserInfo(code) { - let phoneRes = await this.qryUserPhone(code) - if (phoneRes && phoneRes.data) { - let userInfo = this.getCurUserInfo(); - await this.updateUserPhone({ - workerId: userInfo.workerId, - account: phoneRes.data, - phone: phoneRes.data - }) - return true; - } + let areaRes = res1[1].data + return areaRes.data; + }, + async registerUser(params = {}) { + let res = await uni.request({ + url: '/wx/addWorker', + method: 'POST', + data: params + }) + return res[1].data; + }, + async noticeMsg(params = {}) { + let res = await uni.request({ + url: '/wx/noticeMsg', + method: 'POST', + data: params + }) + return res[1].data; + }, + async sendVertifyCode(params = {}) { + let res = await uni.request({ + url: '/tool/sms/send', + method: 'POST', + data: params + }) + return res[1].data; + }, + async realRegisterUser(params = {}) { + let res = await uni.request({ + url: '/worker/register', + method: 'POST', + data: params + }) + return res[1].data; + }, + async appLogin(params = {}) { + let res = await uni.request({ + url: '/worker/login', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryUserInfo(openId, phone) { + let res = await uni.request({ + url: '/wx/getWorkerInfo', + method: 'POST', + data: { + openId: openId, + phone: phone + } + }) + return res[1].data; + }, + async qryUserPhone(code) { + let res = await uni.request({ + url: '/wx/auth/phone', + method: 'GET', + header: { + code: code + } + }) + return res[1].data; + }, + async updateUserPhone(params = {}) { + let res = await uni.request({ + url: '/worker/update', + method: 'POST', + data: params + }) + // 更新用户信息的方法顺便更新本地缓存 + if (res[1].data.code === 0) { + let userInfo = this.getCurUserInfo(); + userInfo.phone = params.phone; + userInfo.account = params.account; + uni.setStorageSync('userProfile', userInfo); + } + return res[1].data; + }, + async storagePhoneIntoUserInfo(code) { + let phoneRes = await this.qryUserPhone(code) + if (phoneRes && phoneRes.data) { + let userInfo = this.getCurUserInfo(); + await this.updateUserPhone({ + workerId: userInfo.workerId, + account: phoneRes.data, + phone: phoneRes.data + }) + return true; + } }, getCurUserInfo() { - let userProfile = uni.getStorageSync('userProfile'); + let userProfile = uni.getStorageSync('userProfile'); + return userProfile; - }, - async refreshCurUserCache() { - let newUserInfo = await this.getCurUserNoCache(); - uni.setStorageSync('userProfile', newUserInfo); - }, - updateCache(cacheKey, cacheVal) { - uni.setStorageSync(cacheKey, cacheVal); - }, - async getCurUserNoCache() { - let userInfo = this.getCurUserInfo(); - let wxGetUserRes = await this.qryUserInfo(userInfo.openId); - if (!wxGetUserRes.data) { - userInfo = null; - } else { - userInfo = { - ...wxGetUserRes.data, - wxLoginCode: userInfo.wxLoginCode - } - } - return userInfo; - }, - async updateCurUserCache() { - let curUserInfo = await this.getCurUserNoCache(); - uni.setStorageSync('userProfile', curUserInfo); - return true; + }, + async refreshCurUserCache() { + let newUserInfo = await this.getCurUserNoCache(); + uni.setStorageSync('userProfile', newUserInfo); + }, + updateCache(cacheKey, cacheVal) { + uni.setStorageSync(cacheKey, cacheVal); + }, + async getCurUserNoCache() { + let userInfo = this.getCurUserInfo(); + let wxGetUserRes = await this.qryUserInfo(userInfo.openId); + if (!wxGetUserRes.data) { + userInfo = null; + } else { + userInfo = { + ...wxGetUserRes.data, + wxLoginCode: userInfo.wxLoginCode + } + } + return userInfo; + }, + async updateCurUserCache() { + let curUserInfo = await this.getCurUserNoCache(); + uni.setStorageSync('userProfile', curUserInfo); + return true; }, async uploadFile(filePath) { let res = await uni.uploadFile({ @@ -305,427 +357,724 @@ export default { filePath: filePath, name: 'uploadFile' }) - let resStr = res[1].data; - let resObj = null; - if (resStr != null && resStr.length > 0) { - try { - resObj = JSON.parse(resStr); - } catch(e) { - console.log(e) - } - } - if (!resObj || resObj.code !== 0) { - uni.showToast({ - icon: 'error', - title: '上传失败' - }) - return ''; - } + let resStr = res[1].data; + let resObj = null; + if (resStr != null && resStr.length > 0) { + try { + resObj = JSON.parse(resStr); + } catch (e) { + console.log(e) + } + } + if (!resObj || resObj.code !== 0) { + uni.showToast({ + icon: 'error', + title: '上传失败' + }) + return ''; + } return resObj.url; + }, + async qrySpecialSkillList(params = { + goodsCategoryId: null + }) { + let res = await uni.request({ + url: '/special/skill/list', + method: 'POST', + data: params + }) + return res[1].data; + }, + async listByStep(params = { + goodsCategoryId: null + }) { + let res = await uni.request({ + url: '/goods/deptcategory/listByStep', + method: 'POST', + data: params + }) + return res[1].data; + }, + async areaListByStep(params = { + parentCode: null + }) { + let res = await uni.request({ + url: '/system/area/app/list', + method: 'POST', + data: params + }) + return res[1].data; + }, + async bindBankCard(params) { + let res = await uni.request({ + url: '/worker/bank/bind', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getBindBankCardByWorkerId(params) { + let res = await uni.request({ + url: '/worker/bank/getByWorkerId', + method: 'POST', + data: params + }) + return res[1].data; + }, + async insuranceUserList(params) { + let res = await uni.request({ + url: '/insurance/user/app/list', + method: 'POST', + data: params + }) + return res[1].data; + }, + async insuranceUserAdd(params) { + let res = await uni.request({ + url: '/insurance/user/add', + method: 'POST', + data: params, + hideLoading: true + }) + return res[1].data; + }, + async addGoods(params) { + let res = await uni.request({ + url: '/goods/goods/addGoods', + method: 'POST', + data: params + }) + return res[1].data; + }, + async addTeam(params = {}) { + let res = await uni.request({ + url: '/worker/team/addTeam', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getTeamPage(params = {}) { + let res = await uni.request({ + url: '/worker/team/getTeamList', + method: 'POST', + data: params, + header: { + pageNum: params.pageNum, + pageSize: params.pageSize + } + }) + return res[1].data; + }, + async updateWorker(params = {}) { + let res = await uni.request({ + url: '/worker/update', + method: 'POST', + data: params + }) + // 更新用户信息的方法顺便更新本地缓存 + if (res[1].data.code === 0) { + let userInfo = this.getCurUserInfo(); + let qryUserInfoRes = await this.qryUserInfo(userInfo.openId); + let newUserInfo = { + ...qryUserInfoRes.data, + wxLoginCode: userInfo.wxLoginCode + }; + uni.setStorageSync('userProfile', newUserInfo); + } + return res[1].data; + }, + async updateWorkerTeam(params = {}) { + let res = await uni.request({ + url: '/worker/team/updateTeam', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryFinancialCount(params = {}) { + let res = await uni.request({ + url: '/financial/detail/count', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryFinancialDetail(params = {}) { + let res = await uni.request({ + url: '/financial/detail/app/list', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryMasterOrderPage(params = {}) { + let res = await uni.request({ + url: '/order/master/app/list', + method: 'POST', + data: params, + header: { + pageNum: params.pageNum, + pageSize: params.pageSize, + orderByColumn: params.orderByColumn ? params.orderByColumn : "", + isAsc: params.isAsc ? params.isAsc : "" + } + }) + return res[1].data; + }, + async getOrderMasterDetail(params = {}) { + let res = await uni.request({ + url: '/order/master/app/detail', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryMixOrderList(params = {}) { + let res = await uni.request({ + url: '/order/app/mix/order/list', + method: 'POST', + data: params, + header: { + orderByColumn: params.orderByColumn ? params.orderByColumn : "", + isAsc: params.isAsc ? params.isAsc : "" + } + }) + return res[1].data; + }, + async qryMixAfterList(params = {}) { + let res = await uni.request({ + url: '/order/app/mix/after/list', + method: 'POST', + data: params, + header: { + orderByColumn: params.orderByColumn ? params.orderByColumn : "", + isAsc: params.isAsc ? params.isAsc : "" + } + }) + return res[1].data; + }, + async updateOrder(params = {}) { + let res = await uni.request({ + url: '/order/master/editOrderMaster', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getCanAssignList(params = {}) { + let res = await uni.request({ + url: '/order/can/assign', + method: 'POST', + data: params + }) + return res[1].data; + }, + async assign(params = {}) { + let res = await uni.request({ + url: '/order/assign', + method: 'POST', + data: params + }) + return res[1].data; }, - async qrySpecialSkillList(params = {goodsCategoryId : null}) { - let res = await uni.request({ - url: '/special/skill/list', - method: 'POST', - data: params - }) + async checkOrderInsurance(params = {}) { + let res = await uni.request({ + url: '/order/master/orderInsurance?orderCode='+params.orderCode, + method: 'POST', + data: params + }) return res[1].data; + }, + async qryDetailOrderPage(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/list', + method: 'POST', + data: params, + header: { + pageNum: params.pageNum, + pageSize: params.pageSize, + orderByColumn: params.orderByColumn ? params.orderByColumn : "", + isAsc: params.isAsc ? params.isAsc : "" + } + }) + return res[1].data; + }, + async updateDetailOrder(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/edit', + method: 'POST', + data: params + }) + return res[1].data; + }, + async applyFinishOrder(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/applyFinishOrder', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getOrderDetail(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/detail', + method: 'POST', + data: params + }) + return res[1].data; + }, + async workerSettled(params = {}) { + let res = await uni.request({ + url: '/worker/settled', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryProductPage(params = {}) { + let res = await uni.request({ + url: '/goods/goods/app/list', + method: 'POST', + data: params, + header: { + pageNum: params.pageNum, + pageSize: params.pageSize + } + }) + return res[1].data; + }, + async editGoods(params = {}) { + let res = await uni.request({ + url: '/goods/goods/app/edit', + method: 'POST', + data: params + }) + return res[1].data; + }, + async qryProductDetail(params = {}) { + let res = await uni.request({ + url: '/goods/goods/app/detail', + method: 'POST', + data: params + }) + return res[1].data; + }, + async updateGoodsStatus(params = {}) { + let res = await uni.request({ + url: '/goods/goods/app/updateStatus', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getWorkerArea(params = {}) { + let res = await uni.request({ + url: '/worker/area/worker', + method: 'GET', + data: params + }) + return res[1].data; + }, + async getWorkerGoodsCategory(params = {}) { + let res = await uni.request({ + url: '/worker/goods/category/worker', + method: 'GET', + data: params + }) + return res[1].data; + }, + async getWorkerSpecialSkill(params = {}) { + let res = await uni.request({ + url: '/worker/special/skill/' + params.workerId, + method: 'POST' + }) + return res[1].data; + }, + async getWorkerAreaEdit(params = {}) { + let res = await uni.request({ + url: '/worker/area/worker/edit', + method: 'GET', + data: params + }) + return res[1].data; + }, + async getWorkerGoodsCategoryEdit(params = {}) { + let res = await uni.request({ + url: '/worker/goods/category/worker/edit', + method: 'GET', + data: params + }) + return res[1].data; + }, + async qrPay(params = {}) { + let res = await uni.request({ + url: '/pay/ali/qr', + method: 'POST', + data: params.orderMasterId + }) + return res[1].data; + }, + async priceAddedQrPay(params = {}) { + let res = await uni.request({ + url: '/pay/ali/addQr', + method: 'POST', + data: params.orderDetailId + }) + return res[1].data; + }, + async updateMasterOrder(params = {}) { + let res = await uni.request({ + url: '/order/master/editOrderMaster', + method: 'POST', + data: params + }) + return res[1].data; + }, + async addWorkerCertify(params = {}) { + let res = await uni.request({ + url: '/worker/certification/app/add', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getWorkerCertify(params = {}) { + let res = await uni.request({ + url: '/worker/certification/app/getByWorkerId', + method: 'POST', + data: params + }) + return res[1].data; + }, + async orderStatistics(params = {}) { + let res = await uni.request({ + url: '/order/app/statistics', + method: 'POST', + data: params + }) + return res[1].data; + }, + async rejectDetailOrder(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/order/reject', + method: 'POST', + data: params + }) + return res[1].data; + }, + async rejectMasterOrderWhenAccepted(params = {}) { + let res = await uni.request({ + url: '/order/master/console/cancel', + method: 'POST', + data: params + }) + return res[1].data; }, - async listByStep(params = {goodsCategoryId : null}) { + async goodsOrderRefund(params = {}) { let res = await uni.request({ - url: '/goods/deptcategory/listByStep', - method: 'POST', - data: params - }) - return res[1].data; - }, - async areaListByStep(params = { parentCode: null }) { - let res = await uni.request({ - url: '/system/area/app/list', - method: 'POST', - data: params - }) - return res[1].data; - }, - async bindBankCard(params) { - let res = await uni.request({ - url: '/worker/bank/bind', - method: 'POST', - data: params - }) - return res[1].data; - }, - async getBindBankCardByWorkerId(params) { - let res = await uni.request({ - url: '/worker/bank/getByWorkerId', - method: 'POST', - data: params - }) - return res[1].data; - }, - async addGoods(params) { - let res = await uni.request({ - url: '/goods/goods/addGoods', - method: 'POST', - data: params - }) - return res[1].data; - }, - async addTeam(params = {}) { - let res = await uni.request({ - url: '/worker/team/addTeam', - method: 'POST', - data: params - }) - return res[1].data; - }, - async getTeamPage(params = {}) { - let res = await uni.request({ - url: '/worker/team/getTeamList', + url: '/order/master/goodsOrderRefund', method: 'POST', data: params, header: { - pageNum: params.pageNum, - pageSize: params.pageSize + 'content-type': 'application/x-www-form-urlencoded' } }) return res[1].data; }, - async updateWorker(params = {}) { + async deleteAttachPrice(params = {}) { let res = await uni.request({ - url: '/worker/update', - method: 'POST', - data: params - }) - // 更新用户信息的方法顺便更新本地缓存 - if (res[1].data.code === 0) { - let userInfo = this.getCurUserInfo(); - let qryUserInfoRes = await this.qryUserInfo(userInfo.openId); - let newUserInfo = { - ...qryUserInfoRes.data, - wxLoginCode: userInfo.wxLoginCode - }; - uni.setStorageSync('userProfile', newUserInfo); - } - return res[1].data; - }, - async updateWorkerTeam(params = {}) { - let res = await uni.request({ - url: '/worker/team/updateTeam', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryFinancialCount(params = {}) { - let res = await uni.request({ - url: '/financial/detail/count', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryFinancialDetail(params = {}) { - let res = await uni.request({ - url: '/financial/detail/app/list', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryMasterOrderPage(params = {}) { - let res = await uni.request({ - url: '/order/master/app/list', + url: '/order/attach/deleteByDetailId', method: 'POST', data: params, header: { - pageNum: params.pageNum, - pageSize: params.pageSize, - orderByColumn: params.orderByColumn ? params.orderByColumn : "", - isAsc: params.isAsc ? params.isAsc : "" + 'content-type': 'application/x-www-form-urlencoded' } }) return res[1].data; + }, + async changeOrderPrice(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/change/price', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getChangeOrderPrice(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/getChangePrice', + method: 'POST', + data: params + }) + return res[1].data; + }, + async getAfterList() { + let res = await uni.request({ + url: '/order/detail/after/list', + method: 'POST', + data: {} + }) + return res[1].data; + }, + async editOrder(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/edit', + method: 'POST', + data: params + }) + return res[1].data; + }, + async editAfterServiceRecord(params = {}) { + let res = await uni.request({ + url: '/worker/record/edit', + method: 'POST', + data: params, + header: { + pageNum: params.pageNum, + pageSize: params.pageSize + } + }) + return res[1].data; }, - async getOrderMasterDetail(params = {}) { + async allocateServiceMoney(params) { let res = await uni.request({ - url: '/order/master/app/detail', + url: '/order/generate/service/order', + method: 'POST', + data: params + }) + return res[1].data; + }, + async checkAuth(authScope, callbackName, callbackSuccessKey) { + let _this = this; + // 通过 wx.getSetting 先查询一下用户是否授权了authScope + let res1 = await wx.getSetting(); + if (res1) { + if (!res1.authSetting[authScope]) { + let res = await _this[callbackName](); + if (res && res[callbackSuccessKey]) { + return res; + } + // 用户授权 + uni.showToast({ + title: '请先授权', + icon: 'none', + duration: 1500 + }) + return 'rejected'; + } else { + return await _this[callbackName](); + } + } + }, + async openAndAuthSetting(authScope) { + wx.openSetting({ + success(res) { + if (res[authScope]) { + return true; + } + } + }) + uni.showToast({ + icon: 'error', + duration: 1500, + title: '授权失败' + }) + return false; + }, + async wxGetLocation() { + let errCode = null; + return new Promise((resolve, reject) => { + wx.getLocation({ + type: 'gcj02', + fail: async (result) => { + if (result.errCode === 2) { + uni.showToast({ + title: '定位获取失败,请确认是否开启定位', + icon: 'none', + duration: 2500 + }) + } + reject(null) + }, + success: async (result) => { + console.log("success", result); + resolve(result) + } + }) + }) + + }, + + async callCustomer(params = {}) { + let res = await uni.request({ + url: '/order/master/callCustomer', + method: 'POST', + data: params + }) + return res[1].data; + }, + + async callDetailCustomer(params = {}) { + let res = await uni.request({ + url: '/order/detail/callCustomer', + method: 'POST', + data: params + }) + return res[1].data; + }, + + async addOrderAttach(params = {}) { + let res = await uni.request({ + url: '/order/attach/appAdd', + method: 'POST', + data: params, + header: { + 'content-type': 'application/x-www-form-urlencoded' + } + }) + return res[1].data; + }, + // 操作流程节点 + async addOrderOperate(params = {}) { + let res = await uni.request({ + url: '/order/operate/app/add', + method: 'POST', + data: params + }) + return res[1].data; + }, + + async returnOrder(params = {}) { + let res = await uni.request({ + url: '/order/detail/app/return', method: 'POST', data: params }) return res[1].data; }, - async qryMixOrderList(params = {}) { - let res = await uni.request({ - url: '/order/app/mix/order/list', - method: 'POST', - data: params, - header: { - orderByColumn: params.orderByColumn ? params.orderByColumn : "", - isAsc: params.isAsc ? params.isAsc : "" - } - }) - return res[1].data; + + // 获取操作流程节点列表 + async getOrderOperate(params = {}) { + let res = await uni.request({ + url: '/order/operate/app/list', + method: 'POST', + data: params + }) + return res[1].data; }, - async qryMixAfterList(params = {}) { + // 验证接单用户保险信息 + async certNoTwoElementVerification(params) { let res = await uni.request({ - url: '/order/app/mix/after/list', - method: 'POST', - data: params, - header: { - orderByColumn: params.orderByColumn ? params.orderByColumn : "", - isAsc: params.isAsc ? params.isAsc : "" - } - }) - return res[1].data; - }, - async updateOrder(params = {}) { - let res = await uni.request({ - url: '/order/master/editOrderMaster', + url: '/tool/ali/certNoTwoElementVerification', method: 'POST', data: params - }) + }) return res[1].data; }, - async getCanAssignList(params = {}) { + async getShopAddressList(params = {}) { let res = await uni.request({ - url: '/order/can/assign', - method: 'POST', - data: params - }) - return res[1].data; - }, - async assign(params = {}) { - let res = await uni.request({ - url: '/order/assign', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryDetailOrderPage(params = {}) { - let res = await uni.request({ - url: '/order/detail/app/list', - method: 'POST', - data: params, - header: { - pageNum: params.pageNum, - pageSize: params.pageSize, - orderByColumn: params.orderByColumn ? params.orderByColumn : "", - isAsc: params.isAsc ? params.isAsc : "" - } - }) - return res[1].data; - }, - async updateDetailOrder(params = {}) { - let res = await uni.request({ - url: '/order/detail/app/edit', - method: 'POST', - data: params - }) - return res[1].data; - }, - async applyFinishOrder(params = {}) { - let res = await uni.request({ - url: '/order/detail/app/applyFinishOrder', - method: 'POST', - data: params - }) - return res[1].data; - }, - async getOrderDetail(params = {}) { - let res = await uni.request({ - url: '/order/detail/app/detail', - method: 'POST', - data: params - }) - return res[1].data; - }, - async workerSettled(params = {}) { - let res = await uni.request({ - url: '/worker/settled', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryProductPage(params = {}) { - let res = await uni.request({ - url: '/goods/goods/app/list', - method: 'POST', - data: params, - header: { - pageNum: params.pageNum, - pageSize: params.pageSize - } - }) - return res[1].data; - }, - async editGoods(params = {}) { - let res = await uni.request({ - url: '/goods/goods/app/edit', - method: 'POST', - data: params - }) - return res[1].data; - }, - async qryProductDetail(params = {}) { - let res = await uni.request({ - url: '/goods/goods/app/detail', - method: 'POST', - data: params - }) - return res[1].data; - }, - async updateGoodsStatus(params = {}) { - let res = await uni.request({ - url: '/goods/goods/app/updateStatus', - method: 'POST', - data: params - }) - return res[1].data; - }, - async getWorkerArea(params = {}) { - let res = await uni.request({ - url: '/worker/area/worker', + url: '/shop/list', method: 'GET', data: params }) return res[1].data; }, - async getWorkerGoodsCategory(params = {}) { + async getMasterShopAddressList(workerId) { let res = await uni.request({ - url: '/worker/goods/category/worker', - method: 'GET', + url: '/shop/worker/'+workerId, + method: 'GET' + }) + return res[1].data; + }, + async addShopAddressList(params = {}) { + let res = await uni.request({ + url: '/shop/add', + method: 'POST', data: params }) return res[1].data; }, - async getWorkerSpecialSkill(params = {}) { + async editShopAddressList(params = {}) { let res = await uni.request({ - url: '/worker/special/skill/' + params.workerId, + url: '/shop/update', + method: 'POST', + data: params + }) + return res[1].data; + }, + async delShopAddressList(customerAddressId) { + let res = await uni.request({ + url: '/shop/delete/'+customerAddressId, method: 'POST' }) return res[1].data; }, - async getWorkerAreaEdit(params = {}) { + async changeInvoiceStatus(params = {}) { let res = await uni.request({ - url: '/worker/area/worker/edit', - method: 'GET', - data: params - }) - return res[1].data; - }, - async getWorkerGoodsCategoryEdit(params = {}) { - let res = await uni.request({ - url: '/worker/goods/category/worker/edit', - method: 'GET', - data: params - }) - return res[1].data; - }, - async qrPay(params = {}) { - let res = await uni.request({ - url: '/pay/ali/qr', - method: 'POST', - data: params.orderMasterId - }) - return res[1].data; - }, - async priceAddedQrPay(params = {}) { - let res = await uni.request({ - url: '/pay/ali/addQr', - method: 'POST', - data: params.orderDetailId - }) - return res[1].data; - }, - async updateMasterOrder(params = {}) { - let res = await uni.request({ - url: '/order/master/editOrderMaster', + url: '/order/master/changeInvoiceStatus', method: 'POST', data: params }) return res[1].data; }, - async addWorkerCertify(params = {}) { + async transferOrder(params = {}) { let res = await uni.request({ - url: '/worker/certification/app/add', + url: '/order/master/transferOrder', method: 'POST', data: params }) return res[1].data; }, - async getWorkerCertify(params = {}) { + async getByCustomerAddressId(customerAddressId) { let res = await uni.request({ - url: '/worker/certification/app/getByWorkerId', + url: '/customer/address/getByCustomerAddressId', method: 'POST', - data: params - }) - return res[1].data; - }, - async orderStatistics(params = {}) { - let res = await uni.request({ - url: '/order/app/statistics', - method: 'POST', - data: params - }) - return res[1].data; - }, - async rejectDetailOrder(params = {}) { - let res = await uni.request({ - url: '/order/detail/app/order/reject', - method: 'POST', - data: params - }) - return res[1].data; - }, - async rejectMasterOrderWhenAccepted(params = {}) { - let res = await uni.request({ - url: '/order/master/console/cancel', - method: 'POST', - data: params, + data: { + customerAddressId: customerAddressId + }, header: { 'content-type': 'application/x-www-form-urlencoded' } }) return res[1].data; }, - async changeOrderPrice(params = {}) { + async getShopDetailWithDistance(params = {}) { let res = await uni.request({ - url: '/order/detail/app/change/price', + url: '/shop/getShopDetailWithDistance', method: 'POST', data: params }) return res[1].data; }, - async getChangeOrderPrice(params = {}) { + async getShopsByGoodsId(params = {}) { let res = await uni.request({ - url: '/order/detail/app/getChangePrice', + url: '/goods/goods/getShopsByGoodsId', method: 'POST', data: params }) return res[1].data; }, - async getAfterList() { + async getDeliveryFlow(trackingNumber) { + // "trackingNumber": "YT8774104632324", let res = await uni.request({ - url: '/order/detail/after/list', - method: 'POST', + url: '/order/logistics/query/'+trackingNumber, + method: 'GET', data: {} }) return res[1].data; }, - async editOrder(params = {}) { + async workerResendPlan(params = {}) { let res = await uni.request({ - url: '/order/detail/app/edit', + url: '/worker/record/workerResendPlan', method: 'POST', data: params }) return res[1].data; }, - async editAfterServiceRecord(params = {}) { + async editAfterServiceGoodsRecord(params = {}) { let res = await uni.request({ - url: '/worker/record/edit', + url: '/worker/record/editGoods', method: 'POST', data: params, header: { @@ -735,112 +1084,29 @@ export default { }) return res[1].data; }, - async checkAuth(authScope, callbackName, callbackSuccessKey) { - let _this = this; - // 通过 wx.getSetting 先查询一下用户是否授权了authScope - let res1 = await wx.getSetting(); - if (res1) { - if (!res1.authSetting[authScope]) { - let res = await _this[callbackName](); - if (res && res[callbackSuccessKey]) { - return res; - } - // 用户授权 - uni.showToast({ - title: '请先授权', - icon: 'none', - duration: 1500 - }) - return 'rejected'; - } else { - return await _this[callbackName](); - } - } - }, - async openAndAuthSetting(authScope) { - wx.openSetting({ - success(res) { - if (res[authScope]) { - return true; - } - } - }) - uni.showToast({ - icon: 'error', - duration: 1500, - title: '授权失败' - }) - return false; - }, - async wxGetLocation() { - let errCode = null; - let res = await wx.getLocation({ - type: 'gcj02', - fail: async (result) => { - if (result.errCode === 2) { - uni.showToast({ - title: '定位获取失败,请确认是否开启定位', - icon: 'none', - duration: 2500 - }) - } - }, - success: async (result) => { - console.log("success"); - return result; - } - }) - // res.latitude, res.longitude - console.log(res) - return res; - }, - - async callCustomer(params = {}) { + async saveMasterWorkerRemark(params = {}) { let res = await uni.request({ - url: '/order/master/callCustomer', + url: '/order/master/saveMasterWorkerRemark', method: 'POST', data: params }) return res[1].data; }, - - async callDetailCustomer(params = {}) { + async getAndSetWorkerInfo(workerId) { let res = await uni.request({ - url: '/order/detail/callCustomer', + url: '/worker/detail/'+ workerId, + method: 'GET' + }) + let curUserInfo = res[1].data.data; + uni.setStorageSync('userProfile', curUserInfo); + return res[1].data; + }, + async workerConfirmReceive(params = {}) { + let res = await uni.request({ + url: '/worker/record/workerConfirmReceive', method: 'POST', data: params }) return res[1].data; - }, - - async addOrderAttach(params = {}) { - let res = await uni.request({ - url: '/order/attach/appAdd', - method: 'POST', - data: params, - header: { - 'content-type': 'application/x-www-form-urlencoded' - } - }) - return res[1].data; - }, - // 操作流程节点 - async addOrderOperate(params = {}) { - let res = await uni.request({ - url: '/order/operate/app/add', - method: 'POST', - data: params - }) - return res[1].data; - }, - - // 获取操作流程节点列表 - async getOrderOperate(params = {}) { - let res = await uni.request({ - url: '/order/operate/app/list', - method: 'POST', - data: params - }) - return res[1].data; - } -} + }, +} \ No newline at end of file diff --git a/common/js/validate.js b/common/js/validate.js index 68423e4..e9d22ac 100644 --- a/common/js/validate.js +++ b/common/js/validate.js @@ -15,6 +15,9 @@ export default { } return true; }, + validPhone: function(email) { + return contactNumRegex.test(email); + }, validIdCard: function(idCardNum) { return idCardRegex.test(idCardNum); diff --git a/components/goods-card/horizontal-goods-card.vue b/components/goods-card/horizontal-goods-card.vue index 917e69f..1ca081d 100644 --- a/components/goods-card/horizontal-goods-card.vue +++ b/components/goods-card/horizontal-goods-card.vue @@ -7,7 +7,24 @@ {{product.totalName}} {{product.remark}} - + + + {{getInstallServiceName(product.goods.installService)}} + + + {{getDeliveryName(product.goods.deliveryService)}} + + diff --git a/pages/demand-center/accept-demand-center.vue b/pages/demand-center/accept-demand-center.vue index e8ce336..d4644aa 100644 --- a/pages/demand-center/accept-demand-center.vue +++ b/pages/demand-center/accept-demand-center.vue @@ -81,11 +81,23 @@ 有待付款 款已付清 + + + + + + 姓名:{{task.customerName}} + + + 保险要求 + 详情... + + - {{task.address}} + {{task.provinceName + task.cityName + task.countryName + task.streetName + task.address}} @@ -96,7 +108,10 @@ {{task.customerName}} {{task.customerPhone.substring(0, 3) + "****" + task.customerPhone.substring(7)}} - + + @@ -200,20 +215,24 @@ - + + + + diff --git a/pages/my/master-occupancy-parts.vue b/pages/my/master-occupancy-parts.vue new file mode 100644 index 0000000..dfdda24 --- /dev/null +++ b/pages/my/master-occupancy-parts.vue @@ -0,0 +1,741 @@ + + + + + diff --git a/pages/my/master-occupancy.vue b/pages/my/master-occupancy.vue index 5471f8b..5f898af 100644 --- a/pages/my/master-occupancy.vue +++ b/pages/my/master-occupancy.vue @@ -270,7 +270,8 @@ }, async loadServAreas() { let res = await this.$request.getWorkerAreaEdit({ - workerId: this.curUserInfo.workerId + workerId: this.curUserInfo.workerId, + type: 1 }); let servArea = []; for(let i = 0; i < res.data.length; i++) { @@ -294,7 +295,8 @@ }, async loadServSkills() { let res = await this.$request.getWorkerGoodsCategoryEdit({ - workerId: this.curUserInfo.workerId + workerId: this.curUserInfo.workerId, + type: 1 }); let servSkill = []; for(let i = 0; i < res.data.length; i++) { @@ -592,12 +594,13 @@ this.curStep = this.curStep === 0 ? 0 : --this.curStep; }, validData(data) { + console.log(data); let errMsg = null; if (!data.workerAreas || !data.workerAreas.length) { errMsg = '请至少添加一个服务区域(需要勾选到服务街道)'; } if (this.curStep > 0) { - if (!data.goodsCategories || !data.goodsCategories.length) { + if (!(data.serviceCategoryIds && data.serviceCategoryIds.length)) { errMsg = '请至少添加一个服务技能(需要勾选到三级类目)'; } } @@ -631,10 +634,11 @@ // 服务品类参数 this.servSkill.forEach((item) => { item.subSubTypeIds.forEach((goodsCategoryId) => { - goodsCategories.push({ - workerId: workerId, - goodsCategoryId: goodsCategoryId - }); + // goodsCategories.push({ + // workerId: workerId, + // goodsCategoryId: goodsCategoryId + // }); + goodsCategories.push(goodsCategoryId) }); }); // 特殊技能参数 @@ -652,7 +656,7 @@ let params = { workerId: workerId, workerAreas: workerAreas, - goodsCategories: goodsCategories, + serviceCategoryIds: goodsCategories, // specialSkills: specialSkills } diff --git a/pages/my/master-settled-info.vue b/pages/my/master-settled-info.vue index 3281ac9..9360551 100644 --- a/pages/my/master-settled-info.vue +++ b/pages/my/master-settled-info.vue @@ -8,14 +8,14 @@ 服务区域: - + {{strReplace(item.mergerName, "-", ",")}} 服务技能: - + {{item.mergeName}} @@ -60,12 +60,15 @@ curUserInfo: {}, servAreas: [], servSkills: [], - servSpecialSkills: [] + servSpecialSkills: [], + serviceType: null } }, - // onLoad() { - // this.loadData(); - // }, + onLoad(options) { + if(options.type) { + this.serviceType = options.type + } + }, onShow() { this.loadData(); }, @@ -74,23 +77,26 @@ this.curUserInfo = await this.$request.getCurUserNoCache(); this.loadServAreas(); this.loadServSkills(); - this.loadSpecialSkills(); + // this.loadSpecialSkills(); }, async loadServAreas() { let res = await this.$request.getWorkerArea({ - workerId: this.curUserInfo.workerId + workerId: this.curUserInfo.workerId, + serviceType: this.serviceType }); this.servAreas = res.data; }, async loadServSkills() { let res = await this.$request.getWorkerGoodsCategory({ - workerId: this.curUserInfo.workerId + workerId: this.curUserInfo.workerId, + serviceType: this.serviceType }); this.servSkills = res.data; }, async loadSpecialSkills() { let res = await this.$request.getWorkerSpecialSkill({ - workerId: this.curUserInfo.workerId + workerId: this.curUserInfo.workerId, + serviceType: this.serviceType }); this.servSpecialSkills = res.data; }, @@ -100,10 +106,16 @@ current: e.currentTarget.dataset.url }); }, - navigate2ApplySettled() { - uni.navigateTo({ - url: '/pages/my/master-occupancy' - }) + navigate2ApplySettled() { + if(this.serviceType == 1) { + uni.navigateTo({ + url: '/pages/my/master-occupancy' + }) + } else { + uni.navigateTo({ + url: '/pages/my/master-occupancy-parts' + }) + } }, strReplace(wholeStr, newStr, oldStr) { if (wholeStr && wholeStr.length > 0) { diff --git a/pages/my/new-serv-parts.vue b/pages/my/new-serv-parts.vue new file mode 100644 index 0000000..7a52d2e --- /dev/null +++ b/pages/my/new-serv-parts.vue @@ -0,0 +1,1301 @@ + + + + + diff --git a/pages/my/new-serv.vue b/pages/my/new-serv.vue index a3a1fec..5580d93 100644 --- a/pages/my/new-serv.vue +++ b/pages/my/new-serv.vue @@ -28,54 +28,62 @@ :value="formData.categoryConcatName" placeholder="请选择类目" :class="goodsId ? 'bg-gray' : ''"/> - - - - - - - {{item.goodsCategoryName}} - ` - - - - - - - * - - - - - - - - - - - - - - - * - - - - - + + + + + + + + {{item.goodsCategoryName}} + + + + + + + + * + + + + + + + + + + + + + + + * + + + + + + + + + + + + + @@ -134,6 +142,24 @@ + + + 到店服务 + + + + + 服务店铺* + + + @@ -197,7 +223,8 @@ 区域描述* - + + @@ -326,7 +353,8 @@ }, data() { return { - goodsId: null, + goodsId: null, + type: 1, formData: { servName: '', servDesc: '', @@ -342,7 +370,10 @@ detailDesc: '', descImgList: [], coverImgList: [], - videoList: [] + videoList: [], + shopId: '', + shopName: '', + storeService: '' }, servArea: [], sysInfo: null, @@ -404,22 +435,40 @@ }], warrantyPeriodList: [{ code: 1, - name: '15天' + name: '即时验收' }, { code: 2, - name: '30天' + name: '验收后离店' }, { code: 3, - name: '45天' + name: '完工24小时' }, { code: 4, - name: '3个月' + name: '3天' }, { code: 5, - name: '6个月' + name: '7天' }, { code: 6, + name: '15天' + }, { + code: 7, + name: '30天' + }, { + code: 8, + name: '45天' + }, { + code: 9, + name: '3个月' + }, { + code: 10, + name: '6个月' + }, { + code: 11, name: '12个月' + }, { + code: 12, + name: '24个月' }], expectDurationList: [{ name: '12点前下单,预计当天下午上门/服务' @@ -429,17 +478,40 @@ name: '现时下单,预计次日上门/服务' }, { name: '现时下单,预计后日上门/服务' - }], + }, { + name: '到店服务,按预约服务', + }, { + name: '到店服务,到达即服务' + }], + storeServiceList: [ + { + code: 1, + name: '到店服务' + }, { + code: 2, + name: '到店+配送(服务)' + }, { + code: 3, + name: '到店+上门(服务)' + } + ], curUserInfo: {}, bankCard: null, - certifyInfo: null + certifyInfo: null, + myShopList: [] } }, onLoad(options) { if (options && options.goodId) { this.goodsId = options.goodId; + } + if(options && options.type) { + this.type = options.type } this.loadData(this.goodsId); + }, + onShow() { + this.loadShopList(); }, methods: { async loadData(goodId) { @@ -450,10 +522,19 @@ } this.checkBankAndCertify(); this.loadCategoryList(); - this.loadRegionList(); + this.loadRegionList(); // TODO 如果存在goodId说明是修改,需要查询good信息进行回显 // this.categoryList = await this.$api.data('categoryList'); // this.regionList = await this.$api.data('regionList'); + }, + async loadShopList() { + let res = await this.$request.getMasterShopAddressList(this.$request.getCurUserInfo().workerId); + this.myShopList = res.data.map(item => {return {name: item.shopName, code: item.shopId}}); + }, + goToShopList() { + uni.navigateTo({ + url: '/pages/my/shop-list' + }) }, async getCurGoodsInfo(goodsId) { let res1 = await this.$request.qryProductDetail({ @@ -468,7 +549,7 @@ }); // 查询选中的第三级类目下的所有规格 let res2 = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: goods.deptGoodsCategoryId }); let specsList = res2.data; @@ -501,7 +582,12 @@ } newAreaList.push(o); }); - console.log(newAreaList) + console.log(newAreaList) + + let stopService = null + if(goods.storeService) { + stopService = this.storeServiceList.find(i => i.code == goods.storeService) + } this.formData = { servName: goods.goodsName, @@ -529,7 +615,9 @@ imgList: goods.lbUrl, descImgList: goods.detailUrl, videoList: goods.goodsVideoUrl ? [goods.goodsVideoUrl] : [], - // status: 0, + // status: 0, + shopId: goods.shopId ? {code: goods.shopId, name: goods.shopName} : null, + storeService: goods.storeService ? stopService : null } }, async checkBankAndCertify() { @@ -552,24 +640,24 @@ }, async loadCategoryList(idArr) { let typeList = await this.$request.listByStep({ - type: 1 + type: this.type }); typeList = typeList.data; let col1Id = idArr ? idArr[0] : typeList[0].goodsCategoryId; let subTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: col1Id }); subTypeList = subTypeList.data; let col2Id = idArr ? idArr[1] : subTypeList[0].goodsCategoryId; let subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: col2Id }); subSubTypeList = subSubTypeList.data; let col3Id = idArr ? idArr[2] : subSubTypeList[0].goodsCategoryId; let thirdTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: col3Id }); thirdTypeList = thirdTypeList.data; @@ -603,7 +691,7 @@ // 查询最后一级品类 let res = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: chosenCategory[chosenCategory.length - 1].goodsCategoryId }); this.formData.specsList = res.data; @@ -613,14 +701,14 @@ if (colObj.column == 0) { // 通过一级查询二级,通过二级查三级 let subTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: this.categoryList[0][colObj.value].goodsCategoryId }); subTypeList = subTypeList.data; let subSubTypeList = []; if (subTypeList && subTypeList.length) { subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: subTypeList[0].goodsCategoryId }); subSubTypeList = subSubTypeList.data; @@ -633,7 +721,7 @@ } else if (colObj.column == 1) { // 通过二级查三级 let subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.type, goodsCategoryId: this.categoryList[1][colObj.value].goodsCategoryId }); subSubTypeList = subSubTypeList.data; @@ -763,7 +851,15 @@ mask: true }); this.$request.uploadFile(ev.path).then((url) => { - this.formData[this.curImgListField].push(url); + if(this.curImgListField.indexOf('specsList') > -1) { + // 规格上传图片 + const specsListIndex = this.curImgListField.split(':')[1] + const temp = this.formData.specsList[specsListIndex] + temp.imageUrl = url + this.$set(this.formData.specsList, specsListIndex, temp) + } else { + this.formData[this.curImgListField].push(url); + } uni.hideLoading(); }); // url设置为空,隐藏控件 @@ -858,6 +954,8 @@ errMsg = '服务活动不能为空'; } else if (!data.expectDuration) { errMsg = '服务时效不能为空'; + } else if(data.storeService && !data.shopId) { + errMsg = '到店店铺不能为空'; } else if (!data.goodsAreaList || !data.goodsAreaList.length) { errMsg = '上架区域填写不完整'; } else if (!data.areaDesc) { @@ -1004,8 +1102,15 @@ goodsVideoUrl: goodsVideoUrl, status: 0, remark: this.formData.detailDesc, - areaDesc: this.formData.areaDesc - } + areaDesc: this.formData.areaDesc, + type: this.type, + shopId: this.formData.shopId ? this.formData.shopId.code : '', + shopName: this.formData.shopId ? this.formData.shopId.name : '', + storeService: this.formData.storeService ? this.formData.storeService.code : '' + } + + // console.log(params); + // return let res = null; if (this.goodsId) { @@ -1073,7 +1178,8 @@ .certern-height { max-height: 520rpx; - overflow: hidden; + overflow: hidden; + position: relative; } .long-btn { diff --git a/pages/my/personal-info.vue b/pages/my/personal-info.vue index 5f294f9..b7a1f3f 100644 --- a/pages/my/personal-info.vue +++ b/pages/my/personal-info.vue @@ -28,6 +28,11 @@ 电子邮箱 + + 店铺管理 + + + @@ -68,6 +73,11 @@ url: '/pages/my/account-security' }) }, + showShopList() { + uni.navigateTo({ + url: '/pages/my/shop-list' + }) + }, async submit() { let res = await this.$request.updateWorker({ workerId: this.curUserInfo.workerId, diff --git a/pages/my/shop-list.vue b/pages/my/shop-list.vue new file mode 100644 index 0000000..18144eb --- /dev/null +++ b/pages/my/shop-list.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/pages/order-manage/cancel-order.vue b/pages/order-manage/cancel-order.vue index 571dae0..9896d41 100644 --- a/pages/order-manage/cancel-order.vue +++ b/pages/order-manage/cancel-order.vue @@ -5,7 +5,7 @@ 返回 申请退单 - + 申请原因 - {{formData.reasonObj.reasonId ? formData.reasonObj.reasonName : '请选择' }} + {{formData.returnReason ? formData.returnReason : '请选择' }} - 具体原因 - + 具体原因(请填写退单退货的原因) + 上传凭证(选填) @@ -45,7 +46,7 @@ - + @@ -54,48 +55,50 @@ export default { data() { return { - good: {}, + // good: {}, formData: { imgList: [], - reasonObj: {} + returnReason: '', + returnReasonDetail: '' }, - cancelReasonList: [{ - reasonId: 1, - reasonName: '客户的时间我无法配合' - }, { - reasonId: 2, - reasonName: '客户多次爽约' - }, { - reasonId: 3, - reasonName: '客户不能确定时间' - }, { - reasonId: 4, - reasonName: '客户多天未能联系上' - }, { - reasonId: 5, - reasonName: '客户说无此服务' - }, { - reasonId: 6, - reasonName: '客户要求已超出服务范围' - }, { - reasonId: 7, - reasonName: '环境问题无法施工' - }, { - reasonId: 8, - reasonName: '技能原因无法完成' - }, { - reasonId: 9, - reasonName: '分岐未能谈妥' - }, { - reasonId: 10, - reasonName: '不愿支付费用' - }] + cancelReasonList: [], + orderId: null, + orderType: null, + detailPlaceholder: '', + isDetailOrder: null, + isSelfAcceptOrder: false } }, onLoad(options) { - if (options && options.params) { - this.good = JSON.parse(decodeURIComponent(options.params)).orderInfo; + // if (options && options.params) { + // this.good = JSON.parse(decodeURIComponent(options.params)).orderInfo; + // } + + if (options && options.orderId) { + this.orderId = options.orderId } + if(options && options.orderType) { + let reasonList + if(options.orderType === '1') { + reasonList = ['商家原因,没时间备货!', '商家原因,缺货了!', '商家原因,发货时间迟了!', '商家原因,物流原因,长时间滞留路途!', '客户原因,无法接受质量!', '客户原因,商品无法满足期望!'] + } else { + reasonList = ['师傅原因,时间排不上!', '师傅原因,技术不能解决问题!', '师傅原因,迟到了无法服务!', '客户原因,约好时间没遵守!', '客户原因,要求无法达成,无法沟通。'] + } + this.cancelReasonList = reasonList.map((i , index)=> { + return { + reasonId: index + 1, + reasonName: i + } + }) + this.orderType = options.orderType + } + if(options && options.isDetailOrder) { + this.isDetailOrder = options.isDetailOrder + } + if(options && options.isSelfAcceptOrder) { + this.isSelfAcceptOrder = options.isSelfAcceptOrder + } + }, methods: { chooseImgList(e) { @@ -105,15 +108,18 @@ sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: (res) => { - let tempFilePaths = []; - res.tempFiles.forEach((fileObj) => { - tempFilePaths.push(fileObj.tempFilePath) - }) - if (this.formData.imgList.length != 0) { - this.formData.imgList = this.formData.imgList.concat(tempFilePaths) - } else { - this.formData.imgList = tempFilePaths - } + uni.showLoading({ + title: '上传中', + mask: true + }); + res.tempFiles.forEach((fileObj, index) => { + this.$request.uploadFile(fileObj.tempFilePath).then((url) => { + this.formData.imgList.push(url); + if (index === res.tempFiles.length - 1) { + uni.hideLoading(); + } + }); + }); } }); }, @@ -137,7 +143,71 @@ }) }, reasonChange(e) { - this.formData.reasonObj = this.cancelReasonList[e.detail.value] + this.formData.returnReason = this.cancelReasonList[e.detail.value].reasonName + }, + submitCancelOrder() { + if(!this.formData.returnReason) { + uni.showToast({ + title: '请选择申请原因', + icon: 'none' + }) + return + } + if(!this.formData.returnReasonDetail) { + uni.showToast({ + title: '请填写具体原因', + icon: 'none' + }) + return + } + + // if(this.isDetailOrder == 1 && this.isSelfAcceptOrder) { + // uni.showModal({ + // title: '提示', + // content: this.orderType == 1 ? '确认后订单回到你拣货/发货栏,你可重新派单或操作彻底退单' : '确认后订单回到你未约/未排栏,你可重新派单或操作彻底退单', + // success: (res) => { + // if(res.confirm) { + // this.cancelSend() + // } + // }, + // }) + // } else { + this.cancelSend() + // } + }, + async cancelSend() { + const params = { + id: this.orderId, + returnImages: this.formData.imgList.length ? this.formData.imgList.toString() : '', + returnReason: this.formData.returnReason, + returnReasonDetail: this.formData.returnReasonDetail + } + let funcName = 'rejectMasterOrderWhenAccepted' + if(this.isDetailOrder == 1) { + funcName = 'rejectDetailOrder' + } + let res = await this.$request[funcName](params); + if (res && res.code === 0) { + uni.showToast({ + icon: 'none', + title: '退单成功', + duration: 1000 + }) + await this.$request.addOrderOperate({ + orderId: this.orderId, + orderType: '01', + content: '师傅退单' + }) + uni.navigateBack({ + delta: -1 + }) + } else { + uni.showToast({ + icon: 'none', + title: res.msg, + duration: 2000 + }) + } } }, } diff --git a/pages/order-manage/choose-shop.vue b/pages/order-manage/choose-shop.vue new file mode 100644 index 0000000..8cb56d2 --- /dev/null +++ b/pages/order-manage/choose-shop.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/pages/order-manage/components/afterServiceRecord.vue b/pages/order-manage/components/afterServiceRecord.vue new file mode 100644 index 0000000..a7e9188 --- /dev/null +++ b/pages/order-manage/components/afterServiceRecord.vue @@ -0,0 +1,261 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/components/afterServiceRecordGoods.vue b/pages/order-manage/components/afterServiceRecordGoods.vue new file mode 100644 index 0000000..294b0c9 --- /dev/null +++ b/pages/order-manage/components/afterServiceRecordGoods.vue @@ -0,0 +1,394 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/dispatch-order.vue b/pages/order-manage/dispatch-order.vue index b7867cf..c190779 100644 --- a/pages/order-manage/dispatch-order.vue +++ b/pages/order-manage/dispatch-order.vue @@ -12,7 +12,8 @@ {{item.goodsName}} {{item.goodsNum}} - + {{item.goodsNum}} + @@ -24,7 +25,7 @@ 派单价格 - + @@ -35,6 +36,18 @@ + + + + + 转入大厅 + + + + + + + @@ -115,6 +128,10 @@ orderNow: { type: Boolean, default: false + }, + orderMode: { + type: String, + default: '' } }, data() { @@ -171,7 +188,36 @@ }); this.searchedMembers = res.rows; }, + assignTransfer(member) { + let goodsToAssign = []; + this.pickedList.forEach((item) => { + goodsToAssign.push({ + goodsStandardId: item.goodsStandardId, + num: item.goodsNum + }) + }); + if (this.dispatchTotalPrice) { + let params = { + goodsList: goodsToAssign, + workerId: member ? member.workerId : null, + totalPay: this.dispatchTotalPrice, + orderMasterId: this.curOrder.orderMasterId, + isAll: 1, + workerName: member ? member.workerName : null + } + this.$emit('assignWork', params); + } else { + uni.showToast({ + title: '请填写派单价格', + icon: 'none' + }) + } + }, assignWork(member) { + if(this.orderMode === 'transferOrder') { + this.assignTransfer(member) + return + } let goodsToAssign = []; // 标识是否派完所有goods,1为派完,0为未派完 let isAll = 1; diff --git a/pages/order-manage/modal/accept-order-notice.vue b/pages/order-manage/modal/accept-order-notice.vue index 109e72e..4682f4c 100644 --- a/pages/order-manage/modal/accept-order-notice.vue +++ b/pages/order-manage/modal/accept-order-notice.vue @@ -6,8 +6,15 @@ 接单成功 - 请在30分钟内联系客户,预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! - 该单需上门收款。请在30分钟内联系客户,并告知客户属上门收款单(金额以客户端弹出的金额为准或上门后师傅端弹出的二维码内金额支付)预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! + + + + + + + 同意售后 + + + + + + + 退款金额: + {{data.afterServiceRecordList[0].refund ? data.afterServiceRecordList[0].refund : data.payMoney}} + + + 警报:该单关联其它订单,客户申请的退款金额有效,有疑问可先沟通派单公司(详情处电话),如确认同意,最大退款额以本单接单额原路退回,其余需退的或你仍有收益则由派单公司处理,如更改退单额,需先协商一致,余额部分完单后计入你账户。 + + + 收货状态: + + + + + 同意选项: + + + + + 更改退款金额: + + + + + + 原因选择: + + + + + + + + + + + + + 取消 + 确认 + + + + + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/allocate-service-money.vue b/pages/order-manage/modal/allocate-service-money.vue new file mode 100644 index 0000000..47d4fa9 --- /dev/null +++ b/pages/order-manage/modal/allocate-service-money.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/pages/order-manage/modal/apply-charge.vue b/pages/order-manage/modal/apply-charge.vue index 3dc001d..43003a7 100644 --- a/pages/order-manage/modal/apply-charge.vue +++ b/pages/order-manage/modal/apply-charge.vue @@ -1,62 +1,80 @@ + + diff --git a/pages/order-manage/modal/delivery_flow_detail.vue b/pages/order-manage/modal/delivery_flow_detail.vue new file mode 100644 index 0000000..06d2db2 --- /dev/null +++ b/pages/order-manage/modal/delivery_flow_detail.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/pages/order-manage/modal/dispatch-order-sure.vue b/pages/order-manage/modal/dispatch-order-sure.vue new file mode 100644 index 0000000..b83feb9 --- /dev/null +++ b/pages/order-manage/modal/dispatch-order-sure.vue @@ -0,0 +1,271 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/dispatch-order-to-self.vue b/pages/order-manage/modal/dispatch-order-to-self.vue new file mode 100644 index 0000000..9fff497 --- /dev/null +++ b/pages/order-manage/modal/dispatch-order-to-self.vue @@ -0,0 +1,323 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/edit-time-arrange.vue b/pages/order-manage/modal/edit-time-arrange.vue index e8a688f..8b0b804 100644 --- a/pages/order-manage/modal/edit-time-arrange.vue +++ b/pages/order-manage/modal/edit-time-arrange.vue @@ -14,8 +14,8 @@ - - 拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时! + + {{ orderType === 1 ? '修改或重排发货时间,需与客户协商一致并同意,否则引起客诉你负全责。' : '拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!'}} @@ -57,7 +57,7 @@ @@ -68,7 +68,7 @@ - 无法排单 + {{orderType === 1 ? '取消' : '无法排单'}} 确认 @@ -96,6 +96,10 @@ ifRollback2WS: { type: Boolean, default: false + }, + orderType: { + type: Number, + default: 0 } }, data() { @@ -165,7 +169,11 @@ }, cannotArrangeTime(e) { this.resetData(); - this.$emit('showArrangeFailTime', e) + if(this.orderType === 1) { + this.hideModal(e) + } else { + this.$emit('showArrangeFailTime', e) + } }, async arrangeTime(e) { if (!(this.time || this.timeRange)) { diff --git a/pages/order-manage/modal/handoff-goods-record.vue b/pages/order-manage/modal/handoff-goods-record.vue new file mode 100644 index 0000000..752d070 --- /dev/null +++ b/pages/order-manage/modal/handoff-goods-record.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/insurance-detail.vue b/pages/order-manage/modal/insurance-detail.vue new file mode 100644 index 0000000..feec16e --- /dev/null +++ b/pages/order-manage/modal/insurance-detail.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/pages/order-manage/modal/insurance-retinue.vue b/pages/order-manage/modal/insurance-retinue.vue new file mode 100644 index 0000000..0589fdf --- /dev/null +++ b/pages/order-manage/modal/insurance-retinue.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/pages/order-manage/modal/insurance-vertify.vue b/pages/order-manage/modal/insurance-vertify.vue new file mode 100644 index 0000000..6dffc9e --- /dev/null +++ b/pages/order-manage/modal/insurance-vertify.vue @@ -0,0 +1,114 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/new-serv-price-offline.vue b/pages/order-manage/modal/new-serv-price-offline.vue index 6b4c415..bbac87a 100644 --- a/pages/order-manage/modal/new-serv-price-offline.vue +++ b/pages/order-manage/modal/new-serv-price-offline.vue @@ -21,13 +21,15 @@ 上门有加单,请客户支付 加单总额: - - - 修改报价 - - 确认报价 + + + @@ -37,13 +39,15 @@ 上门报价类,给现场客户的报价 报价总额: - - - 修改报价 - - 确认报价 + + + @@ -107,7 +111,8 @@ newPriceForA1: null, newPrice: null, showPayQrcodeModal: false, - remark: "" + remark: "", + hadSetPriceChange: false } }, methods: { @@ -121,10 +126,13 @@ this.payAction = priceObj.type; let money = priceObj.changeMoney; if (this.payAction === 1) { - this.newPriceForA1 = money; + this.newPriceForA1 = money + (this.priceObj.attachmentMoney || 0); } else if (this.payAction === 2) { this.newPriceForA2 = money; - } + } + this.hadSetPriceChange = true + } else { + this.hadSetPriceChange = false } }, resetData() { @@ -146,7 +154,8 @@ this.init(res.data); } }, - changePayAction(payAction) { + changePayAction(payAction) { + if(this.hadSetPriceChange) return this.payAction = payAction; }, async changeOrderPrice(newPrice) { @@ -202,8 +211,13 @@ goFinishOrder() { this.$emit('finishOrder', this.data); }, - clearCurAddedPrice() { - this.changeOrderPrice(0); + async clearCurAddedPrice() { + if(this.priceObj.attachmentMoney) { + await this.$request.deleteAttachPrice({ + orderDetailId: this.data.orderDetailId + }) + } + this.changeOrderPrice(0) } } } diff --git a/pages/order-manage/modal/new-serv-price-online.vue b/pages/order-manage/modal/new-serv-price-online.vue index 7b9e478..4e3658d 100644 --- a/pages/order-manage/modal/new-serv-price-online.vue +++ b/pages/order-manage/modal/new-serv-price-online.vue @@ -21,12 +21,14 @@ 上门有加单,请客户支付 加单总额: - - - 修改报价 - 确认报价 + + + @@ -36,12 +38,14 @@ 上门报价类,给下单方报价 报价总额: - - - 修改报价 - 确认报价 + + + @@ -104,7 +108,8 @@ newPriceForA1: null, newPrice: null, showPayQrcodeModal: false, - remark: "" + remark: "", + hadSetPriceChange: false } }, methods: { @@ -118,11 +123,15 @@ this.payAction = priceObj.type; let money = priceObj.changeMoney; if (this.payAction === 1) { - this.newPriceForA1 = money; + this.newPriceForA1 = money + (this.priceObj.attachmentMoney || 0); } else if (this.payAction === 2) { this.newPriceForA2 = money; } + this.hadSetPriceChange = true + } else { + this.hadSetPriceChange = false } + console.log(this.hadSetPriceChange); }, resetData() { this.payAction = 0; @@ -144,6 +153,7 @@ } }, changePayAction(payAction) { + if(this.hadSetPriceChange) return this.payAction = payAction; }, async directlyFinish(e) { @@ -174,7 +184,8 @@ changeMoney: newPrice, type: this.payAction, remark: this.remark - }); + }); + if (res && res.code === 0) { uni.showToast({ icon: 'success', @@ -199,8 +210,13 @@ goFinishOrder() { this.$emit('finishOrder', this.data); }, - clearCurAddedPrice() { - this.changeOrderPrice(0); + async clearCurAddedPrice() { + if(this.priceObj.attachmentMoney) { + await this.$request.deleteAttachPrice({ + orderDetailId: this.data.orderDetailId + }) + } + this.changeOrderPrice(0) } } } diff --git a/pages/order-manage/modal/re-finish-submit.vue b/pages/order-manage/modal/re-finish-submit.vue new file mode 100644 index 0000000..ce94cdb --- /dev/null +++ b/pages/order-manage/modal/re-finish-submit.vue @@ -0,0 +1,154 @@ + + + + + \ No newline at end of file diff --git a/pages/order-manage/modal/reject-after-sale.vue b/pages/order-manage/modal/reject-after-sale.vue index d8cfcad..267753c 100644 --- a/pages/order-manage/modal/reject-after-sale.vue +++ b/pages/order-manage/modal/reject-after-sale.vue @@ -10,7 +10,7 @@ - 原因选择: + *原因选择: @@ -42,7 +42,7 @@ - + @@ -67,7 +67,7 @@ }, data: { type: Object, - default: {} + default: () => {} } }, data() { @@ -132,19 +132,20 @@ }) }, async submit(e) { - let imgObjList = []; - this.imgList.forEach(url => { - imgObjList.push({ - imgUrl: url, - imgUploadBy: 2 + if(!this.remark) { + uni.showToast({ + icon: 'none', + duration: 3000, + title: '请输入拒绝原因' }) - }) + return + } let res = await this.$request.editAfterServiceRecord({ id: this.data.afterServiceRecordList[0].id, workerFeedbackReasonType: this.reasonType, workerFeedbackReason: this.remark, workerFeedbackResult: 0, - imgsList: imgObjList, + workerFeedbackImages: this.imgList.length ? this.imgList.toString() : '', updateBy: 2 }); if (res && res.code === 0) { diff --git a/pages/order-manage/modal/task_process_detail.vue b/pages/order-manage/modal/task_process_detail.vue index fb3ad22..dd6aaf8 100644 --- a/pages/order-manage/modal/task_process_detail.vue +++ b/pages/order-manage/modal/task_process_detail.vue @@ -34,7 +34,7 @@ default: false }, arr: { - type: Object, + type: Array, default: () => [] } }, diff --git a/pages/order-manage/modal/time-arrange.vue b/pages/order-manage/modal/time-arrange.vue index c320d04..1ac03b7 100644 --- a/pages/order-manage/modal/time-arrange.vue +++ b/pages/order-manage/modal/time-arrange.vue @@ -14,8 +14,8 @@ - - 拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时! + + {{orderType === 0 ? '拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!' : '需排货的,请输入发货日期与发货时间,发货期将同步通知客户,系统会提醒您发货!'}} @@ -48,9 +48,10 @@ - 无法排单 + 无法排单 + 今日20点前发货 按原时间上门 + @click="hideModal" v-if="orderType === 0">按原时间上门 确认 @@ -74,6 +75,10 @@ curDate: { type: String, default: '' + }, + orderType: { + type: Number, + default: 0 } }, data() { @@ -156,6 +161,14 @@ this.$emit('editServTime', this.data.orderMasterId, [this.expectTimeStart, this.expectTimeEnd], false, this.data); this.hideModal(e); }, + eightClockDelivery(e) { + let nowDate = new Date(); + const today = nowDate.getFullYear() + '-' + (nowDate.getMonth() + 1) + '-' + nowDate.getDate() + const expectStart = today + ' 19:00:00'; + const expectEnd = today + ' 20:00:00'; + this.$emit('editServTime', this.data.orderMasterId, [expectStart, expectEnd], false, this.data); + this.hideModal(e); + }, makePhoneCall(order) { if (order.orderDetailId == null) { this.$request.callCustomer({ diff --git a/pages/order-manage/order-manage-parts.vue b/pages/order-manage/order-manage-parts.vue new file mode 100644 index 0000000..10b045d --- /dev/null +++ b/pages/order-manage/order-manage-parts.vue @@ -0,0 +1,2108 @@ + + + + + diff --git a/pages/order-manage/order-manage.vue b/pages/order-manage/order-manage.vue index 774156a..b293414 100644 --- a/pages/order-manage/order-manage.vue +++ b/pages/order-manage/order-manage.vue @@ -4,7 +4,7 @@ 返回 - 接收的任务 + 服务订单 @@ -97,8 +97,11 @@ {{order.goodsName}} - - + + @@ -120,17 +123,25 @@ 有待付款 款已付清 + 超时未接单 - 超时未预约 + 超时未预约 超时未排单 超时未预约 超时未上门 超时未完单 + + 售后超时 + - 售后发起中 + 售后已同意 售后已拒绝 - 售后纠纷中 - 售后已完成 + 售后纠纷中 + 售后已完成 - - - 姓名:{{order.customerName}} + + + + 姓名:{{order.customerName}} + + + 保险要求 + 详情... + + - {{order.address}} - + {{order.provinceName + order.cityName + order.countryName + order.streetName + order.address}} + @@ -189,11 +210,12 @@ 距完单分帐: - + 改价 --> - - - - + - + - - - + + + + + - - + + + @@ -263,22 +290,25 @@ - + + - + - + + - + - 备注:{{order.customerRemark}} + {{order.workerRemark || '可输入本单备注语'}} + @@ -452,6 +513,13 @@ + + + + + + + @@ -475,7 +543,11 @@ - + + + + + @@ -495,6 +567,13 @@ import rejectAfterSale from '@/pages/order-manage/modal/reject-after-sale.vue'; import onDoorImmediately from '@/pages/order-manage/modal/on-door-immediately.vue'; import acceptOrderNotice from '@/pages/order-manage/modal/accept-order-notice.vue'; + import insuranceDetail from '@/pages/order-manage/modal/insurance-detail.vue'; + import insuranceRetinue from '@/pages/order-manage/modal/insurance-retinue.vue'; + import insuranceVertify from '@/pages/order-manage/modal/insurance-vertify.vue'; + import allocateServiceMoney from '@/pages/order-manage/modal/allocate-service-money.vue'; + import dispatchOrderToSelf from '@/pages/order-manage/modal/dispatch-order-to-self.vue'; + import reFinishSubmit from '@/pages/order-manage/modal/re-finish-submit.vue' + import afterServiceRecord from './components/afterServiceRecord.vue'; export default { components: { @@ -512,7 +591,14 @@ agreeAfterSale, rejectAfterSale, onDoorImmediately, - acceptOrderNotice + acceptOrderNotice, + insuranceDetail, + insuranceRetinue, + insuranceVertify, + allocateServiceMoney, + dispatchOrderToSelf, + reFinishSubmit, + afterServiceRecord }, data() { return { @@ -586,6 +672,7 @@ scrollLeft: 0, stickyTop: this.CustomBar, tabCur: 0, + orderType: 0, stateCur: null, showTimeArrangeModal: false, showArrangeFailTimeModal: false, @@ -595,6 +682,9 @@ showEditTimeArrangeModal: false, showOnDoorNoticeModal: false, showAcceptOrderNoticeModal: false, + showInsuranceDetail: false, + showInsuranceRetinue: false, + showInsuranceVertify: false, sendUrgentMsgModal: false, agreeAfterSale: false, rejectAfterSale: false, @@ -603,20 +693,34 @@ curDate: '', curUserInfo: {}, orderStatistics: {}, - hasAuthLocation: true + hasAuthLocation: true, + storageArgs: null, + showAllocateServiceMoney: false, + showDispathToSelf: false, + showEditWorkerRemark: false, + showReFinishSubmit: false } }, onLoad(option) { if (option && option.tabCur) { + this.stateCur = null; this.tabCur = option.tabCur; + } else if(option && option.stateCur) { + this.tabCur = null; + this.stateCur = option.stateCur; + } else if(option && option.orderType) { + this.orderType = option.orderType; } this.loadData(); this.bindEvent(); }, onShow() { - if(this.orderList.length){ + const isDetailPage = uni.getStorageSync('isDetailPage'); + console.log(isDetailPage); + if(this.orderList.length && !isDetailPage){ this.reloadMasterOrderPage(); } + uni.setStorageSync('isDetailPage', '') }, onUnload() { this.offBindEvent(); @@ -626,7 +730,25 @@ // 获取当前登录用户信息 this.curUserInfo = this.$request.getCurUserInfo(); // let myTeamInfo = await this.$api.data('myTeamInfo'); - // this.myTeamMembers = myTeamInfo.members; + // this.myTeamMembers = myTeamInfo.members; + // const res = await this.$request.getWorkerInfo(this.curUserInfo.workerId) + // if(res.data.loginStatus == 1) { + // // 禁止登录,退出登录 + // uni.clearStorageSync('userProfile'); + // uni.showToast({ + // icon: 'none', + // title: '您已被禁止登录', + // duration: 3000, + // success() { + // setTimeout(() => { + // uni.reLaunch({ + // url: '/pages/login/login' + // }) + // }, 3000) + // } + // }) + // return + // } this.myOrders = await this.$api.data('myOrders'); // this.orderList = this.myOrders.orderList; // this.areaList = await this.$api.data('areaList'); @@ -639,16 +761,30 @@ // }); // } // 初始化订单列表 - this.loadMasterOrderPage({ - orderStatus: this.subStateList[0].code - }); - // 初始化品类及区域列表 - this.loadCategoryList(); - this.loadRegionList(); - // 初始化指派成员 - this.loadTeamMembers(); - // 订单统计 - this.loadOrderStatistics(); + // this.loadMasterOrderPage({ + // orderStatus: this.subStateList[0].code + // }); + // // 初始化品类及区域列表 + // this.loadCategoryList(); + // this.loadRegionList(); + // // 初始化指派成员 + // this.loadTeamMembers(); + // // 订单统计 + // this.loadOrderStatistics(); + Promise.allSettled([ + // 初始化订单列表 + this.loadMasterOrderPage({ + orderStatus: this.subStateList[0].code + }), + // 订单统计 + this.loadOrderStatistics() + ]).then(() => { + // 初始化品类及区域列表 + this.loadCategoryList(); + this.loadRegionList(); + // 初始化指派成员 + this.loadTeamMembers(); + }) }, reloadMasterOrderPage(params = {}) { // this.pageParams = []; @@ -715,7 +851,7 @@ params.isMonitoredOrder = true; } else if (this.stateList[this.stateCur].code === 103) { // 超时单 - params.isMonitoredOrder = true; + // params.isMonitoredOrder = true; params.orderByColumn = "createTime"; params.isAsc = "desc"; } else if (this.stateList[this.stateCur].code === 0) { @@ -749,6 +885,7 @@ params.isAsc = "asc"; } } + params.orderType = this.orderType; try { let res = null; let tmpStateCur = this.stateCur; @@ -824,24 +961,24 @@ }, async loadCategoryList(idArr) { let typeList = await this.$request.listByStep({ - type: 1 + type: this.orderType == 0 ? 1 : 2 }); typeList = typeList.data; let col1Id = idArr ? idArr[0] : typeList[0].goodsCategoryId; let subTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: col1Id }); subTypeList = subTypeList.data; let col2Id = idArr ? idArr[1] : subTypeList[0].goodsCategoryId; let subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: col2Id }); subSubTypeList = subSubTypeList.data; let col3Id = idArr ? idArr[2] : subSubTypeList[0].goodsCategoryId; let thirdTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: col3Id }); thirdTypeList = thirdTypeList.data; @@ -878,7 +1015,9 @@ this.myTeamMembers = res.rows; }, async loadOrderStatistics() { - let res = await this.$request.orderStatistics(); + let res = await this.$request.orderStatistics({ + orderType: this.orderType + }); this.orderStatistics = res.data; }, bindEvent() { @@ -925,14 +1064,14 @@ if (colObj.column == 0) { // 通过一级查询二级 let subTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: this.categoryList[0][colObj.value].goodsCategoryId }); subTypeList = subTypeList.data; let subSubTypeList = []; if (subTypeList && subTypeList.length) { subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: subTypeList[0].goodsCategoryId }); subSubTypeList = subSubTypeList.data; @@ -945,7 +1084,7 @@ } else if (colObj.column == 1) { // 通过二级查三级 let subSubTypeList = await this.$request.listByStep({ - type: 1, + type: this.orderType == 0 ? 1 : 2, goodsCategoryId: this.categoryList[1][colObj.value].goodsCategoryId }); subSubTypeList = subSubTypeList.data; @@ -988,7 +1127,13 @@ let date = new Date(); this.curDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + " 00:00:00"; }, - showModal(e, orderInfo) { + async showModal(e, orderInfo, isCheckOrderInsurance) { + if(isCheckOrderInsurance) { + let resCheck = await this.$request.checkOrderInsurance({ + orderCode: orderInfo.orderMasterCode + }); + if(resCheck.code !== 0) return; + } this.getCurDateAndTime(); if (orderInfo) { this.curOrder = orderInfo; @@ -1139,13 +1284,24 @@ this.$refs.payQrcode.showQrcode(res.data.expend.qrcode_url); } }, + async insuranceRetinueAdd(e, orderInfo) { + this.showModal(e, orderInfo); + if(orderInfo.orderDetailId) { + this.$nextTick(() => { + this.$refs.insuranceRetinueRef.initData() + }) + } + }, showServOrderDetail(order) { + uni.setStorageSync('isDetailPage', true); + uni.navigateTo({ url: '/pages/order-manage/serv-detail?order=' + encodeURIComponent(JSON.stringify(order)) }) }, async finishOrder(order) { let checkRes = await this.checkBankAndCertify(); + console.log(checkRes); if (!checkRes) { return; } @@ -1166,11 +1322,13 @@ this.$refs.vertifyCertify.showModal(); return false; } else if (this.certifyInfo.status != 1) { - uni.showToast({ - icon: 'none', - title: '实名认证审核通过后才可进行操作', - duration: 2500 - }) + setTimeout(() => { + uni.showToast({ + icon: 'none', + title: '实名认证审核通过后才可进行操作', + duration: 2500 + }) + }, 500); return false; } else if (!this.bankCard || !this.bankCard.bankNum) { this.$refs.vertifyBankBind.showModal(); @@ -1178,7 +1336,86 @@ } return true; }, - async acceptOrder(e, order, id, code, status, funName) { + certVertifySuccess(data) { + const cacheArgs = Array.from(this.storageArgs) + const sendArgs = cacheArgs.length > 6 ? cacheArgs.slice(0,-1) : cacheArgs + this.acceptOrder(...sendArgs, data) + this.showInsuranceVertify = false + }, + varifyDetailOrderUser() { + const remark = this.curUserInfo.remark ? JSON.parse(this.curUserInfo.remark) : {certNo: '',certName: ''} + if(remark.certNo && remark.certName) { + return { + check: true, + ...remark + } + } else { + // 没有身份信息,让填写 + return { + check: false, + ...remark + } + } + }, + async acceptOrder(e, order, id, code, status, funName, certData = {}) { + // 如果是配件订单,先拆分订单 + if(order.orderType === 1 && order.hasServiceOrder === 0) { + this.curOrder = order; + this.showAllocateServiceMoney = true; + return + } + if(order.orderDetailId && order.insuranceId) { + // 子单并且订单有保险 + const detailUserStatus = this.varifyDetailOrderUser() + if(detailUserStatus.check) { + const validUser = certData.certNo && certData.certName ? certData : detailUserStatus + const res = await this.$request.insuranceUserAdd({ + idCardNum: validUser.certNo, + phone: this.curUserInfo.phone, + name: validUser.certName, + orderDetailId: order.orderDetailId + }) + if (res.code === 0) { + // 增员完毕,保险已生效 + } else { + uni.showToast({ + icon: 'none', + title: '保险未响应,请再次点接单', + }) + + // 没有身份信息,让用户填写 + // this.storageArgs = arguments; + // this.showInsuranceVertify = true + return + } + } else { + // 没有身份信息,让用户填写 + this.storageArgs = arguments; + this.showInsuranceVertify = true + return + } + } + + if(order.insuranceId) { + // 订单有保险校验保险信息 + const varifyData = await this.$request.certNoTwoElementVerification({ + workerId: this.curUserInfo.workerId, + ...certData + }) + if(varifyData && varifyData.code === 0 && varifyData.data === '身份证二要素校验失败!') { + // 验证不通过,弹出输入弹窗 + uni.showToast({ + icon: 'none', + title: '身份信息校验失败,请重新输入', + duration: 2500 + }) + this.storageArgs = arguments; + this.showInsuranceVertify = true + return + } + } + + this.storageArgs = null; let res = await this.$request[funName]({ id: id, orderStatus: status, @@ -1287,6 +1524,10 @@ } }, async assignWork2MySelf(orderInfo) { + let resCheck = await this.$request.checkOrderInsurance({ + orderCode: orderInfo.orderMasterCode + }); + if(resCheck.code !== 0) return; let res = await this.$request.getCanAssignList({ orderMasterId: orderInfo.orderMasterId }); @@ -1313,9 +1554,8 @@ return await this.assignWork(params); }, async rejectMasterOrder(order) { - let res = await this.$request.updateOrder({ - id: order.orderMasterId, - workerId: -1 + let res = await this.$request.rejectMasterOrderWhenAccepted({ + id: order.orderMasterId }); if (res && res.code === 0) { this.reloadMasterOrderPage(); @@ -1354,27 +1594,63 @@ }) } }, - async rejectMasterOrderWhenAccepted(order) { - let res = await this.$request.rejectMasterOrderWhenAccepted({ - id: order.orderMasterId - }); - if (res && res.code === 0) { - this.reloadMasterOrderPage(); - uni.showToast({ - icon: 'none', - title: '退单成功', - duration: 1000 - }) - this.addOrderOperate({ - orderId: order.orderMasterId, - orderType: '01', - content: '师傅退单' + rejectMasterOrderWhenAccepted(order) { + if(order.orderDetailId == null && this.tabCur === 0) { + // 到店服务主单退单的那个退单键。和商品有派安装单的时候退单的退单键 + if(order.goods.storeService) { + uni.showModal({ + title: '提示', + content: `1.你的订单属到店服务,整单退单请把所有派出子单退回后,让客户点“取消订单”键。\n2.如派出子单已完成结算支付则客户无法“取消订单”,且已完成订单的金额与分销金额无法系统退回。非客户责任的建议你线下退全款并完成订单(等于你承担无法退回的分销费用)!`, + success: (res) => { + + } + }) + return; + } + } + if(order.masterWorkerId === order.workerId) { + uni.showModal({ + title: '提示', + content: order.orderType == 1 ? '确认后订单回到你拣货/发货栏,你可重新派单或操作彻底退单' : '确认后订单回到你未约/未排栏,你可重新派单或操作彻底退单', + success: async (res) => { + if(res.confirm) { + let res + if(order.orderDetailId) { + res = await this.$request.rejectDetailOrder({ + id: order.orderDetailId + }); + } else { + res = await this.$request.rejectMasterOrderWhenAccepted({ + id: order.orderMasterId + }); + } + if (res && res.code === 0) { + this.reloadMasterOrderPage(); + uni.showToast({ + icon: 'none', + title: '退单成功', + duration: 1000 + }) + // this.addOrderOperate({ + // orderId: order.orderMasterId, + // orderType: '01', + // content: '师傅退单' + // }) + } else { + uni.showToast({ + icon: 'none', + title: res.msg, + duration: 2000 + }) + } + } + } }) } else { - uni.showToast({ - icon: 'none', - title: res.msg, - duration: 2000 + const orderId = order.orderDetailId ? order.orderDetailId : order.orderMasterId + const isDetailOrder = order.orderDetailId ? 1 : 0 + uni.navigateTo({ + url: '/pages/order-manage/cancel-order?orderId='+orderId+'&orderType=0&isDetailOrder='+isDetailOrder }) } }, @@ -1506,6 +1782,67 @@ this.tabCur = curTab; this.stateCur = null; this.reloadMasterOrderPage(); + }, + async serveringReturn(order) { + const res = await this.$request.returnOrder({ + id: order.orderDetailId + }) + if (res && res.code === 0) { + uni.showToast({ + icon: 'success', + title: '操作成功', + duration: 1000 + }) + this.addOrderOperate({ + orderId: order.orderDetailId, + orderType: '02', + content: '提交退回' + }) + } else { + uni.showToast({ + icon: 'none', + title: '操作失败', + duration: 1000 + }) + } + }, + updateOrderWorkerRemark(order, index) { + this.curOrder = order; + this.curOrder.currentIndex = index; + this.showEditWorkerRemark = true; + this.$refs.editOrderRemarkPopup.open() + }, + async updateOrderWorkerRemarkOpreation(input) { + let reqFunName = "saveMasterWorkerRemark", id; + if (this.curOrder.orderDetailId) { + reqFunName = "updateDetailOrder"; + id = this.curOrder.orderDetailId; + } else { + id = this.curOrder.orderMasterId; + } + // 确定参数 + let params = { + id: id, + workerRemark: input + } + + let res = await this.$request[reqFunName](params); + if (res.code === 0) { + uni.showToast({ + icon: 'success', + title: '操作成功', + duration: 1000 + }) + const currentOrder = this.orderList[this.curOrder.currentIndex] + currentOrder.workerRemark = input + this.set(this.orderList, this.curOrder.currentIndex, currentOrder) + } else { + uni.showToast({ + icon: 'none', + title: '操作失败', + duration: 1000 + }) + } } } } @@ -1541,5 +1878,10 @@ right: 25rpx; top: 25rpx; z-index: 99; + } + .order-name { + display: flex; + justify-content: space-between; + align-items: center; } diff --git a/pages/order-manage/serv-detail.vue b/pages/order-manage/serv-detail.vue index b1e2e78..bbd5b38 100644 --- a/pages/order-manage/serv-detail.vue +++ b/pages/order-manage/serv-detail.vue @@ -4,7 +4,7 @@ 返回 - 服务订单详情 + {{order.orderType === 0 ? '服务订单详情' : '商品订单详情'}} @@ -37,9 +37,10 @@ {{servDetail.goodsName}} 已完成 确认中 - 服务中 - 待上门 - 未约/未排 + {{order.orderType === 0 ? '服务中' : '发货中'}} + {{order.orderType === 0 ? '待上门' : '待发货'}} + {{order.orderType === 0 ? '未约/未排' : '拣货/发货'}} + 已取消 - 服务地址:{{servDetail.address}} + 服务地址:{{servDetail.provinceName + servDetail.cityName + servDetail.countryName + servDetail.streetName + servDetail.address}} 客户:{{servDetail.customerName}} - {{servDetail.customerPhone.substring(0, 3) + "****" + servDetail.customerPhone.substring(7)}} - + {{servDetail.customerPhone.substring(0, 3) + "****" + servDetail.customerPhone.substring(7)}} + - + + + + 派单公司:{{servDetail.masterCompanyName}} + {{servDetail.masterCompanyPhone}} + + + 派单公司:{{servDetail.masterCompanyName}} {{servDetail.masterWorkerPhone}} - - - - 预约时间:{{servDetail.expectTimeStartFront + '~' + servDetail.expectTimeEndFront}} - 预约时间:{{servDetail.expectTimeStartFront}} - - - - - 上门时间:{{servDetail.workBeginTime}} + + - + - 服务金额: + {{order.orderType === 0 ? '服务金额' : '货品金额'}}: {{servDetail.payAddMoney}} 【订单加价,单独到账】 @@ -93,7 +109,7 @@ {{servDetail.serverMoney}} - 加减费用:-3 [ @@ -107,8 +123,25 @@ 加减费用:+{{item.changeMoney}}[订单加价] - - + --> + + + + + + + + + + + + + + + 订单备注: {{servDetail.customerRemark}} + + + @@ -120,10 +153,114 @@ - - - 订单备注: {{servDetail.remark}} + + + + + 安装/服务/施工门店 + + + + + + + + + 客户已选: {{servDetail.serviceShop.shopName}} + + + + 距离客户 + {{servDetail.serviceShop.distance}} + + + + {{servDetail.serviceShop.provinceName + servDetail.serviceShop.cityName + servDetail.serviceShop.countryName + servDetail.serviceShop.streetName + servDetail.serviceShop.address}} + + + 店长:{{servDetail.serviceShop.phone}} + + + + + + + + + 安装/服务/施工门店 + + + + + + + + + 客户已选: {{servDetail.shop.shopName}} + + + + 距离您 + {{servDetail.shop.distance}} + + + + {{servDetail.shop.provinceName + servDetail.shop.cityName + servDetail.shop.countryName + servDetail.shop.streetName + servDetail.shop.address}} + + + 店长:{{servDetail.shop.phone}} + + + + + + + + + @@ -131,14 +268,26 @@ 加价记录 - + 加价金额: - {{changeRecord.changeMoney}} + {{addRecord.changeMoney + (addRecord.attachmentMoney || 0)}} + + + {{addRecord.reason.split('含')[1]}}: + {{addRecord.changeMoney}} 加价备注: - {{changeRecord.remark}} + {{addRecord.remark}} + + + + + + + + @@ -165,7 +314,20 @@ - + + + - + - 服务记录 + {{order.orderType === 0 ? '服务记录' : '发货记录'}} 撤单 已完成 待确认 - 服务中 - 待上门 - 未约/未排 + {{servDetail.orderType === 0 ? '服务中' : '发货中'}} + {{servDetail.orderType === 0 ? '待上门' : '待发货'}} + {{servDetail.orderType === 0 ? '未约/未排' : '拣货/发货'}} 待接单 @@ -342,14 +563,24 @@ 售后已同意 售后已拒绝 售后纠纷中 - 售后已完成 - - - 超时未接单 - 超时未预约 - 超时未上门 - 超时未完单 + 售后已完成 + + 售后超时 师傅:{{item.workerName}} @@ -361,9 +592,9 @@ 服务金额: {{item.payMoney}} - 预约时间:{{item.expectTimeStartFront + '~' + item.expectTimeEndFront}} + 预约时间:{{item.expectTimeStartFront}} 预约时间:{{item.expectTimeStartFront}} - 上门时间:{{item.workBeginTime}} + {{order.orderType === 1 ? '发货时间' : '上门时间'}}:{{item.workBeginTime}} 完成时间:{{item.workFinishTime}} @@ -377,12 +608,24 @@ 加价金额: + {{changeRecord.changeMoney + (changeRecord.attachmentMoney || 0)}} + + + {{changeRecord.reason.split('含')[1]}}: {{changeRecord.changeMoney}} 加价备注: {{changeRecord.remark}} + + + + + + + + @@ -409,7 +652,15 @@ - + + + + + + + + 发货方式: + 发快递/物流 + 送货上门 + 客户自提 + + + + + + + + + + 发货备注:{{servDetail.deliveryRemark}} + + 快递单号:{{servDetail.trackingNumber}} + 查询 + + + + + + 交货记录 + + + + + + + + + 交货备注:{{servDetail.handoverRemark}} + + 订单编码:{{servDetail.orderDetailCode}} 订单编码:{{servDetail.orderMasterCode}} + 原订单编码:{{servDetail.originalOrderMasterCode}} 订单时间:{{servDetail.createTime}} @@ -576,7 +881,7 @@ 订单管理 - 立即上门 + {{order.orderType === 0 ? (servDetail.goods.storeService ? '立即服务' : '立即上门') : '立即发货'}} - - + + - + + + + + + + diff --git a/static/add-img.png b/static/add-img.png new file mode 100644 index 0000000000000000000000000000000000000000..af8489eb8da0500b4af1ab965023a03a92247b6e GIT binary patch literal 470 zcmV;{0V)28P)Px$kV!;AR9HvNmr<63APhy5+1NN68=xE0ZfuwnF%l3^pq28~dVoA$Zh|5V9ymBY z+$TWW2@obwsO6#W6JV@e11k(-evklTH6VO| zj;tU`8AILV0B_D9@&8g!ko?fRZUJFK3L5Nz34eOeOP2r{+`;tR6!`0v-H5FZ-D_YV z2I+Xy`A*5CyP#pUG&ztvjZ8pX=c(Xp^=$73mmv&aCeCZW(CJ+Hwg_+?EPTakDaj@Q zt$}jusvQ_AfIxZ2IK2z<&E}PI4nT(=CX}mpj>Khl-