Merge branch 'bjxz-dev' of http://139.9.66.234:18023/dhp/zhgdyunapp into bjxz-rain

This commit is contained in:
”Rain“ 2024-05-24 15:51:46 +08:00
commit 1a27280593
16 changed files with 502 additions and 237 deletions

View File

@ -19,7 +19,7 @@
"type" : "uniCloud"
},
{
"playground" : "standard",
"playground" : "custom",
"type" : "uni-app:app-android"
},
{

View File

@ -210,7 +210,7 @@
// background-color: #f3f5fd;
color: $uni-text-color;
}
.bgLightBlue {
background-color: #f3f5fd;
}

View File

@ -41,8 +41,8 @@ if (process.env.NODE_ENV === 'development') {
// Vue.prototype.url_config = 'http://182.90.224.237:51234/' //雄哥内网穿透地址
// Vue.prototype.url_config = 'http://jxj.zhgdyun.com:61212/' //杰哥内网穿透地址
// Vue.prototype.url_config = ' http://192.168.34.221:28888/' //郭圣雄本地
Vue.prototype.url_config = 'http://192.168.34.221:9111/' //郭圣雄本地
// Vue.prototype.url_config = 'http://192.168.34.155:19111/' //彭洁本地
// Vue.prototype.url_config = 'http://192.168.34.221:9111/' //郭圣雄本地
Vue.prototype.url_config = 'http://192.168.34.155:19111/' //彭洁本地
// Vue.prototype.work_url = 'http://47.93.215.234:19997' // 工作流线上地址(弃用)
// Vue.prototype.work_url = 'http://42.180.188.17:19997' // 工作流线上地址
// Vue.prototype.work_url = 'http://42.180.188.17:19097' // 工作流测试地址

View File

@ -2401,13 +2401,7 @@
{
"path": "pages/personLocation/exam/index/index",
"style": {
"app-plus": {
"titleNView": {
"titleColor": "#ffffff",
"autoBackButton": false
}
},
"navigationBarTitleText": "教育培训"
"navigationBarTitleText": ""
}
},
{
@ -2512,9 +2506,17 @@
}
},
{
<<<<<<< HEAD
"path": "pages/projectEnd/trainPlan/searchTeam/personList",
"style": {
"navigationBarTitleText": ""
=======
"path" : "pages/projectEnd/trainPlan/searchTeam/personList",
"style" :
{
"navigationBarTitleText" : "",
"onReachBottomDistance": 100
>>>>>>> 8d4c6f69b5f932e4842d3f9ddd13043de9837210
}
},
{

View File

@ -1,22 +1,22 @@
<template>
<!-- <web-view src="http://niunian.hk.fq99.top"></web-view> -->
<view class="loginPage">
<!-- <view class="barBox" :style="{'height':systemInfo.statusBarHeight+'px'}"> -->
<view class="barBox">
</view>
<view class="loginBox">
<view class="loginTitle">
<image class="loginLogo" src="@/static/login/logo.pic.jpg" mode="heightFix"></image>
智慧工地服务平台
</view>
<view class="btns">
<view class="user feedback" @click="goto('user')">用户登录</view>
<view class="feedback personLocation" @click="gotoPersonLocation()">施工人员登录</view>
<!-- <view class="user feedback" @click="goto('user')">我是用户</view> -->
<!-- <view class="supplier feedback black" @click="goto('supplier')">我是供应商</view> -->
</view>
</view>
<!-- <view class="bottomTitle" @click="showModal=true">
<!-- <web-view src="http://niunian.hk.fq99.top"></web-view> -->
<view class="loginPage">
<!-- <view class="barBox" :style="{'height':systemInfo.statusBarHeight+'px'}"> -->
<view class="barBox">
</view>
<view class="loginBox">
<view class="loginTitle">
<image class="loginLogo" src="@/static/login/logo.pic.jpg" mode="heightFix"></image>
智慧工地服务平台
</view>
<view class="btns">
<view class="user feedback" @click="goto('user')">用户登录</view>
<view class="feedback personLocation" @click="gotoPersonLocation()">施工人员登录</view>
<!-- <view class="user feedback" @click="goto('user')">我是用户</view> -->
<!-- <view class="supplier feedback black" @click="goto('supplier')">我是供应商</view> -->
</view>
</view>
<!-- <view class="bottomTitle" @click="showModal=true">
云服务器设置
</view> -->
<!-- <view class="modalBox" v-show="showModal">
@ -72,38 +72,41 @@
let {
accountType
} = userInfo;
if (accountType == 5 || accountType == 6 || accountType == 10) {
//
plus.push.addEventListener('click', function(msg) {
uni.navigateTo({
url: '/pages/messageCenter/messageCenter'
})
}, false);
//
uni.reLaunch({
url: '/pages/projectEnd/projectIndex/projectIndex'
})
} else if (accountType == 11) {
//
let company = uni.getStorageSync("company");
if (company) {
//
if (accountType) {
if (accountType == 5 || accountType == 6 || accountType == 10) {
//
plus.push.addEventListener('click', function(msg) {
uni.navigateTo({
url: '/pages/messageCenter/messageCenter'
})
}, false);
//
uni.reLaunch({
url: '/pages/supplier/supplier'
url: '/pages/projectEnd/projectIndex/projectIndex'
})
} else if (accountType == 11) {
//
let company = uni.getStorageSync("company");
if (company) {
//
uni.reLaunch({
url: '/pages/supplier/supplier'
})
} else {
//
uni.reLaunch({
url: "/pages/supplier/qualifications/qualifications?isNull=1"
})
}
} else {
//
uni.reLaunch({
url: "/pages/supplier/qualifications/qualifications?isNull=1"
//
uni.redirectTo({
url: '/pages/projectManage/projectManage'
})
}
} else {
//
uni.redirectTo({
url: '/pages/projectManage/projectManage'
})
}
}
},
mounted() {
@ -131,33 +134,33 @@
}
},
methods: {
gotoPersonLocation(){
uni.navigateTo({
url: `/pages/personLocation/login/login`
})
},
goto(type) {
//
uni.setStorageSync("Type", type);
uni.navigateTo({
url: `/pages/login/compatibleLogin?type=${type}`
})
},
saveServerData(e) {
// uni.setStorageSync('ipPort', e.detail.value.ipPort)
// Vue.prototype.url_config = uni.getStorageSync('ipPort') + '/'
// getApp().globalData.siteUrl = uni.getStorageSync('ipPort') + '/'
this.showModal = false
},
formSubmit(e) {
// console.log(e)
var json = {
account: e.detail.value.account,
password: e.detail.value.password,
clientId: this.clientid
}
},
methods: {
gotoPersonLocation() {
uni.navigateTo({
url: `/pages/personLocation/login/login`
})
},
goto(type) {
//
uni.setStorageSync("Type", type);
uni.navigateTo({
url: `/pages/login/compatibleLogin?type=${type}`
})
},
saveServerData(e) {
// uni.setStorageSync('ipPort', e.detail.value.ipPort)
// Vue.prototype.url_config = uni.getStorageSync('ipPort') + '/'
// getApp().globalData.siteUrl = uni.getStorageSync('ipPort') + '/'
this.showModal = false
},
formSubmit(e) {
// console.log(e)
var json = {
account: e.detail.value.account,
password: e.detail.value.password,
clientId: this.clientid
}
this.sendRequest({
url: "xmgl/base/login",
@ -215,18 +218,18 @@
</script>
<style lang="scss" scoped>
.personLocation {
color: #1D49B2;
background-color: #EDF2FE;
}
.loginPage {
position: relative;
height: 100vh;
color: $uni-text-color;
background: url("@/static/WechatIMG15.jpg");
background-size: cover;
}
.personLocation {
color: #1D49B2;
background-color: #EDF2FE;
}
.loginPage {
position: relative;
height: 100vh;
color: $uni-text-color;
background: url("@/static/WechatIMG15.jpg");
background-size: cover;
}
.feedback {
&:active {

View File

@ -6,22 +6,37 @@
</view>
</headers>
<view class="beginexam" v-for="(item,index) in stList" :key="index" v-show="index == stIndex">
<view class="">
<text class="text">{{index + 1}}{{item.questionName}}</text>
<view class="questionTitle">
<text class="text">{{index + 1}}{{item.questionName}}({{item.score||0}})</text>
<text class="rest-time">剩余时间{{ timeLeft }}</text>
</view>
<view class="radio-content">
<radio-group @change="radioChange" class="radio-boxs">
<radio-group @change="radioChange" class="radio-boxs" v-if="item.type == 1">
<label class="radio" v-for="(item2,index2) in item.optionList">
<radio :value="item2.optionCode" /><text>{{item2.optionCode}}</text>{{item2.optionDesc}}
</label>
</radio-group>
<checkbox-group @change="checkChange" class="check-boxs" v-if="item.type == 2">
<label class="radio" v-for="(item2,index2) in item.optionList">
<checkbox :value="item2.optionCode" /><text>{{item2.optionCode}}</text>{{item2.optionDesc}}
</label>
</checkbox-group>
</view>
</view>
<view class="progress-style">
<progress :percent="(stIndex + 1) * 100 / stList.length" :stroke-width="11" backgroundColor="#F5F5F5" />
<view class="progress-style" v-show="stList.length > 0">
<progress :percent="((stIndex + 1) * 100 / stList.length).toFixed(0)" :stroke-width="11" backgroundColor="#F5F5F5" />
</view>
<view class="step-btn" v-show="stList.length > 0">
<button type="primary" class="btn-front" @click="goFront" v-show="stIndex > 0">上一题</button>
<button type="primary" class="btn-front" @click="goNext" v-show="stIndex < stList.length - 1">下一题</button>
<button type="primary" class="btn" @click="goHiidden">交卷</button>
</view>
<view class="placeholderBox" v-if="stList.length == 0">
<image src="/static/exam/noCourseData.png" class="noDataImg" style="width: 180rpx; height: 160rpx;"></image>
<!-- <view class="text">
暂无数据
</view> -->
</view>
<button type="primary" class="btn-front" @click="goFront" v-if="stIndex > 0">上一题</button>
<button type="primary" class="btn" @click="goHiidden">交卷</button>
<levitatedsphere :x="100" :y="80"></levitatedsphere>
</view>
</template>
@ -31,6 +46,8 @@
export default {
data() {
return {
totalTime: 10, // 60
timer: null, //
percent: 0,
stIndex: 0,
stList: [],
@ -42,8 +59,82 @@
},
onLoad(options) {
this.pageData = JSON.parse(options.transportData)
console.log(this.pageData.examDuration)
this.totalTime = +this.pageData.examDuration * 60;
},
onShow() {
this.startTimer();
},
onHide() {
this.stopTimer();
},
computed: {
timeLeft() {
let hours = Math.floor(this.totalTime / 3600);
let minutes = Math.floor((this.totalTime % 3600) / 60);
let seconds = this.totalTime % 60;
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
seconds = seconds < 10 ? '0' + seconds : seconds;
return `${hours}:${minutes}:${seconds}`;
},
},
methods: {
//
autoSubmit() {
var that = this
uni.showModal({
title: '提示',
showCancel: false,
content: '考试时间已到,正在交卷...',
success: function(res) {
if (res.confirm) {
let requestData = {
examAnswerQuestionList: that.stList
}
that.sendRequest({
url: "xmgl/workerExam/submit",
data: that.stList,
method: 'post',
success(res) {
uni.showToast({
title: "提交成功",
icon: "none"
})
let responseData = res.result;
let transportData = {
...that.pageData,
...responseData
}
uni.redirectTo({
url: `/pages/personLocation/exam/examresult/examresult?examData=` +
JSON.stringify(transportData)
});
}
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
startTimer() {
this.timer = setInterval(() => {
if (this.totalTime > 0) {
this.totalTime -= 1;
} else {
this.stopTimer();
this.autoSubmit();
//
}
}, 1000);
},
stopTimer() {
clearInterval(this.timer);
this.timer = null;
},
getDataFn() {
var that = this
let requestData = {
@ -55,13 +146,24 @@
method: 'post',
success(res) {
console.log('试题信息', res)
if (res.result) {
if (res.result && res.result.length > 0) {
that.stList = res.result;
var tab = document.querySelector('.uni-progress-inner-bar');
var p = document.createElement('p');
p.className = "uni-progress-info"
p.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
tab.appendChild(p);
// var tab = document.querySelector('.uni-progress-inner-bar');
// var p = document.createElement('p');
// p.className = "uni-progress-info"
// p.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
// tab.appendChild(p);
// const query = uni.createSelectorQuery().in(this);
// query.select('.uni-progress-inner-bar').boundingClientRect(data => {
// // data
// console.log(data)
// const element = data[0]
// var p = document.createElement('p');
// p.className = "uni-progress-info"
// p.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(
// 0) + '%'
// element.appendChild(p);
// }).exec();
that.stList.map(item => {
item.trainRecordId = that.pageData.trainRecordId
})
@ -77,19 +179,46 @@
if (that.stIndex == that.stList.length - 1) {
return;
}
uni.showLoading()
setTimeout(function() {
that.stIndex++;
var progressTip = document.querySelector('.uni-progress-info');
progressTip.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
uni.hideLoading()
}, 500)
// uni.showLoading()
// setTimeout(function() {
// that.stIndex++;
// var progressTip = document.querySelector('.uni-progress-info');
// progressTip.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
// uni.hideLoading()
// }, 500)
},
checkChange(evt) {
console.log(evt)
this.stList[this.stIndex].answer = evt.detail.value.join('')
let that = this;
//
if (that.stIndex == that.stList.length - 1) {
return;
}
// uni.showLoading()
// setTimeout(function() {
// that.stIndex++;
// var progressTip = document.querySelector('.uni-progress-info');
// progressTip.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
// uni.hideLoading()
// }, 500)
},
//
goFront(index) {
this.stIndex--;
let that = this;
that.stIndex--;
var progressTip = document.querySelector('.uni-progress-info');
progressTip.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
},
goHiidden(item) {
//
goNext(index) {
let that = this;
that.stIndex++;
var progressTip = document.querySelector('.uni-progress-info');
progressTip.innerText = (((that.stIndex + 1) * 100) / that.stList.length).toFixed(0) + '%'
// uni.hideLoading()
},
goHiidden() {
var that = this
uni.showModal({
title: '提示',
@ -109,9 +238,13 @@
icon: "none"
})
let responseData = res.result;
let transportData = {
...that.pageData,
...responseData
}
uni.redirectTo({
url: `/pages/personLocation/exam/examresult/examresult?examData=` +
JSON.stringify(responseData)
JSON.stringify(transportData)
});
}
})
@ -131,9 +264,22 @@
.beginexam {
padding: 26.92rpx 32.69rpx;
.text {
font-size: 34.62rpx;
color: #272D45;
.questionTitle {
width: 100%;
position: relative;
.text {
width: 61%;
display: inline-block;
font-size: 34.62rpx;
color: #272D45;
}
.rest-time {
position: absolute;
top: 7rpx;
right: 20rpx;
}
}
.radio-content {
@ -145,6 +291,15 @@
.radio-boxs>label {
padding: 20rpx 0;
}
.check-boxs {
display: flex;
flex-direction: column;
}
.check-boxs>label {
padding: 20rpx 0;
}
}
}
@ -152,21 +307,39 @@
padding: 26.92rpx 32.69rpx;
}
.btn {
.step-btn {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: calc(100% - 80.76rpx);
height: auto;
position: absolute;
bottom: 180.77rpx;
left: 50%;
transform: translateX(-50%);
button {
width: 100%;
margin-bottom: 20rpx;
}
}
.btn-front {
width: calc(100% - 80.76rpx);
position: absolute;
bottom: 290rpx;
left: 50%;
transform: translateX(-50%);
}
// .btn {
// width: calc(100% - 80.76rpx);
// position: absolute;
// bottom: 180.77rpx;
// left: 50%;
// transform: translateX(-50%);
// }
// .btn-front {
// width: calc(100% - 80.76rpx);
// position: absolute;
// bottom: 290rpx;
// left: 50%;
// transform: translateX(-50%);
// }
}
@ -189,7 +362,6 @@
position: relative;
background: linear-gradient(111deg, #5383F6 0%, #7FF0FF 100%);
}
/deep/ .uni-progress-info {
position: absolute;
right: 20rpx;

View File

@ -17,13 +17,13 @@
<text>对于成绩不满意可再次考试</text>
</view>
<button type="primary" class="btn"
@click="goHiidden('/personLocation/exam/beginexam/beginexam')">再考一次</button>
@click="examAgain('/personLocation/exam/beginexam/beginexam')">再考一次</button>
<button type="primary" class="btn1" plain="true"
@click="goHiidden('/personLocation/exam/index/index')">返回</button>
</view>
<view class="examresult" v-else>
<view class="text-success">
<text>80</text>
<text>{{pageData.score}}</text>
</view>
<view class="image-tip">
<image src="/static/exam/examSuccess.png" mode=""></image>
@ -32,7 +32,7 @@
<text>恭喜您通过考试</text>
</view>
<button type="primary" class="btn"
@click="goHiidden('/personLocation/exam/beginexam/beginexam')">返回</button>
@click="goHiidden('/personLocation/exam/index/index')">返回</button>
</view>
<levitatedsphere :x="100" :y="80"></levitatedsphere>
</view>
@ -48,14 +48,20 @@
}
},
created() {
document.querySelector('.uni-page-head-hd').style.display = 'none'
// document.querySelector('.uni-page-head-hd').style.display = 'none'
},
onLoad(options) {
this.pageData = JSON.parse(options.examData)
},
methods: {
examAgain(url){
uni.redirectTo({
url: `/pages${url}?transportData=` + JSON.stringify(this
.pageData)
});
},
goHiidden(url) {
uni.navigateTo({
uni.redirectTo({
url: `/pages${url}`
});
},

View File

@ -50,6 +50,8 @@
},
onLoad() {
this.userInfo = JSON.parse(uni.getStorageSync("userInfo"))
},
onShow() {
this.getDataList();
},
methods: {
@ -80,7 +82,8 @@
courseId: item.courseId,
examPaperId: item.examPaperId,
trainRecordId: item.id,
trainId: item.trainId
trainId: item.trainId,
examDuration: item.examDuration
}
uni.navigateTo({
url: `/pages/personLocation/exam/studydetails/studydetails?transportData=` + JSON.stringify(transportData)
@ -92,6 +95,9 @@
<style scoped lang="scss">
.main-content {
display: flex;
flex-direction: column;
.top-diy {
height: 100%;
display: flex;
@ -107,8 +113,10 @@
}
.index-boxs {
padding: 58rpx 35rpx;
height: calc(100vh - 220rpx);
overflow-y: scroll;
padding: 0rpx 35rpx;
padding-top: 58rpx;
.index-box {
width: 100%;
background-color: white;

View File

@ -11,7 +11,7 @@
</view>
<view class="rules">
<view class="rules-box" v-for="(item,index) in listData" :key="index">
<image :src="item.logoUrl" v-if="item.logoUrl"></image>
<image :src="item.logoUrl" v-if="fileTypeCondition(item.logoUrl)"></image>
<image src="../../../../static/images.png" v-else></image>
<view>
<view class="rules-text1">
@ -68,17 +68,28 @@
uni.hideLoading() //
},
methods: {
getRulesDataFn(){
fileTypeCondition(file) {
//
const extension = file.substring(file.lastIndexOf('.') + 1).toLowerCase();
//
const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'];
//
return imageExtensions.includes(extension);
},
getRulesDataFn() {
var that = this
let requestData = {
projectSn: this.userInfo.projectSn
projectSn: this.userInfo.projectSn,
isEnable: 1
}
this.sendRequest({
url: "exam/regulation/list",
data: requestData,
method: 'post',
success(res) {
if(res.result){
if (res.result) {
that.listData = res.result;
that.listData.map(item => {
item.logoUrl = JSON.parse(item.fileUrl)[0].url
@ -87,17 +98,18 @@
}
})
},
getSafeDataFn(){
getSafeDataFn() {
var that = this
let requestData = {
projectSn: this.userInfo.projectSn
projectSn: this.userInfo.projectSn,
isEnable: 1
}
this.sendRequest({
url: "exam/safetyManual/list",
data: requestData,
method: 'post',
success(res) {
if(res.result){
if (res.result) {
that.listData = res.result;
that.listData.map(item => {
item.logoUrl = JSON.parse(item.fileUrl)[0].url
@ -106,11 +118,11 @@
}
})
},
changeType(id){
changeType(id) {
this.type2 = id
if(this.type2 == 1){
if (this.type2 == 1) {
this.getRulesDataFn();
} else if(this.type2 == 2){
} else if (this.type2 == 2) {
this.getSafeDataFn();
}
},
@ -161,7 +173,11 @@
}
</script>
<style>
<style scoped lang="scss">
.main-content{
display: flex;
flex-direction: column;
}
.rules-box3 {
color: #A2A4AF;
font-size: 26.92rpx;
@ -186,6 +202,8 @@
.rules {
box-shadow: 4rpx 4rpx 8rpx 2rpx rgba(81, 129, 246, 0.12);
margin-top: 44rpx;
height: calc(100vh - 300rpx);
overflow-y: scroll;
}
.rules-box {

View File

@ -5,13 +5,20 @@
学习详情
</view>
</headers>
<view class="video" v-if="videoList.length">
<swiper circular :indicator-dots="true" indicator-color="rgba(99, 99, 99, 1)" style="height: 390rpx;">
<swiper-item v-for="(item,index) in videoList" :key="index">
<video id="myVideo" show-mute-btn :src="item.url" :is-live="true" :controls="item.controlsBool" :enable-progress-gesture="false"
@play="videoStart(index)" @ended="videoEnd(index)"></video>
<view class="video" v-show="videoList.length">
<video v-for="(item,index) in videoList" :key="index" id="myVideo" class="disable-progress" style="width: 100%;height: 390rpx;"
:muted="true" :show-mute-btn="true" :src="item.url" :enable-progress-gesture="false"
:controls="item.controlsBool" @play="videoStart(index)" @ended="videoEnd(index)">
</video>
<!-- <swiper circular :indicator-dots="false" indicator-color="rgba(99, 99, 99, 1)"
style="width: 100%;height: 390rpx;">
<swiper-item v-for="(item,index) in videoList" :key="index" style="width: 100%;height: 390rpx;">
<video id="myVideo" class="disable-progress" style="width: 100%;height: 390rpx;"
:muted="true" :show-mute-btn="true" :src="item.url" :enable-progress-gesture="false"
:controls="item.controlsBool" @play="videoStart(index)" @ended="videoEnd(index)">
</video>
</swiper-item>
</swiper>
</swiper> -->
</view>
<view class="studybox" v-if="videoList.length">
<view class="studybox-line"></view>
@ -20,7 +27,8 @@
<text>{{responseData.courseName}}</text>
</view>
</view>
<button type="primary" :disabled="isStartExam" class="btn" @click="goHiidden" v-if="pageData.examPaperId">开始考试</button>
<button type="primary" :disabled="isStartExam" class="btn" @click="goHiidden"
v-if="pageData.examPaperId">开始考试</button>
<levitatedsphere :x="100" :y="80"></levitatedsphere>
</view>
</template>
@ -30,6 +38,7 @@
export default {
data() {
return {
videoUrl: "",
videoList: [],
pageData: {},
videoStartTime: "",
@ -40,7 +49,7 @@
},
onReady: function(res) {
// #ifndef MP-ALIPAY
this.videoContext = uni.createVideoContext('myVideo')
// this.videoContext = uni.createVideoContext('myVideo')
// #endif
},
onLoad(options) {
@ -58,16 +67,16 @@
//
that.videoList[index].isVideoOver = true;
that.videoList[index].controlsBool = true;
let startExamBool = false;
let startExamBool = true;
that.videoList.map(item => {
if(!item.isVideoOver){
if (!item.isVideoOver) {
startExamBool = false;
}
})
if(startExamBool){
that.isStartExam = false;
} else {
if (!startExamBool) {
that.isStartExam = true;
} else {
that.isStartExam = false;
}
let requestData = {
workerId: this.userInfo.id,
@ -95,13 +104,14 @@
console.log('试题信息', res)
if (res.result) {
that.responseData = res.result;
that.videoList = res.result.fileUrl?JSON.parse(res.result.fileUrl):[],
that.videoList.map(item => {
item.isVideoOver = false
item.controlsBool = false
})
if(that.videoList.length){
that.videoList = res.result.fileUrl ? JSON.parse(res.result.fileUrl) : [],
that.videoList.map(item => {
item.isVideoOver = false
item.controlsBool = false
})
if (that.videoList.length) {
that.isStartExam = true;
that.videoUrl = that.videoList[0].url
}
console.log(that.src)
}
@ -138,15 +148,23 @@
</script>
<style scoped lang="scss">
.main-content {
.video {
width: 100%;
:deep() {
.uni-video-ball {
display: none !important;
}
}
}
#myVideo {
width: 100%;
height: 386.25rpx;
}
// #myVideo {
// width: 100%;
// height: 386.25rpx;
// position: relative;
// }
.studybox {
height: 170rpx;

View File

@ -150,10 +150,10 @@
url = "exam/courseRecord/list"
} else if(this.activeIndex == 3){
requestData.examNum = 1
url = "exam/trainRecord/list"
url = "exam/trainRecord/examRecordList"
} else if(this.activeIndex == 4){
requestData.examNum = 0
url = "exam/trainRecord/list"
url = "exam/trainRecord/examRecordList"
}
this.sendRequest({
url: url,

View File

@ -87,9 +87,12 @@
<style scoped lang="scss">
.main-content {
display: flex;
flex-direction: column;
.list-box {
padding: 60rpx 18rpx 0rpx 18rpx;
height: calc(100vh - 220rpx);
overflow-y: scroll;
padding: 40rpx 18rpx 20rpx 18rpx;
&-item {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.1) 0%, rgba(198, 220, 255, 0.2) 100%);
box-shadow: 0px 8rpx 30rpx -8rpx rgba(42, 60, 106, 0.24);
@ -109,6 +112,7 @@
}
text:nth-child(1){
margin-right: 10rpx;
white-space: nowrap;
}
}
@ -121,7 +125,7 @@
.btn-operate{
width: 90%;
position: fixed;
bottom: 5%;
bottom: 2%;
left: 5%;
z-index: 10;
}

View File

@ -5,35 +5,35 @@
人员列表
</view>
</headers>
<scroll-view scroll-y="true" class="pageContent">
<view class="personContent">
<checkbox-group @change="checkboxChange">
<view class="personItem" v-for="(item,index) in personList" :key="index" @click="searchPerson(item.id)">
<image v-if="item.fieldAcquisitionUrl" :src="url_config+'image/'+item.fieldAcquisitionUrl"
class="profile_photo"></image>
<image v-else src="/static/profile_photo.png" class="profile_photo"></image>
<view class="personInfo">
<view class="name">
{{item.workerName}}
</view>
<view class="teamName">
{{item.teamName}}
</view>
<view class="small">
{{item.sex==2?'女':'男'}} {{item.age}}
</view>
<!-- <scroll-view scroll-y="true" class="pageContent"> -->
<view class="personContent">
<checkbox-group @change="checkboxChange">
<view class="personItem" v-for="(item,index) in personList" :key="index" @click="searchPerson(item.id)">
<image v-if="item.fieldAcquisitionUrl" :src="url_config+'image/'+item.fieldAcquisitionUrl"
class="profile_photo"></image>
<image v-else src="/static/profile_photo.png" class="profile_photo"></image>
<view class="personInfo">
<view class="name">
{{item.workerName}}
</view>
<view class="teamName">
{{item.teamName}}
</view>
<view class="small">
{{item.sex==2?'女':'男'}} {{item.age}}
</view>
<checkbox :value="item.checkVal" />
</view>
</checkbox-group>
<view class="placeholderBox" v-show="personList.length==0">
<image src="/static/noData.png" class="noDataImg"></image>
<view class="text">
暂无数据
</view>
<checkbox :value="item.checkVal" />
</view>
</checkbox-group>
<view class="placeholderBox" v-show="personList.length==0">
<image src="/static/noData.png" class="noDataImg"></image>
<view class="text">
暂无数据
</view>
</view>
</scroll-view>
</view>
<!-- </scroll-view> -->
<view class="addSaveBtn" @click="addSaveBtn">新增保存</view>
</view>
</template>
@ -50,21 +50,32 @@
projectDetail: {},
workerName: '',
teamId: 0,
enterpriseId: "",
pageNo: 1,
pageSize: 100,
objData: "",
selectCheckVal: []
};
},
onLoad(options) {
// this.teamId = options.id
this.enterpriseId = options.enterpriseId
this.objData = JSON.parse(options.obj)
console.log(this.objData, 777888)
this.projectDetail = JSON.parse(uni.getStorageSync('projectDetail'))
this.loadData()
},
onReachBottom() {
console.log("============================")
this.pageNo++;
uni.showLoading({
title: '加载中'
})
this.loadData()
},
methods: {
addSaveBtn(){
addSaveBtn() {
let dealData = [];
this.personList.map(item => {
if(this.selectCheckVal.includes(item.checkVal)){
if (this.selectCheckVal.includes(item.checkVal)) {
dealData.push({
workerCard: item.idCard,
workerId: item.id,
@ -77,30 +88,46 @@
})
}
})
if (uni.getStorageSync("personInfo")) {
let alreadyStoreData = JSON.parse(uni.getStorageSync("personInfo"))
dealData = dealData.concat(alreadyStoreData)
}
uni.setStorageSync("personInfo", JSON.stringify(dealData))
uni.navigateBack({
delta: 2
})
},
checkboxChange(e){
checkboxChange(e) {
console.log(e)
this.selectCheckVal = e.detail.value
},
loadData() {
var that = this
let requestData = {
projectSn: this.projectDetail.projectSn,
pageNo: this.pageNo,
pageSize: this.pageSize,
inserviceType: 1
}
if (this.objData.type == 1) {
requestData.teamId = this.objData.id
}
if (this.objData.type == 2) {
requestData.departmentId = this.objData.id
}
this.sendRequest({
url: 'xmgl/workerInfo/selectWorkerInfoList',
data: {
// teamId: this.teamId,
enterpriseId: this.enterpriseId,
projectSn: this.projectDetail.projectSn,
pageNo: 1,
pageSize: 100
},
data: requestData,
method: "POST",
success(res) {
that.personList = res.result.records
that.personList.map((item,index) =>{
if (that.pageNo == 1) {
that.personList = []
}
// console.log('--------')
// this.personList = res.result.records
that.personList = [...that.personList, ...res.result.records]
uni.hideLoading() //
that.personList.map((item, index) => {
item.checkVal = index + "";
})
}
@ -152,6 +179,7 @@
height: 60px;
margin-right: 10px;
}
.addSaveBtn {
width: 60%;
padding: 10px 0;

View File

@ -6,16 +6,16 @@
</view>
</headers>
<view class="searchBox" :style="{ 'padding-top': (statusBarHeight+52) + 'px' }">
<input type="text" v-model="teamName" confirm-type="search" class="input" placeholder-style="color:rgba(72, 141, 236, 0.5)" placeholder="按班组名称查找" @confirm="list=[];loadData()" />
<input type="text" v-model="departmentTeamName" confirm-type="search" class="input" placeholder-style="color:rgba(72, 141, 236, 0.5)" placeholder="按班组/部门名称查找" @confirm="list=[];loadData()" />
</view>
<view class="listBox" :style="{ 'padding-top': (statusBarHeight+52+40) + 'px' }">
<view class="listItem" v-for="item in list" :key="item.id" @click="goAdd(item.enterpriseId)">
<view class="listItem" v-for="item in list" :key="item.id" @click="goAdd(item)">
<view class="title">
{{item.teamName}}-{{item.enterpriseName}}
{{item.name}}-{{item.enterpriseName}}
</view>
<view class="bottom">
<image src="/static/icon-person.png" class="icon-person"></image>
<text class="time">{{item.totalPersonNum}}</text>
<text class="time">{{item.personNum}}</text>
</view>
<image src="/static/icon-right.png" class="icon-right"></image>
</view>
@ -36,7 +36,7 @@
projectDetail:{},
list:[],
statusBarHeight:0,
teamName:''
departmentTeamName:''
};
},
mounted() {
@ -49,17 +49,17 @@
loadData(){
var that = this
this.sendRequest({
url: 'xmgl/workerInfo/selectAllProjectTeamList',
data: {teamName:this.teamName,projectSn:this.projectDetail.projectSn},
method: "POST",
url: 'xmgl/departmentInfo/getDepartmentAndTeamList',
data: {departmentTeamName:this.departmentTeamName,projectSn:this.projectDetail.projectSn},
method: "GET",
success(res){
that.list=res.result
}
})
},
goAdd(enterpriseId){
goAdd(obj){
uni.navigateTo({
url:'./personList?enterpriseId='+ enterpriseId
url:'./personList?obj='+ JSON.stringify(obj)
})
}
}

View File

@ -6,7 +6,7 @@
</view>
</headers>
<view class="index-boxs" v-if="personList.length">
<view class="index-box" @click="goDetail" v-for="(item,index) in personList" :key="index">
<view class="index-box" v-for="(item,index) in personList" :key="index">
<image :src="url_config+'image/'+item.fieldAcquisitionUrl"></image>
<view class="person-info">
<text>{{item.workerName}}</text>
@ -53,6 +53,13 @@
},
methods: {
addForm(){
if(!this.personList.length){
uni.showToast({
title: '请选择人员',
icon: 'none'
})
return
}
let requestData = {
...this.pageData,
examTrainRecordList: this.personList,
@ -102,21 +109,20 @@
uni.redirectTo({
url: `/pages/personLocation/index/index`
});
},
goDetail(item) {
uni.navigateTo({
url: `/pages/personLocation/exam/studydetails/studydetails?courseId=` + item.courseId
});
},
}
}
}
</script>
<style scoped lang="scss">
.main-content {
display: flex;
flex-direction: column;
.index-boxs {
height: calc(100vh - 200rpx);
overflow-y: scroll;
padding: 58rpx 35rpx;
padding-bottom: 10rpx;
.index-box {
width: 100%;
background-color: white;
@ -160,7 +166,7 @@
.editBtn {
position: fixed;
bottom: 40rpx;
bottom: 20rpx;
left: 0px;
width: 100%;
display: flex;

View File

@ -26,9 +26,9 @@
<view class="zoom zoomout" @click="controlVideoFn(0,0,-0.2,'ZOOM_OUT')"></view>
</view>
</view>
<!-- <view class="video-playback" @click="toBackList">
<view class="video-playback" @click="toBackList">
视频回放
</view> -->
</view>
</view>
</template>
@ -200,7 +200,7 @@
.fullHeight{
background-color: #F4F5FD;
height: auto;
// padding-bottom: 60rpx;
padding-bottom: 60rpx;
}
/* #endif */
.videoBox{