11 Commits

49 changed files with 616 additions and 757 deletions

View File

@@ -5,7 +5,7 @@ VITE_APP_TITLE = 金武联驾校
VITE_APP_ENV = 'development'
# 金武联驾校/开发环境
VITE_APP_BASE_API = 'http://118.31.23.45:8888/'
VITE_APP_BASE_API = 'http://192.168.1.2:8888/'
#
VITE_WEB_BASE_URL = 'http://118.31.23.45:8888/'
VITE_WEB_BASE_URL = 'http://192.168.1.2:8888/'

View File

@@ -1,7 +1,14 @@
<script>
import useUserStore from '@/jtools/store/user'
import useQuestionStore from '@/jtools/store/question' //引入store
export default {
onLaunch: function () {
console.log('App Launch')
useUserStore().queryVipList()
if(useUserStore().isLogin) {
useQuestionStore().getOrderQuestion('1')
useUserStore().getUserInfo()
useUserStore().searchUserVip()
}
},
onShow: function () {
console.log('App Show')

View File

@@ -353,6 +353,6 @@
}
}
.actived {
color: #05C341;
color: #05C341 !important;
}
</style>

View File

@@ -21,6 +21,21 @@ export function getCode(data) {
export function logout() {
return request({
url: 'driver-api/tdSysUser/loginOut',
method: 'get',
method: 'get'
});
}
export function getInfo() {
return request({
url: 'driver-api/tdSysUser/queryUserMessage',
method: 'get'
});
}
export function bindSchool(data) {
return request({
url: 'driver-api/tdSysUser/bindSchool',
method: 'post',
data
});
}

View File

@@ -0,0 +1,10 @@
import request from '../request/index.js';
export function queryQuestion(data) {
return request({
url: 'driver-api/tdQuestion/queryQuestion',
method: 'POST',
data,
});
}

View File

@@ -7,3 +7,11 @@ export function queryVip(data) {
data,
});
}
export function getVipList(data) {
return request({
url: 'driver-api/tdMember/queryMember',
method: 'POST',
data,
});
}

View File

@@ -16,7 +16,7 @@ function service(options = {}) {
});
} else {
options.header = {
Authorization: `Bearer ${token}`
Authorization: `${token}`
};
}
}
@@ -26,7 +26,7 @@ function service(options = {}) {
if (res.data.code == 'E403') {
// 未登录
uni.showToast({
title: res.data.message,
title: res?.data?.message || '请重新登录',
icon: 'none'
});
useUserStore().logout()
@@ -34,7 +34,7 @@ function service(options = {}) {
resolved(res.data);
} else if(res.data.code != '0000') {
uni.showToast({
title: resp.message,
title: res?.data?.message || '访问出错',
icon: 'none'
})
resolved(res.data)

View File

@@ -1,18 +1,30 @@
import { defineStore } from 'pinia';
import {
defineStore
} from 'pinia';
import http from '@/jtools/request/index';
import constants from '@/jtools/constants';
import {
queryQuestion
} from '@/jtools/api/question';
import storage from '@/jtools/storage';
const question = defineStore({
id: 'question',
state: () => ({
orderQuestionList: [], //顺序做题
currentCartype: storage.get('carType') || '1001',
orderQuestion: [], //顺序做题
}),
actions: {
// 获取顺序做题
getQuestionList(arr) {
this.orderQuestionList=[...arr]
getOrderQuestion(val) {
queryQuestion({
carTypeId: this.currentCartype,
subject: val
}).then(res => {
if (res.code == '0000') {
this.orderQuestion = res.data
}
})
},
}
});

View File

@@ -1,5 +1,6 @@
import { defineStore } from 'pinia';
import { login,logout } from '@/jtools/api/login';
import { login,logout,getInfo } from '@/jtools/api/login';
import { queryVip,getVipList } from '@/jtools/api/vip'
import constants from '@/jtools/constants';
import storage from '@/jtools/storage';
@@ -9,11 +10,13 @@ const useUserStore = defineStore({
token: storage.get('token'),
isLogin: storage.get('isLogin'), // 是否登陆
userInfo: storage.get('userInfo'), // 用户信息
currentCartype: storage.get('carType') || '1001',
vipOnList: [],
vipAllList: []
}),
actions: {
login(params) {
// commit('isLogin', true);
return new Promise(async (resolve, reject) => {
const resp = await login(params);
if (resp.code === '0000') {
@@ -40,13 +43,39 @@ const useUserStore = defineStore({
resolve();
})
},
// 获取用户信息
getUserInfo() {
getInfo().then(resp => {
if(resp.code == '0000') {
this.userInfo = resp.data
storage.set('userInfo', resp.data)
}
})
},
resetUserData() {
this.isLogin = false;
this.token = '';
this.userInfo = {}
this.vipOnList = []
storage.remove('isLogin')
storage.remove('token')
storage.remove('userInfo')
},
// 查询当前用户的vip开通情况
searchUserVip() {
queryVip({ carTypeId: this.currentCartype,memberId: null, subject:'' }).then(resp => {
if(resp.code == '0000') {
this.vipOnList = resp.data
}
})
},
// 查询所有的vip
queryVipList() {
getVipList({ carTypeId: this.currentCartype,memberId: null, subject:'' }).then(resp => {
if(resp.code == '0000') {
this.vipAllList = resp.data
}
})
}
},
});

View File

@@ -124,6 +124,13 @@
"navigationBarTitleText": "章节练习",
"enablePullDownRefresh": false
}
},
{
"path": "pages/index/testRoom",
"style": {
"navigationBarTitleText": "考场实况",
"enablePullDownRefresh": false
}
}
],

View File

@@ -1,17 +1,20 @@
<template>
<view>
<view class="box-nav">
<image style="width: 100%;" src="../../static/image/index/index_bg.png"></image>
<image style="width: 100%;" src="../../static/image/index/index_bg.jpg"></image>
<view class="center-box flex jc-sb ai-c">
<view class="box-item flex ai-c jc-c">
<view class="flex jc-c ai-c" style="width: 230rpx;height: 230rpx;background-image: url(../../../static/image/index/green_bg.png);background-size: 100% 100%;">
<view class="btn-item flex ai-c jc-c">
<view class="text-center cor-fff" style="line-height: 40rpx;" @tap="toAnswer('顺序答题')">
<view class="fs16">顺序练习</view>
<text class="fs14">0/2344</text>
<text class="fs14">{{rightList.length+wrongList.length}}/{{orderQuestion.length}}</text>
</view>
</view>
</view>
</view>
<view class="box-item flex ai-c jc-c">
<view class="flex jc-c ai-c" style="width: 230rpx;height: 230rpx;background-image: url(../../../static/image/index/orange_bg.png);background-size: 100% 100%;">
<view class="btn2-item flex ai-c jc-c">
<view class="text-center cor-fff" style="line-height: 40rpx;" @tap="toExams">
<view class="fs16">模拟考试</view>
@@ -21,6 +24,7 @@
</view>
</view>
</view>
</view>
<view style="padding: 0 28rpx;margin-top: 60rpx;">
<view class="tabs-box">
<view class="wp33 flex ai-c jc-c" @tap="toVip">
@@ -47,7 +51,7 @@
<view class="mt5">专项练习</view>
</view>
</view>
<view class="wp33 flex ai-c jc-c">
<view class="wp33 flex ai-c jc-c" @tap="toTestRoom">
<view class="text-center wp100">
<image style="width: 72rpx;height: 72rpx;margin: 0 auto;"
src="../../static/image/index/realicon.png"></image>
@@ -73,16 +77,16 @@
<view style="padding: 0 28rpx;margin-top: 30rpx;" @tap="toClass">
<view class="video-box">
<view class="flex jc-sb ai-c wp100">
<text style="color: #05C341;font-size: 36rpx;">精品视频课</text>
<text style="color: #05C341;font-size: 36rpx;">{{type==1?'一':'四'}}精品视频课</text>
<text class="cor-666 fs12">全部10节课 ></text>
</view>
<view class="flex ai-c mt20">
<image class="contain-box" src="../../static/image/index/index_bg.png"></image>
<image class="contain-box" src="../../static/image/index/index_bg.jpg"></image>
<view class="ml15 text-center">
<u-button :customStyle="{width:'200rpx',height:'66rpx',borderRadius: '33rpx'}" iconColor="#fff"
text="去看视频" color="linear-gradient(90deg, #11DF20 0%, #00B74F 100%)" icon="play-circle">
</u-button>
<view class="cor-333 fs15 fw600 mt10">易错试题</view>
<view class="cor-333 fs15 fw600 mt10">{{type==1?'一':'四'}}易错试题</view>
</view>
</view>
@@ -92,11 +96,34 @@
</template>
<script>
import { mapState,mapActions } from 'pinia' //引入映射函数
import storage from '@/jtools/storage';
import useQuestionStore from '@/jtools/store/question' //引入store
export default {
props:{
type:{
type:[String,Number],
}
},
data() {
return {}
return {
rightList:storage.get('rightList'),
wrongList:storage.get('wrongList'),
allQuestionNum:0,
}
},
onLoad(){
// this.allQuestionNum=useQuestionStore().orderQuestion.length
},
computed: {
...mapState(useQuestionStore, ["orderQuestion"]) //映射函数取出tagslist
},
methods: {
toTestRoom(){
uni.navigateTo({
url:"/pages/index/testRoom"
})
},
toVip(){
uni.navigateTo({
url:"/pages/index/videoVip"

View File

@@ -5,7 +5,7 @@
</u-sticky>
<view style="height: 100vh;background-color: rgb(245, 245, 245);">
<template v-if="tIndex===0 || tIndex===3">
<Subject1 />
<Subject1 :type="tIndex+1" />
</template>
<template v-else>
<subject2 />
@@ -38,313 +38,13 @@
};
},
onLoad() {
this.getAllQuestion()
},
methods:{
...mapActions(useQuestionStore, ['getQuestionList']), //映射action
//切换科目
changeCategory(val){
this.tIndex=val.index
console.log(this.tIndex);
},
//获取全部题库
getAllQuestion(){
const arr = [{
questionId: 0,
questionTypeDesc: '单选',
questionDesc: '第一题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'C',
}, {
questionId: 1,
questionTypeDesc: '单选',
questionDesc: '第二题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'B',
}, {
questionId: 2,
questionTypeDesc: '单选',
questionDesc: '第三题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 3,
questionTypeDesc: '单选',
questionDesc: '第四题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 4,
questionTypeDesc: '单选',
questionDesc: '第5题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 5,
questionTypeDesc: '单选',
questionDesc: '第6题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 6,
questionTypeDesc: '单选',
questionDesc: '第7题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 7,
questionTypeDesc: '单选',
questionDesc: '第8题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 8,
questionTypeDesc: '单选',
questionDesc: '第9题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'C',
}, {
questionId: 9,
questionTypeDesc: '单选',
questionDesc: '第10题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'B',
}, {
questionId: 10,
questionTypeDesc: '单选',
questionDesc: '第11题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 11,
questionTypeDesc: '单选',
questionDesc: '第12题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 12,
questionTypeDesc: '单选',
questionDesc: '第13题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 13,
questionTypeDesc: '单选',
questionDesc: '第14题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 14,
questionTypeDesc: '单选',
questionDesc: '第15题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 15,
questionTypeDesc: '单选',
questionDesc: '第16题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}
]
this.getQuestionList(arr)
},
}
}
</script>

View File

@@ -0,0 +1,100 @@
<template>
<view>
<u-sticky bgColor="#fff">
<u-tabs :list="categoryList" :scrollable="false" @click="changeCategory"></u-tabs>
</u-sticky>
<view class="p14">
<view class="flex ai-c" v-if="carTypeList&&carTypeList.length">
<view class="car_item mr10" v-for="(item,index) of carTypeList" :key="index" @tap="chooseCar(item.value)" :class="item.value===tCar?'checked_car':'unchecked_car'">{{item.label}}</view>
</view>
<view class="flex p14 bc-fff" style="border-radius: 16rpx;" v-for="(item,index) of videoList" :key="index" @tap="toDetail">
<image class="pic" src="../../static/image/index/index_bg.png"></image>
<view class="ml10" style="width: calc(100% - 320rpx);">
<text class="fs16 cor-000 fw600">八一考场</text>
<view class="fs14 mt40 cor-666 flex jc-sb ai-c wp100" >
<text>共9条路线视频</text>
<text>蜀山区</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data(){
return{
tCar:0,
categoryList:[{
name:'全部'
},{
name:'蜀山区'
},{
name:'长丰县'
},{
name:'瑶海区'
},{
name:'肥东县'
},{
name:'庐江县'
}],
carTypeList:[],
videoList:[{
label:"111"
},{
label:'222'
},{
label:'333'
},{
label:'444'
}]
}
},
methods:{
chooseCar(val){
this.tCar=val
},
changeCategory(val){
},
toDetail(){
uni.navigateTo({
url:'/pages/questionBank/videoDetail?type=test'
})
}
}
}
</script>
<style scoped>
::v-deep .u-tabs__wrapper__nav__line {
background: linear-gradient(90deg, #11DF20 0%, #00B74F 100%) !important;
bottom: 14rpx !important;
}
.car_item{
font-size: 28rpx;
padding:0 34rpx;
height: 58rpx;
line-height: 58rpx;
border-radius: 29rpx;
}
.checked_car{
background-color: #05C341;
color: #fff;
}
.unchecked_car{
border: 1px solid #DDD;
color: #666;
box-sizing: border-box;
}
.pic{
width: 300rpx;
height: 169rpx;
background: #00B74F;
border-radius: 8rpx;
}
::v-deep .u-tabs__wrapper__nav__item{
padding: 0 !important;
}
</style>

View File

@@ -1,6 +1,6 @@
<template>
<view class="relative" style="height: 100vh;">
<image style="width: 100%;height: 600rpx;" src="../../static/image/index/vip_bg.png"></image>
<image style="width: 100%;height: 600rpx;" src="../../static/image/index/vip_bg.jpg"></image>
<view class="p14">
<view class="flex jc-sb ai-c">
<view class="option_tem relative" :class="checkedPrice===item.priceId?'checked_item':''" v-for="(item,index) of priceList" :key="index" @click="checkPrice(item.priceId,item.money)">

View File

@@ -1,7 +1,7 @@
<template>
<view class="content">
<view class="header">
<image src="/static/image/login/logo.png" mode="widthFix"></image>
<image src="/static/image/login/logo.jpg" mode="widthFix"></image>
<view class="mt21 fs16 cor-333 fwb text-center">欢迎使用金联武驾考</view>
</view>
@@ -57,19 +57,19 @@
getCode({
phone: this.login.phone
}).then(resp => {
if (resp.code == '0000') {
// if (resp.code == '0000') {
uni.showToast({
title: '发送成功!',
icon: 'none'
})
this.countDown = 60
this.js = setInterval(() => {
this.countDown;
this.countDown--;
if (this.countDown == 0) {
this.clear()
}
}, 1000)
}
// }
})
}
},

View File

@@ -8,9 +8,9 @@
<view class="ml12">
<view class="flex ai-c fs18 cor-333 fwb">
<text class="mr10">{{ user.userName }}{{user.userId}}</text>
<image src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;"></image>
<image v-if="vipOn.length" src="/static/image/mine/vip.png" mode="widthFix" style="width: 18px;"></image>
</view>
<view class="mt5 fs14 cor-666">陪您学车 {{ user.count }}</view>
<view class="mt5 fs14 cor-666">陪您学车 {{ user.days }}</view>
</view>
</view>
<view class="info flex ai-c" v-else @tap="toLogin">
@@ -33,21 +33,22 @@
</view>
<text class="ml5 fs16 fwb" style="color: #7E4012FF;">VIP会员</text>
</view>
<text class="fs12" style="color: #7E4012FF;">2024-12-12到期</text>
<text v-if="vipOn.length" class="fs12" style="color: #7E4012FF;">{{expireTime}}到期</text>
</view>
<view class="absolute flex ai-c jc-c" style="left: 0;top: 40px;right: 0;bottom: 0;">
<view class="text-center">
<view class="fs18 fwb" style="color: #7E4012FF;">尊享科目一二三四全部付费权益</view>
<view v-if="vipOn.length" class="fs18 fwb" style="color: #7E4012FF;">{{vipText}}</view>
<view class="study fs16 text-center" style="margin: 25px auto 0;color: #F6E99FFF;">
马上学习
{{ vipOn.length?'马上学习':'开通会员'}}
</view>
</view>
</view>
</view>
<view class="br8 bc-fff p15 z-index2">
<text class="fs16 cor-333">我的驾校</text>
<view v-if="user.schoolId">
<div class="mt12 flex ai-c jc-sb">
<text class="fs18 cor-000 fwb">合肥八一驾校</text>
<text class="fs18 cor-000 fwb">{{user.schoolName}}</text>
<u-button text="切换驾校" shape="circle" @click="handleChangeSchool"></u-button>
</div>
<u-line margin="14px 0 18px 0"></u-line>
@@ -56,17 +57,21 @@
<img src="/static/image/mine/phone.png" style="width: 12px;height: 12px;">
<text class="ml2 fs12 cor-fff">客服热线</text>
</view>
<text class="ml5 fs26 cor-333 fwb" style="line-height: 26px;">0551-12345678</text>
<text class="ml5 fs26 cor-333 fwb" style="line-height: 26px;">{{user.schoolPhone}}</text>
</view>
</view>
<view v-else class="pt30 pb15">
<u-button text="绑定驾校" shape="circle" @click="handleChangeSchool"></u-button>
</view>
</view>
<view class="mt12 bc-fff br8">
<u-cell-group>
<u-cell size="large" title="我的资料" value="修改" isLink @tap="handleInfo">
<u-cell size="large" title="我的资料" isLink @tap="handleInfo">
<template #icon>
<img src="/static/image/mine/wdzl.png" style="width: 24px;height: 24px;">
</template>
</u-cell>
<u-cell size="large" title="我的体检" value="查看报告" isLink @tap="handleTJ">
<u-cell size="large" title="我的体检" isLink @tap="handleTJ">
<template #icon>
<img src="/static/image/mine/wdtj.png" style="width: 24px;height: 24px;">
</template>
@@ -78,7 +83,7 @@
</u-cell>
</u-cell-group>
</view>
<view class="flex ai-c jc-c mt12 br8 bc-fff" style="height: 50px;" @tap="handleLogout">
<view v-if="isLogin" class="flex ai-c jc-c mt12 br8 bc-fff" style="height: 50px;" @tap="handleLogout">
<text class="fs16" style="color: #A09F9F;">退出登录</text>
</view>
</view>
@@ -86,7 +91,6 @@
</template>
<script>
import useUserStore from '@/jtools/store/user'
import { queryVip } from '@/jtools/api/vip'
export default {
components: {},
computed: {
@@ -95,6 +99,34 @@ export default {
},
user() {
return useUserStore().userInfo
},
vipOn() {
return useUserStore().vipOnList
},
expireTime() {
if(this.vipOn.length) {
const t = this.vipOn.reduce((pre, cur) => {
if(Date.parse(pre) > Date.parse(cur.endDate)) {
return cur.endDate
}
return pre
}, '2099-12-31')
return t.split(' ')[0]
}else {
return ''
}
},
vipText() {
if(this.vipOn.length) {
const t = this.vipOn.reduce((pre, cur) => {
return [...pre, ...cur.subjects.split(',').map(it =>['','一','二','三','四'][it])]
}, [])
let val = Array.from(new Set(t))
val = val.length == 4 ? val.join('')+'全部':val.join('')
return `尊享科目${val}付费权益`
}else {
return ''
}
}
},
data() {
@@ -102,30 +134,36 @@ export default {
};
},
onShow() {
this.searchVip()
},
methods: {
searchVip() {
queryVip().then(resp => {
if(resp.code == '0000') {
debugger
}
})
},
handleVip() {
if(this.isLogin) {
if(this.vipOn.length) {
uni.navigateTo({
url: '/pages/me/vip'
})
} else {
uni.navigateTo({
url: '/pages/index/videoVip'
})
}
} else {
this.toLogin()
}
},
handleCallPhone() {
uni.makePhoneCall({
phoneNumber: '17318531354'
phoneNumber: this.user.schoolPhone
})
},
handleChangeSchool() {
if(this.isLogin) {
uni.navigateTo({
url: '/pages/me/school'
})
} else {
this.toLogin()
}
},
handleInfo() {
if(this.isLogin) {
@@ -152,7 +190,7 @@ export default {
},
handleLogout() {
useUserStore().logout()
}
},
}
}
</script>

View File

@@ -1,46 +1,54 @@
<template>
<view>
<IndexList :dataList="dataList" nameKey="schoolName" v-model:current="current" @click="click"></IndexList>
<IndexList :dataList="dataList" nameKey="schoolName" idKey="schoolId" v-model:current="current" @click="click"></IndexList>
</view>
</template>
<script>
import IndexList from '@/components/liu-indexed-list/liu-indexed-list.vue'
import { bindSchool } from '@/jtools/api/login.js'
import useUserStore from '@/jtools/store/user.js'
export default {
components: {
IndexList
},
data() {
return {
current: '1',
dataList: [{
id: '1',
schoolName: '爱尚学车驾校长安分校',
},{
id: '2',
schoolName: '八一驾校',
},{
id: '3',
schoolName: '八零驾校',
},{
id: '4',
schoolName: '畅通驾校',
},{
id: '5',
schoolName: '金灵驾校',
},{
id: '6',
schoolName: '通顺驾校',
}]
current: useUserStore().userInfo.schoolId,
dataList: []
}
},
created() {
this._getSchoolOptions()
},
methods: {
_getSchoolOptions() {
uni.request({
url: 'https://xueche.ahduima.com/duima/applet/school/list'
}).then(resp => {
if(resp.data.code == 200) {
this.dataList = resp.data.data
}
})
},
click() {
// 设置用户驾校
const {schoolId,schoolName,phone } = this.dataList.find(it=>it.schoolId == this.current)
const params = {schoolId, schoolName, schoolPhone: phone}
bindSchool(params).then(resp => {
if(resp.code == '0000') {
useUserStore().userInfo.schoolId = schoolId
useUserStore().userInfo.schoolName = schoolName
useUserStore().userInfo.schoolPhone = phone
uni.showToast({
title: '绑定驾校成功!',
icon: 'none'
})
// 然后返回
uni.navigateBack()
}
})
}
}
}
</script>

View File

@@ -2,34 +2,37 @@
<view class="flex fld-c p15">
<u-sticky>
<view class="flex ai-c">
<view v-for="(item,index) in list" :key="index" class="km-item" :class="{ actived: index==current }"
<view v-for="(item,index) in vipAllList" :key="index" class="km-item" :class="{ actived: index==current }"
@click="current=index">
{{ item.name }}
{{ getKmTitle(item.subjects) }}
</view>
</view>
</u-sticky>
<view class="mt15">
<swiper class="swiper" :current="current" style="height: 120px;" :autoplay="false" :display-multiple-items="1.45"
:disable-programmatic-animation="true" @change="onChange">
<swiper-item v-for="(item,index) in list" :key="index">
<swiper-item v-for="(item,index) in vipAllList" :key="index">
<view class="relative">
<image src="../../static/image/mine/vip_card.png" mode="widthFix" style="width:95%;"></image>
<view class="vip-info">
<u-avatar class="br-p50 overflow-h" style="border: 3px solid #873E1D;" :size="35" mp-avatar></u-avatar>
<view class="ml10">
<view class="fs16 fwb" style="color: #7E4012;line-height: 16px;">
{{item.name}}尊享VIP
{{item.memberName}}
</view>
<view class="mt5 fs12" style="color: #7E4012;line-height: 12px;">
2024-12-12到期
{{getExpireText(item)}}
</view>
</view>
</view>
<view class="corner">
<view v-if="vipHasOpened(item)" class="corner">
VIP已开通
</view>
<view class="renew">
98元立即续费
<view v-if="vipHasOpened(item)" class="renew">
{{item.price}}元立即续费
</view>
<view v-else class="buy">
立即充值
</view>
</view>
</swiper-item>
@@ -40,10 +43,10 @@
<view class="mt20">
<swiper class="swiper" :current="current" style="height: 300px;" :autoplay="false"
:disable-programmatic-animation="true" @change="onChange">
<swiper-item v-for="(item,index) in list" :key="index">
<swiper-item v-for="(item,index) in vipAllList" :key="index">
<view v-if="index == 0 || index == 3" class="p15 br8 cor-fff">
<view class="fs18 cor-000 fwb">
3步轻松学{{item.name}}
3步轻松学{{getKmTitle(item.subjects)}}
</view>
<view class="mt25 flex ai-c jc-sb">
<view class="flex ai-c">
@@ -57,7 +60,7 @@
</view>
</view>
</view>
<view class="study">
<view class="study" @tap="to500(item)">
去学习
</view>
</view>
@@ -73,7 +76,7 @@
</view>
</view>
</view>
<view class="study">
<view class="study" @tap="toRealExam(item)">
去学习
</view>
</view>
@@ -89,7 +92,7 @@
</view>
</view>
</view>
<view class="study">
<view class="study" @tap="toSpecExam(item)">
去学习
</view>
</view>
@@ -104,7 +107,7 @@
<image src="../../static/image/index/index_bg.png" mode="widthFix" style="flex: 1;border-radius: 33rpx;"></image>
<view class="ml18 text-center">
<u-button :customStyle="{width:'200rpx',height:'66rpx',borderRadius: '33rpx'}" iconColor="#fff"
text="去看视频" color="linear-gradient(90deg, #E66501 0%, #F8A42C 100%)" icon="play-circle">
text="去看视频" color="linear-gradient(90deg, #E66501 0%, #F8A42C 100%)" icon="play-circle" @click="toPlaceLive(item)">
</u-button>
<view class="cor-333 fs15 mt17">真实考场模拟</view>
</view>
@@ -120,24 +123,92 @@
</template>
<script>
import useUserStore from '@/jtools/store/user'
export default {
computed: {
vipAllList() {
return useUserStore().vipAllList.filter(it=>[1,2,3,4].includes(Number(it.subjects)))
},
vipOnList() {
return useUserStore().vipOnList
},
},
data() {
return {
list: [{
name: '科一'
}, {
name: '科二'
}, {
name: '科三'
}, {
name: '科四'
}],
current: 0
}
},
methods: {
onChange(e) {
this.current = e.detail.current
},
getKmTitle(km) {
return {
'1': '科一',
'2': '科二',
'3': '科三',
'4': '科四',
}[km]
},
getExpireText(item) {
const vipOn = this.vipOnList.find(it => it.memberId == item.memberId)
if(vipOn) {
return `${vipOn.endDate.split(' ')[0]}到期`
} else {
return '开通vip助您快速拿证'
}
},
vipHasOpened(item) {
return !!this.vipOnList.find(it => it.memberId == item.memberId)
},
// 去精选500题 item=> 当前科目vip信息
to500(item) {
// 当前vip是否已开通
if(this.vipHasOpened(item)) {
// 跳转
} else {
uni.showToast({
title: `请先充值${this.getKmTitle(item.subjects)}vip`,
icon: 'none'
})
}
},
// 去真实考场 item=> 当前科目vip信息
toRealExam(item) {
// 当前vip是否已开通
if(this.vipHasOpened(item)) {
// 跳转
} else {
uni.showToast({
title: `请先充值${this.getKmTitle(item.subjects)}vip`,
icon: 'none'
})
}
},
// 去秘卷 item=> 当前科目vip信息
toSpecExam(item) {
// 当前vip是否已开通
if(this.vipHasOpened(item)) {
// 跳转
} else {
uni.showToast({
title: `请先充值${this.getKmTitle(item.subjects)}vip`,
icon: 'none'
})
}
},
// 去考场实况 item=> 当前科目vip信息
toPlaceLive(item) {
// 当前vip是否已开通
if(this.vipHasOpened(item)) {
// 跳转
} else {
uni.showToast({
title: `请先充值${this.getKmTitle(item.subjects)}vip`,
icon: 'none'
})
}
}
}
}
@@ -203,6 +274,21 @@
font-size: 12px;
color: #F6E99F;
}
.buy {
position: absolute;
left: 45%;
transform: translateX(-50%);
bottom: 15px;
display: flex;
align-items: center;
justify-content: center;
width: 200rpx;
height: 60rpx;
background: #873E1D;
border-radius: 30rpx;
font-size: 14px;
color: #F6E99F;
}
.study {
display: flex;

View File

@@ -10,18 +10,18 @@
<scroll-view scroll-y="true" class="swiper-scroll">
<view>
<view class="m14lr">
<text class="tag_box">{{quesItem.questionTypeDesc}}</text>
<text class="fs18">{{quesItem.questionDesc}}</text>
<text class="tag_box">{{getQuestType(quesItem.type)}}</text>
<text class="fs18">{{quesItem.question}}</text>
</view>
<view class="flex m14lr ai-c mt20" v-for="(item,index) in quesItem.optionList"
:key="item.op" @tap="answerQues(item.op,index)">
:key="item.op" @tap="answerQues(item.opValue,index)">
<template
v-if="quesItem.clickAnswer&&item.op===quesItem.rightOp">
<u-icon class="mr15" name="checkmark-circle-fill" color="#05C341" size="30"></u-icon>
v-if="quesItem.clickAnswer&&quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="checkmark-circle-fill" color="#05C341" size="32"></u-icon>
</template>
<template
v-else-if="quesItem.clickAnswer===item.op&&item.op!==quesItem.rightAnswer">
<u-icon class="mr15" name="close-circle-fill" color="red" size="30"></u-icon>
v-else-if="quesItem.clickAnswer&&quesItem.clickAnswer.includes(item.opValue)&&!quesItem.trueAnswer.includes(item.opValue)">
<u-icon class="mr15" name="close-circle-fill" color="red" size="32"></u-icon>
</template>
<template v-else-if="!item.chooseOption">
<view class="option_item">{{item.op}}</view>
@@ -29,10 +29,10 @@
<text class="fs18">{{item.opDesc}}</text>
</view>
<view class="m14lr mt30"
v-if="quesItem.clickAnswer&&quesItem.clickAnswer!==quesItem.rightOp || tCurrent===1">
v-if="quesItem.clickAnswer&&!quesItem.trueAnswer.includes(quesItem.clickAnswer) || tCurrent===1">
<view class="answer_box">
<text class="fs18 fw600 cor-000">答案:{{quesItem.rightOp}}</text>
<view class="fs18 cor-000" style="text-indent:2em;"> 这里是相关解释文字这里是相关解释文字相关解释文字</view>
<text class="fs18 fw600 cor-000">答案:{{getRightOp(quesItem.trueAnswer)}}</text>
<view class="fs18 cor-000" style="text-indent:2em;"> {{quesItem.bestAnswer}}</view>
</view>
</view>
</view>
@@ -219,7 +219,7 @@ export default {
rightList:[],
wrongList:[],
collectList:storage.get('collectList') || [],
questionList: [],//数据源
questionList: [{isCollect:true}],//数据源
swiperList: [], // 轮播图数据列表
swiperIndex: 0, // 轮播图当前位置
isChange: false, // 是否切换
@@ -228,10 +228,33 @@ export default {
}
},
onLoad() {
this.getQuestionList()
this.renderSwiper(0)
},
methods: {
//获取正确选项
getRightOp(val){
let rightOp=''
this.questionList[this.topicIndex].optionList.forEach(item=>{
if(this.questionList[this.topicIndex].trueAnswer.includes(item.opValue)){
if(rightOp){
rightOp=rightOp+'、'+item.op
}else{
rightOp=item.op
}
}
})
return rightOp
},
//获取题类型
getQuestType(val){
if(val=='1'){
return '判断'
}else if(val=='2'){
return '单选'
}else if(val=='3'){
return '多选'
}
},
//开通VIP
toVip(){
this.showVip=true
@@ -364,22 +387,37 @@ export default {
this.topicIndex = index;
this.renderSwiper(index);
},
isArrEqual(arr1, arr2){
return arr1.length === arr2.length && arr1.every((ele) => arr2.includes(ele));
},
//答题
answerQues(op, index) {
const falseList =storage.get('wrongList') || []
const trueList =storage.get('rightList') || []
if (!this.questionList[this.topicIndex].clickAnswer) {
this.questionList[this.topicIndex].optionList[index].chooseOption = op
this.questionList[this.topicIndex].clickAnswer = op
this.questionList[this.topicIndex].optionList[index].chooseOption =`${this.questionList[this.topicIndex].optionList[index].chooseOption?this.questionList[this.topicIndex].optionList[index].chooseOption:''}${op}`
this.questionList[this.topicIndex].clickAnswer = `${this.questionList[this.topicIndex].optionList[index].clickAnswer?this.questionList[this.topicIndex].optionList[index].clickAnswer:''}${op}`
}
if(this.tCurrent!==1){
if(this.questionList[this.topicIndex].clickAnswer===this.questionList[this.topicIndex].rightOp){
const arr1=this.questionList[this.topicIndex].clickAnswer.split('')
const arr2=this.questionList[this.topicIndex].trueAnswer.split('')
if(this.isArrEqual(arr1,arr2)){
if(!this.rightList.includes(this.questionList[this.topicIndex].questionId)){
this.rightList.push(this.questionList[this.topicIndex].questionId)
}
console.log(this.rightList);
if(!trueList.includes(this.questionList[this.topicIndex].questionId)){
trueList.push(this.questionList[this.topicIndex].questionId)
storage.set('rightList',trueList)
}
if(this.wrongList.includes(this.questionList[this.topicIndex].questionId)){
const wIndex=this.wrongList.indexOf(this.questionList[this.topicIndex].questionId)
this.wrongList.splice(wIndex,1)
}
if(falseList.includes(this.questionList[this.topicIndex].questionId)){
const wIndex=falseList.indexOf(this.questionList[this.topicIndex].questionId)
falseList.splice(wIndex,1)
storage.set('wrongList',falseList)
}
if(this.topicIndex<this.questionList.length-1){
this.topicIndex ++;
this.qIndex=this.topicIndex
@@ -403,6 +441,15 @@ export default {
if(!this.wrongList.includes(this.questionList[this.topicIndex].questionId)){
this.wrongList.push(this.questionList[this.topicIndex].questionId)
}
if(!falseList.includes(this.questionList[this.topicIndex].questionId)){
falseList.push(this.questionList[this.topicIndex].questionId)
storage.set('wrongList',falseList)
}
if(trueList.includes(this.questionList[this.topicIndex].questionId)){
const rIndex=trueList.indexOf(this.questionList[this.topicIndex].questionId)
trueList.splice(rIndex,1)
storage.set('wrongList',trueList)
}
}
}
},
@@ -411,311 +458,20 @@ export default {
this.getQuestionList()
this.renderSwiper(0)
},
getQuestionList() {
this.questionList = [{
questionId: 0,
questionTypeDesc: '单选',
questionDesc: '第一题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'C',
}, {
questionId: 1,
questionTypeDesc: '单选',
questionDesc: '第二题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'B',
}, {
questionId: 2,
questionTypeDesc: '单选',
questionDesc: '第三题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 3,
questionTypeDesc: '单选',
questionDesc: '第四题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 4,
questionTypeDesc: '单选',
questionDesc: '第5题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 5,
questionTypeDesc: '单选',
questionDesc: '第6题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 6,
questionTypeDesc: '单选',
questionDesc: '第7题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 7,
questionTypeDesc: '单选',
questionDesc: '第8题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 8,
questionTypeDesc: '单选',
questionDesc: '第9题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'C',
}, {
questionId: 9,
questionTypeDesc: '单选',
questionDesc: '第10题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'B',
}, {
questionId: 10,
questionTypeDesc: '单选',
questionDesc: '第11题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 11,
questionTypeDesc: '单选',
questionDesc: '第12题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 12,
questionTypeDesc: '单选',
questionDesc: '第13题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
},
{
questionId: 13,
questionTypeDesc: '单选',
questionDesc: '第14题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 14,
questionTypeDesc: '单选',
questionDesc: '第15题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
}, {
questionId: 15,
questionTypeDesc: '单选',
questionDesc: '第16题在实习期内驾驶机动车的应当在车身后部粘贴或者悬挂哪种标志',
optionList: [{
op: 'A',
opDesc: '注意新手标志'
}, {
op: 'B',
opDesc: '注意新手标志'
}, {
op: 'C',
opDesc: '注意新手标志'
}, {
op: 'D',
opDesc: '注意新手标志'
}],
rightOp: 'A',
getQuestionList(val) {
console.log(val);
this.questionList=val.map(item=>{
let isCollect=false
if(this.collectList.includes(item.questionId)){
isCollect=true
}
]
if(this.tCurrent===1){
this.questionList=this.questionList.map(item=>{
return{
...item,
clickAnswer:item.rightOp
return {
isCollect:isCollect,
...item
}
})
}
}
}
}
</script>

View File

@@ -3,7 +3,7 @@
<!-- <u-navbar :title="navTitle" @rightClick="rightClick" :autoBack="true">
</u-navbar> -->
<j-navbar>{{navTitle}}</j-navbar>
<Question :tabsList="tabsList" :isShowAll="true" />
<Question ref="question" :tabsList="tabsList" :isShowAll="true"></Question>
</view>
</template>
@@ -27,16 +27,21 @@
},{
label:"背题",
value:1
}]
}],
questionArr:[]
}
},
onLoad(op) {
if(op&&op.navTitle){
this.navTitle=op.navTitle
if(this.navTitle==='顺序答题'){
this.questionArr=[...this.orderQuestion]
this.$refs.question.getQuestionList(this.questionArr)
}
}
},
computed: {
...mapState(useQuestionStore, ["orderQuestionList"]) //映射函数取出tagslist
...mapState(useQuestionStore, ["orderQuestion"]) //映射函数取出tagslist
},
methods: {
rightClick() {

View File

@@ -2,12 +2,18 @@
<view>
<sunny-video style="width: 100%" videoHeight="422rpx" ref="sunny-video" title="测试视频" src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20200317.mp4" @timeupdate="timeupdate" />
<view class="p14 bc-fff">
<u-scroll-list :indicator="false" v-if="videoType=='test'">
<view class="flex ai-c jc-sb mt15">
<view class="tab_iem mr15" :class="videoIndex===item.value?'checked_tab':''" v-for="(item,index) of testList" :key="index" @tap="checkTest(item.value)">{{item.label}}</view>
</view>
</u-scroll-list>
<view class="flex ai-c jc-sb mt10 wp100">
<text class="fs18 fw600 cor-000">C1捷达-基础操作视频讲解</text>
<view class="flex" @tap="popupShow=true">
<view class="flex" @tap="popupShow=true" v-if="videoType!='test'">
<text class="fs14 cor-666">更多</text>
<u-icon color="#666" name="arrow-right" size="18"></u-icon>
</view>
<view v-else class="fs14 cor-666">共9条路线</view>
</view>
<view>
</view>
@@ -53,6 +59,30 @@
export default{
data(){
return{
videoIndex:0,
testList:[{
label:"八一考场",
value:0,
},{
label:"富凯考场",
value:1
},{
label:"新亚考场",
value:2
},{
label:"庐江考场",
value:3
},{
label:"富凯考场",
value:4
},{
label:"新亚考场",
value:5
},{
label:"庐江考场",
value:6
}],
videoType:'',
popupShow:false,
nowVideo:0,
videoList:[{
@@ -82,7 +112,15 @@
}]
}
},
onLoad(op){
if(op.type){
this.videoType=op.type
}
},
methods:{
checkTest(val){
this.videoIndex=val
},
checkVideo(val){
this.nowVideo=val
}
@@ -130,4 +168,17 @@
background: #00B74F;
border-radius: 8rpx;
}
.tab_iem{
width: 145rpx;
height: 56rpx;
line-height: 56rpx;
text-align: center;
background: #F5F5F5;
border-radius: 10rpx;
color:#333
}
.checked_tab{
background: linear-gradient(90deg, #11DF20 0%, #01B74F 100%);
color:#fff
}
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 17 KiB