Branch_d40a2540 V2.2.7
yujialong 2 years ago
parent afc85230c1
commit c4728b007c
  1. 2
      src/api/index.js
  2. BIN
      src/assets/img/wechat-code.jpeg
  3. 5
      src/layouts/navbar/index.vue
  4. 2
      src/pages/assessment/add/index.vue
  5. 8
      src/pages/course/contentSettings/index.vue
  6. 3
      src/pages/information/list/index.vue
  7. 4
      src/pages/project/list/index.vue
  8. 15
      src/pages/screen/index.vue
  9. 66
      src/pages/station/preview/index.vue
  10. 2
      src/plugins/auth/index.js
  11. 13
      src/setting.js
  12. 2
      src/store/modules/info.js
  13. 7
      src/styles/common.scss
  14. 2
      src/styles/layout/index.scss

@ -21,6 +21,7 @@ export default {
curriculumGetSubsection: `nakadai/nakadai/curriculum/subsection/getSubsection`, // 根据小节id获取预览文件地址 curriculumGetSubsection: `nakadai/nakadai/curriculum/subsection/getSubsection`, // 根据小节id获取预览文件地址
getProjectBySystemId: 'occupationlab/occupationlab/projectManage/getProjectBySystemId', getProjectBySystemId: 'occupationlab/occupationlab/projectManage/getProjectBySystemId',
getTheMostRecentlyRunProject: 'python/python/getTheMostRecentlyRunProject', getTheMostRecentlyRunProject: 'python/python/getTheMostRecentlyRunProject',
whetherToRenewTheFee: 'nakadai/nakadai/curriculum/whetherToRenewTheFee',
// 权限管理 // 权限管理
getUserRolesPermissionMenu: `users/users/user-role/getUserRolesPermissionMenu`, getUserRolesPermissionMenu: `users/users/user-role/getUserRolesPermissionMenu`,
@ -69,6 +70,7 @@ export default {
deleteAssessment: `occupationlab/occupationlab/assessment/deleteAssessment`, // 单个、批量删除 deleteAssessment: `occupationlab/occupationlab/assessment/deleteAssessment`, // 单个、批量删除
collectPaper: `occupationlab/occupationlab/assessment/collectPaper`, // 收卷(提前结束) collectPaper: `occupationlab/occupationlab/assessment/collectPaper`, // 收卷(提前结束)
schoolCourse: `nakadai/nakadai/curriculum/schoolCourse`, // 获取学校购买订单后的课程 schoolCourse: `nakadai/nakadai/curriculum/schoolCourse`, // 获取学校购买订单后的课程
getSchoolEffectiveCourse: `nakadai/nakadai/curriculum/getSchoolEffectiveCourse`,
projectListByCourseId: `occupationlab/occupationlab/projectManage/getSchoolProjectByAssessent`, // 根据课程id获取实训项目列表 projectListByCourseId: `occupationlab/occupationlab/projectManage/getSchoolProjectByAssessent`, // 根据课程id获取实训项目列表
// 成绩管理 // 成绩管理

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

@ -125,6 +125,9 @@ export default {
...mapActions('user', [ ...mapActions('user', [
'logout' 'logout'
]), ]),
...mapActions("info", [
"setTabsName", "setColumnId"
]),
// //
getPer() { getPer() {
this.$get(`${this.api.getUserRolesPermissionMenu}?platformId=${Setting.platformId}`).then(res => { this.$get(`${this.api.getUserRolesPermissionMenu}?platformId=${Setting.platformId}`).then(res => {
@ -150,6 +153,8 @@ export default {
}, },
// //
menuSelect(path) { menuSelect(path) {
this.setTabsName('1')
this.setColumnId('')
path === '/screen' ? window.open(this.$router.resolve(path).href) : this.$router.push(path) path === '/screen' ? window.open(this.$router.resolve(path).href) : this.$router.push(path)
} }
} }

@ -381,7 +381,7 @@ export default {
} }
}, },
getschoolCourse() { // getschoolCourse() { //
this.$get(this.api.schoolCourse).then(res => { this.$get(this.api.getSchoolEffectiveCourse).then(res => {
this.curriculumList = res.data; this.curriculumList = res.data;
if (this.curriculumList.length) { if (this.curriculumList.length) {
if (this.form.curriculumId){ if (this.form.curriculumId){

@ -73,7 +73,7 @@
</el-table> </el-table>
</div> </div>
<el-dialog :title="chapterId ? '编辑章节' : '新增章节'" :visible.sync="chapterVisible" width="24%" :close-on-click-modal="false"> <el-dialog :title="chapterId ? '编辑章节' : '新增章节'" :visible.sync="chapterVisible" width="540px" :close-on-click-modal="false">
<el-form> <el-form>
<el-form-item> <el-form-item>
<el-input placeholder="请输入章节名称,便于对小节归类" v-model="chapterName" maxlength="50"></el-input> <el-input placeholder="请输入章节名称,便于对小节归类" v-model="chapterName" maxlength="50"></el-input>
@ -85,7 +85,7 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="添加小节" :visible.sync="sectionVisible" width="28%" @close="closeSection" :close-on-click-modal="false"> <el-dialog title="添加小节" :visible.sync="sectionVisible" width="540px" @close="closeSection" :close-on-click-modal="false">
<el-form label-width="80px"> <el-form label-width="80px">
<el-form-item label="资源添加"> <el-form-item label="资源添加">
<el-upload <el-upload
@ -117,7 +117,7 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="更换文件" :visible.sync="switchVisible" width="28%" :close-on-click-modal="false" @close="closeSwitch"> <el-dialog title="更换文件" :visible.sync="switchVisible" width="540px" :close-on-click-modal="false" @close="closeSwitch">
<div style="text-align: center"> <div style="text-align: center">
<el-upload <el-upload
:before-upload="beforeUpload" :before-upload="beforeUpload"
@ -143,7 +143,7 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="修改小节名称" :visible.sync="sectionNameVisible" width="24%" :close-on-click-modal="false"> <el-dialog title="修改小节名称" :visible.sync="sectionNameVisible" width="540px" :close-on-click-modal="false">
<el-form> <el-form>
<el-form-item> <el-form-item>
<el-input placeholder="请输入小节名称" v-model="sectionName" maxlength="50"></el-input> <el-input placeholder="请输入小节名称" v-model="sectionName" maxlength="50"></el-input>

@ -31,11 +31,12 @@ export default {
}, },
methods: { methods: {
...mapActions("info", [ ...mapActions("info", [
"setTabsName" "setTabsName", "setColumnId"
]), ]),
switchTab(id) { switchTab(id) {
this.tabsName = id this.tabsName = id
this.setTabsName(id) this.setTabsName(id)
this.setColumnId('')
}, },
// //
routeLeave(fn, param) { routeLeave(fn, param) {

@ -47,6 +47,8 @@
:options="curs" :options="curs"
:props="{ checkStrictly: true, value: 'id' }" :props="{ checkStrictly: true, value: 'id' }"
clearable clearable
popper-class="course-cas"
@expand-change="curChange"
@change="curChange"></el-cascader> @change="curChange"></el-cascader>
<!-- <el-select v-model="queryData.cid" @change="courseChange"> <!-- <el-select v-model="queryData.cid" @change="courseChange">
<el-option <el-option
@ -290,7 +292,7 @@ export default {
}, },
// //
getschoolCourse() { getschoolCourse() {
this.$get(this.api.schoolCourse).then(({ data }) => { this.$get(this.api.getSchoolEffectiveCourse).then(({ data }) => {
this.curriculumList = data this.curriculumList = data
const { cid } = this.queryData const { cid } = this.queryData
if (data.length) { if (data.length) {

@ -414,7 +414,7 @@ export default {
show:false, show:false,
x : 'center', x : 'center',
y : 'bottom', y : 'bottom',
data:['考总场次', '考人数'] data:['考总场次', '考人数']
}, },
toolbox: { toolbox: {
}, },
@ -435,12 +435,14 @@ export default {
label: { label: {
normal: { normal: {
show: true, show: true,
alignTo: 'none',
lineHeight: 18,
formatter: '{b} {c}' formatter: '{b} {c}'
} }
}, },
data:[ data:[
{value: data.totalNumberOfExams, name:'考总场次'}, {value: data.totalNumberOfExams, name:'考试\n总场次'},
{value: data.referenceNumber, name:'考人数'}, {value: data.referenceNumber, name:'考试\n人数'},
] ]
} }
] ]
@ -508,6 +510,7 @@ export default {
grid: { grid: {
left: '3%', left: '3%',
right: '4%', right: '4%',
top: '30%',
bottom: '3%', bottom: '3%',
containLabel: true containLabel: true
}, },
@ -660,14 +663,14 @@ export default {
this.$post(this.api.studentAssessSchievement, times).then(({ data }) => { this.$post(this.api.studentAssessSchievement, times).then(({ data }) => {
const times = [] const times = []
const series = [] const series = []
data.map(e => { data.map((e, i) => {
times.push(e.time) times.push(e.time)
e.assesScoreRespList.map(n => { e.assesScoreRespList.map(n => {
const item = courseList.find(j => j.cid == n.curriculumId) const item = courseList.find(j => j.cid == n.curriculumId)
if (item) { if (item) {
const name = item.curriculumName const name = item.curriculumName
if (courseData[name]) { if (courseData[name]) {
courseData[name].push(+n.avgScore) courseData[name][i] = +n.avgScore
} }
} }
}) })
@ -681,7 +684,6 @@ export default {
smooth: true, smooth: true,
symbol: 'circle', symbol: 'circle',
symbolSize: 5, symbolSize: 5,
showSymbol: false,
lineStyle: { lineStyle: {
normal: { normal: {
color: colors[index].color1, color: colors[index].color1,
@ -749,6 +751,7 @@ export default {
type: 'category', type: 'category',
boundaryGap: false, boundaryGap: false,
axisLabel: { axisLabel: {
interval: 0,
textStyle: { textStyle: {
color: "rgba(255,255,255,.9)", color: "rgba(255,255,255,.9)",
fontSize:12, fontSize:12,

@ -49,7 +49,8 @@
</div> </div>
<div class="catalog"> <div class="catalog">
<div class="m-b-20"> <div class="m-b-20">
<el-button type="primary" @click="entry" style="width: 100%; height: 50px; font-size: 18px"> </el-button> <el-button v-if="!overdue" class="entry" type="primary" size="small" @click="showBuy">续费</el-button>
<el-button v-else class="entry" type="primary" @click="entry"> </el-button>
</div> </div>
<div class="list"> <div class="list">
<h4 class="title">{{ courseName }}</h4> <h4 class="title">{{ courseName }}</h4>
@ -71,11 +72,11 @@
</el-card> </el-card>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover" class="m-b-20">
<h4 style="margin-bottom: 10px">课程简介</h4> <h4 style="margin-bottom: 10px;font-size: 16px;">课程简介</h4>
<p>{{ briefIntroduction }}</p> <p>{{ briefIntroduction }}</p>
</el-card> </el-card>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover" class="m-b-20">
<h4 style="margin-bottom: 10px">课程目标</h4> <h4 style="margin-bottom: 10px;font-size: 16px;">课程目标</h4>
<p>{{ teachingObjectives }}</p> <p>{{ teachingObjectives }}</p>
</el-card> </el-card>
<el-dialog title="请选择项目" v-loading="loading" :visible.sync="projectVisible" width="828px" custom-class="project-dia" :close-on-click-modal="false"> <el-dialog title="请选择项目" v-loading="loading" :visible.sync="projectVisible" width="828px" custom-class="project-dia" :close-on-click-modal="false">
@ -91,6 +92,14 @@
<el-button size="small" type="primary" @click="toSub"> </el-button> <el-button size="small" type="primary" @click="toSub"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
<!-- 购买弹框 -->
<el-dialog title="温馨提示" :visible.sync="buyVisible" width="420px" center :close-on-click-modal="false">
<div class="buy">
<p class="tips">该课程订阅期限已到期若需要续费请扫码添加客服咨询</p>
<img src="@/assets/img/wechat-code.jpeg" alt="">
</div>
</el-dialog>
</div> </div>
</template> </template>
@ -141,7 +150,9 @@ export default {
projectVisible: false, projectVisible: false,
projects: [], projects: [],
loading: false, loading: false,
curProject: '' curProject: '',
overdue: 0, //
buyVisible: false
}; };
}, },
computed: { computed: {
@ -150,10 +161,9 @@ export default {
]) ])
}, },
mounted() { mounted() {
bus.$emit("setBg", "none");
this.insertScript(); this.insertScript();
this.getData(); this.getData();
this.getChapter(); this.getStatus()
}, },
methods: { methods: {
goBack() { goBack() {
@ -168,12 +178,21 @@ export default {
this.assessmentList = data.assessmentConfig; this.assessmentList = data.assessmentConfig;
this.systemIds = data.systemIds this.systemIds = data.systemIds
}, },
//
getStatus() {
this.$get(this.api.whetherToRenewTheFee, {
cid: this.courseId
}).then(({ isRenew }) => {
// 10
this.overdue = isRenew
this.getChapter()
}).catch(res => {})
},
async getChapter() { async getChapter() {
let res = await this.$get(`${this.api.curriculumChapter}/${this.courseId}`); let res = await this.$get(`${this.api.curriculumChapter}/${this.courseId}`);
this.chapterList = res.chapterList; this.chapterList = res.chapterList;
if (this.chapterList.length && this.chapterList[0].subsectionList && this.chapterList[0].subsectionList.length) { if (this.chapterList.length && this.chapterList[0].subsectionList && this.chapterList[0].subsectionList.length) {
// console.log(this.chapterList[0].subsectionList[0]); this.preview(this.chapterList[0].subsectionList[0], this.chapterList[0].name, 1);
this.preview(this.chapterList[0].subsectionList[0], this.chapterList[0].name);
} }
}, },
// //
@ -194,12 +213,18 @@ export default {
document.body.removeChild(document.querySelector("#aliplayerScript")); document.body.removeChild(document.querySelector("#aliplayerScript"));
}); });
}, },
//
showBuy() {
this.buyVisible = true
},
transferType(ext) { transferType(ext) {
if ("jpg,jpeg,png,gif,svg,psd".includes(ext)) return "图片"; if ("jpg,jpeg,png,gif,svg,psd".includes(ext)) return "图片";
if ("mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv".includes(ext)) return "视频"; if ("mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv".includes(ext)) return "视频";
return ext; return ext;
}, },
preview(row, chapterName) { preview(row, chapterName, showDia = 0) {
//
if (this.overdue || showDia) {
this.curLink = `${chapterName}${row.name}`; // + this.curLink = `${chapterName}${row.name}`; // +
this.playauth = ""; this.playauth = "";
this.coverUrl = ""; this.coverUrl = "";
@ -275,6 +300,9 @@ export default {
this.iframeSrc = res.previewUrl; this.iframeSrc = res.previewUrl;
}).catch(err => {}); }).catch(err => {});
} }
} else {
this.showBuy()
}
}, },
closePlayer() { closePlayer() {
this.playAuth = ""; this.playAuth = "";
@ -370,7 +398,10 @@ export default {
if (systemId == 11) { if (systemId == 11) {
// //
location.href = `${Setting.bankPath}/#/index/list?curriculumName=${this.curriculumName}&token=${token}&cid=${this.courseId}&systemId=${this.systemIds}&projectId=${this.curProject}&assessmentId=&classId=&stopTime=&test=true` location.href = `${Setting.bankPath}/#/index/list?curriculumName=${this.curriculumName}&token=${token}&cid=${this.courseId}&systemId=${this.systemIds}&projectId=${this.curProject}&assessmentId=&classId=&stopTime=&test=true&manager=1`
} else if (systemId == 12) {
//
window.open(`http://120.78.139.126:8879?systemId=${systemId}&courseId=${this.courseId}&projectId=${this.curProject}&token=${token}`);
} else if (systemId == 21) { } else if (systemId == 21) {
window.open(`http://121.37.29.24:80/yyyflogin?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=3989a0ad671849b99dcbdcc208782333&caseId=9681f86902314b10bc752909121f9ab9&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=7ff5d4715b114b7398b6f26c20fac460`); window.open(`http://121.37.29.24:80/yyyflogin?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=3989a0ad671849b99dcbdcc208782333&caseId=9681f86902314b10bc752909121f9ab9&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=7ff5d4715b114b7398b6f26c20fac460`);
} else if (systemId == 22) { } else if (systemId == 22) {
@ -404,6 +435,11 @@ $height: 700px;
overflow: hidden; overflow: hidden;
} }
} }
.entry {
width: 100%;
height: 50px;
font-size: 18px;
}
.fileIframe{ .fileIframe{
height: $height !important; height: $height !important;
} }
@ -502,6 +538,16 @@ $height: 700px;
} }
} }
} }
.buy {
text-align: center;
.tips {
margin-bottom: 10px;
font-size: 14px;
}
img {
width: 85%;
}
}
.el-image-viewer__wrapper{ .el-image-viewer__wrapper{
transform: translateY(-10px); transform: translateY(-10px);
transition: transform .5s; transition: transform .5s;

@ -4,9 +4,11 @@
* 用例<Tag v-auth>text</Tag> <Tag v-auth="''">text</Tag> * 用例<Tag v-auth>text</Tag> <Tag v-auth="''">text</Tag>
* */ * */
import store from '@/store' import store from '@/store'
import Setting from '@/setting'
export default { export default {
inserted(el, binding, vnode) { inserted(el, binding, vnode) {
if (!Setting.dynamicRoute) return false
const val = binding.value const val = binding.value
// 如果有传值,判断是否有/,有就说说明传的是完整的值,否则就拿路由拼接传的值;如果没传值,就取按钮名字 // 如果有传值,判断是否有/,有就说说明传的是完整的值,否则就拿路由拼接传的值;如果没传值,就取按钮名字
const text = val && val.includes('/') ? val : vnode.context.$route.path + ':' + (val || el.innerText) const text = val && val.includes('/') ? val : vnode.context.$route.path + ':' + (val || el.innerText)

@ -16,16 +16,17 @@ let uploadURL = `http://121.37.12.51/`
let title = (isHh || isCH) ? '教师管理端' : '职站服务端管理系统' let title = (isHh || isCH) ? '教师管理端' : '职站服务端管理系统'
if (isPro || isZxy) { if (isPro || isZxy) {
if (isPro) bankPath = `https://www.huorantech.cn/banksystem`
// 职站生产 // 职站生产
uploadURL = `https://www.huorantech.cn/` uploadURL = `https://www.huorantech.cn/`
bankPath = `https://www.huorantech.cn/banksystem`
jumpPath = `https://www.huorantech.cn/judgmentPoint/` jumpPath = `https://www.huorantech.cn/judgmentPoint/`
} else if (isDev) { } else if (isDev) {
jumpPath = "http://192.168.31.125:8087/"; jumpPath = `http://${location.hostname}:8087/`
bankPath = `http://192.168.31.125:8093` bankPath = `http://${location.hostname}:8093`
host = "http://121.37.12.51/"; // 中台测试服 host = "http://121.37.12.51/"; // 中台测试服
// host = "http://192.168.31.151:9000/"; // 榕 // host = 'https://www.occupationlab.com/' // 正式服
// host = 'http://192.168.31.137:9000/'; // 赓 // host = "http://192.168.31.51:9000/"; // 榕
// host = 'http://192.168.31.116:9000/'; // 赓
} else if (isZxy) { } else if (isZxy) {
uploadURL = `https://izhixinyun.com/` uploadURL = `https://izhixinyun.com/`
} }
@ -87,7 +88,7 @@ const Setting = {
// 相同路由,不同参数间进行切换,是否强力更新 // 相同路由,不同参数间进行切换,是否强力更新
sameRouteForceUpdate: false, sameRouteForceUpdate: false,
// 是否使用动态路由(即角色权限,开启了的话就会取后端返回的权限树来显示头部导肮和页面按钮) // 是否使用动态路由(即角色权限,开启了的话就会取后端返回的权限树来显示头部导肮和页面按钮)
dynamicRoute: false, dynamicRoute: true,
// 文件上传 // 文件上传
upload: { upload: {
apiURL: uploadURL, apiURL: uploadURL,

@ -4,7 +4,7 @@
export default { export default {
namespaced: true, namespaced: true,
state: { state: {
tabsName: "2", tabsName: "1",
columnId: "" columnId: ""
}, },
mutations: { mutations: {

@ -378,3 +378,10 @@
} }
} }
} }
.course-cas {
.el-cascader-menu:first-child {
.el-radio {
display: none;
}
}
}

@ -11,7 +11,7 @@ body,
body { body {
min-width: 1280px; min-width: 1280px;
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; font-family: PingFangSC-Regular, PingFang SC, "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
font-size: 14px; font-size: 14px;
background: rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.05);
} }
Loading…
Cancel
Save