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

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

@ -9,7 +9,7 @@ const exts = {
video: 'mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv', video: 'mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv',
audio: 'mp3,aac,ape,flac,wav,wma,amr,mid', audio: 'mp3,aac,ape,flac,wav,wma,amr,mid',
img: 'jpg,jpeg,png,gif,svg,psd', 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 { export default {
exts, exts,

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

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

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

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

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

@ -1,7 +1,7 @@
<template> <template>
<view class="page"> <view class="page">
<view class="line"> <view class="line">
<view class="label">手机号</view> <view class="label">邮箱</view>
<input type="text" v-model.trim="form.email" placeholder="请填写你的邮箱" /> <input type="text" v-model.trim="form.email" placeholder="请填写你的邮箱" />
</view> </view>
<view class="line code-wrap not-bd"> <view class="line code-wrap not-bd">
@ -37,7 +37,7 @@
sendCode() { sendCode() {
const { email } = this.form const { email } = this.form
if (!email) return this.$util.errMsg('请输入邮箱') 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({ sendPhoneOrEmailCode({
userId: this.userId, userId: this.userId,
email, email,

@ -49,13 +49,13 @@
</view> </view>
<view class="line"> <view class="line">
<view class="name">性别</view> <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-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"></uni-icons> <uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.sex.show"></uni-icons>
</view> </view>
<view class="line"> <view class="line">
<view class="name">出生日期</view> <view class="name">出生日期</view>
<uni-datetime-picker class="picker-date" type="date" placeholder="请选择出生日期" :clear-icon="false" v-model="hrUserInfo.dateBirth" /> <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"></uni-icons> <uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.dateBirth.show"></uni-icons>
</view> </view>
<view class="line"> <view class="line">
<view class="name">身份证号</view> <view class="name">身份证号</view>
@ -67,18 +67,18 @@
</view> </view>
<view class="line"> <view class="line">
<view class="name">所在省份</view> <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-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"></uni-icons> <uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.provinceId.show"></uni-icons>
</view> </view>
<view class="line"> <view class="line">
<view class="name">所在城市</view> <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-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"></uni-icons> <uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.cityId.show"></uni-icons>
</view> </view>
<view class="line"> <view class="line">
<view class="name">受教育程度</view> <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-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"></uni-icons> <uni-icons class="arrow" type="right" size="18" color="#ababab" @click="$refs.educationDegree.show"></uni-icons>
</view> </view>
<view class="line"> <view class="line">
<view class="name">当前所在学校</view> <view class="name">当前所在学校</view>
@ -457,7 +457,8 @@
// //
async submit() { async submit() {
const { hrUserInfo: u, userAccount: a } = this 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 = [] let personalFileList = []
this.archivesList.forEach((n,k) => { this.archivesList.forEach((n,k) => {
n.personalCareerId && personalFileList.push({ n.personalCareerId && personalFileList.push({
@ -478,11 +479,6 @@
}) })
const data = { const data = {
userId: u.userId, userId: u.userId,
userAccountList: [{
id: a.accountId,
account: a.account,
userId: a.userId,
}],
hrUserInfo: { hrUserInfo: {
provinceId: u.provinceId, provinceId: u.provinceId,
cityId: u.cityId, cityId: u.cityId,
@ -496,6 +492,10 @@
userName: u.userName, userName: u.userName,
wechatId: u.wechatId wechatId: u.wechatId
}, },
userAccount: {
workNumber: a.workNumber,
id: a.id
},
personalFileList, personalFileList,
} }
updatePersonCenter(data) updatePersonCenter(data)

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

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

Loading…
Cancel
Save