Browse Source

更新

master
unknown 11 months ago
parent
commit
5d04686030
  1. 14
      components/searchRow/searchRow.vue
  2. 2
      components/user-info/user-info.vue
  3. 10
      config/api.js
  4. 2
      pages.json
  5. 2
      pages/login/login.vue
  6. 31
      pages/recordEntry/operate/mySchedule/comp/mySchedulePopup.vue
  7. 334
      pages/recordEntry/operate/mySchedule/comp/pickDateTimer/pickDateTimer - 副本.vue
  8. 2
      pages/recordEntry/operate/mySchedule/mySchedule.vue
  9. 7
      pages/recordEntry/student/addStudent/addStudent.vue
  10. 2
      pages/recordEntry/student/addStudent/searchStudent.vue
  11. 2
      pages/tabbar/examSimulation/comp/simulation.vue
  12. 32
      pages/tabbar/examSimulation/comp/studentComment.vue
  13. 4
      pages/tabbar/examSimulation/index.vue
  14. 4
      pages/tabbar/mine/index.vue
  15. 30
      pages/tabbar/operateTrain/index.vue
  16. 2
      pages/tabbar/statistics/comp/comp.scss
  17. 2
      pages/tabbar/statistics/comp/principal.vue
  18. 4
      pages/tabbar/statistics/comp/topUserInfo.vue
  19. 65
      pages/tabbar/student/index.vue
  20. 2
      pages/userCenter/myCar/myCar.vue
  21. 27
      pages/userCenter/personaInfo/personaInfo.vue
  22. 2
      pages/userCenter/refund/refund.vue
  23. 4
      pages/userCenter/schoolCoach/coachComment/coachComment.vue
  24. 2
      pages/userCenter/schoolCoach/coachComment/comp/info.vue
  25. 2
      pages/userCenter/schoolSite/schoolSite.vue
  26. 40
      pages/userCenter/studentComment/studentComment.vue

14
components/searchRow/searchRow.vue

@ -5,7 +5,7 @@
<image src="@/static/images/index/searchIcon.png" mode=""></image> <image src="@/static/images/index/searchIcon.png" mode=""></image>
</view> </view>
<view class="inputBox"> <view class="inputBox">
<u-search :placeholder="placeholder" v-model="keyword" :color="'#fff'" placeholderColor="#fff" :bgColor="'transparent'" :showAction="false" @search="$u.debounce(searchFn, 500)" @clear="searchFn"></u-search>
<u-search :placeholder="placeholder" v-model="keyword" :color="'#fff'" :disabled="disable" placeholderColor="#fff" :class="{disableClass: disable}" :bgColor="'transparent'" :showAction="false" @change="$u.debounce(searchFn, 1200)" @search="$u.debounce(searchFn, 500)" :clearabled="true"></u-search>
</view> </view>
</view> </view>
</view> </view>
@ -13,16 +13,19 @@
<script> <script>
export default { export default {
props: ['placeholder'],
props: ['placeholder', 'disable'],
data() { data() {
return { return {
keyword: ''
keyword: '',
changeOk: true
} }
}, },
methods: { methods: {
searchFn() { searchFn() {
this.$emit('searchFn', this.keyword) this.$emit('searchFn', this.keyword)
}
},
} }
} }
</script> </script>
@ -48,6 +51,9 @@
flex: 1; flex: 1;
color: #fff; color: #fff;
font-size: 28rpx; font-size: 28rpx;
.disableClass {
pointer-events: none;
}
} }
} }
} }

2
components/user-info/user-info.vue

@ -14,7 +14,7 @@
<view class="icon"> <view class="icon">
<image src="@/static/images/index/ic_jiaxiao_cli.png" mode=""></image> <image src="@/static/images/index/ic_jiaxiao_cli.png" mode=""></image>
</view> </view>
<view class="schoolName oneRowText">没有返回字段</view>
<view class="schoolName oneRowText">{{ vuex_userInfo.user.schoolName}}</view>
<!-- <view class="tag" v-if="identity=='校长'">驾校校长</view> <!-- <view class="tag" v-if="identity=='校长'">驾校校长</view>
<view class="tag" v-else>合作教练</view> --> <view class="tag" v-else>合作教练</view> -->
</view> </view>

10
config/api.js

@ -47,7 +47,7 @@ export const examSimulationPages = (params) => http.get('business/exam-simulatio
// 已报名学员 // 已报名学员
export const studentRecordPage = (params) => http.get('business/student-record/page', {params} ,) export const studentRecordPage = (params) => http.get('business/student-record/page', {params} ,)
// 驾校班型 // 驾校班型
export const schoolClass = (params) => http.get('business/school-class/get', {params} ,)
export const schoolClass = (params) => http.get('business/school-class/getSchoolByClass', {params} ,)
// 获得学员档案记录 // 获得学员档案记录
export const studentDetail = (params) => http.get('business/student-record/getStudent', {params} ,) export const studentDetail = (params) => http.get('business/student-record/getStudent', {params} ,)
// 获得教练车信息分页 // 获得教练车信息分页
@ -59,9 +59,13 @@ export const coachPage = (params) => http.get('business/coach/page', {params})
// 驾校教练详情 // 驾校教练详情
export const coachDetail = (params) => http.get('business/coach/get', {params}) export const coachDetail = (params) => http.get('business/coach/get', {params})
// 教练评价列表分页 // 教练评价列表分页
export const coachCommentPage = (params) => http.get('app/coach-comment/page', {params})
export const coachCommentPage = (params) => http.get('app/coach-comment/pageCoachComment', {params})
// 获得教练员评价条数
export const pageCoachCommentTotal = (params) => http.get('app/coach-comment/pageCoachCommentTotal', {params})
// 获得驾校评价 // 获得驾校评价
export const schoolCommentPage = (params) => http.get('business/school-comment/page', {params}) export const schoolCommentPage = (params) => http.get('business/school-comment/page', {params})
// 获取驾校评价条数
export const commentPagetotal = (params) => http.get('business/school-comment/pagetotal', { params })
// 修改用户密码 // 修改用户密码
export const updatePassword = (data) => http.put('system/user/profile/update-password', data) export const updatePassword = (data) => http.put('system/user/profile/update-password', data)
// 获得考场分页 // 获得考场分页
@ -117,3 +121,5 @@ export const studentBindCoach = (data) => http.post('business/student-record/bin

2
pages.json

@ -315,7 +315,7 @@
{ {
"path": "myCar/myCar", "path": "myCar/myCar",
"style": { "style": {
"navigationBarTitleText": "考场信息",
"navigationBarTitleText": "我的车辆",
"navigationStyle": "custom", "navigationStyle": "custom",
"enablePullDownRefresh": true, "enablePullDownRefresh": true,
"backgroundTextStyle": "dark" "backgroundTextStyle": "dark"

2
pages/login/login.vue

@ -22,7 +22,7 @@
<u--input placeholder="请输入密码" border="none" clearable style="height: 100%;" :clearable="false" v-model="FormData.password"></u--input> <u--input placeholder="请输入密码" border="none" clearable style="height: 100%;" :clearable="false" v-model="FormData.password"></u--input>
</view> </view>
</view> </view>
<view class="forgetTps" @click="$u.toast('请联系管理员重置密码!')">忘记密码</view>
<view class="forgetTps"> <text @click="$u.toast('请联系管理员重置密码!')">忘记密码</text></view>
<view class="loginBtn" :class="{active: btnHighlight}" @click="submitFn"> </view> <view class="loginBtn" :class="{active: btnHighlight}" @click="submitFn"> </view>
<!-- <view class="radioWrap"> <!-- <view class="radioWrap">
<u-checkbox-group > <u-checkbox-group >

31
pages/recordEntry/operate/mySchedule/comp/mySchedulePopup.vue

@ -37,11 +37,12 @@
</view> </view>
<u-picker :show="showSite" :columns="siteColumns" keyName="name" @confirm="changeSite" @cancel="showSite=false" ></u-picker> <u-picker :show="showSite" :columns="siteColumns" keyName="name" @confirm="changeSite" @cancel="showSite=false" ></u-picker>
</view> </view>
</template> </template>
<script> <script>
import { trainingSiteList } from '@/config/api.js'
import { trainingSiteList, carPage } from '@/config/api.js'
export default { export default {
data() { data() {
return { return {
@ -54,10 +55,7 @@
{name: '科目三', id: 3}, {name: '科目三', id: 3},
], ],
// 023 // 023
radioData2: [
{name: '浙A66666学', id: '浙A66666学'},
{name: '浙A66667学', id: '浙A66667学'},
],
radioData2: [],
radioData3: [ radioData3: [
{name: '1人', id: 1}, {name: '1人', id: 1},
{name: '2人', id: 2}, {name: '2人', id: 2},
@ -72,19 +70,40 @@
siteName: '', siteName: '',
openRange: 0, openRange: 0,
appointmentSumCount: 1, appointmentSumCount: 1,
carNumber: '浙A66666学',
carNumber: '',
subject: 0 subject: 0
} }
} }
}, },
created() { created() {
this.trainingSiteListFn() this.trainingSiteListFn()
this.carPageFn()
}, },
methods: { methods: {
confirmPopup(val) { confirmPopup(val) {
if(val==1&&!this.form.siteName) return this.$u.toast('请选择场地') if(val==1&&!this.form.siteName) return this.$u.toast('请选择场地')
this.$emit('confirmClass', val, this.form) this.$emit('confirmClass', val, this.form)
}, },
//
async carPageFn() {
let obj = {
pageNo: 1,
pageSize: 40,
schoolId: this.vuex_schoolId,
coachId: this.vuex_coachId
}
const {data: res} = await carPage(obj)
console.log(res.list)
this.radioData2 = res.list.map(item=>{
let obj = {
name: item.licnum,
id: item.licnum
}
return obj
})
console.log(this.radioData2)
// this.carColumns = [res.list]
},
// //
changeSite(val) { changeSite(val) {
let item = val.value[0] let item = val.value[0]

334
pages/recordEntry/operate/mySchedule/comp/pickDateTimer/pickDateTimer - 副本.vue

@ -1,334 +0,0 @@
<template>
<view class="step1">
<view class="card">
<view class="dateBox">
<view class="month-row">
<view class="month" @click="show=true">{{ currentMonth }}</view>
<view class="arrow">
<u-icon name="arrow-down" :size="12" :color="'#1989FA'"></u-icon>
</view>
</view>
<view class="date_row">
<view class="icon left" @click="changeDateIndex(-1)">
<u-icon name="arrow-left" :size="12" :color="'#fff'"></u-icon>
</view>
<view class="dateArr" >
<view class="dateWidth" v-for="(item,index) in dateArr[currentDay]" :key="index" @click="chooseDate(item)" >
<view class="date" :class="{active: chooseDay==item.date}">
<view class="dian"></view>
<view class="week">{{ item.week }}</view>
<view class="num">{{ item.num }}</view>
</view>
</view>
</view>
<view class="icon right" @click="changeDateIndex(1)">
<u-icon name="arrow-right" :size="12" :color="'#fff'"></u-icon>
</view>
</view>
</view>
</view>
<view class="card">
<view class="timeCon">
<view class="h2">上午</view>
<view class="time_box">
<view class="time_item" v-for="(item,index) in timerArr" :key="index" @click="chooseTimerClick(item)" :class="{active: item.id==chooseTimerId, disable: item.status!==1}">
<view class="lab" v-if="item.status==3">已过期</view>
<view class="lab" v-if="item.status==2">已约满</view>
<view class="lab" v-if="item.status==1">可预约</view>
<view class="time">{{ item.timer }}</view>
</view>
</view>
<view class="h2">下午</view>
<view class="time_box">
<view class="time_item" v-for="(item,index) in timerArr2" :key="index" @click="chooseTimerClick(item)" :class="{active: item.id==chooseTimerId,disable: item.status!==1}">
<view class="lab" v-if="item.status==3">已过期</view>
<view class="lab" v-if="item.status==2">已约满</view>
<view class="lab" v-if="item.status==1">可预约</view>
<view class="time">{{ item.timer }}</view>
</view>
</view>
</view>
</view>
<view class="card">
<view class="noDate">
<image src="http://192.168.1.20:81/zhili/image/20230927/ad178ebdf5394518b27b020c03ee48ab.png" mode=""></image>
</view>
</view>
<u-datetime-picker
:show="show"
v-model="chooseMonth"
:minDate="minDate"
:maxDate="maxDate"
mode="year-month"
@confirm="changeMonth"
></u-datetime-picker>
</view>
</template>
<script>
import { getDates, getMonthsBetweenDates } from '@/config/utils.js'
import { scheduleClassGetById, scheduleClassGet, getClassDateLimit } from '@/config/api.js'
export default {
data() {
return {
maxDate: 0,
minDate: 0,
monthArr: [],
show: false,
dateArr: [],
currentDay: 0,//
chooseDay: '',
chooseMonth: '',
timerArr: [
{status: 1, timer: '06:00-07:00', id: 1},
{status: 2, timer: '06:00-07:00', id: 2},
{status: 3, timer: '06:00-07:00', id: 3},
],
timerArr2: [
{status: 1, timer: '06:00-07:00', id: 4},
{status: 2, timer: '06:00-07:00', id: 5},
{status: 3, timer: '06:00-07:00', id: 6},
],
chooseTimerId: '',
endDate: null,
startDate: null,
}
},
mounted() {
this.initDate()
},
computed: {
currentMonth() {
let tiemr = new Date(this.chooseDay) * 1
return this.$u.date(tiemr, 'yyyy.mm')
}
},
methods: {
//
async getClassDateLimitFn() {
let obj = {
coachId: this.vuex_coachId
}
const {data: res} = await getClassDateLimit(obj)
this.startDate = res.beginDateLimit
this.endDate = res.endDateLimit
this.minDate = new Date(res.beginDateLimit)*1 + 86400000
this.maxDate = new Date(res.endDateLimit)*1
},
//
async scheduleClassGetFn() {
let id = this.vuex_userInfo.user.id
let coachId = this.vuex_userInfo.user.coachId || '1591015108974329858'
let classDate = '2023-10-1'
const {data: res} = await scheduleClassGet({id, coachId, classDate: this.chooseDay})
},
//
async initDate() {
await this.getClassDateLimitFn()
this.dateArr = getDates(this.startDate, this.endDate);
console.log('this.dateArr')
console.log(this.startDate)
console.log(this.endDate)
// this.chooseDay = this.dateArr[0][0].date
// console.log(this.chooseDay)
},
//
changeMonth(val) {
let startDate = this.$u.date(val.value, 'yyyy-mm-dd')
for(let i=0; i<this.dateArr.length; i++) {
for(let j=0; j<this.dateArr[i].length; j++) {
let date = this.dateArr[i][j].date
if(startDate==date) {
this.currentDay = i
this.chooseDay = date
}
}
}
this.show = false
},
//
chooseTimerClick(item) {
if(item.status!=1) return this.$u.toast('请选择可预约时间')
this.chooseTimerId = item.id
},
//
chooseDate(item) {
this.chooseDay = item.date
this.scheduleClassGetFn()
console.log('*****')
console.log(this.chooseDay)
},
changeDateIndex(num) {
if(this.currentDay==0&&num==-1) return this.$u.toast('已是可选最小日期')
if(this.currentDay==this.dateArr.length-1&&num==1) return this.$u.toast('已是可选最大日期')
this.currentDay = this.currentDay + num
this.chooseDay = this.dateArr[this.currentDay][0].date
},
}
}
</script>
<style lang="scss" scoped>
.card {
width: 100%;
margin-bottom: 24rpx;
overflow: hidden;
.dateBox {
padding: 36rpx 0 40rpx 0;
.month-row {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 36rpx;
.month {
font-size: 32rpx;
color: $themC;
}
.arrow {
margin-left: 6rpx;
}
}
.date_row {
width: 100%;
height: 100rpx;
position: relative;
.icon {
width: 40rpx;
height: 40rpx;
background: rgba(51,51,51,0.18);
backdrop-filter: blur(4rpx);
position: absolute;
top: 50%;
transform: translateY(-50%);
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
&.left {
left: 16rpx;
}
&.right {
right: 16rpx;
}
}
.dateArr {
display: flex;
padding: 0 70rpx;
// justify-content: space-between;
&.oneDate {
justify-content: center;
}
.dateWidth {
width: 20%;
display: flex;
justify-content: center;
}
.date {
width: 74rpx;
height: 100rpx;
border-radius: 16rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #333;
.dian {
width: 12rpx;
height: 12rpx;
background: #D8D8D8;
border-radius: 50%;
&.active {
background: #1989FA;
}
}
&.active {
background: rgba(25,137,250,0.1);
border: 2rpx solid #1989FA;
color: $themC;
}
.week {
}
.num {
margin-top: 4rpx;
}
}
}
}
}
}
.card {
.timeCon {
padding: 0 24rpx 40rpx 24rpx;
}
.h2 {
line-height: 90rpx;
font-weight: 500;
color: #333;
}
.time_box {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.time_item {
width: 30%;
height: 120rpx;
background: #F8F8F8;
border-radius: 12rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 12rpx;
color: #333;
&.active {
background: rgba(25,137,250,0.1);
border: 2rpx solid #1989FA;
color: $themC;
}
&.disable {
opacity: 0.4;
}
.lab {
font-size: 28rpx;
font-weight: 500;
}
.time {
font-size: 24rpx;
margin-top: 4rpx;
}
}
}
}
.btn {
width: 47%;
height: 72rpx;
background: #1989FA;
border-radius: 8rpx;
font-size: 28rpx;
color: #fff;
text-align: center;
line-height: 72rpx;
margin: 108rpx auto 50rpx auto;
}
.noDate {
}
</style>

2
pages/recordEntry/operate/mySchedule/mySchedule.vue

@ -62,6 +62,8 @@
if(val==1) { if(val==1) {
this.$goPage('/pages/recordEntry/operate/mySchedule/plan/plan') this.$goPage('/pages/recordEntry/operate/mySchedule/plan/plan')
}else { }else {
let pickDateRef = this.$refs.pickDateRef
if(!pickDateRef.timerArr.length||!pickDateRef.timerArr2.length) return this.$u.toast('没有排课计划,请添加排课计划')
this.step = val this.step = val
} }
// this.$emit('changeStep', val) // this.$emit('changeStep', val)

7
pages/recordEntry/student/addStudent/addStudent.vue

@ -2,8 +2,8 @@
<view class="pageBgImg"> <view class="pageBgImg">
<topNavbar title="选择学员"></topNavbar> <topNavbar title="选择学员"></topNavbar>
<view class="pad"> <view class="pad">
<view class="searchBox">
<searchRow placeholder="搜索学员姓名、学员手机号" @click.native="$goPage('/pages/recordEntry/student/addStudent/searchStudent')"></searchRow>
<view class="searchBox" @click.capture="$goPage('/pages/recordEntry/student/addStudent/searchStudent')">
<searchRow placeholder="搜索学员姓名、学员手机号" :disable="true"></searchRow>
</view> </view>
<view class="ul"> <view class="ul">
<view class="li" v-for="(item,index) in list" :key="index" @click="chooseSudent(item)"> <view class="li" v-for="(item,index) in list" :key="index" @click="chooseSudent(item)">
@ -40,7 +40,7 @@
pageSize: 40, pageSize: 40,
schoolId: '', schoolId: '',
coachId: '', coachId: '',
status: 0,
status: 1,
}, },
total: 40, total: 40,
list: [], list: [],
@ -50,6 +50,7 @@
}, },
onLoad() { onLoad() {
uni.$on('addSearchSudent',(ids)=>{ uni.$on('addSearchSudent',(ids)=>{
console.log(this.studentIds)
console.log('监听不到?') console.log('监听不到?')
this.studentIds = [...new Set([...this.studentIds,...ids])] this.studentIds = [...new Set([...this.studentIds,...ids])]
}) })

2
pages/recordEntry/student/addStudent/searchStudent.vue

@ -39,7 +39,7 @@
pageSize: 40, pageSize: 40,
schoolId: '', schoolId: '',
coachId: '', coachId: '',
status: 0,
status: 1,
}, },
total: 40, total: 40,
list: [], list: [],

2
pages/tabbar/examSimulation/comp/simulation.vue

@ -126,11 +126,13 @@
this.examSimulationPagesFn() this.examSimulationPagesFn()
}, },
changeTab(num) { changeTab(num) {
if(this.params.writtenoffStatus == num) return
this.params.writtenoffStatus = num this.params.writtenoffStatus = num
this.initList() this.initList()
}, },
changeNav(item) { changeNav(item) {
if(this.params.subject == item.id) return
this.params.subject = item.id this.params.subject = item.id
this.initList() this.initList()
}, },

32
pages/tabbar/examSimulation/comp/studentComment.vue

@ -4,13 +4,13 @@
<view class="navH"></view> <view class="navH"></view>
<view class="pad"> <view class="pad">
<view class="searchBox"> <view class="searchBox">
<searchRow placeholder="搜索学员姓名"></searchRow>
<searchRow placeholder="搜索学员姓名" @searchFn="searchFn"></searchRow>
</view> </view>
<view class="tabs"> <view class="tabs">
<view class="tab active">全部10</view>
<view class="tab">匿名1</view>
<view class="tab">有图2</view>
<view class="tab">有视频6</view>
<view class="tab" :class="{active: this.params.condition==0}" @click="changeTab(0)">全部{{ totalType.total1 }}</view>
<view class="tab" :class="{active: this.params.condition==1}" @click="changeTab(1)">匿名{{ totalType.total2 }}</view>
<view class="tab" :class="{active: this.params.condition==2}" @click="changeTab(2)">有图{{ totalType.total3 }}</view>
<view class="tab" :class="{active: this.params.condition==3}" @click="changeTab(3)">有视频{{ totalType.total4 }}</view>
</view> </view>
<view class="list" v-if="list.length"> <view class="list" v-if="list.length">
<view class="card" v-for="(item,index) in list" :key="index"> <view class="card" v-for="(item,index) in list" :key="index">
@ -28,7 +28,7 @@
</template> </template>
<script> <script>
import { coachCommentPage } from '@/config/api.js'
import { coachCommentPage, pageCoachCommentTotal } from '@/config/api.js'
export default { export default {
data() { data() {
return { return {
@ -43,7 +43,8 @@
}, },
// 0 1 2 3 // 0 1 2 3
total: 20, total: 20,
status: 'loading'
status: 'loading',
totalType: {}
} }
}, },
created() { created() {
@ -56,10 +57,26 @@
// this.params.coachType = 3 // this.params.coachType = 3
// } // }
this.coachCommentPageFn() this.coachCommentPageFn()
this.pageCoachCommentTotalFn()
}, },
methods: { methods: {
//
async pageCoachCommentTotalFn() {
let obj = {
coachType : 3,
coachId : this.vuex_coachId,
schoolId : this.params.schoolId
}
let {data: res} = await pageCoachCommentTotal(obj)
this.totalType = {
total1: res.total1,
total2: res.total2,
total3: res.total3,
total4: res.total4,
}
},
loadMore() { loadMore() {
if(this.total>this.list.length) { if(this.total>this.list.length) {
this.coachCommentPageFn() this.coachCommentPageFn()
@ -70,6 +87,7 @@
this.initList() this.initList()
}, },
changeTab(val) { changeTab(val) {
if(this.params.condition == val) return
this.params.condition = val this.params.condition = val
this.initList() this.initList()
}, },

4
pages/tabbar/examSimulation/index.vue

@ -1,7 +1,7 @@
<template> <template>
<view class="main"> <view class="main">
<!-- 考场模拟 -->
<coachIdentity v-if="identity=='实操教练'"/>
<!-- 考场模拟 之前的版本可以删除了-->
<!-- <coachIdentity v-if="identity=='实操教练'"/> -->
<!-- 预约记录 --> <!-- 预约记录 -->
<simulation v-if="identity=='考场模拟教练'"/> <simulation v-if="identity=='考场模拟教练'"/>
<!-- 学员评价 --> <!-- 学员评价 -->

4
pages/tabbar/mine/index.vue

@ -10,7 +10,7 @@
<view class="cut_text">切换身份</view> <view class="cut_text">切换身份</view>
</view> </view>
</view> </view>
<view class="qcode" @click="$goPage('/pages/userCenter/scanCode/scanCode')">
<view class="qcode" @click="$goPage('/pages/userCenter/scanCode/scanCode')" v-if="identity=='实操教练'">
<image src="@/static/images/coach/ic_erweima.png" mode=""></image> <image src="@/static/images/coach/ic_erweima.png" mode=""></image>
</view> </view>
<user-info/> <user-info/>
@ -126,7 +126,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.pageBgImg { .pageBgImg {
padding: 120rpx 28rpx 40rpx 28rpx;
padding: 40rpx 28rpx;
} }
.card { .card {

30
pages/tabbar/operateTrain/index.vue

@ -47,7 +47,7 @@
<UserTab name ='实操训练'></UserTab> <UserTab name ='实操训练'></UserTab>
<u-datetime-picker
<!-- <u-datetime-picker
:show="showDatePicker" :show="showDatePicker"
mode="date" mode="date"
:closeOnClickOverlay="true" :closeOnClickOverlay="true"
@ -57,9 +57,9 @@
@cancel="cancelDate" @cancel="cancelDate"
cancelText="不限日期" cancelText="不限日期"
@close="showDatePicker=false" @close="showDatePicker=false"
></u-datetime-picker>
></u-datetime-picker> -->
<!-- <u-picker :show="showC" :columns="carArr" keyName="lab" @confirm="confirmCar" @cancel="showCar=false"></u-picker> -->
<u-calendar :show="showDatePicker" ref="calendar" @confirm="confirmDatePicker" @close="cancelDate" :minDate="minDate" :maxDate="maxDate"></u-calendar>
<u-picker :show="showCar" :columns="carColumns" keyName="licnum" @confirm="confirmCar" @cancel="showCar=false" :closeOnClickOverlay="true" @close="showCar=false"></u-picker> <u-picker :show="showCar" :columns="carColumns" keyName="licnum" @confirm="confirmCar" @cancel="showCar=false" :closeOnClickOverlay="true" @close="showCar=false"></u-picker>
<u-picker :show="showSubject" :columns="subjectTxt" keyName="lab" @confirm="confirmSubject" @cancel="showSubject=false" :closeOnClickOverlay="true" @close="showSubject=false"></u-picker> <u-picker :show="showSubject" :columns="subjectTxt" keyName="lab" @confirm="confirmSubject" @cancel="showSubject=false" :closeOnClickOverlay="true" @close="showSubject=false"></u-picker>
</view> </view>
@ -110,7 +110,9 @@
carNumber: '', carNumber: '',
bookingTime: [] bookingTime: []
}, },
list: []
list: [],
minDate: 0,
maxDate: 0,
} }
}, },
onLoad() { onLoad() {
@ -118,6 +120,11 @@
this.params.coachId = this.vuex_coachId this.params.coachId = this.vuex_coachId
this.carPageFn() this.carPageFn()
// this.bookingMasterPageFn() // this.bookingMasterPageFn()
let nowTime = new Date()*1
//
const oneMonthMilliseconds = 30 * 24 * 60 * 60 * 1000;
this.minDate = parseInt( nowTime - oneMonthMilliseconds )
this.maxDate = parseInt( nowTime + oneMonthMilliseconds )
}, },
onShow() { onShow() {
uni.hideTabBar(); uni.hideTabBar();
@ -134,8 +141,8 @@
methods: { methods: {
cancelDate() { cancelDate() {
this.showDatePicker=false this.showDatePicker=false
this.params.beginTime = ''
this.params.endTime = ''
this.params.bookingStartTime = ''
this.params.bookingEndTime = ''
this.screen.timer = '预约时间' this.screen.timer = '预约时间'
this.initList() this.initList()
}, },
@ -163,15 +170,16 @@
console.log(res) console.log(res)
}, },
changeTab(item) { changeTab(item) {
if(item.id==this.params.status) return
this.params.status = item.id this.params.status = item.id
this.initList() this.initList()
}, },
confirmDatePicker(val) { confirmDatePicker(val) {
this.showDatePicker = false this.showDatePicker = false
this.screen.timer = uni.$u.date(val.value, 'yyyy-mm-dd')
this.params.beginTime = this.screen.timer+ ' 00:00:00'
this.params.endTime = this.screen.timer+ ' 23:59:59'
// this.params.bookingTime = [startTimer, endTimer]
this.screen.timer = val[0]
this.params.bookingStartTime = this.screen.timer+ ' 00:00:00'
this.params.bookingEndTime = this.screen.timer+ ' 23:59:59'
// this.params.bookingTime = [startTimer, bookingEndTimer]
this.initList() this.initList()
}, },
confirmCar(val) { confirmCar(val) {
@ -206,7 +214,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.pageBgImg { .pageBgImg {
.searchBox { .searchBox {
padding: 140rpx 0 24rpx 0;
padding: 24rpx 0;
} }
.card { .card {
padding: 0 28rpx; padding: 0 28rpx;

2
pages/tabbar/statistics/comp/comp.scss

@ -4,7 +4,7 @@
width: 100%; width: 100%;
// background: url('http://192.168.1.20:81/zhili/image/20230824/30073140957f4349b6579cb0ff00d4b1.png') #F6F6F6 no-repeat; // background: url('http://192.168.1.20:81/zhili/image/20230824/30073140957f4349b6579cb0ff00d4b1.png') #F6F6F6 no-repeat;
// background-size: 100% 492rpx; // background-size: 100% 492rpx;
padding: 142rpx 28rpx 140rpx 28rpx;
padding: 40rpx 28rpx 140rpx 28rpx;
.userInfo { .userInfo {
.tit { .tit {

2
pages/tabbar/statistics/comp/principal.vue

@ -6,7 +6,7 @@
<view class="schoolIcon"> <view class="schoolIcon">
<image src="@/static/images/index/ic_jiaxiao.png" mode=""></image> <image src="@/static/images/index/ic_jiaxiao.png" mode=""></image>
</view> </view>
<view class="schoolName oneRowText">没有字段</view>
<view class="schoolName oneRowText">{{ vuex_userInfo.user.schoolName}}</view>
<view class="tag">{{ identity }}</view> <view class="tag">{{ identity }}</view>
</view> </view>
</view> </view>

4
pages/tabbar/statistics/comp/topUserInfo.vue

@ -5,7 +5,7 @@
<view class="schoolIcon"> <view class="schoolIcon">
<image src="@/static/images/index/ic_jiaxiao.png" mode=""></image> <image src="@/static/images/index/ic_jiaxiao.png" mode=""></image>
</view> </view>
<view class="schoolName oneRowText">没字段</view>
<view class="schoolName oneRowText">{{ vuex_userInfo.user.schoolName}}</view>
<view class="tag">{{identity}}</view> <view class="tag">{{identity}}</view>
</view> </view>
</view> </view>
@ -34,7 +34,7 @@
.schoolName { .schoolName {
font-size: 28rpx; font-size: 28rpx;
padding: 20rpx; padding: 20rpx;
max-width: 220rpx;
max-width: 420rpx;
color: #fff; color: #fff;
} }

65
pages/tabbar/student/index.vue

@ -2,7 +2,6 @@
<view class="pageBgImg pad" > <view class="pageBgImg pad" >
<!-- <view class="pad" :style="{ background: `url(${imgUrl}) #f6f6f6 no-repeat`, backgroundSize: backgroundSize }" > --> <!-- <view class="pad" :style="{ background: `url(${imgUrl}) #f6f6f6 no-repeat`, backgroundSize: backgroundSize }" > -->
<view class="status_bar"></view> <view class="status_bar"></view>
<view style="width: 100%;height: 60rpx;"></view>
<!-- <view class="searchBox"> <!-- <view class="searchBox">
<searchRow placeholder="搜索学员姓名、学员手机号"></searchRow> <searchRow placeholder="搜索学员姓名、学员手机号"></searchRow>
</view> </view>
@ -80,9 +79,11 @@
<appointItem-student :item="item"/> <appointItem-student :item="item"/>
</view> </view>
</view> </view>
<nodata v-if="!list.length&&status=='nomore'"></nodata>
<UserTab name ='学员'></UserTab> <UserTab name ='学员'></UserTab>
<u-datetime-picker
<!-- <u-datetime-picker
:show="showDatePicker" :show="showDatePicker"
mode="date" mode="date"
:minDate="1669341725000" :minDate="1669341725000"
@ -91,8 +92,8 @@
@confirm="confirmDatePicker" @confirm="confirmDatePicker"
@cancel="cancelDate" @cancel="cancelDate"
cancelText="不限日期" cancelText="不限日期"
></u-datetime-picker>
></u-datetime-picker> -->
<u-calendar :show="showDatePicker" ref="calendar" @confirm="confirmDatePicker" @close="closeCalendar" :minDate="minDate" :maxDate="maxDate"></u-calendar>
<u-picker :show="showCar" :columns="carArr" keyName="lab" @confirm="confirmCar" @cancel="showCar=false"></u-picker> <u-picker :show="showCar" :columns="carArr" keyName="lab" @confirm="confirmCar" @cancel="showCar=false"></u-picker>
<u-picker :show="showClass" :columns="classArr" keyName="name" @confirm="confirmClass" @cancel="showClass=false"></u-picker> <u-picker :show="showClass" :columns="classArr" keyName="name" @confirm="confirmClass" @cancel="showClass=false"></u-picker>
</view> </view>
@ -118,6 +119,7 @@
showClass: false, showClass: false,
carArr: [ carArr: [
[ [
{lab: '全部车型',id: 0},
{lab: 'C1',id: 1}, {lab: 'C1',id: 1},
{lab: 'C2',id: 2}, {lab: 'C2',id: 2},
] ]
@ -133,17 +135,29 @@
}, },
total: 20, total: 20,
list: [], list: [],
count: {}
count: {},
status: 'loading'
} }
}, },
onShow() { onShow() {
uni.hideTabBar(); uni.hideTabBar();
this.studentOwnerFn()
}, },
onLoad() { onLoad() {
this.params.schoolId = this.vuex_schoolId this.params.schoolId = this.vuex_schoolId
this.studentRecordPageFn() this.studentRecordPageFn()
this.studentOwnerFn()
this.schoolClass() this.schoolClass()
let nowTime = new Date()*1
//
const oneMonthMilliseconds = 30 * 24 * 60 * 60 * 1000;
this.minDate = parseInt( nowTime - oneMonthMilliseconds )
this.maxDate = parseInt( nowTime + oneMonthMilliseconds )
},
onPullDownRefresh() {
this.studentRecordPageFn()
this.studentOwnerFn()
this.listInit()
}, },
methods: { methods: {
searchFn(val) { searchFn(val) {
@ -157,34 +171,32 @@
}, },
cancelDate() { cancelDate() {
this.showDatePicker=false this.showDatePicker=false
this.params.startTime = ''
this.params.endTime = ''
this.params.applyDateTime = ''
this.screen.timer = '预约时间' this.screen.timer = '预约时间'
this.listInit() this.listInit()
}, },
confirmDatePicker(val) { confirmDatePicker(val) {
this.showDatePicker = false this.showDatePicker = false
// this.params.applyDate = this.screen.timer = uni.$u.date(val.value, 'yyyy-mm-dd')
this.screen.timer = uni.$u.date(val.value, 'yyyy-mm-dd') + ' '
let startTimer = this.screen.timer + '00:00:00'
let endTimer = this.screen.timer+ '23:59:59'
console.log(endTimer)
// this.params.applyDate = [startTimer, endTimer]
this.params.startTime = startTimer
this.params.endTime = endTimer
// this.params['applyDate[1]'] = encodeURI(endTimer)
console.log(val)
this.params.applyDateTime = this.screen.timer = val[0]
this.listInit()
},
closeCalendar() {
this.showDatePicker = false
this.params.applyDateTime = ''
this.screen.timer = '报名时间'
this.listInit() this.listInit()
}, },
confirmCar(val) { confirmCar(val) {
let item = val.value[0] let item = val.value[0]
this.params.trainType = this.screen.car = item.lab this.params.trainType = this.screen.car = item.lab
if(this.screen.car=='全部车型') this.params.trainType = ''
this.showCar = false this.showCar = false
this.listInit() this.listInit()
}, },
confirmClass(val) { confirmClass(val) {
let item = val.value[0] let item = val.value[0]
this.screen.className = item.lab
this.screen.className = item.name
this.params.schoolClassId = item.id this.params.schoolClassId = item.id
this.showClass = false this.showClass = false
this.listInit() this.listInit()
@ -192,17 +204,26 @@
// //
async schoolClass() { async schoolClass() {
const {data: res} = await schoolClass({id: this.vuex_schoolId,pageNo: 1,pageSize: 100}) const {data: res} = await schoolClass({id: this.vuex_schoolId,pageNo: 1,pageSize: 100})
this.classArr = res.list
this.classArr = [res]
this.classArr[0].unshift({name: '全部班型', id: 0})
console.log(this.classArr)
}, },
listInit() { listInit() {
this.params.pageNo = 1 this.params.pageNo = 1
this.list = [] this.list = []
this.status = 'loading'
this.studentRecordPageFn() this.studentRecordPageFn()
}, },
async studentRecordPageFn() { async studentRecordPageFn() {
const {data: res} = await studentRecordPage(this.params)
let obj = {}
for(let key in this.params) {
if(this.params[key]) obj[key] = this.params[key]
}
const {data: res} = await studentRecordPage(obj)
this.params.pageNo ++
this.list.push(...res.list) this.list.push(...res.list)
this.total = res.total this.total = res.total
if(this.list.length>=this.total) this.status = 'nomore'
} }
} }
} }
@ -218,7 +239,7 @@
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
.searchBox { .searchBox {
padding: 140rpx 0 24rpx 0;
padding: 40rpx 0 24rpx 0;
} }
.h2 { .h2 {
font-size: 32rpx; font-size: 32rpx;

2
pages/userCenter/myCar/myCar.vue

@ -116,7 +116,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.searcBox { .searcBox {
padding: 24rpx 0;
padding: 0 0 24rpx 0;
} }
.card { .card {
margin-bottom: 20rpx; margin-bottom: 20rpx;

27
pages/userCenter/personaInfo/personaInfo.vue

@ -5,7 +5,7 @@
<view class="card"> <view class="card">
<view class="row"> <view class="row">
<view class="lab">手机号</view> <view class="lab">手机号</view>
<view class="val"> {{ vuex_userInfo.user.phone}} </view>
<view class="val"> {{ hideMiddleDigits(vuex_userInfo.user.phone) }} </view>
</view> </view>
</view> </view>
@ -48,6 +48,29 @@
<script> <script>
export default { export default {
methods: {
hideMiddleDigits(phoneNumber) {
//
if (phoneNumber.length === 11) {
//
const firstThreeDigits = phoneNumber.slice(0, 3);
const lastFourDigits = phoneNumber.slice(-4);
//
const hiddenDigits = '*'.repeat(3);
//
const hiddenPhoneNumber = firstThreeDigits + hiddenDigits + lastFourDigits;
return hiddenPhoneNumber;
} else {
// 10
console.error('Invalid phone number format');
return phoneNumber;
}
}
}
} }
</script> </script>
@ -74,7 +97,7 @@
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
align-items: center; align-items: center;
margin: 88rpx 0;
margin: 188rpx 0;
} }
.logout { .logout {
width: 396rpx; width: 396rpx;

2
pages/userCenter/refund/refund.vue

@ -38,7 +38,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.navBox { .navBox {
padding: 24rpx 0;
padding: 0 0 24rpx 0;
} }
.card { .card {
padding: 0 28rpx; padding: 0 28rpx;

4
pages/userCenter/schoolCoach/coachComment/coachComment.vue

@ -1,12 +1,12 @@
<template> <template>
<view class="pageBgImg"> <view class="pageBgImg">
<topNavbar title="教练详情"></topNavbar>
<view class="pad"> <view class="pad">
<topNavbar title="教练详情"></topNavbar>
<view class="infoBox"> <view class="infoBox">
<info :showSign="true" :item="info"></info> <info :showSign="true" :item="info"></info>
</view> </view>
<comments :list="list" @changeNav="changeNav"></comments> <comments :list="list" @changeNav="changeNav"></comments>
<view style="padding-bottom: 20rpx;" v-if="list.length">
<view style="padding-bottom: 20rpx;" v-if="list.length>4">
<u-loadmore :status="status" /> <u-loadmore :status="status" />
</view> </view>
<nodata v-if="!list.length&&status=='nomore'"></nodata> <nodata v-if="!list.length&&status=='nomore'"></nodata>

2
pages/userCenter/schoolCoach/coachComment/comp/info.vue

@ -18,7 +18,7 @@
</view> </view>
<view class="text">证件号{{item.idcard}}</view> <view class="text">证件号{{item.idcard}}</view>
<view class="text">联系电话{{item.mobile}}</view> <view class="text">联系电话{{item.mobile}}</view>
<view class="text">绑定学员<text>暂时没字段</text></view>
<view class="text">绑定学员<text>{{ item.studentTotal||0 }}</text> </view>
</view> </view>
</view> </view>

2
pages/userCenter/schoolSite/schoolSite.vue

@ -25,7 +25,7 @@
</view> </view>
</view> </view>
</view> </view>
<view style="padding-bottom: 20rpx;" v-if="list.length">
<view style="padding-bottom: 20rpx;" v-if="list.length>6">
<u-loadmore :status="status" /> <u-loadmore :status="status" />
</view> </view>
<nodata v-if="!list.length&&status=='nomore'"></nodata> <nodata v-if="!list.length&&status=='nomore'"></nodata>

40
pages/userCenter/studentComment/studentComment.vue

@ -6,10 +6,10 @@
<searchRow placeholder="搜索学员姓名" @searchFn="searchFn"></searchRow> <searchRow placeholder="搜索学员姓名" @searchFn="searchFn"></searchRow>
</view> </view>
<view class="tabs"> <view class="tabs">
<view class="tab" :class="{active: this.params.condition==0}" @click="changeTab(0)">全部{{total}}</view>
<view class="tab" :class="{active: this.params.condition==1}" @click="changeTab(1)">匿名缺字段</view>
<view class="tab" :class="{active: this.params.condition==2}" @click="changeTab(2)">有图2</view>
<view class="tab" :class="{active: this.params.condition==3}" @click="changeTab(3)">有视频3</view>
<view class="tab" :class="{active: this.params.condition==0}" @click="changeTab(0)">全部{{ totalType.total1 }}</view>
<view class="tab" :class="{active: this.params.condition==1}" @click="changeTab(1)">匿名{{ totalType.total2 }}</view>
<view class="tab" :class="{active: this.params.condition==2}" @click="changeTab(2)">有图{{ totalType.total3 }}</view>
<view class="tab" :class="{active: this.params.condition==3}" @click="changeTab(3)">有视频{{ totalType.total4 }}</view>
</view> </view>
<view class="list"> <view class="list">
<view class="card" v-for="(item,index) in list" :key="index"> <view class="card" v-for="(item,index) in list" :key="index">
@ -20,13 +20,13 @@
<view style="padding-bottom: 20rpx;" v-if="list.length"> <view style="padding-bottom: 20rpx;" v-if="list.length">
<u-loadmore :status="status" /> <u-loadmore :status="status" />
</view> </view>
<nodata v-if="!list.length&&status=='nomore'"></nodata>
<nodata v-if="!list.length&&status=='nomore'" style="margin-top: 100rpx;"></nodata>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { schoolCommentPage, coachCommentPage } from '@/config/api.js'
import { schoolCommentPage, coachCommentPage, commentPagetotal, pageCoachCommentTotal} from '@/config/api.js'
export default { export default {
data() { data() {
return { return {
@ -41,6 +41,12 @@
}, },
// 0 1 2 3 // 0 1 2 3
total: 20, total: 20,
totalType: {
total1: 0,
total2: 0,
total3: 0,
total4: 0,
},
status: 'loading' status: 'loading'
} }
}, },
@ -53,7 +59,7 @@
}else if(this.identity=='模拟器老师'){ }else if(this.identity=='模拟器老师'){
this.params.coachType = 3 this.params.coachType = 3
} }
this.schoolCommentPageFn()
this.initList()
}, },
onPullDownRefresh() { onPullDownRefresh() {
this.initList() this.initList()
@ -77,6 +83,25 @@
this.params.pageNo = 1 this.params.pageNo = 1
this.status = 'loading' this.status = 'loading'
this.schoolCommentPageFn() this.schoolCommentPageFn()
this.commentPagetotalFn()
},
//
async commentPagetotalFn() {
let obj = {schoolId: this.params.schoolId}
//
if(this.params.coachType) {
obj.coachType = this.params.coachType
obj.coachId = this.vuex_coachId
var {data: res} = await pageCoachCommentTotal(obj)
}else {
var {data: res} = await commentPagetotal(obj)
}
this.totalType = {
total1: res.total1,
total2: res.total2,
total3: res.total3,
total4: res.total4,
}
}, },
async schoolCommentPageFn() { async schoolCommentPageFn() {
if(this.identity=='校长') { if(this.identity=='校长') {
@ -95,6 +120,7 @@
}) })
this.list.push(...arr) this.list.push(...arr)
this.total = res.total this.total = res.total
if(this.list.length>=this.total) { if(this.list.length>=this.total) {
this.status = 'nomore' this.status = 'nomore'
}else { }else {

Loading…
Cancel
Save