markdown修复

dev_review
yujialong 1 year ago
parent 8082bc6975
commit 354171d454
  1. 30
      src/components/quill/index.vue
  2. 2
      src/setting.js
  3. 19
      src/views/customer/AddCustomer.vue
  4. 275
      src/views/match/manage/matchInfo.vue
  5. 12
      src/views/serve/projectAdd.vue

@ -2,13 +2,13 @@
<div>
<el-radio-group v-if="!readonly"
class="type-radio"
v-model="type"
v-model="editorType"
@change="typeChange">
<el-radio :label="0">富文本</el-radio>
<el-radio :label="1">markdown</el-radio>
<el-radio label="0">富文本</el-radio>
<el-radio label="1">markdown</el-radio>
</el-radio-group>
<div v-show="!type"
<div v-show="editorType == 0"
class="quill"
ref="quill"
:class="classes">
@ -26,7 +26,7 @@
</div>
<mavon-editor class="md"
v-model="mdVal"
v-show="type"
v-show="editorType == 1"
ref="md"
:ishljs="true"
:subfield="false"
@ -79,14 +79,19 @@ export default {
*/
elseRead: {
type: String, default: 'false'
}
},
//
type: {
type: String,
default: '0'
},
},
data () {
return {
headers: {
token: sessionStorage.getItem('token')
},
type: 0,
editorType: '0',
mdVal: '',
Quill: null,
currentValue: '',
@ -136,17 +141,23 @@ export default {
},
watch: {
type: {
handler (val) {
this.editorType = val
},
immediate: true
},
value: {
handler (val) {
if (!this.type) {
if (this.type == 0) {
if (val !== this.currentValue) {
this.currentValue = val;
if (this.Quill) {
this.Quill.pasteHTML(this.value);
}
}
if (!this.mdVal) this.mdVal = val
}
if (!this.mdVal) this.mdVal = val
},
immediate: true
}
@ -169,6 +180,7 @@ export default {
methods: {
//
typeChange (val) {
this.$emit('update:type', val)
if (!this.mdVal) this.mdVal = this.value
},

@ -12,7 +12,7 @@ if (isDev) {
host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/'
// host = 'http://192.168.31.217:9000/'// 榕
// host = 'http://192.168.31.51:9000/'// 赓
host = 'http://192.168.31.51:9000/'// 赓
} else if (isPro) {
jumpPath = 'https://www.huorantech.cn/judgmentPoint/'
}

@ -992,8 +992,7 @@ export default {
this.customerVisible = false
this.submiting = false
this.$message.success('添加成功')
this.form.schoolId = res.schoolId
this.getSchoolData()
this.getSchoolData(res.schoolId)
}).catch((res) => {
this.submiting = false
})
@ -1136,14 +1135,24 @@ export default {
this.form.customerName = ''
},
// /
getSchoolData () {
getSchoolData (schoolId) {
let data = {
schoolName: '',
provinceId: '',
cityId: ''
}
this.$get(this.api.querySchoolData).then(res => {
this.schoolList = res.list
this.$get(this.api.querySchoolData).then(({ list }) => {
this.schoolList = list
// schoolId
if (schoolId) {
const item = list.find(e => e.schoolId == schoolId)
if (item) {
this.form.schoolId = schoolId
this.form.provinceId = item.provinceId
this.getCityData()
this.form.cityId = item.cityId
}
}
}).catch(res => { });
},
//

@ -1,27 +1,35 @@
<template>
<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">
<el-page-header @back="$router.back()" content="参赛信息与成绩"></el-page-header>
<el-page-header @back="$router.back()"
content="参赛信息与成绩"></el-page-header>
</div>
</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">
<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>
<th width="150">团队名称</th>
<td>
<el-input :disabled="!editing" v-model="info.team.teamName"></el-input>
<el-input :disabled="!editing"
v-model="info.team.teamName"></el-input>
</td>
<th width="150">团队邀请码</th>
<td>
<el-input :disabled="!editing" v-model="info.team.invitationCode"></el-input>
<el-input :disabled="!editing"
v-model="info.team.invitationCode"></el-input>
</td>
</tr>
</table>
<div v-if="form.completeCompetitionSetup.competitionType && status < 4" class="m-b-20 text-center">
<el-button type="primary" @click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button>
<div v-if="form.completeCompetitionSetup.competitionType && status < 4"
class="m-b-20 text-center">
<el-button type="primary"
@click="edit(1)">{{ editing ? '保存' : '编辑' }}</el-button>
</div>
</div>
<table class="table">
@ -48,7 +56,9 @@
<tr>
<th>团队成员</th>
<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>
</tr>
</template>
@ -56,17 +66,40 @@
<tr>
<th width="130">指导老师</th>
<td>
<div v-if="status < 5" class="plus">
<i class="el-icon-circle-plus-outline icon" @click="addAdvisor"></i>
<div v-if="status < 5"
class="plus">
<i class="el-icon-circle-plus-outline icon"
@click="addAdvisor"></i>
</div>
<div v-for="(item, i) in info.teamInstructors" :key="i" class="line">
<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>
<div v-for="(item, i) in info.teamInstructors"
:key="i"
class="line">
<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">
<i v-if="item.edit" class="el-icon-check icon" @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>
<i v-if="item.edit"
class="el-icon-check icon"
@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>
</div>
</td>
@ -86,15 +119,15 @@
<th>竞赛成绩</th>
</tr>
<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>{{ item.stageName }}</td>
<template v-if="form.completeCompetitionSetup.competitionType">
<td>{{ item.teamNumLimit || '不限制' }}</td>
<td>
<template v-if="item.participants">
<el-tag
v-for="tag in item.participants"
<el-tag v-for="tag in item.participants"
:key="tag.name"
class="m-r-5"
closable
@ -102,14 +135,20 @@
{{tag.name}}
</el-tag>
</template>
<span v-else class="m-r-5"></span>
<i class="el-icon-edit icon" @click="selectPar(item)"></i>
<span v-else
class="m-r-5"></span>
<i class="el-icon-edit icon"
@click="selectPar(item)"></i>
</td>
</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>
<span v-if="item.score >= 0" 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>
<span v-if="item.score >= 0"
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>
</tr>
</template>
@ -117,8 +156,7 @@
<td colspan="6">暂无数据</td>
</tr>
</table>
<el-alert
v-if="form.completeCompetitionSetup.competitionType"
<el-alert v-if="form.completeCompetitionSetup.competitionType"
style="margin-top: 10px;"
:title="'注:请团长(团队创建人)设置各阶段参赛成员,只有被选择的允许参赛成员可进入对应阶段比赛' + (info.teamLimit ? ',每个团队成员只能参加一个赛项阶段' : '') + '!'"
type="warning"
@ -132,43 +170,86 @@
<div class="l-title m-t-20">团队成员</div>
<div class="flex-center">
<p>队长{{ info.caption.userName }}</p>
<el-button type="primary" @click="transfer">转让队长</el-button>
<el-button type="primary"
@click="transfer">转让队长</el-button>
</div>
<el-table :data="info.teamDetail" stripe header-align="center">
<el-table-column prop="userName" label="成员姓名" 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">
<el-table :data="info.teamDetail"
stripe
header-align="center">
<el-table-column prop="userName"
label="成员姓名"
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">
<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>
</el-table-column>
</el-table>
</template>
</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">
<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>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="transferSubmit">确定</el-button>
<el-button size="small" @click="transferVisible = false">取消</el-button>
<span slot="footer"
class="dialog-footer">
<el-button size="small"
type="primary"
@click="transferSubmit">确定</el-button>
<el-button size="small"
@click="transferVisible = false">取消</el-button>
</span>
</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 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>
<p v-if="info.teamLimit && curRow.teamNumLimit" style="margin-top: 15px;font-size: 12px;">当前阶段限制{{ curRow.teamNumLimit }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="chooseSubmit">确定</el-button>
<el-button size="small" @click="chooseVisible = false">取消</el-button>
<p v-if="info.teamLimit && curRow.teamNumLimit"
style="margin-top: 15px;font-size: 12px;">当前阶段限制{{ curRow.teamNumLimit }}人参赛且此竞赛每个成员只能参加一个阶段赛项</p>
<span slot="footer"
class="dialog-footer">
<el-button size="small"
type="primary"
@click="chooseSubmit">确定</el-button>
<el-button size="small"
@click="chooseVisible = false">取消</el-button>
</span>
</el-dialog>
<el-dialog title="团队得分详情" :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>
<el-dialog title="团队得分详情"
: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">
<tr>
<th width="60">序号</th>
@ -179,14 +260,16 @@
<th width="100">得分详情</th>
</tr>
<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>{{ item.userName }}</td>
<td>{{ item.schoolName }}</td>
<td>{{ item.timeSum }}min</td>
<td>{{ item.score }}</td>
<td>
<el-button type="text" @click="toReport(item)">查看</el-button>
<el-button type="text"
@click="toReport(item)">查看</el-button>
</td>
</tr>
</template>
@ -194,8 +277,11 @@
<td colspan="6">暂无数据</td>
</tr>
</table>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="memberVisible = false">确定</el-button>
<span slot="footer"
class="dialog-footer">
<el-button size="small"
type="primary"
@click="memberVisible = false">确定</el-button>
</span>
</el-dialog>
</div>
@ -205,7 +291,7 @@
import Setting from "@/setting";
import util from "@/libs/util";
export default {
data() {
data () {
return {
id: +this.$route.query.id,
accountId: +this.$route.query.accountId,
@ -263,8 +349,8 @@ export default {
timer: null
};
},
mounted() {
this.$once('hook:beforeDestroy', function() {
mounted () {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
this.timerList.forEach(n => {
clearTimeout(n)
@ -274,15 +360,15 @@ export default {
this.getData()
},
methods: {
getData() {
getData () {
this.$post(`${this.api.getCompetition}?competitionId=${this.id}`).then(({ competition }) => {
this.form = competition
this.timer = setInterval(this.handleStatus, 1000)
this.getInfo()
}).catch(err => {})
}).catch(err => { })
},
//
getInfo() {
getInfo () {
this.$post(`${this.api.entryInformation}?competitionId=${this.id}&accountId=${this.accountId}`).then(res => {
const info = res.entryInformation
//
@ -326,10 +412,10 @@ export default {
}
})
this.info = info
}).catch(err => {});
}).catch(err => { });
},
//
handleStatus() {
handleStatus () {
let status
const n = this.form
let now = new Date().getTime();
@ -351,7 +437,7 @@ export default {
this.status = status
},
//
edit(showMsg) {
edit (showMsg) {
if (this.editing || !showMsg) {
const { teamId, teamName, invitationCode } = this.info.team
this.$post(this.api.editCompetitionTeam, {
@ -366,13 +452,13 @@ export default {
this.editing = false
this.getInfo()
showMsg && util.successMsg('保存成功')
}).catch(res => {})
}).catch(res => { })
} else {
this.editing = !this.editing
}
},
//
delAdvisor(row, i) {
delAdvisor (row, i) {
if (row.id) {
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
@ -380,23 +466,23 @@ export default {
this.$post(`${this.api.deleteAnAdvisor}?id=${row.id}`).then(res => {
util.successMsg('删除成功')
this.getInfo()
}).catch(res => {})
}).catch(() => {})
}).catch(res => { })
}).catch(() => { })
} else {
this.info.teamInstructors.splice(i, 1)
}
},
//
addAdvisor() {
addAdvisor () {
if (this.info.teamInstructors.length > 4) return util.errorMsg('指导老师仅限添加5个!')
this.info.teamInstructors.push(JSON.parse(JSON.stringify(this.originIns)))
},
//
editAdvisor(row) {
editAdvisor (row) {
this.$set(row, 'edit', 1)
},
//
submitAdvisor(row) {
submitAdvisor (row) {
if (!row.name) return util.errorMsg('请输入姓名')
const { phone } = row
if (phone && !/^1[3456789]\d{9}$/.test(phone)) return util.errorMsg('请输入正确手机号格式')
@ -410,10 +496,10 @@ export default {
}).then(res => {
util.successMsg((row.id ? '修改' : '新增') + '成功')
this.getInfo()
}).catch(res => {})
}).catch(res => { })
},
//
transfer() {
transfer () {
//
const now = new Date()
let start = 0
@ -427,7 +513,7 @@ export default {
if (!start) this.transferVisible = true
},
//
transferSubmit() {
transferSubmit () {
if (!this.checkedPlayer) return util.errorMsg('请选择成员')
this.$post(this.api.captainOfTransfer, {
captainId: this.info.caption.teamId,
@ -437,20 +523,20 @@ export default {
util.successMsg('转让成功')
this.transferVisible = false
this.getInfo()
}).catch(res => {})
}).catch(res => { })
},
//
removeLine(row) {
removeLine (row) {
//
const now = new Date()
let start = 0
for (const e of this.form.competitionStage) {
if (now >= new Date(e.startTime) && now <= new Date(e.endTime)) {
util.errorMsg('比赛已经开始,无法踢出成员!')
start = 1
break
}
}
// for (const e of this.form.competitionStage) {
// if (now >= new Date(e.startTime) && now <= new Date(e.endTime)) {
// util.errorMsg('')
// start = 1
// break
// }
// }
if (!start) {
let include
for (const e of this.info.stages) {
@ -468,12 +554,12 @@ export default {
this.$post(`${this.api.removeTheLine}?teamId=${this.info.teamId}&competitionId=${this.id}&accountId=${row.accountId}`).then(res => {
util.successMsg('移除成功')
this.getInfo()
}).catch(res => {})
}).catch(() => {})
}).catch(res => { })
}).catch(() => { })
}
},
//
removePar(e, stage) {
removePar (e, stage) {
this.$confirm('确定要移除该成员吗?', '提示', {
type: 'warning'
}).then(() => {
@ -485,11 +571,11 @@ export default {
}).then(res => {
util.successMsg('移除成功')
this.getInfo()
}).catch(res => {})
}).catch(() => {})
}).catch(res => { })
}).catch(() => { })
},
//
selectPar(row) {
selectPar (row) {
const item = this.form.competitionStage.find(e => e.stageId == row.stageId)
if (item) {
//
@ -522,7 +608,7 @@ export default {
}
},
//
chooseSubmit() {
chooseSubmit () {
const accountIds = this.checkedMembers
if (!accountIds.length) return util.errorMsg('请选择参赛成员!')
const limit = this.curRow.teamNumLimit //
@ -537,10 +623,10 @@ export default {
util.successMsg('修改成功')
this.getInfo()
this.chooseVisible = false
}).catch(res => {})
}).catch(res => { })
},
//
show(row) {
show (row) {
//
if (this.form.completeCompetitionSetup.competitionType) { //
this.curRow = row
@ -555,7 +641,7 @@ export default {
teamId
}).then(({ list }) => {
this.members = list
}).catch(res => {})
}).catch(res => { })
} else {
this.members = []
}
@ -564,7 +650,7 @@ export default {
}
},
//
toReport(row) {
toReport (row) {
this.$router.push(`/matchReport?reportId=${row.reportId}`)
},
}
@ -582,7 +668,8 @@ export default {
.table {
width: 100%;
border-collapse: collapse;
th, td {
th,
td {
padding: 12px;
border: 1px solid #ebeef5;
}
@ -599,7 +686,7 @@ export default {
color: #7a7a7a;
cursor: pointer;
&:hover {
color: #007EFF;
color: #007eff;
}
}
.plus {

@ -70,6 +70,7 @@
<quill :border="true"
:readonly="isDetail"
v-model="projectManage.experimentTarget"
:type.sync="projectManage.experimentTargetType"
:minHeight="150"
:height="150" />
</el-form-item>
@ -90,6 +91,7 @@
<quill :border="true"
:readonly="isDetail"
v-model="projectManage.experimentDescription"
:type.sync="projectManage.experimentDescriptionType"
:minHeight="150"
:height="150" />
</el-form-item>
@ -241,6 +243,7 @@
<quill :border="true"
:readonly="isDetail"
v-model="projectManage.experimentHint"
:type.sync="projectManage.experimentHintType"
:minHeight="150"
:height="150" />
</el-form-item>
@ -337,7 +340,10 @@ export default {
state: 0, // (0稿 1)
isOpen: 0, // (0 1 0)
ztOpen: 0, // (0 1 0)
isDel: 0 // (0 1 0)
isDel: 0, // (0 1 0)
experimentTargetType: '0',
experimentDescriptionType: '0',
experimentHintType: '0',
},
projectJudgmentData: [], //()
oriPer: '', //
@ -431,6 +437,9 @@ export default {
this.$get(`${this.api.getProjectDetail}?projectId=${this.projectId}`).then(res => {
let { projectManage, projectJudgmentVos } = res;
if (!projectManage.remark) projectManage.remark = projectManage.projectName //
if (!projectManage.experimentDescriptionType) projectManage.experimentDescriptionType = '0'
if (!projectManage.experimentHintType) projectManage.experimentHintType = '0'
if (!projectManage.experimentTargetType) projectManage.experimentTargetType = '0'
this.projectManage = projectManage;
this.projectJudgmentData = projectJudgmentVos;
this.oriPer = projectManage.permissions
@ -529,6 +538,7 @@ export default {
this.submiting = true
this.$store.dispatch("setSystemId", this.projectManage.systemId);
this.projectManage.state = state;
console.log("🚀 ~ file: projectAdd.vue:537 ~ handleSubmit ~ this.projectManage:", this.projectManage)
this.projectManage.ztOpen = state ? 0 : 1
let { systemId } = this.projectManage;
if (this.projectId) {

Loading…
Cancel
Save