yujialong 1 year ago
parent 4544cb7d95
commit ce8cd2d0a7
  1. 211
      src/pages/match/manage/matchInfo.vue
  2. 21
      src/pages/product/list/index.vue
  3. 24
      src/pages/product/show/index.vue

@ -1,27 +1,35 @@
<template> <template>
<div style="padding: 0 100px;"> <div style="padding: 0 100px;">
<el-card shadow="hover" class="m-b-20 head-card"> <el-card shadow="hover"
class="m-b-20 head-card">
<div class="flex-between"> <div class="flex-between">
<el-page-header @back="$router.back()" content="参赛信息与成绩"></el-page-header> <el-page-header @back="$router.back()"
content="参赛信息与成绩"></el-page-header>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover"
class="m-b-20">
<div style="display: flex;align-items: center"> <div style="display: flex;align-items: center">
<table v-if="form.completeCompetitionSetup.competitionType" class="table m-b-20 m-r-10"> <table v-if="form.completeCompetitionSetup.competitionType"
class="table m-b-20 m-r-10">
<tr> <tr>
<th width="150">团队名称</th> <th width="150">团队名称</th>
<td> <td>
<el-input :disabled="!editing" v-model="info.team.teamName"></el-input> <el-input :disabled="!editing"
v-model="info.team.teamName"></el-input>
</td> </td>
<th width="150">团队邀请码</th> <th width="150">团队邀请码</th>
<td> <td>
<el-input :disabled="!editing" v-model="info.team.invitationCode"></el-input> <el-input :disabled="!editing"
v-model="info.team.invitationCode"></el-input>
</td> </td>
</tr> </tr>
</table> </table>
<div v-if="form.completeCompetitionSetup.competitionType && status < 4" class="m-b-20 text-center"> <div v-if="form.completeCompetitionSetup.competitionType && status < 4"
<el-button type="primary" @click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button> class="m-b-20 text-center">
<el-button type="primary"
@click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button>
</div> </div>
</div> </div>
<table class="table"> <table class="table">
@ -48,7 +56,9 @@
<tr> <tr>
<th>团队成员</th> <th>团队成员</th>
<td> <td>
<el-tag v-for="(item, i) in info.teamDetail" :key="i" style="margin-right: 5px">{{ item.userName }}</el-tag> <el-tag v-for="(item, i) in info.teamDetail"
:key="i"
style="margin-right: 5px">{{ item.userName }}</el-tag>
</td> </td>
</tr> </tr>
</template> </template>
@ -56,17 +66,40 @@
<tr> <tr>
<th width="130">指导老师</th> <th width="130">指导老师</th>
<td> <td>
<div v-if="status < 5" class="plus"> <div v-if="status < 5"
<i class="el-icon-circle-plus-outline icon" @click="addAdvisor"></i> class="plus">
<i class="el-icon-circle-plus-outline icon"
@click="addAdvisor"></i>
</div> </div>
<div v-for="(item, i) in info.teamInstructors" :key="i" class="line"> <div v-for="(item, i) in info.teamInstructors"
<el-input placeholder="请输入姓名" v-model="item.name" clearable size="mini" :disabled="!item.edit"></el-input> :key="i"
<el-input placeholder="请输入职务" maxlength="10" v-model="item.position" clearable size="mini" :disabled="!item.edit"></el-input> class="line">
<el-input placeholder="请输入手机号" maxlength="11" v-model="item.phone" clearable size="mini" :disabled="!item.edit"></el-input> <el-input placeholder="请输入姓名"
v-model="item.name"
clearable
size="mini"
:disabled="!item.edit"></el-input>
<el-input placeholder="请输入职务"
maxlength="10"
v-model="item.position"
clearable
size="mini"
:disabled="!item.edit"></el-input>
<el-input placeholder="请输入手机号"
maxlength="11"
v-model="item.phone"
clearable
size="mini"
:disabled="!item.edit"></el-input>
<template v-if="status < 5"> <template v-if="status < 5">
<i v-if="item.edit" class="el-icon-check icon" @click="submitAdvisor(item)"></i> <i v-if="item.edit"
<i v-else class="el-icon-edit icon" @click="editAdvisor(item)"></i> class="el-icon-check icon"
<i class="el-icon-delete icon" @click="delAdvisor(item, i)"></i> @click="submitAdvisor(item)"></i>
<i v-else
class="el-icon-edit icon"
@click="editAdvisor(item)"></i>
<i class="el-icon-delete icon"
@click="delAdvisor(item, i)"></i>
</template> </template>
</div> </div>
</td> </td>
@ -86,15 +119,15 @@
<th>竞赛成绩</th> <th>竞赛成绩</th>
</tr> </tr>
<template v-if="info.stages.length"> <template v-if="info.stages.length">
<tr v-for="(item, i) in info.stages" :key="i"> <tr v-for="(item, i) in info.stages"
:key="i">
<td>{{ i + 1 }}</td> <td>{{ i + 1 }}</td>
<td>{{ item.stageName }}</td> <td>{{ item.stageName }}</td>
<template v-if="form.completeCompetitionSetup.competitionType"> <template v-if="form.completeCompetitionSetup.competitionType">
<td>{{ item.teamNumLimit || '不限制' }}</td> <td>{{ item.teamNumLimit || '不限制' }}</td>
<td> <td>
<template v-if="item.participants"> <template v-if="item.participants">
<el-tag <el-tag v-for="tag in item.participants"
v-for="tag in item.participants"
:key="tag.name" :key="tag.name"
class="m-r-5" class="m-r-5"
closable closable
@ -102,14 +135,20 @@
{{tag.name}} {{tag.name}}
</el-tag> </el-tag>
</template> </template>
<span v-else class="m-r-5"></span> <span v-else
<i class="el-icon-edit icon" @click="selectPar(item)"></i> class="m-r-5"></span>
<i class="el-icon-edit icon"
@click="selectPar(item)"></i>
</td> </td>
</template> </template>
<td v-if="form.rule === 0 && !i" :rowspan="info.stages.length">{{ info.totalScore }}</td> <td v-if="form.rule === 0 && !i"
:rowspan="info.stages.length">{{ info.totalScore }}</td>
<td> <td>
<span v-if="item.score >= 0" class="m-r-10">分数{{item.score}}</span> <span v-if="item.score >= 0"
<el-button type="text" :disabled="item.resultsDetails === 1 || (form.completeCompetitionSetup.competitionType && !item.reportId) || (form.completeCompetitionSetup.competitionType === 0 && !item.reportId)" @click="show(item)">查看成绩详情</el-button> class="m-r-10">分数{{item.score}}</span>
<el-button type="text"
:disabled="item.resultsDetails === 1 || (form.completeCompetitionSetup.competitionType && !item.reportId) || (form.completeCompetitionSetup.competitionType === 0 && !item.reportId)"
@click="show(item)">查看成绩详情</el-button>
</td> </td>
</tr> </tr>
</template> </template>
@ -117,8 +156,7 @@
<td colspan="6">暂无数据</td> <td colspan="6">暂无数据</td>
</tr> </tr>
</table> </table>
<el-alert <el-alert v-if="form.completeCompetitionSetup.competitionType"
v-if="form.completeCompetitionSetup.competitionType"
style="margin-top: 10px;" style="margin-top: 10px;"
:title="'注:请团长(团队创建人)设置各阶段参赛成员,只有被选择的允许参赛成员可进入对应阶段比赛' + (info.teamLimit ? ',每个团队成员只能参加一个赛项阶段' : '') + '!'" :title="'注:请团长(团队创建人)设置各阶段参赛成员,只有被选择的允许参赛成员可进入对应阶段比赛' + (info.teamLimit ? ',每个团队成员只能参加一个赛项阶段' : '') + '!'"
type="warning" type="warning"
@ -132,43 +170,86 @@
<div class="l-title m-t-20">团队成员</div> <div class="l-title m-t-20">团队成员</div>
<div class="flex-center"> <div class="flex-center">
<p>队长{{ info.caption.userName }}</p> <p>队长{{ info.caption.userName }}</p>
<el-button type="primary" @click="transfer">转让队长</el-button> <el-button type="primary"
@click="transfer">转让队长</el-button>
</div> </div>
<el-table :data="info.teamDetail" stripe header-align="center"> <el-table :data="info.teamDetail"
<el-table-column prop="userName" label="成员姓名" min-width="100" align="center"></el-table-column> stripe
<el-table-column prop="schoolName" label="学校" min-width="100" align="center"></el-table-column> header-align="center">
<el-table-column prop="workNumber" label="学号" min-width="100" align="center"></el-table-column> <el-table-column prop="userName"
<el-table-column prop="createTime" label="加入时间" width="180" align="center"></el-table-column> label="成员姓名"
<el-table-column label="操作" align="center" width="160"> min-width="100"
align="center"></el-table-column>
<el-table-column prop="schoolName"
label="学校"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="workNumber"
label="学号"
min-width="100"
align="center"></el-table-column>
<el-table-column prop="createTime"
label="加入时间"
width="180"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="160">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.captain" type="text" @click="removeLine(scope.row)">踢出团队</el-button> <el-button v-if="scope.row.captain"
type="text"
@click="removeLine(scope.row)">踢出团队</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</template> </template>
</el-card> </el-card>
<el-dialog title="选择参赛成员" :visible.sync="transferVisible" :close-on-click-modal="false" width="400px"> <el-dialog title="选择参赛成员"
:visible.sync="transferVisible"
:close-on-click-modal="false"
width="400px">
<template v-for="(item, i) in info.teamDetail"> <template v-for="(item, i) in info.teamDetail">
<el-radio v-if="item.captain" :key="i" v-model="checkedPlayer" :label="item.teamId">{{ item.userName }}</el-radio> <el-radio v-if="item.captain"
:key="i"
v-model="checkedPlayer"
:label="item.teamId">{{ item.userName }}</el-radio>
</template> </template>
<span slot="footer" class="dialog-footer"> <span slot="footer"
<el-button size="small" type="primary" @click="transferSubmit">确定</el-button> class="dialog-footer">
<el-button size="small" @click="transferVisible = false">取消</el-button> <el-button size="small"
type="primary"
@click="transferSubmit">确定</el-button>
<el-button size="small"
@click="transferVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="选择参赛成员" :visible.sync="chooseVisible" :close-on-click-modal="false" width="400px"> <el-dialog title="选择参赛成员"
:visible.sync="chooseVisible"
:close-on-click-modal="false"
width="400px">
<el-checkbox-group v-model="checkedMembers"> <el-checkbox-group v-model="checkedMembers">
<el-checkbox v-for="(item, i) in chooses" :key="i" :label="item.accountId">{{ item.userName }}</el-checkbox> <el-checkbox v-for="(item, i) in chooses"
:key="i"
:label="item.accountId">{{ item.userName }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<p v-if="info.teamLimit && curRow.teamNumLimit" style="margin-top: 15px;font-size: 12px;">当前阶段限制{{ curRow.teamNumLimit }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p> <p v-if="info.teamLimit && curRow.teamNumLimit"
<span slot="footer" class="dialog-footer"> style="margin-top: 15px;font-size: 12px;">当前阶段限制{{ curRow.teamNumLimit }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p>
<el-button size="small" type="primary" @click="chooseSubmit">确定</el-button> <span slot="footer"
<el-button size="small" @click="chooseVisible = false">取消</el-button> class="dialog-footer">
<el-button size="small"
type="primary"
@click="chooseSubmit">确定</el-button>
<el-button size="small"
@click="chooseVisible = false">取消</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog title="团队得分详情" :visible.sync="memberVisible" width="900px" :close-on-click-modal="false"> <el-dialog title="团队得分详情"
<h6 v-if="members.length" style="margin-bottom: 10px;font-size: 16px;">团队名称{{ members[0].teamName }} 阶段名称{{ curRow.stageName }}</h6> :visible.sync="memberVisible"
width="900px"
:close-on-click-modal="false">
<h6 v-if="members.length"
style="margin-bottom: 10px;font-size: 16px;">团队名称{{ members[0].teamName }} 阶段名称{{ curRow.stageName }}</h6>
<table class="table tc"> <table class="table tc">
<tr> <tr>
<th width="60">序号</th> <th width="60">序号</th>
@ -179,14 +260,16 @@
<th width="100">得分详情</th> <th width="100">得分详情</th>
</tr> </tr>
<template v-if="members.length"> <template v-if="members.length">
<tr v-for="(item, i) in members" :key="i"> <tr v-for="(item, i) in members"
:key="i">
<td>{{ i + 1 }}</td> <td>{{ i + 1 }}</td>
<td>{{ item.userName }}</td> <td>{{ item.userName }}</td>
<td>{{ item.schoolName }}</td> <td>{{ item.schoolName }}</td>
<td>{{ item.timeSum }}min</td> <td>{{ item.timeSum }}min</td>
<td>{{ item.score }}</td> <td>{{ item.score }}</td>
<td> <td>
<el-button type="text" @click="toReport(item)">查看</el-button> <el-button type="text"
@click="toReport(item)">查看</el-button>
</td> </td>
</tr> </tr>
</template> </template>
@ -194,8 +277,11 @@
<td colspan="6">暂无数据</td> <td colspan="6">暂无数据</td>
</tr> </tr>
</table> </table>
<span slot="footer" class="dialog-footer"> <span slot="footer"
<el-button size="small" type="primary" @click="memberVisible = false">确定</el-button> class="dialog-footer">
<el-button size="small"
type="primary"
@click="memberVisible = false">确定</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@ -445,13 +531,13 @@ export default {
// //
const now = new Date() const now = new Date()
let start = 0 let start = 0
for (const e of this.form.competitionStage) { // for (const e of this.form.competitionStage) {
if (now >= new Date(e.startTime) && now <= new Date(e.endTime)) { // if (now >= new Date(e.startTime) && now <= new Date(e.endTime)) {
util.errorMsg('比赛已经开始,无法踢出成员!') // util.errorMsg('')
start = 1 // start = 1
break // break
} // }
} // }
if (!start) { if (!start) {
let include let include
for (const e of this.info.stages) { for (const e of this.info.stages) {
@ -583,7 +669,8 @@ export default {
.table { .table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
th, td { th,
td {
padding: 12px; padding: 12px;
border: 1px solid #ebeef5; border: 1px solid #ebeef5;
} }
@ -600,7 +687,7 @@ export default {
color: #7a7a7a; color: #7a7a7a;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
color: #007EFF; color: #007eff;
} }
} }
.plus { .plus {

@ -47,14 +47,19 @@
</div> </div>
<div class="filter"> <div class="filter">
<dl v-if="curTab == 1"> <dl v-if="curTab == 1">
<dt>学科专业</dt> <dt>学科类别</dt>
<div class="vals"> <div class="vals">
<dd :class="{active: categoryId === ''}" <dd :class="{active: categoryId === ''}"
@click="catetoryClick('')">全部</dd> @click="catetoryClick('')">全部</dd>
<dd :class="{active: categoryId === 1}" <dd :class="{active: categoryId === 1}"
style="margin-right: 20px" style="margin-right: 20px"
@click="catetoryClick(1)">不限</dd> @click="catetoryClick(1)">不限</dd>
<div v-for="(item, i) in category" <dd v-for="(item, i) in category"
:key="i"
:class="{active: categoryId === item.value}"
@click="categoryClick(item, 1)">{{ item.label }}</dd>
<!-- <div v-for="(item, i) in category"
:key="i" :key="i"
:class="['category-item', {active: item.disciplineId == categoryId}]"> :class="['category-item', {active: item.disciplineId == categoryId}]">
<span class="name" <span class="name"
@ -65,8 +70,8 @@
:options="item.list" :options="item.list"
:props="{ checkStrictly: true }" :props="{ checkStrictly: true }"
placeholder="" placeholder=""
@change="id => categoryChange(id, item, i)"></el-cascader> @change="id => categoryChange(id, item, i)"></el-cascader> -->
</div> <!-- </div> -->
</div> </div>
</dl> </dl>
<dl v-if="curTab == 3"> <dl v-if="curTab == 3">
@ -425,6 +430,14 @@ export default {
e.val = [] e.val = []
}) })
}, },
categoryClick (item, i) {
this.clearCategory()
item.val = val
this[i === 1 ? 'categoryId' : i === 2 ? 'professionalCategoryId' : 'professionalId'] = item.disciplineId
this.professionalCategoryId = val[0] || ''
this.professionalId = val[1] || ''
this.initData()
},
categoryChange (val, item, i) { categoryChange (val, item, i) {
const name = this.$refs['category' + i][0].getCheckedNodes()[0].pathLabels const name = this.$refs['category' + i][0].getCheckedNodes()[0].pathLabels
console.log("🚀 ~ file: index.vue:431 ~ categoryChange ~ val, item:", val, item, name) console.log("🚀 ~ file: index.vue:431 ~ categoryChange ~ val, item:", val, item, name)

@ -90,7 +90,8 @@
@click="toSystem">进入系统</button> @click="toSystem">进入系统</button>
</div> </div>
</div> </div>
<div class="course"> <div class="course"
id="part0">
<div class="detail"> <div class="detail">
<ul class="tab"> <ul class="tab">
<li v-for="(tab, i) in tabs" <li v-for="(tab, i) in tabs"
@ -99,12 +100,10 @@
@click="tabChange(tab)">{{ tab.name }}</li> @click="tabChange(tab)">{{ tab.name }}</li>
</ul> </ul>
<div class="courses"> <div class="courses">
<template v-if="!curTab">
<div class="des" <div class="des"
v-html="form.mall.detailedIntroduction"></div> v-html="form.mall.detailedIntroduction"></div>
</template>
<template v-else>
<div class="chapter" <div class="chapter"
id="part1"
v-for="(item, i) in chapterList" v-for="(item, i) in chapterList"
:key="i"> :key="i">
<div class="chapterName">{{ item.name }}</div> <div class="chapterName">{{ item.name }}</div>
@ -143,7 +142,6 @@
</div> </div>
</div> </div>
</div> </div>
</template>
</div> </div>
</div> </div>
<div class="products"> <div class="products">
@ -304,6 +302,9 @@ export default {
// tab // tab
tabChange ({ id }) { tabChange ({ id }) {
this.curTab = id this.curTab = id
document.querySelector(`#part${id}`).scrollIntoView({
behavior: 'smooth'
})
}, },
// //
toPreview (i, j) { toPreview (i, j) {
@ -470,10 +471,12 @@ export default {
} }
} }
.tab { .tab {
z-index: 100;
position: sticky; position: sticky;
// top: 120px; top: 0;
display: inline-flex; display: flex;
margin-left: 10px; padding: 10px 10px 20px;
background-color: #fff;
li { li {
position: relative; position: relative;
margin-right: 20px; margin-right: 20px;
@ -503,11 +506,11 @@ export default {
padding: 20px 24px; padding: 20px 24px;
background-color: #fff; background-color: #fff;
border-radius: 10px; border-radius: 10px;
overflow: hidden;
} }
} }
.courses { .courses {
margin-top: 40px; padding-top: 10px;
overflow: hidden;
/deep/.des { /deep/.des {
div, div,
p, p,
@ -521,6 +524,7 @@ export default {
overflow: auto; overflow: auto;
} }
.chapter { .chapter {
padding-top: 60px;
margin-bottom: 20px; margin-bottom: 20px;
} }
.chapterName { .chapterName {

Loading…
Cancel
Save