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

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

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

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

@ -73,7 +73,7 @@
</el-table>
</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-item>
<el-input placeholder="请输入章节名称,便于对小节归类" v-model="chapterName" maxlength="50"></el-input>
@ -85,7 +85,7 @@
</span>
</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-item label="资源添加">
<el-upload
@ -117,7 +117,7 @@
</span>
</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">
<el-upload
:before-upload="beforeUpload"
@ -143,7 +143,7 @@
</span>
</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-item>
<el-input placeholder="请输入小节名称" v-model="sectionName" maxlength="50"></el-input>

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

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

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

@ -49,7 +49,8 @@
</div>
<div class="catalog">
<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 class="list">
<h4 class="title">{{ courseName }}</h4>
@ -71,11 +72,11 @@
</el-card>
<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>
</el-card>
<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>
</el-card>
<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>
</span>
</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>
</template>
@ -141,7 +150,9 @@ export default {
projectVisible: false,
projects: [],
loading: false,
curProject: ''
curProject: '',
overdue: 0, //
buyVisible: false
};
},
computed: {
@ -150,10 +161,9 @@ export default {
])
},
mounted() {
bus.$emit("setBg", "none");
this.insertScript();
this.getData();
this.getChapter();
this.getStatus()
},
methods: {
goBack() {
@ -168,12 +178,21 @@ export default {
this.assessmentList = data.assessmentConfig;
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() {
let res = await this.$get(`${this.api.curriculumChapter}/${this.courseId}`);
this.chapterList = res.chapterList;
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);
this.preview(this.chapterList[0].subsectionList[0], this.chapterList[0].name, 1);
}
},
//
@ -194,12 +213,18 @@ export default {
document.body.removeChild(document.querySelector("#aliplayerScript"));
});
},
//
showBuy() {
this.buyVisible = true
},
transferType(ext) {
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 "视频";
return ext;
},
preview(row, chapterName) {
preview(row, chapterName, showDia = 0) {
//
if (this.overdue || showDia) {
this.curLink = `${chapterName}${row.name}`; // +
this.playauth = "";
this.coverUrl = "";
@ -275,6 +300,9 @@ export default {
this.iframeSrc = res.previewUrl;
}).catch(err => {});
}
} else {
this.showBuy()
}
},
closePlayer() {
this.playAuth = "";
@ -370,7 +398,10 @@ export default {
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) {
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) {
@ -404,6 +435,11 @@ $height: 700px;
overflow: hidden;
}
}
.entry {
width: 100%;
height: 50px;
font-size: 18px;
}
.fileIframe{
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{
transform: translateY(-10px);
transition: transform .5s;

@ -4,9 +4,11 @@
* 用例<Tag v-auth>text</Tag> <Tag v-auth="''">text</Tag>
* */
import store from '@/store'
import Setting from '@/setting'
export default {
inserted(el, binding, vnode) {
if (!Setting.dynamicRoute) return false
const val = binding.value
// 如果有传值,判断是否有/,有就说说明传的是完整的值,否则就拿路由拼接传的值;如果没传值,就取按钮名字
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) ? '教师管理端' : '职站服务端管理系统'
if (isPro || isZxy) {
if (isPro) bankPath = `https://www.huorantech.cn/banksystem`
// 职站生产
uploadURL = `https://www.huorantech.cn/`
bankPath = `https://www.huorantech.cn/banksystem`
jumpPath = `https://www.huorantech.cn/judgmentPoint/`
} else if (isDev) {
jumpPath = "http://192.168.31.125:8087/";
bankPath = `http://192.168.31.125:8093`
jumpPath = `http://${location.hostname}:8087/`
bankPath = `http://${location.hostname}:8093`
host = "http://121.37.12.51/"; // 中台测试服
// host = "http://192.168.31.151:9000/"; // 榕
// host = 'http://192.168.31.137:9000/'; // 赓
// host = 'https://www.occupationlab.com/' // 正式服
// host = "http://192.168.31.51:9000/"; // 榕
// host = 'http://192.168.31.116:9000/'; // 赓
} else if (isZxy) {
uploadURL = `https://izhixinyun.com/`
}
@ -87,7 +88,7 @@ const Setting = {
// 相同路由,不同参数间进行切换,是否强力更新
sameRouteForceUpdate: false,
// 是否使用动态路由(即角色权限,开启了的话就会取后端返回的权限树来显示头部导肮和页面按钮)
dynamicRoute: false,
dynamicRoute: true,
// 文件上传
upload: {
apiURL: uploadURL,

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

@ -377,4 +377,11 @@
border-top-color: #fff;
}
}
}
.course-cas {
.el-cascader-menu:first-child {
.el-radio {
display: none;
}
}
}

@ -11,7 +11,7 @@ body,
body {
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;
background: rgba(0, 0, 0, 0.05);
}
Loading…
Cancel
Save