Commit 3cf2ef5f authored by Facius's avatar Facius
parents 97a3f481 3920bcd9
...@@ -5,7 +5,8 @@ const UNI_APP = { ...@@ -5,7 +5,8 @@ const UNI_APP = {
// banshou: 'https://m.banshou.com', //扳手app // banshou: 'https://m.banshou.com', //扳手app
}, },
systemUrl: { systemUrl: {
apiUrl: 'http://192.168.1.22', //java端域名请求头 // apiUrl: 'http://192.168.1.22', //java端域名请求头
apiUrl: 'http://apidoc.banshouhui.com:3000/mock/31', // mock端域名请求头
}, },
qn_base_url: 'https://qn-static.banshouhui.com/self-support/' qn_base_url: 'https://qn-static.banshouhui.com/self-support/'
} }
......
...@@ -5,7 +5,8 @@ const UNI_APP = { ...@@ -5,7 +5,8 @@ const UNI_APP = {
banshou: 'https://m.test.ibanshou.cn', //扳手app banshou: 'https://m.test.ibanshou.cn', //扳手app
}, },
systemUrl: { systemUrl: {
apiUrl: 'https://system.dev.banshouhui.com', //java端域名请求头 // apiUrl: 'https://system.dev.banshouhui.com', //java端域名请求头
apiUrl: 'http://apidoc.banshouhui.com:3000/mock/31', // mock端域名请求头
}, },
qn_base_url: 'https://qn-static.banshouhui.com/self-support/' qn_base_url: 'https://qn-static.banshouhui.com/self-support/'
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
import "./../.env.js"; import "./../.env.js";
import { AnalysysAgent } from "@/utils/analysys_paas.js"; import { AnalysysAgent } from "@/utils/analysys_paas.js";
import util from "@/utils/util.js"; import util from "@/utils/util.js";
import login from "@/utils/login.js";
export default { export default {
globalData: { globalData: {
// 开发环境 // 开发环境
...@@ -73,16 +74,19 @@ export default { ...@@ -73,16 +74,19 @@ export default {
} }
}, },
}, },
onLaunch: function () { onLaunch: async function () {
// 应用初始化(全局只触发一次) // 应用初始化(全局只触发一次)
AnalysysAgent.registerSuperProperty("platform", "self-support"); AnalysysAgent.registerSuperProperty("platform", "self-support");
this.getSystemInfo() this.getSystemInfo()
// 版本更新 // 版本更新
this.updateApp(); this.updateApp();
}, },
onShow: function () { onShow: async function () {
// 应用启动,或从后台进入前台显示 // 应用启动,或从后台进入前台显示
this.autoLogin();
// 等待自动授权登录接口调用结束
await this.autoLogin();
}, },
onHide: function () { onHide: function () {
// 应用从前台进入后台 // 应用从前台进入后台
...@@ -129,48 +133,38 @@ export default { ...@@ -129,48 +133,38 @@ export default {
}, },
/** /**
* 用户自动登录 * 微信用户自动登录
*/ */
autoLogin() { async autoLogin() {
let that = this; let that = this;
uni.login({ await login.oauth().then(async res => {
async success(res) { if (res.code) {
if (res.code) { let params = {
let params = { code: res.code,
code: res.code, wxAppNo: that.globalData.wxAppNo, // 自营平台小程序
wxAppNo: that.globalData.wxAppNo, // 自营平台小程序 };
}; let result = await that.$u.api.loginWechatAuth(params)
let result = await that.$u.api.loginWechatAuth(params); if (result && result.code == 200 && result.data) {
if (result) { that.setUserData(result.data);
if (result.code == 200 && result.data) { }
that.setUserData(result.data); } else {
} uni.showModal({
} else { title: "登录失败",
uni.showModal({ content: "未获取到code",
title: "请求失败", });
content: result.message, }
showCancel: false, })
});
}
uni.hideLoading();
} else {
uni.showModal({
title: "登录失败",
content: "未获取到code",
});
}
},
fail() {},
});
}, },
setUserData(userInfo) { setUserData(userInfo) {
if (userInfo && userInfo.token) { if (userInfo && userInfo.token) {
// 如果已经登录则直接获取相关信息 // 如果已经登录则直接获取相关信息
util.setOpenid(userInfo.wxopenid);
this.$u.vuex('vuex_token', userInfo.token); this.$u.vuex('vuex_token', userInfo.token);
uni.setStorageSync("user-info", userInfo); this.$u.vuex('vuex_user', userInfo);
this.$u.vuex('vuex_wx_uid', userInfo.wxopenid);
} else { } else {
this.$u.vuex('vuex_token', ''); this.$u.vuex('vuex_token', '');
this.$u.vuex('vuex_user', null);
this.$u.vuex('vuex_wx_uid', '');
} }
}, },
......
...@@ -12,8 +12,10 @@ let learnApiFun = function(vm){ ...@@ -12,8 +12,10 @@ let learnApiFun = function(vm){
let ChapterDetails = async (params = {}) => await vm.$u.get(collegeApiUrl+'/v1/chapter-sections',params); let ChapterDetails = async (params = {}) => await vm.$u.get(collegeApiUrl+'/v1/chapter-sections',params);
/* 获取课程节信息*/ /* 获取课程节信息*/
let CourseSection = async (params = {}) => await vm.$u.get(collegeApiUrl+'/v1/section-details',params); let CourseSection = async (params = {}) => await vm.$u.get(collegeApiUrl+'/v1/section-details',params);
/* 更新学习情况*/
let updateLearnCourses = async (params = {}) => await vm.$u.post(collegeApiUrl+'/v1/update-learn-courses',params);
const learnApi = { const learnApi = {
getTrainingNoticeList,CourseList,ChapterDetails,CourseSection getTrainingNoticeList,CourseList,ChapterDetails,CourseSection,updateLearnCourses
} }
return learnApi return learnApi
} }
......
import util from '@/utils/util.js' import util from '@/utils/util.js'
let orderApiFun = function(vm){ let orderApiFun = function(vm){
let listByRecommendOrder = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/recommend/order', params); let listByRecommendOrder = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/recommend/order', params);
/** /**
* 工单数量查询接口 * 工单数量查询接口
*/ */
let listOrderCount = async (params = {}) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/queryOrdersCount/V2', params); let listOrderCount = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/queryOrdersCount/V2', params);
/** /**
* 工单列表接口 http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/revision/{token}/list * 工单列表接口 http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/revision/{token}/list
*/ */
let listOrder = async (params = {}) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/revision/'+ vm.vuex_token+'/list', params); let listOrder = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/revision/list', params);
/** /**
* 获取师傅的预约日历 * 获取师傅的预约日历
*/ */
let workerCalendar = async (params = {}) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/'+ vm.vuex_token+'/wokerOrder/appointment/calendar', params); let workerCalendar = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/'+ vm.vuex_token+'/wokerOrder/appointment/calendar', params);
/** /**
* 师傅预约 * 师傅预约
*/ */
let workerAppointment = async (params = {}) => await vm.$u.post('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/traceAndAppointment/traceOrder/'+ vm.vuex_token+'/order/{orderId}', params,{'content-type': 'application/x-www-form-urlencoded'}); let workerAppointment = async (params = {}) => await vm.$u.post('/wxh-worker-rest/rest/order/traceAndAppointment/traceOrder/'+ vm.vuex_token+'/order/{orderId}', params,{'content-type': 'application/x-www-form-urlencoded'});
// 联系顾客时间更新接口,暂时没有 // 联系顾客时间更新接口,暂时没有
/** /**
* 师傅签到接口 * 师傅签到接口
*/ */
let maintainWorkerCheckin = async (params = {},orderId) => await vm.$u.post('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/'+orderId+'/maintainWorkerCheckin', params,{'content-type': 'application/x-www-form-urlencoded'}); let maintainWorkerCheckin = async (params = {},orderId) => await vm.$u.post(prefix + '/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/'+orderId+'/maintainWorkerCheckin', params,{'content-type': 'application/x-www-form-urlencoded'});
/** /**
* 订单详情查询 * 订单详情查询
*/ */
let orderDetail = async (params = {}) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/revision/'+ vm.vuex_token+'/'+params.orderId, params); let orderDetail = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/revision/'+ vm.vuex_token+'/'+params.orderId, params);
/* 过程反馈查询接口 */
let feedbackConfig = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rst/order/v2/getFeedBack/' + vm.vuex_token, params)
/** /**
* 查询工单操作记录列表接口 * 查询工单操作记录列表接口
*/ */
let listOrderRecord = async (params = {}) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/record/'+ vm.vuex_token+'/listOrderRecord/'+params.orderId, params); let listOrderRecord = async (params = {}) => await vm.$u.get('/wxh-worker-rest/rest/order/record/'+ vm.vuex_token+'/listOrderRecord/'+params.orderId, params);
/** /**
* 接单 * 接单
*/ */
let orderAccept= async (params = {},orderId) => await vm.$u.get('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/'+orderId+'/accept', params); let orderAccept= async (params = {},orderId) => await vm.$u.get('/wxh-worker-rest/rest/'+ vm.vuex_token+'/order/'+orderId+'/accept', params);
/** /**
* 抢单 * 抢单
*/ */
let orderGan = async (params = {},orderId) => await vm.$u.post('http://apidoc.banshouhui.com:3000/mock/31/wxh-worker-rest/rest/order/revision/applets/'+ vm.vuex_token+'/order/acceptAppletsOrder', params,{'content-type': 'application/x-www-form-urlencoded'}); let orderGan = async (params = {},orderId) => await vm.$u.post('/wxh-worker-rest/rest/order/revision/applets/'+ vm.vuex_token+'/order/acceptAppletsOrder', params,{'content-type': 'application/x-www-form-urlencoded'});
const orderApi = { const orderApi = {
...@@ -58,7 +61,9 @@ let orderApiFun = function(vm){ ...@@ -58,7 +61,9 @@ let orderApiFun = function(vm){
orderDetail, orderDetail,
listOrderRecord, listOrderRecord,
orderAccept, orderAccept,
orderGan orderGan,
maintainWorkerCheckin,
feedbackConfig
} }
return orderApi return orderApi
} }
......
...@@ -40,7 +40,6 @@ const install = (Vue, vm) => { ...@@ -40,7 +40,6 @@ const install = (Vue, vm) => {
// toLoginPage() // toLoginPage()
// return false // return false
// } // }
// // const token = app && app.globalData && app.globalData.token || ''
if(config.url.indexOf('access-token=')>=0 && config.params['access-token']){ if(config.url.indexOf('access-token=')>=0 && config.params['access-token']){
// 给默认参数增加access-token (Java端) // 给默认参数增加access-token (Java端)
if(reg.test(config.url)){ if(reg.test(config.url)){
...@@ -55,7 +54,6 @@ const install = (Vue, vm) => { ...@@ -55,7 +54,6 @@ const install = (Vue, vm) => {
} }
// config.header.token = vm.vuex_token || 'RTOKENe56f873b5823477fa2e15572f8fa7eb3a5fb6f7b'; // config.header.token = vm.vuex_token || 'RTOKENe56f873b5823477fa2e15572f8fa7eb3a5fb6f7b';
config.header['x-requested-with'] = 'xmlhttprequest'; config.header['x-requested-with'] = 'xmlhttprequest';
return config; return config;
} }
...@@ -94,13 +92,7 @@ const install = (Vue, vm) => { ...@@ -94,13 +92,7 @@ const install = (Vue, vm) => {
message:msg message:msg
}; };
case 401: case 401:
//需要登录的接口,当token 过期时,清掉本地token,到登录页面 // token失效,跳转登录
// if (!token) {
// uni.navigateTo({
// url: '/pages/login/index'
// });
// return;
// }
toLoginPage() toLoginPage()
case 403://没有权限访问 case 403://没有权限访问
case 500: case 500:
......
{ {
"easycom": { "easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" "autoscan": true,
"custom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
}
}, },
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{ {
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</view> </view>
<view class="video" v-for="key in item.section" @click=details(key.id)> <view class="video" v-for="key in item.section" @click=details(key.id)>
<view class="video_1" > <view class="video_1" >
<view class="text" v-text="key.ware=='0'?'视频':'图文'"> <view class="text" v-text="wareType(key.ware)">
</view> </view>
<text>1-{{key.order}}</text> <text>1-{{key.order}}</text>
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
methods: { methods: {
//获取章节详情 //获取章节详情
getCapterDetails() { getCapterDetails() {
console.log(1111111) console.log('获取章节详情')
this.$u.api this.$u.api
.ChapterDetails(this.params) .ChapterDetails(this.params)
.then((res) => { .then((res) => {
...@@ -105,6 +105,27 @@ ...@@ -105,6 +105,27 @@
uni.navigateTo({ uni.navigateTo({
url:"./section?section_id=" + id url:"./section?section_id=" + id
}) })
},
wareType(type){
let res = "";
switch (type) {
case "":
res = "图文";
break;
case "0":
case "0,1":
case "0,1,2":
res = "视频";
break;
case "1":
res = "ppt";
break;
case "2":
case "1,2":
res = "pdf";
break;
}
return res;
} }
} }
} }
......
<template> <template>
<view> <view class="learn-vedio" v-if="isShowVideo">
<view class="title"> <view class="uni-padding-wrap uni-common-mt">
{{CourseSectionlist.name}} <view><video
</view> object-fit="cover"
<view class="content" v-html="CourseSectionlist.content"> class="course-video"
{{CourseSectionlist.content}} id="courseVideo"
</view> :src="courseSrc"
</view> @play="playCourse"
@error="videoErrorCallback"
controls
></video
></view>
<view class="title-content">
<view class="item-content">
<view class="item-st">
<image style="width: 80rpx; height: 36rpx" :src="kcImage"></image>
<text class="item-st-text">{{
courseTitle.split(" ") ? courseTitle.split(" ")[0] : ""
}}</text>
</view>
<view class="item-title">{{
courseTitle.split(" ") ? courseTitle.split(" ")[1] : ""
}}</view>
</view>
<view
>接单操作须知有助你快速了解充电桩安装业务,提高接单效率,请认真查看及学习。</view
>
</view>
<view class="learn-view" v-if="courseId >= 0">
<view class="learn-view-title">视频内容介绍</view>
<!-- <view
class="learn-list"
v-for="(item, key) in courseOutlines[courseId]"
:key="key"
> -->
<view class="learn-list-item">{{ item }}</view>
</view>
</view>
</view>
<view v-else>
<view class="title">
{{CourseSectionlist.name}}
</view>
<view class="content" v-html="CourseSectionlist.content">
{{CourseSectionlist.content}}
</view>
</view>
</view>
</template> </template>
<script> <script>
export default { let app = getApp();
data() { export default {
return { data() {
CourseSectionlist:null, return {
section_id:{ courseId: "",
section_id:0 courseStatus: 0,
} courseSrc: "",
} courseTitle: "",
}, courseDesc: "",
onLoad(id) { currentIndex: -1, // 第几个视频
this.section_id.section_id = id.section_id section_id:0,
this.getCourseSection() isShowVideo: false,
}, CourseSectionlist: {},//节信息
methods: { };
getCourseSection() { },
this.$u.api computed: {
.CourseSection(this.section_id) courseOutlines() {
.then((res) => { // 视频内容介绍
if (res.code == 200) { return {
if (res.data) { 1: [
this.CourseSectionlist = res.data; "1、考核规则:接单及时率",
console.log("--------") "2、考核规则:上门及时率",
console.log(this.CourseSectionlist) "3、考核规则:安装完工率",
if (res.data.length < 5) { "4、考核规则:资料提交及时率",
//判断接口返回数据量小于请求数据量,则表示此为最后一页 "5、考核规则:安装完工率",
this.isLoadMore = true; "6、考核规则:客户满意度",
this.loadStatus = "nomore"; ],
} else { 2: ["1、必备材料4大类", "2、施工工具准备"],
this.isLoadMore = false; 3: [
} "1、接线安装工艺标准",
} else { "2、PVC、镀锌管电缆管明敷",
this.isLoadMore = true; "3、电缆敷设的防火要求",
this.loadStatus = "nomore"; "4、电源点标识",
} "5、配电箱接线及安装",
} else { "6、管线敷设接头处理",
//接口请求失败的处理 "7、充电桩内部接线",
uni.showToast({ "8、配电箱安装",
title: res.message, ],
icon: "none" 4: ["1、勘测环节录单要求", "2、安装环节录单要求"],
}); };
this.isLoadMore = false; },
if (this.params.start > 0) { kcImage() {
this.page -= 5; return process.uniEnv.qn_base_url + "kc.png";
} },
} },
}) onLoad(e) {
.catch((err) => { this.courseSrc = 'https://qn-static.banshouhui.com/self-support/videoen.mp4';
uni.showToast({ this.courseTitle = '大吉大利';
title: err, this.courseDesc = '今晚吃鸡';
icon: "none", this.section_id = e.section_id
}); this.getCourseSection({section_id:e.section_id})
this.isLoadMore = false; },
if (this.params.start > 0) { onReady: function (res) {
this.page -= 5; // #ifndef MP-ALIPAY
} this.videoContext = uni.createVideoContext("courseVideo");
}); // #endif
}, },
methods: {
videoErrorCallback: function (e) {
uni.showModal({
content: e.target.errMsg,
showCancel: false,
});
},
getRandomColor: function () {
const rgb = [];
for (let i = 0; i < 3; ++i) {
let color = Math.floor(Math.random() * 256).toString(16);
color = color.length == 1 ? "0" + color : color;
rgb.push(color);
}
return "#" + rgb.join("");
},
playCourse: function (e) {
if(this.courseStatus && (this.courseStatus == "1"||this.courseStatus == 1)) {
return
} }
this.changeCourseStatus();
},
changeCourseStatus() {
let that = this;
if (that.courseId) {
that.$u.api
.saveCourseRate({
courseId: that.courseId,
})
.then((res) => {
if (res.code !== 200) {
uni.showToast({
icon: "none",
title: "更新课程状态失败",
});
}
});
} else {
uni.showToast({
title: "课程ID为空,请重新选择课程",
});
}
},
getCourseSection(param) {
this.$u.api
.CourseSection(param)
.then((res) => {
if (res.code == 200) {
if (res.data) {
this.CourseSectionlist = res.data;
console.log("--------")
console.log(this.CourseSectionlist)
let wareVal = this.CourseSectionlist.ware;
this.isShowVideo = wareVal == "0";
}
}
})
.catch((err) => {
uni.showToast({
title: err,
icon: "none",
});
this.isLoadMore = false;
if (this.params.start > 0) {
this.page -= 5;
}
});
} }
},
};
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.title{ .learn-vedio {
text-align: center; background-color: #f4f5f7;
font-size: 45rpx; position: absolute;
font-weight: 700; top: 0;
margin: 24rpx; left: 0;
} width: 100%;
.content{ height: 100%;
font-size: 30rpx; display: flex;
padding: 50rpx; flex-direction: column;
} overflow-y:auto;
}
.course-video {
width: 100%;
}
.course-title {
font-size: 36rpx;
font-weight: 700;
padding: 80rpx 60rpx 40rpx 60rpx;
}
.course-desc {
margin-left: 60rpx;
}
.title-content {
padding: 40rpx 30rpx;
margin-bottom: 20rpx;
background-color: #ffffff;
color: #999999;
font-size: 24rpx;
.item-content {
display: flex;
align-items: center;
}
.item-st {
width: 80rpx;
height: 36rpx;
padding-right: 2rpx;
text-align: center;
margin-right: 20rpx;
line-height: 24rpx;
position: relative;
.item-st-text {
color: #ffffff;
position: absolute;
font-size: 16rpx;
left: 20rpx;
top: 8rpx;
line-height: 28rpx;
}
}
.item-title {
color: #333333;
font-size: 44rpx;
font-weight: bold;
}
}
.item-content {
display: flex;
padding-bottom: 30rpx;
}
.item-title {
color: #333333;
font-size: 28rpx;
}
.learn-view {
background-color: #ffffff;
border-radius: 12rpx;
padding: 38rpx 30rpx 30rpx 30rpx;
margin-bottom: 20rpx;
font-size: 32rpx;
color: #333333;
.learn-view-title {
font-size: 32rpx;
font-weight: bold;
margin-bottom: 10rpx;
}
.learn-list {
.learn-list-item {
font-size: 28rpx;
margin-top: 30rpx;
margin-bottom: 30rpx;
color: #333333;
}
.line-view {
background-color: #f4f5f7;
height: 2rpx;
width: 100%;
}
}
}
</style> </style>
...@@ -53,30 +53,40 @@ export default { ...@@ -53,30 +53,40 @@ export default {
} }
}, },
methods: { methods: {
// 授权用户信息 // 微信授权用户信息
getUserProfile() { getUserProfile() {
var that = this var that = this
uni.getUserProfile({ if(uni.getUserProfile) {
desc: '用于授权登录', // 每次触发 uni.getUserProfile 均会弹出授权窗口,用户授权后可成功获取用户信息
success: function (res) { uni.getUserProfile({
const userInfo = res.userInfo; desc: '用于授权登录',
app.globalData.authUserInfo = userInfo success: function (res) {
app.globalData.authUserInfo.nickName = app.globalData.authUserInfo.nickName || '' const userInfo = res.userInfo;
app.globalData.authUserInfo.avatarUrl = app.globalData.authUserInfo.avatarUrl || '' app.globalData.authUserInfo = userInfo
uni.showLoading({ app.globalData.authUserInfo.nickName = app.globalData.authUserInfo.nickName || ''
title: '授权中..', app.globalData.authUserInfo.avatarUrl = app.globalData.authUserInfo.avatarUrl || ''
mask: true uni.showLoading({
}); title: '授权中..',
that.authLogin() mask: true
}, });
fail: function (res) { that.authLogin()
uni.showModal({ },
title: '授权失败', fail: function (res) {
content: '请允许获取用户信息的授权', uni.showModal({
showCancel: false title: '授权失败',
}); content: '请允许获取用户信息的授权',
} showCancel: false
}) });
}
})
} else {
// 可能由于账号配置,或者其他原因导致无法调起微信用户授权
uni.showModal({
title: '授权失败',
content: '请确认你的用户授权是否可用',
showCancel: false
});
}
}, },
authLogin() { authLogin() {
var that = this var that = this
......
<!-- 过程反馈 --> <!-- 过程反馈 -->
<template> <template>
<view class="feedback-box bg"> <view class="feedback-box bg">
<u-navbar back-icon-color="#FFFFFF" :background="background" title="过程反馈" title-color="#fff" :border-bottom="false"></u-navbar> <u-navbar back-icon-color="#FFFFFF" :background="background" title="过程反馈" titleColor="#FFFFFF" :border-bottom="false"></u-navbar>
<view class="content u-p-l-30 u-p-r-30"> <view class="content u-p-l-30 u-p-r-30">
<view class="width-320 u-m-t-20"> <!-- <view class="width-320 u-m-t-20">
<u-subsection <u-subsection
:bold="false" :bold="false"
:current="curNow" :current="curSub"
:list="list" :list="subList"
active-color="white" active-color="white"
bg-color="white" bg-color="white"
height="72" height="72"
...@@ -15,24 +15,49 @@ ...@@ -15,24 +15,49 @@
button-color="#2272FF" button-color="#2272FF"
border-radius="36" border-radius="36"
></u-subsection> ></u-subsection>
</view> -->
<view class="top-tab">
<u-tabs
:list="tabList"
:current="curTab"
height="80"
gutter="89"
bar-height="4"
bar-width="44"
bg-color="none"
active-color="#FFFFFF"
inactive-color="#FFFFFF"
font-size="32"
@change="changeTab"
></u-tabs>
</view> </view>
<!-- <view class="con-box">
</view> -->
<view class="con-box"> <view class="con-box">
<view class="title">{{feedback.own.title}}</view> <view class="title">{{feedback.own.title}}</view>
<view class="u-flex u-flex-wrap"> <view class="u-flex u-flex-wrap">
<view :class="{'txt-item':true,'active':true}" v-for="(txt,index) in feedback.own.list" :key="index"> <view
<text class="txt">{{txt}}</text> v-for="(item, index) in options[curTab]"
:key="index"
@click="changeOwn(index)"
:class="{'txt-item':true,'active': (curOwn == index)}">
<text class="txt">{{index}}</text>
</view> </view>
</view> </view>
</view> <u-gap height="30"></u-gap>
<view class="con-box">
<view class="title">{{feedback.type.title}}</view> <view class="title">{{feedback.type.title}}</view>
<view class="u-flex u-flex-wrap"> <view class="u-flex u-flex-wrap">
<view :class="{'txt-item':true,'active':false}" v-for="(txt,index) in feedback.type.list" :key="index"> <view
v-for="(txt, index) in options[curTab][curOwn]"
:key="index"
@click="changeType(txt)"
:class="{'txt-item':true,'active': (curType == txt)}">
<text class="txt">{{txt}}</text> <text class="txt">{{txt}}</text>
</view> </view>
</view> </view>
<u-input class="textarea" height="156" type="textarea" placeholder="请补充详细说明,以便于记录您的接单信用分"></u-input> <u-input v-show="showRemark" class="textarea" height="156" type="textarea" placeholder="请补充详细说明,以便于记录您的接单信用分"></u-input>
</view> </view>
<appoint-time @dateChange="dateChange" @timeChange="timeChange" @weekChange="weekChange"></appoint-time> <appoint-time @dateChange="dateChange" @timeChange="timeChange" @weekChange="weekChange"></appoint-time>
</view> </view>
...@@ -47,31 +72,105 @@ ...@@ -47,31 +72,105 @@
export default { export default {
data() { data() {
return { return {
orderId: null,
categoryId: null,
showRemark: false,
background: { background: {
backgroundColor: 'none', backgroundColor: 'none',
}, },
// questionList: ['个人', '客户', '现场/客户'], tabList: [],
curTab: 0,
curOwn: "",
curType: "",
remark: "",
appointTime: "",
feedback: { feedback: {
own:{ own:{
title:'问题归属', title:'问题归属',
list:['个人', '客户', '现场/客户'],
}, },
type:{ type:{
title:'问题类型', title:'问题类型',
list:['有事耽搁', '未带齐工具', '个人改约','其他']
}, },
appoint:{ appoint:{
title:'预约时间', title:'预约时间',
} }
}, },
list:['报备','预约'], config: null,
curNow: 1 options: []
}; };
}, },
components:{ components:{
appointTime appointTime
}, },
watch: {
vuex_token(val) {
this.initPageData()
}
},
computed: {
},
onLoad(e) {
this.orderId = 1
this.categoryId = 88
if(e) {
this.orderId = e.orderId || null
this.categoryId = e.categoryId || null
}
this.initPageData()
},
methods: { methods: {
async initPageData() {
let self = this
let params = {categoryId: self.categoryId}
let res = await self.$u.api.feedbackConfig(params)
if(res && res.code == 200) {
self.config = res.data
self.initParams()
self.buildConfig()
}
},
buildConfig() {
let self = this
if(self.config) {
let tabs = Object.keys(self.config)
let list = Object.values(self.config)
tabs.forEach(function(tab, index){
self.tabList[index] = {name: tab}
self.options[index] = list[index]
})
}
},
initParams() {
let self = this
if(self.config) {
let tabs = Object.keys(self.config)
let list = Object.values(self.config)
let ownVal = Object.keys(list[self.curTab])[0]
let types = Object.values(list[self.curTab][ownVal])
self.curOwn = ownVal
self.curType = types[0]
if(self.curTab) {
self.showRemark = true
} else {
self.showRemark = false
self.remark = ""
}
}
},
/**
* 切换tab项
*/
changeTab(index) {
this.curTab = index;
this.initParams()
},
changeOwn(key) {
this.curOwn = key;
},
changeType(key) {
this.curType = key;
},
/** /**
* 拒单 * 拒单
*/ */
...@@ -107,12 +206,28 @@ ...@@ -107,12 +206,28 @@
background-size: 750rpx 600rpx; background-size: 750rpx 600rpx;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.feedback-box {
.header {
padding: 12rpx 30rpx 40rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
.title {
font-size: 40rpx;
font-weight: bold;
color: #FFFFFF;
}
}
}
/deep/ .u-subsection{ /deep/ .u-subsection{
padding:4rpx!important; padding:4rpx!important;
} }
.top-tab{
text-align: center;
}
.con-box{ .con-box{
margin-top:30rpx; margin-top:30rpx;
padding:30rpx 30rpx 30rpx 20rpx; padding: 30rpx 30rpx 28rpx 30rpx;
border-radius: 12rpx; border-radius: 12rpx;
background-color: #FFFFFF; background-color: #FFFFFF;
.title{ .title{
......
...@@ -76,9 +76,57 @@ function signup(data) { ...@@ -76,9 +76,57 @@ function signup(data) {
} }
function oauth() {
return new Promise(function (resolve, reject) {
uni.getProvider({
service: 'oauth',
success: function (res) {
console.log(res.provider)
if (~res.provider.indexOf('weixin')) {
// weixin 微信登录
login('weixin').then(res=>{resolve(res)}).catch(err=>{reject(err)})
} else if (~res.provider.indexOf('qq')) {
// qq QQ登录
login('qq').then(res=>{resolve(res)}).catch(err=>{reject(err)})
} else if (~res.provider.indexOf('sinaweibo')) {
// sinaweibo 新浪微博登录
login('sinaweibo').then(res=>{resolve(res)}).catch(err=>{reject(err)})
} else if (~res.provider.indexOf('xiaomi')) {
// xiaomi 小米登录
login('xiaomi').then(res=>{resolve(res)}).catch(err=>{reject(err)})
} else if (~res.provider.indexOf('univerify')) {
// univerify 一键登录 App
login('univerify').then(res=>{resolve(res)}).catch(err=>{reject(err)})
} else if (~res.provider.indexOf('apple')) {
// apple Apple登录
login('apple').then(res=>{resolve(res)}).catch(err=>{reject(err)})
}
}
});
});
}
function login(provider) {
return new Promise(function (resolve, reject) {
uni.login({
provider: provider,
success(res) {
console.log(JSON.stringify(res));
resolve(res);
},
fail(err) {
console.log(JSON.stringify(err));
reject(err);
}
});
});
}
module.exports = { module.exports = {
appLogin: appLogin, appLogin: appLogin,
authorization: authorization, authorization: authorization,
signup: signup signup: signup,
oauth: oauth
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment