yujialong 3 months ago
parent 28cebc7ac4
commit 28cb5f404a
  1. 124
      course/courseDetail/courseDetail.vue
  2. 2
      course/practiceDetail/practiceDetail.vue
  3. 2
      libs/util.js
  4. 4
      pages/achievement/achievement.vue
  5. 2
      pages/index/index.vue
  6. 1
      pages/login/login.vue
  7. 2
      pages/person/person.vue
  8. 8
      styles/common.scss
  9. 4
      user/email/email.vue
  10. 32
      user/info/info.vue
  11. 9
      user/reg/reg.vue
  12. 2
      user/selectAccount/selectAccount.vue

@ -2,20 +2,25 @@
<view class="wrap">
<!-- <web-view class="wv" src="https://view.officeapps.live.com/op/view.aspx?src=https://huoran.oss-cn-shenzhen.aliyuncs.com/1732588133977.xlsx"></web-view> -->
<view class="file-wrap">
<image v-if="!curRow.fileUrl && coverUrl" class="pic" :src="coverUrl" mode="widthFix"></image>
<image v-if="!curRow.viewUrl && coverUrl" class="pic" :src="coverUrl" mode="widthFix"></image>
<template v-else>
<image v-if="curRow.isPic" class="pic" :src="curRow.fileUrl" mode="widthFix" @click="hidePlayList"></image>
<video v-else-if="curRow.isVideo" class="video" :key="curRow.fileUrl" width="100%" height="100%" autoplay controls :src="curRow.fileUrl" type="video/mp4" @click="hidePlayList" @fullscreenchange="fullScreenChange"></video>
<web-view v-else-if="curRow.isDoc" class="webview" :webview-styles="webviewStyles" :fullscreen="false" :src="curRow.fileUrl" @click="hidePlayList"></web-view>
<!-- <web-view v-else-if="curRow.isDoc" class="webview" :webview-styles="webviewStyles" :fullscreen="false" src="https://huoran.oss-cn-shenzhen.aliyuncs.com/1732589800544.xlsx"></web-view> -->
<image v-if="curRow.isPic" class="pic" :src="curRow.viewUrl" mode="widthFix" @click="hidePlayList"></image>
<video v-else-if="curRow.isVideo" class="video" :key="curRow.viewUrl" width="100%" height="100%" autoplay controls :src="curRow.viewUrl" type="video/mp4" @click="hidePlayList" @fullscreenchange="fullScreenChange"></video>
<view v-else-if="curRow.isDoc" class="webview-wrap">
<web-view class="webview" :webview-styles="webviewStyles" :fullscreen="false" :src="curRow.viewUrl" @click="hidePlayList"></web-view>
<cover-view v-if="curRow.isPpt" class="webview-mask" @click="closePreview">
<cover-image class="icon" src="https://eduvessel.com/images/occupationlab/close-gray.png" alt="" mode="widthFix" />
</cover-view>
<cover-image v-else class="webview-close" src="https://eduvessel.com/images/occupationlab/close-gray.png" alt="" mode="widthFix" />
</view>
<!-- <web-view class="webview" :webview-styles="webviewStyles" :fullscreen="false" src="https://huoran.oss-cn-shenzhen.aliyuncs.com/1732589800544.xlsx"></web-view> -->
</template>
<cover-view v-show="!playListVisible && curRow.fileUrl" class="select-epi">
<cover-view v-show="!playListVisible && curRow.viewUrl && (!curRow.isVideo || videoFullScreen)" class="select-epi">
<cover-image class="icon" src="https://eduvessel.com/images/occupationlab/list.png" mode="widthFix" @click="showPlayList" />
</cover-view>
<cover-view v-show="chapterList.length && playListVisible" :class="['chapters-full', {'full-screen': videoFullScreen}]">
<cover-image class="close" src="https://eduvessel.com/images/occupationlab/close.png" mode="widthFix" @click="hidePlayList" />
<cover-view class="chapters-scroll">
<cover-view v-for="(item, i) in chapterList" :key="i" class="chapter">
<cover-view class="chapterName">{{ item.name }}</cover-view>
@ -33,6 +38,9 @@
</cover-view>
</cover-view>
</cover-view>
<cover-view class="close-wrap" @click="hidePlayList">
<cover-image class="close" src="https://eduvessel.com/images/occupationlab/close.png" mode="widthFix" />
</cover-view>
</cover-view>
</view>
@ -41,7 +49,6 @@
</ul>
<view class="detail">
<!-- 课程介绍 -->
<view v-show="!curTab" class="des">
<mp-html class="des-html" :tag-style="mpStyle" :content="briefIntroduction"/>
@ -51,9 +58,9 @@
<view v-show="curTab === 1">
<view v-if="chapterList.length" class="chapters">
<view class="chapter" v-for="(item, i) in chapterList" :key="i">
<view class="chapterName">
<view class="chapterName" @click="toggleChapter(item)">
{{ item.name }}
<uni-icons class="arrow" type="bottom" color="#909090" @click="toggleChapter(item)"></uni-icons>
<uni-icons :class="['arrow', {shrink: item.shrink}]" type="bottom" size="24" color="#909090"></uni-icons>
</view>
<view :class="['section', {shrink: item.shrink}]" v-if="item.subsectionList.length">
<view v-for="(section, j) in item.subsectionList" :key="j"class="sectionName" :class="{ active: curRow.id === section.id }" @click="secClick(section, item)">
@ -347,13 +354,19 @@
// //pdf
handleFileType(row) {
const type = row.fileType
if (this.$util.exts.video.includes(type)) {
row.isVideo = true
} else if (this.$util.exts.img.includes(type)) {
row.isPic = true
} else if (this.$util.exts.doc.includes(type)) {
if (type === 'pptx' || type === 'ppt') {
row.isPpt = true
row.isDoc = true
if (type === 'pptx' || type === 'ppt') row.fileUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' + row.fileUrl
row.viewUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' + row.fileUrl
} else {
if (this.$util.exts.video.includes(type)) {
row.isVideo = true
} else if (this.$util.exts.img.includes(type)) {
row.isPic = true
} else if (this.$util.exts.doc.includes(type)) {
row.isDoc = true
}
row.viewUrl = row.fileUrl
}
this.curRow = row
},
@ -375,8 +388,13 @@
this.playListVisible = !this.playListVisible
},
hidePlayList() {
console.log('close clicked')
this.playListVisible = false
}
},
//
closePreview() {
this.curRow = {}
},
}
}
</script>
@ -403,35 +421,80 @@
.select-epi {
z-index: 1000;
position: fixed;
top: 30px;
top: 40px;
right: -5px;
padding: 8px;
padding: 5px 12px;
background-color: rgba(0, 0, 0, .6);
border-radius: 0;
border-top-left-radius: 10px;
border-bottom-left-radius: 10px;
// border-top-right-radius: 0;
// border-bottom-right-radius: 0;
.icon {
width: 20px;
width: 24px;
}
}
.webview-wrap {
height: 90vh;
overflow: hidden;
}
.webview-mask {
z-index: 9;
position: fixed;
top: 0;
left: 0;
display: flex;
justify-content: flex-end;
align-items: center;
width: 100%;
height: 50rpx;
padding: 0 20rpx;
background-color: #fff;
box-sizing: border-box;
.icon {
width: 44rpx;
height: 44rpx;
}
}
.webview-close {
z-index: 10;
position: fixed;
top: 20rpx;
right: 30rpx;
width: 44rpx;
height: 44rpx;
}
}
.webview {
position: absolute;
top: -80rpx;
}
.chapters-full {
z-index: 2;
z-index: 100;
position: fixed;
top: 0;
right: 0;
width: 70vw;
width: 100vw;
height: 100vh;
padding: 15px;
margin-bottom: 20px;
color: #fff;
background-color: rgba(0, 0, 0, .6);
background-color: rgba(0, 0, 0, .7);
box-sizing: border-box;
.close {
.close-wrap {
z-index: 100;
position: absolute;
top: 10px;
right: 10px;
width: 24px;
height: 24px;
display: flex;
justify-content: center;
align-items: center;
width: 80rpx;
height: 80rpx;
}
.close {
width: 22px;
height: 22px;
}
.chapters-scroll {
height: 95vh;
@ -450,8 +513,8 @@
.sectionName {
display: flex;
align-items: center;
padding: 0 6px;
margin: 8px 0;
padding: 10rpx 6px;
margin: 6px 0;
font-size: 12px;
&.active {
@ -459,12 +522,11 @@
}
}
.ext {
width: 18px;
// height: 18px;
width: 14px;
margin-right: 12px;
}
.text {
max-width: 95%;
max-width: 75vw;
text-overflow: ellipsis;
}
}

@ -118,8 +118,10 @@
<style scoped lang="scss">
.page {
min-height: 100%;
padding: 10rpx 30rpx;
background-color: #fff;
box-sizing: border-box;
}
.list {
.item {

@ -9,7 +9,7 @@ const exts = {
video: 'mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv',
audio: 'mp3,aac,ape,flac,wav,wma,amr,mid',
img: 'jpg,jpeg,png,gif,svg,psd',
doc: 'doc,docx,txt,xls,xlsx,csv,xml,ppt,pptx'
doc: 'doc,docx,txt,xls,xlsx,csv,xml,ppt,pptx,pdf'
}
export default {
exts,

@ -215,6 +215,8 @@
<style scoped lang="scss">
.page {
min-height: 100%;
background-color: #fff;
.wrap {
padding: 30rpx;
margin-bottom: 30rpx;
@ -274,7 +276,7 @@
}
.item:nth-child(3) {
background: url(https://eduvessel.com/images/occupationlab/record3-1.png) 90% 18px/90rpx no-repeat,
background: url(https://eduvessel.com/images/occupationlab/record3-1.png) 90% 18px/105rpx no-repeat,
url(https://eduvessel.com/images/occupationlab/record3.png) 0 0/100% 100% no-repeat;
}

@ -56,7 +56,7 @@
}, 1500)
},
onShow() {
// uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjM5NTc2LCJyblN0ciI6ImtOaUd2TVI4dlA5eldNZTFlbUFKSmoycWRHMENaU1Q5IiwiYWNjb3VudElkIjozOTU3NiwidXNlcklkIjozOTU3NSwic2Nob29sSWQiOjI4NDYsInVzZXJOYW1lIjoiYWMiLCJwbGF0Zm9ybUlkIjoiMSJ9.JRcmjfyBUik35mG8UxtGTsD0hFGdQfY63cQKQMajq3I')
// uni.setStorageSync('token', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjkwMTAwLCJyblN0ciI6ImI4QWN6VlZuS0t4S3ZnSUE2MkRHTDFOYkdXR0tUREVFIiwiYWNjb3VudElkIjo5MDEwMCwidXNlcklkIjo5MDEwNiwic2Nob29sSWQiOjI4ODYsInVzZXJOYW1lIjoiQWMiLCJwbGF0Zm9ybUlkIjoiMSJ9.Yreqcu2sW9phcRI8N-CQt19XBk_1hwKsy832ZtXnzMo')
this.$refs.realName.handleRealName()
this.getTab()
},

@ -132,6 +132,7 @@
margin-bottom: 50rpx;
font-size: 32rpx;
color: #fff;
line-height: 88rpx;
background-color: #007EFF;
border-radius: 10rpx;
}

@ -84,7 +84,7 @@
const r = res.result.hrUserInfo
this.info = {
avatar: r.userAvatars || 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
userName: r.userName || 'tourist',
userName: r.userName || '',
schoolName: r.schoolName || ''
}
},

@ -108,6 +108,11 @@ ul {
font-size: 26rpx;
color: #3394f7;
}
.picker-input {
.arrow-area {
display: none;
}
}
}
.picker-input {
.input-value-border {
@ -121,9 +126,6 @@ ul {
.selected-area {
font-size: 28rpx !important;
}
.arrow-area {
display: none;
}
}
.picker-date {
.uni-date-x--border {

@ -1,7 +1,7 @@
<template>
<view class="page">
<view class="line">
<view class="label">手机号</view>
<view class="label">邮箱</view>
<input type="text" v-model.trim="form.email" placeholder="请填写你的邮箱" />
</view>
<view class="line code-wrap not-bd">
@ -37,7 +37,7 @@
sendCode() {
const { email } = this.form
if (!email) return this.$util.errMsg('请输入邮箱')
if (!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email) && !/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email)) return this.$util.errMsg('请输入正确的请输入邮箱')
if (!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email) && !/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email)) return this.$util.errMsg('请输入正确的邮箱')
sendPhoneOrEmailCode({
userId: this.userId,
email,

@ -49,13 +49,13 @@
</view>
<view class="line">
<view class="name">性别</view>
<uni-data-picker class="picker-input" placeholder="请选择性别" popup-title="请选择性别" preload :clear-icon="false" :localdata="sex" v-model="hrUserInfo.sex"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab"></uni-icons>
<uni-data-picker class="picker-input" ref="sex" placeholder="请选择性别" popup-title="请选择性别" preload :clear-icon="false" :localdata="sex" v-model="hrUserInfo.sex"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.sex.show"></uni-icons>
</view>
<view class="line">
<view class="name">出生日期</view>
<uni-datetime-picker class="picker-date" type="date" placeholder="请选择出生日期" :clear-icon="false" v-model="hrUserInfo.dateBirth" />
<uni-icons class="arrow" type="right" size="18" color="#ababab"></uni-icons>
<uni-datetime-picker class="picker-date" ref="dateBirth" type="date" placeholder="请选择出生日期" :clear-icon="false" v-model="hrUserInfo.dateBirth" />
<uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.dateBirth.show"></uni-icons>
</view>
<view class="line">
<view class="name">身份证号</view>
@ -67,18 +67,18 @@
</view>
<view class="line">
<view class="name">所在省份</view>
<uni-data-picker class="picker-input" placeholder="请选择省份" popup-title="请选择省份" preload :clear-icon="false" :localdata="provinces" v-model="hrUserInfo.provinceId" @change="getCity"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab"></uni-icons>
<uni-data-picker class="picker-input" ref="provinceId" placeholder="请选择省份" popup-title="请选择省份" preload :clear-icon="false" :localdata="provinces" v-model="hrUserInfo.provinceId" @change="getCity"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.provinceId.show"></uni-icons>
</view>
<view class="line">
<view class="name">所在城市</view>
<uni-data-picker class="picker-input" placeholder="请选择城市" popup-title="请选择城市" preload :clear-icon="false" :localdata="cities" v-model="hrUserInfo.cityId" :readonly="!hrUserInfo.provinceId"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab"></uni-icons>
<uni-data-picker class="picker-input" ref="cityId" placeholder="请选择城市" popup-title="请选择城市" preload :clear-icon="false" :localdata="cities" v-model="hrUserInfo.cityId" :readonly="!hrUserInfo.provinceId"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.cityId.show"></uni-icons>
</view>
<view class="line">
<view class="name">受教育程度</view>
<uni-data-picker class="picker-input" placeholder="请选择受教育程度" popup-title="请选择受教育程度" preload :clear-icon="false" :localdata="educationDegreeList" v-model="hrUserInfo.educationDegree"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab"></uni-icons>
<uni-data-picker class="picker-input" ref="educationDegree" placeholder="请选择受教育程度" popup-title="请选择受教育程度" preload :clear-icon="false" :localdata="educationDegreeList" v-model="hrUserInfo.educationDegree"></uni-data-picker>
<uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.educationDegree.show"></uni-icons>
</view>
<view class="line">
<view class="name">当前所在学校</view>
@ -457,7 +457,8 @@
//
async submit() {
const { hrUserInfo: u, userAccount: a } = this
if (u.idNumber && !/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/.test(u.idNumber)) return this.$util.errMsg('请输入正确的身份证号码!')
if (!u.userName) return this.$util.errMsg('请输入姓名')
if (u.idNumber && !/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/.test(u.idNumber)) return this.$util.errMsg('请输入正确的身份证号码')
let personalFileList = []
this.archivesList.forEach((n,k) => {
n.personalCareerId && personalFileList.push({
@ -478,11 +479,6 @@
})
const data = {
userId: u.userId,
userAccountList: [{
id: a.accountId,
account: a.account,
userId: a.userId,
}],
hrUserInfo: {
provinceId: u.provinceId,
cityId: u.cityId,
@ -496,6 +492,10 @@
userName: u.userName,
wechatId: u.wechatId
},
userAccount: {
workNumber: a.workNumber,
id: a.id
},
personalFileList,
}
updatePersonCenter(data)

@ -5,6 +5,7 @@
<uni-forms>
<input type="text" v-model.trim="form.account" placeholder="请输入账号" />
<input type="password" v-model.trim="form.password" placeholder="请输入密码" />
<view class="phone">绑定的手机号{{ phone }}</view>
</uni-forms>
<button class="btn" type="primary" @click="submit">登录</button>
</view>
@ -83,11 +84,17 @@
.btn {
width: 100%;
height: 88rpx;
margin-bottom: 50rpx;
margin-top: 80rpx;
font-size: 32rpx;
color: #fff;
background-color: #007EFF;
border-radius: 10rpx;
}
.phone {
padding-left: 16rpx;
font-size: 24rpx;
text-align: left;
color: #8e8e8e;
}
}
</style>

@ -1,6 +1,6 @@
<template>
<view class="page">
<view class="tips">已为你展示当前微信关联的账号登录后可在切换账号列表快捷切换至其他账号</view>
<view class="tips">已为你展示{{ phone }}手机号关联的账号登录后可在切换账号列表快捷切换至其他账号</view>
<template v-if="accounts.length">
<ul class="list">

Loading…
Cancel
Save