dev_202412
yujialong 10 months ago
parent b97887506e
commit b61162f633
  1. 41
      src/components/breadcrumb/index.vue
  2. 4
      src/layouts/header/index.vue
  3. 305
      src/layouts/navbar/index.vue
  4. 20
      src/pages/match/details/index.vue
  5. 66
      src/pages/record/details/index.vue
  6. 452
      src/pages/record/show/index.vue
  7. 18
      src/router/modules/product.js
  8. 2
      src/setting.js

@ -3,12 +3,10 @@
<div class="breadcrumb"> <div class="breadcrumb">
<el-breadcrumb separator=">"> <el-breadcrumb separator=">">
<template v-for="(item, i) in routes"> <template v-for="(item, i) in routes">
<el-breadcrumb-item v-if="i != routes.length - 1" <el-breadcrumb-item v-if="i != routes.length - 1" :key="i">
:key="i">
<span @click="to(item)">{{ item.name }}</span> <span @click="to(item)">{{ item.name }}</span>
</el-breadcrumb-item> </el-breadcrumb-item>
<el-breadcrumb-item v-else <el-breadcrumb-item v-else :key="i">
:key="i">
{{ item.name }} {{ item.name }}
</el-breadcrumb-item> </el-breadcrumb-item>
</template> </template>
@ -40,22 +38,25 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.breadcrumb { .breadcrumb {
margin: 4px 0 16px; margin: 4px 0 16px;
/deep/.el-breadcrumb__item {
.el-breadcrumb__inner, /deep/.el-breadcrumb__item {
.el-breadcrumb__separator { .el-breadcrumb__inner,
font-weight: 400; .el-breadcrumb__separator {
color: $main-color; font-weight: 400;
} color: $main-color;
.el-breadcrumb__inner { }
cursor: pointer;
} .el-breadcrumb__inner {
&:last-child { cursor: pointer;
.el-breadcrumb__inner {
color: #0b1d30;
cursor: default;
}
}
} }
&:last-child {
.el-breadcrumb__inner {
color: #0b1d30;
cursor: default;
}
}
}
} }
</style> </style>

@ -10,7 +10,7 @@
<template v-else> <template v-else>
<img v-if="isZj" src="/images/4.png" alt=""> <img v-if="isZj" src="/images/4.png" alt="">
<img v-else-if="isSq" style="max-height: 100%" src="/images/1.png" alt=""> <img v-else-if="isSq" style="max-height: 100%" src="/images/1.png" alt="">
<img v-else :style="{ maxWidth: title ? '200px' : '300px' }" :src="logoUrl" height="50" /> <img v-else :src="logoUrl" />
<span class="title">{{ title }}</span> <span class="title">{{ title }}</span>
</template> </template>
</a> </a>
@ -300,7 +300,7 @@ $height: 64px;
cursor: pointer; cursor: pointer;
img { img {
max-width: 300px; max-height: 50px;
margin-right: 10px; margin-right: 10px;
} }
} }

@ -1,33 +1,19 @@
<template> <template>
<div> <div>
<!-- pc端 --> <!-- pc端 -->
<ul v-if="!$store.state.layout.isMobile" <ul v-if="!$store.state.layout.isMobile" class="nav">
class="nav"> <li v-for="(item, i) in menus" :key="i" :class="{ active: active == item.id }" @click="jump(item)">
<li v-for="(item, i) in menus" {{ item.name }}
:key="i" <ul :class="['children']" v-if="item.id === '/preInfo/list' || item.id === '/info/list'">
:class="{active: active == item.id}" <li v-for="(column, i) in columns" :key="i" :class="{ active: columnActive === column.id }"
@click="jump(item)"> @click="toInfo($event, column)">{{ column.name }}</li>
{{item.name}}
<ul :class="['children']"
v-if="item.id === '/preInfo/list' || item.id === '/info/list'">
<li v-for="(column, i) in columns"
:key="i"
:class="{active: columnActive === column.id}"
@click="toInfo($event, column)">{{ column.name }}</li>
</ul> </ul>
</li> </li>
</ul> </ul>
<!-- 移动端 --> <!-- 移动端 -->
<el-menu v-else <el-menu v-else ref="elMenu" class="menu" background-color="#fff" text-color="#333" active-text-color="#006eff"
ref="elMenu" @open="menuClick" @select="menuClick" :default-active="String(active)">
class="menu"
background-color="#fff"
text-color="#333"
active-text-color="#006eff"
@open="menuClick"
@select="menuClick"
:default-active="String(active)">
<menuTree :menuList="menus" /> <menuTree :menuList="menus" />
</el-menu> </el-menu>
</div> </div>
@ -133,13 +119,13 @@ export default {
}, },
watch: { watch: {
"$route" (to, from) { "$route" (to, from) {
let actives = this.actives; let actives = this.actives
for (let i in this.actives) { for (let i in this.actives) {
if (actives[i].includes(this.$route.name)) this.active = `/${i}/list`; if (actives[i].includes(this.$route.name)) this.active = `/${i}/list`
} }
let arr = this.$route.path.split("/"); let arr = this.$route.path.split("/")
let name = `/${arr[1]}/list` let name = `/${arr[1]}/list`
this.active = name; this.active = name === '/index/list' && Setting.isZxy ? '/index/zxy' : name
} }
}, },
mounted () { mounted () {
@ -152,7 +138,7 @@ export default {
if (Setting.isZxy) { if (Setting.isZxy) {
menus[0].id = '/index/zxy' menus[0].id = '/index/zxy'
menus.splice(1, 0, { menus.splice(1, 0, {
id: '/product', id: '/product/list',
name: '产品服务' name: '产品服务'
}) })
} }
@ -226,153 +212,182 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.nav { .nav {
position: absolute;
top: 0;
left: 50%;
display: flex;
transform: translateX(-50%);
&>li {
position: relative;
padding: 0 15px;
margin: 0 20px;
font-size: 16px;
line-height: 60px;
color: #3f3f3f;
white-space: nowrap;
cursor: pointer;
border-bottom: 4px solid transparent;
&.active {
color: $main-color;
border-bottom-color: $main-color;
}
&:hover {
.children {
display: flex;
}
}
}
.children {
position: absolute; position: absolute;
top: 0; top: 64px;
left: 50%; left: 50%;
display: flex; display: none;
background-color: #fff;
border-bottom-left-radius: 6px;
border-bottom-right-radius: 6px;
box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.15);
transform: translateX(-50%); transform: translateX(-50%);
& > li {
position: relative; &.show {
padding: 0 15px; display: flex;
margin: 0 20px;
font-size: 16px;
line-height: 60px;
color: #3f3f3f;
white-space: nowrap;
cursor: pointer;
border-bottom: 4px solid transparent;
&.active {
color: $main-color;
border-bottom-color: $main-color;
}
&:hover {
.children {
display: flex;
}
}
} }
.children {
position: absolute; &>li {
top: 64px; padding: 0 20px;
left: 50%; margin: 0 20px;
display: none; color: #333;
background-color: #fff; line-height: 64px;
border-bottom-left-radius: 6px; cursor: pointer;
border-bottom-right-radius: 6px;
box-shadow: 0px 2px 10px 0px rgba(0, 0, 0, 0.15); &:before {
transform: translateX(-50%); content: '';
&.show { display: inline-block;
display: flex; width: 3px;
} height: 3px;
& > li { margin-right: 10px;
padding: 0 20px; vertical-align: middle;
margin: 0 20px; background-color: #333;
color: #333; }
line-height: 64px;
cursor: pointer; &.active {
&:before { color: $main-color;
content: '';
display: inline-block; &:before {
width: 3px; background-color: $main-color;
height: 3px;
margin-right: 10px;
vertical-align: middle;
background-color: #333;
}
&.active {
color: $main-color;
&:before {
background-color: $main-color;
}
}
} }
}
} }
}
} }
$height: 90px; $height: 90px;
/deep/.menu.el-menu--horizontal { /deep/.menu.el-menu--horizontal {
display: flex;
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
border: 0;
outline: none;
.el-menu-item,
.el-submenu__title {
height: $height;
line-height: $height;
span {
font-size: 1rem;
font-weight: 600;
}
&:hover {
background-color: transparent !important;
span {
color: #1583ff;
}
}
}
.el-submenu__title {
display: inline-flex;
justify-content: center;
align-items: center;
}
.menu-child {
display: flex; display: flex;
position: absolute; }
top: 0;
left: 50%; .el-submenu__icon-arrow {
transform: translateX(-50%); position: static;
border: 0; margin: 0 0 0 5px;
outline: none; color: inherit;
}
.is-active {
color: #333 !important;
}
.active,
.active .el-submenu__title {
color: #1583ff !important;
}
&.home {
.el-menu-item, .el-menu-item,
.el-submenu__title { .el-submenu__title {
height: $height; &:hover {
line-height: $height; background-color: transparent !important;
span { span {
font-size: 1rem; color: #fff;
font-weight: 600;
}
&:hover {
background-color: transparent !important;
span {
color: #1583ff;
}
} }
}
} }
.el-submenu__title {
display: inline-flex;
justify-content: center;
align-items: center;
}
.menu-child {
display: flex;
}
.el-submenu__icon-arrow {
position: static;
margin: 0 0 0 5px;
color: inherit;
}
.is-active { .is-active {
color: #333 !important; color: #f9f9f9 !important;
} }
.active, .active,
.active .el-submenu__title { .active .el-submenu__title {
color: #1583ff !important; color: #fff !important;
}
&.home {
.el-menu-item,
.el-submenu__title {
&:hover {
background-color: transparent !important;
span {
color: #fff;
}
}
}
.is-active {
color: #f9f9f9 !important;
}
.active,
.active .el-submenu__title {
color: #fff !important;
}
} }
}
} }
@media (max-width: 1870px) { @media (max-width: 1870px) {
.nav { .nav {
left: 55%; left: 55%;
& > li {
margin: 0 10px; &>li {
} margin: 0 10px;
} }
}
} }
@media (max-width: 1440px) { @media (max-width: 1440px) {
.nav { .nav {
left: 53%; left: 53%;
& > li {
padding: 0 10px; &>li {
} padding: 0 10px;
} }
}
} }
@media (max-width: 1360px) { @media (max-width: 1360px) {
.nav { .nav {
& > li { &>li {
padding: 0 4px; padding: 0 4px;
}
} }
}
} }
</style> </style>

@ -261,9 +261,7 @@
<td> <td>
<div v-if="showButton" class="m-b-10 text-right"> <div v-if="showButton" class="m-b-10 text-right">
<el-button type="primary" :disabled="status > 3" @click="automaticAllocationMember">{{ <el-button type="primary" :disabled="status > 3" @click="automaticAllocationMember">{{
assignRecord.assignOrNot assignRecord.assignOrNot && status < 3 ? '取消' : '' }}自动分配阶段成员</el-button>
? '取消' : ''
}}自动分配阶段成员</el-button>
</div> </div>
<table class="table tc"> <table class="table tc">
<tr> <tr>
@ -1348,28 +1346,28 @@ export default {
}, },
// //
automaticAllocationMember () { automaticAllocationMember () {
const whether = this.assignRecord.assignOrNot const whether = this.assignRecord.assignOrNot && this.status < 3
this.$confirm(`确定${whether ? '取消' : '开启'}自动分配阶段成员`, '提示', { this.$confirm(`确定${whether ? '取消' : ''}自动分配阶段成员`, '提示', {
cancelButtonText: '否', cancelButtonText: '否',
confirmButtonText: '是', confirmButtonText: '是',
type: 'success', type: 'success',
closeOnClickModal: false, closeOnClickModal: false,
}).then(async () => { }).then(async () => {
// =true //
if (this.assignRecord.assignOrNot) { if (this.status < 3) {
await this.$post(this.api.competitionTeamAutomaticAllocationRecordSave, { await this.$post(this.api.competitionTeamAutomaticAllocationRecordSave, {
id: this.assignRecord.id, id: this.assignRecord.id,
assignOrNot: 0, assignOrNot: whether ? 0 : 1,
competitionId: this.id, competitionId: this.id,
teamId: this.info.teamId teamId: this.info.teamId
}) })
} else { } else {
await this.$post(`${this.api.assignedPlayer}?competitionId=${this.id}&teamId=${this.info.teamId}`) await this.$post(`${this.api.assignedPlayer}?competitionId=${this.id}&teamId=${this.info.teamId} `)
} }
this.getData() this.getData()
this.getInfo() this.getInfo()
Util.successMsg(`${whether ? '取消' : '开启'}自动分配成功!`) Util.successMsg(`${whether ? '取消' : ''} 自动分配成功!`)
}).catch(() => { }) }).catch(() => { })
}, },
// //
@ -1573,7 +1571,7 @@ export default {
type: 'success', type: 'success',
closeOnClickModal: false closeOnClickModal: false
}).then(() => { }).then(() => {
this.$post(`${this.api.cancelRegistration}?competitionId=${this.id}`).then(res => { this.$post(`${this.api.cancelRegistration}?competitionId = ${this.id} `).then(res => {
this.status = 2 this.status = 2
this.$message.success('取消报名成功') this.$message.success('取消报名成功')
this.getData() this.getData()

@ -5,69 +5,35 @@
<div class="page"> <div class="page">
<div class="flex-between m-b-20"> <div class="flex-between m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/record7.png" <img src="@/assets/img/record7.png" alt="">
alt="">
实验报告列表 实验报告列表
</h6> </h6>
<div> <div>
<el-button type="primary" <el-button type="primary" @click="exportData">导出数据</el-button>
@click="exportData">导出数据</el-button>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" class="table" stripe header-align="center" :data="listData"
class="table" @selection-change="handleSelectionChange" row-key="reportId">
stripe <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
header-align="center" <el-table-column prop="id" label="次序" width="80" align="center" type="index"></el-table-column>
:data="listData" <el-table-column prop="projectName" label="实验项目名称" align="center"></el-table-column>
@selection-change="handleSelectionChange" <el-table-column prop="score" width="100" label="得分" align="center"></el-table-column>
row-key="reportId"> <el-table-column prop="timeSum" width="100" label="耗时" align="center">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column prop="id"
label="次序"
width="80"
align="center"
type="index"></el-table-column>
<el-table-column prop="projectName"
label="实验项目名称"
align="center"></el-table-column>
<el-table-column prop="score"
width="100"
label="得分"
align="center"></el-table-column>
<el-table-column prop="timeSum"
width="100"
label="耗时"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.timeSum }}min {{ scope.row.timeSum }}min
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="startTime" <el-table-column prop="startTime" width="160" label="起始时间" align="center"></el-table-column>
width="160" <el-table-column prop="submitTime" width="160" label="结束时间" align="center"></el-table-column>
label="起始时间" <el-table-column width="100" label="操作" align="center">
align="center"></el-table-column>
<el-table-column prop="submitTime"
width="160"
label="结束时间"
align="center"></el-table-column>
<el-table-column width="100"
label="操作"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" <el-button type="text" @click="toReport(scope.row)">实验报告</el-button>
@click="toReport(scope.row)">实验报告</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination background <el-pagination background layout="total, prev, pager, next" :total="total" :current-page="page"
layout="total, prev, pager, next" @current-change="handleCurrentChange"></el-pagination>
:total="total"
:current-page="page"
@current-change="handleCurrentChange"></el-pagination>
</div> </div>
</div> </div>
</div> </div>
@ -165,6 +131,6 @@ export default {
<style scoped> <style scoped>
.wrap { .wrap {
padding: 12px 100px 20px; padding: 12px 100px 20px;
} }
</style> </style>

@ -3,222 +3,141 @@
<div class="wrap"> <div class="wrap">
<div class="top"> <div class="top">
<breadcrumb :routes.sync="routes" /> <breadcrumb :routes.sync="routes" />
<span v-if="fromPython" <span v-if="fromPython" class="back" @click="back">返回实验</span>
class="back"
@click="back">返回实验</span>
</div> </div>
<div class="content" <div class="content" v-loading="loading" id="pdfDom">
v-loading="loading"
id="pdfDom">
<div class="text-right"> <div class="text-right">
<el-button @click="editReport"> <el-button @click="editReport">
{{ editing ? "保存" : "编辑" }} {{ editing ? "保存" : "编辑" }}
</el-button> </el-button>
<el-button type="primary" <el-button type="primary" @click="exportPage">导出报告</el-button>
@click="exportPage">导出报告</el-button>
</div> </div>
<h6 class="r-title">标准实验报告</h6> <h6 class="r-title">标准实验报告</h6>
<div class="info"> <div class="info">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/report1.png" <img src="@/assets/img/report1.png" alt="">
alt="">
基本信息 基本信息
</h6> </h6>
<ul :class="['info-list', {edit: editing}]"> <ul :class="['info-list', { edit: editing }]">
<li> <li>
<label>学生姓名</label> <label>学生姓名</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.userName" disabled></el-input>
v-model="infoData.userName"
disabled></el-input>
<span v-else>{{ infoData.userName }}</span> <span v-else>{{ infoData.userName }}</span>
</li> </li>
<li> <li>
<label>学生学号</label> <label>学生学号</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.workNumber" disabled></el-input>
v-model="infoData.workNumber"
disabled></el-input>
<span v-else>{{ infoData.workNumber }}</span> <span v-else>{{ infoData.workNumber }}</span>
</li> </li>
<li> <li>
<label>实验时间</label> <label>实验时间</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.submitTime" disabled></el-input>
v-model="infoData.submitTime"
disabled></el-input>
<span v-else>{{ infoData.submitTime }}</span> <span v-else>{{ infoData.submitTime }}</span>
</li> </li>
<li> <li>
<label>实验成绩</label> <label>实验成绩</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.score" disabled></el-input>
v-model="infoData.score" <div v-else class="score-wrap">
disabled></el-input>
<div v-else
class="score-wrap">
<em>{{ infoData.score }}</em> <em>{{ infoData.score }}</em>
<img src="@/assets/img/point.png" <img src="@/assets/img/point.png" alt="">
alt="">
</div> </div>
</li> </li>
<li> <li>
<label>学生班级</label> <label>学生班级</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.className"></el-input>
v-model="infoData.className"></el-input>
<span v-else>{{ infoData.className }}</span> <span v-else>{{ infoData.className }}</span>
</li> </li>
<li> <li>
<label>指导老师</label> <label>指导老师</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.instructor"></el-input>
v-model="infoData.instructor"></el-input>
<span v-else>{{ infoData.instructor }}</span> <span v-else>{{ infoData.instructor }}</span>
</li> </li>
<li> <li>
<label>实验学时</label> <label>实验学时</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.period"></el-input>
v-model="infoData.period"></el-input>
<span v-else>{{ infoData.period }}</span> <span v-else>{{ infoData.period }}</span>
</li> </li>
</ul> </ul>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/report2.png" <img src="@/assets/img/report2.png" alt="">
alt="">
实验项目名称 实验项目名称
</h6> </h6>
<el-input v-if="editing" <el-input v-if="editing" v-model="infoData.projectName" type="textarea"></el-input>
v-model="infoData.projectName" <div v-else class="pre-wrap" v-html="infoData.projectName"></div>
type="textarea"></el-input>
<div v-else
class="pre-wrap"
v-html="infoData.projectName"></div>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/report3.png" <img src="@/assets/img/report3.png" alt="">
alt="">
实验目的 实验目的
</h6> </h6>
<quill v-if="editing" <quill v-if="editing" :border="true" v-model="infoData.purpose" :height="150" />
:border="true" <div v-else :class="['pre-wrap', { edit: editing }]" v-html="infoData.purpose"></div>
v-model="infoData.purpose"
:height="150" />
<div v-else
:class="['pre-wrap', {edit: editing}]"
v-html="infoData.purpose"></div>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/report4.png" <img src="@/assets/img/report4.png" alt="">
alt="">
实验数据 实验数据
</h6> </h6>
<el-table :data="expData" <el-table :data="expData" class="table" border stripe header-align="center">
class="table" <el-table-column type="index" label="序号" :key="1" align="center" width="60">
border
stripe
header-align="center">
<el-table-column type="index"
label="序号"
:key="1"
align="center"
width="60">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.$index + 1 }} {{ scope.$index + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="judgmentName" <el-table-column prop="judgmentName" label="判分点" width="200" align="center"></el-table-column>
label="判分点" <el-table-column v-if="IsLc" prop="judgmentName" label="考核点" align="center" :key="2" width="150">
width="200"
align="center"></el-table-column>
<el-table-column v-if="project"
prop="judgmentName"
label="考核点"
align="center"
:key="2"
width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-for="(item, index) in scope.row.lcRuleRecords" <div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
:key="index">
<span> <span>
<span>{{index+1}}. </span>{{item.name}} <span>{{ index + 1 }}. </span>{{ item.name }}
</span> </span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ruleAnswer" <el-table-column prop="ruleAnswer" label="参考答案" :key="3" style='word-wrap: break-word'>
label="参考答案"
:key="3"
style='word-wrap: break-word'>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if='scope.row.lcRuleRecords'> <div v-if="scope.row.lcRuleRecords">
<div v-for="(item, index) in scope.row.lcRuleRecords" <div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
:key="index">
<span> <span>
<span>{{index+1}}. </span>{{item.ruleAnswer}} <span>{{ index + 1 }}. </span>{{ item.ruleAnswer }}
</span> </span>
</div> </div>
</div> </div>
<div v-else <div v-else v-html="scope.row.referenceAnswer"></div>
v-html="scope.row.referenceAnswer"></div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userAnswer" <el-table-column prop="userAnswer" :key="4" label="学生答案">
:key="4"
label="学生答案">
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if='scope.row.lcRuleRecords'> <div v-if="scope.row.lcRuleRecords">
<div v-for="(item, index) in scope.row.lcRuleRecords" <div v-for="(item, index) in scope.row.lcRuleRecords" :key="index">
:key="index"> {{ index + 1 }}. {{ item.userAnswer || '未填写' }}
{{index+1}}. {{item.userAnswer || '未填写'}}
</div> </div>
</div> </div>
<div v-else <div v-else v-html="scope.row.answer" style="white-space: pre-wrap"></div>
v-html='scope.row.answer'
style='white-space: pre-wrap'></div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="!project" <el-table-column v-if="!IsLc" prop="runResult" label="学生运行结果" :key="5" align="center">
prop="runResult"
label="学生运行结果"
:key="5"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="m-b-20" <div class="m-b-20" v-html="scope.row.runResult" style="white-space: pre-wrap"></div>
v-html='scope.row.runResult'
style='white-space: pre-wrap'></div>
<template v-if="scope.row.runThePictureList"> <template v-if="scope.row.runThePictureList">
<img v-for="(img, i) in scope.row.runThePictureList" <img v-for="(img, i) in scope.row.runThePictureList" :key="i" width="200" class="result-pic"
:key="i" :src="img" alt="">
width="200"
class="result-pic"
:src="img"
alt="">
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="quesScore" <el-table-column prop="quesScore" :key="6" label="分值" width="80" align="center"></el-table-column>
:key="6" <el-table-column prop="score" label="得分" :key="7" width="80" align="center"></el-table-column>
label="分值"
width="80"
align="center"></el-table-column>
<el-table-column prop="score"
label="得分"
:key="7"
width="80"
align="center"></el-table-column>
</el-table> </el-table>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/img/report5.png" <img src="@/assets/img/report5.png" alt="">
alt="">
实验总结与体会 实验总结与体会
</h6> </h6>
<Editor v-if="editing" <Editor v-if="editing" api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' v-model="infoData.summarize"
api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' :init="editorConfig" />
v-model="infoData.summarize" <div v-else class="pre-wrap" v-html="infoData.summarize"></div>
:init="editorConfig" />
<div v-else
class="pre-wrap"
v-html="infoData.summarize"></div>
</div> </div>
</div> </div>
</div> </div>
@ -249,7 +168,7 @@ export default {
editing: false, editing: false,
loadIns: null, loadIns: null,
loading: false, loading: false,
project: false, IsLc: false,
userScores: [], userScores: [],
quills: [], quills: [],
quillIndex1: 0, quillIndex1: 0,
@ -335,8 +254,8 @@ export default {
}, },
// //
handleList (list) { handleList (list) {
this.project = list.find(e => e.lcRuleRecords) // lcRuleRecords this.IsLc = list.find(e => e.lcRuleRecords) // lcRuleRecords
if (this.project) { if (this.IsLc) {
list.map(e => { list.map(e => {
e.assessmentPoint = '' e.assessmentPoint = ''
e.referenceAnswer = '' e.referenceAnswer = ''
@ -379,7 +298,7 @@ export default {
// if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '') // if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '')
// } // }
form.purpose = form.purpose.replace(/<[^>]+>/g, '') form.purpose = form.purpose.replace(/<[^>]+>/g, '')
this.$post(this.project ? this.api.exportBankExperimentReport : this.api.exportLabReport, { this.$post(this.IsLc ? this.api.exportBankExperimentReport : this.api.exportLabReport, {
...form, ...form,
experimentalData: list experimentalData: list
}).then(res => { }).then(res => {
@ -446,150 +365,183 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
@import '/styles/css/editor.css'; @import '/styles/css/editor.css';
.top { .top {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 15px; margin-bottom: 15px;
.back {
font-size: 14px; .back {
color: #007eff; font-size: 14px;
cursor: pointer; color: #007eff;
} cursor: pointer;
}
} }
.breadcrumb { .breadcrumb {
/deep/.el-breadcrumb__item {
.is-link, /deep/.el-breadcrumb__item {
.el-breadcrumb__separator { .is-link,
font-weight: 400; .el-breadcrumb__separator {
color: $main-color; font-weight: 400;
} color: $main-color;
&:last-child { }
.is-link {
color: #0b1d30; &:last-child {
} .is-link {
} color: #0b1d30;
}
} }
}
} }
.wrap { .wrap {
padding: 12px 300px 20px; padding: 12px 300px 20px;
} }
code, code,
kbd, kbd,
samp { samp {
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif; font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif;
word-wrap: break-word; word-wrap: break-word;
white-space: pre-wrap; white-space: pre-wrap;
} }
/deep/ pre { /deep/ pre {
white-space: pre-wrap; /* css-3 */ white-space: pre-wrap;
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ /* css-3 */
white-space: pre-wrap; /* Opera 4-6 */ white-space: -moz-pre-wrap;
white-space: -o-pre-wrap; /* Opera 7 */ /* Mozilla, since 1999 */
word-wrap: break-word; /* Internet Explorer 5.5+ */ white-space: pre-wrap;
word-break: break-all; /* Opera 4-6 */
overflow: hidden; white-space: -o-pre-wrap;
font-size: 12px; /* Opera 7 */
font-weight: 400; word-wrap: break-word;
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif; /* Internet Explorer 5.5+ */
word-break: break-all;
overflow: hidden;
font-size: 12px;
font-weight: 400;
font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, 'microsoft yahei', arial, STHeiTi, sans-serif;
} }
.content { .content {
padding: 16px 40px; padding: 16px 40px;
background: #fff; background: #fff;
.r-title {
margin-bottom: 40px; .r-title {
font-size: 24px; margin-bottom: 40px;
text-align: center; font-size: 24px;
color: #333; text-align: center;
color: #333;
}
.info {
padding: 20px 16px;
border: 1px solid #e1e6f2;
}
.l-title {
padding: 5px 8px;
background-color: #f7f9fc;
}
.info-list {
display: flex;
flex-wrap: wrap;
padding: 10px 0 0 20px;
li {
display: inline-flex;
width: 25%;
padding: 0 10px;
margin-bottom: 34px;
} }
.info {
padding: 20px 16px; &.edit {
border: 1px solid #e1e6f2; li {
align-items: center;
}
} }
.l-title {
padding: 5px 8px; label {
background-color: #f7f9fc; font-size: 14px;
color: #333;
white-space: nowrap;
} }
.info-list {
display: flex; span {
flex-wrap: wrap; min-width: 150px;
padding: 10px 0 0 20px; padding: 0 10px 3px;
li { border-bottom: 1px solid #e1e6f2;
display: inline-flex;
width: 25%;
padding: 0 10px;
margin-bottom: 34px;
}
&.edit {
li {
align-items: center;
}
}
label {
font-size: 14px;
color: #333;
white-space: nowrap;
}
span {
min-width: 150px;
padding: 0 10px 3px;
border-bottom: 1px solid #e1e6f2;
}
/deep/.el-input {
width: 174px;
}
} }
.score-wrap {
position: relative; /deep/.el-input {
min-width: 150px; width: 174px;
border-bottom: 1px solid #e1e6f2;
em {
position: absolute;
top: -12px;
left: 30px;
font-family: din;
font-size: 30px;
font-weight: 600;
color: #0b1d30;
}
img {
position: absolute;
bottom: -15px;
left: 0;
}
} }
/deep/.el-textarea .el-textarea__inner, }
.pre-wrap {
min-height: 72px; .score-wrap {
padding: 10px 16px; position: relative;
font-size: 14px; min-width: 150px;
color: #333; border-bottom: 1px solid #e1e6f2;
&.edit {
color: #abb3c6; em {
border: 1px solid #cacfdb; position: absolute;
border-radius: 4px; top: -12px;
background-color: #f6f7f9; left: 30px;
} font-family: din;
font-size: 30px;
font-weight: 600;
color: #0b1d30;
} }
/deep/ .table th {
background-color: #e1eaff !important; img {
.cell { position: absolute;
line-height: 35px; bottom: -15px;
color: #555555; left: 0;
}
} }
}
/deep/.el-textarea .el-textarea__inner,
.pre-wrap {
min-height: 72px;
padding: 10px 16px;
font-size: 14px;
color: #333;
&.edit {
color: #abb3c6;
border: 1px solid #cacfdb;
border-radius: 4px;
background-color: #f6f7f9;
}
}
/deep/ .table th {
background-color: #e1eaff !important;
.cell {
line-height: 35px;
color: #555555;
}
}
} }
.result-pic { .result-pic {
margin: 10px 0; margin: 10px 0;
} }
@media (max-width: 1650px) { @media (max-width: 1650px) {
.wrap { .wrap {
padding: 12px 200px 20px; padding: 12px 200px 20px;
} }
} }
@media (max-width: 1430px) { @media (max-width: 1430px) {
.wrap { .wrap {
padding: 12px 100px 20px; padding: 12px 100px 20px;
} }
} }
</style> </style>

@ -1,13 +1,13 @@
import BasicLayout from '@/layouts/home'; import BasicLayout from '@/layouts/home';
export default { export default {
path: '/product', path: '/product/list',
component: BasicLayout, component: BasicLayout,
children: [ children: [
{ {
path: `/product`, path: `/product/list`,
component: () => import('@/pages/product/list'), component: () => import('@/pages/product/list'),
meta: { title: '产品服务' } meta: { title: '产品服务' }
}, },
] ]
}; };

@ -68,7 +68,7 @@ const Setting = {
/** /**
* 路由白名单 * 路由白名单
* */ * */
whiteList: ['/login', '/index/list', '/index/zxy', '/product', '/cityPartner/list', '/devPlatform/list', '/log/list', '/touristMatch/list', '/touristMatch/details', '/touristMatch/noticeDetail', '/preCourse/list', '/preCourse/details', '/preInfo/list', '/preInfo/details', '/screen', '/screenShow', '/screenShowPro', '/join', '/join/success'], whiteList: ['/login', '/index/list', '/index/zxy', '/product/list', '/cityPartner/list', '/devPlatform/list', '/log/list', '/touristMatch/list', '/touristMatch/details', '/touristMatch/noticeDetail', '/preCourse/list', '/preCourse/details', '/preInfo/list', '/preInfo/details', '/screen', '/screenShow', '/screenShowPro', '/join', '/join/success'],
/** /**
* 平台列表 * 平台列表
* */ * */

Loading…
Cancel
Save