赛事修改

fixLog
yujialong 1 year ago
parent 0c93095d1e
commit 90ed1f142d
  1. 2
      src/setting.js
  2. 38
      src/utils/editor.js
  3. 120
      src/views/match/add/set.vue
  4. 106
      src/views/match/add/step3.vue
  5. 4
      src/views/shop/addProduct/index.vue
  6. 336
      src/views/system/manageLog - 副本.vue

@ -10,7 +10,7 @@ let host = `${location.origin}/`
if (isDev) { if (isDev) {
jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统 jumpPath = 'http://192.168.31.125:8087/' // 本地调试-需要启动本地判分点系统
host = 'http://121.37.12.51/' host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/' host = 'https://huorantech.cn/'
// host = 'http://192.168.31.152:9000/'// 榕 // host = 'http://192.168.31.152:9000/'// 榕
// host = 'http://192.168.31.51:9000/'// 赓 // host = 'http://192.168.31.51:9000/'// 赓
} else if (isPro) { } else if (isPro) {

@ -315,10 +315,46 @@ export default {
powerpaste_allow_local_images: true, powerpaste_allow_local_images: true,
powerpaste_word_import: 'clean', powerpaste_word_import: 'clean',
powerpaste_html_import: 'clean', powerpaste_html_import: 'clean',
extraPlugins: 'uploadimage',
imageUploadUrl: Api.fileUploadNakadai,
init_instance_callback: function (editor) {
editor.on('paste', (evt) => {
// 监听粘贴事件
// 实现图片粘贴上传
const items = (evt.clipboardData || window.clipboardData).items
if (items[0].type.indexOf('image') !== -1) {
const file = items[0].getAsFile()
const form = new FormData()
form.append('file', file)
// 自定义上传图片的方法
Axios({
method: 'post',
url: Api.fileUploadNakadai,
data: form,
headers: {
'Content-Type': 'multipart/form-data',
token: Util.local.get(Setting.tokenKey)
},
}).then(({ data }) => {
// 使用指令,在当前鼠标标光的位置插入元素
// img元素的src就是远程图片的链接地址
editor.execCommand(
"mceReplaceContent",
true,
`<img style="max-width:500px;" src="${data.filesResult.fileUrl}" >`
);
}).catch(res => {})
// 阻止默认事件,防止粘贴的图片进入富文本编辑器中
evt.preventDefault();
} else {
console.log('粘贴的不是图片,不能上传')
}
})
},
// 自定义上传 // 自定义上传
images_upload_handler: function (blobInfo, succFun, failFun) { images_upload_handler: function (blobInfo, succFun, failFun) {
const form = new FormData() const form = new FormData()
form.append('file', blobInfo.blob()), form.append('file', blobInfo.blob())
Axios({ Axios({
method: 'post', method: 'post',
url: Api.fileUploadNakadai, url: Api.fileUploadNakadai,

@ -1,19 +1,20 @@
<template> <template>
<div> <div>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover"
class="m-b-20">
<div> <div>
<p class="m-b-20">比赛名称</p> <p class="m-b-20">比赛名称</p>
{{ form.stageName }} {{ form.stageName }}
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover"
class="m-b-20">
<div> <div>
<p class="m-b-20">比赛时间</p> <p class="m-b-20">比赛时间</p>
<div class="date-inputs"> <div class="date-inputs">
起止时间 起止时间
<div style="display: inline-flex;align-items: center;"> <div style="display: inline-flex;align-items: center;">
<el-date-picker <el-date-picker v-model="form.time"
v-model="form.time"
type="datetimerange" type="datetimerange"
range-separator="~" range-separator="~"
start-placeholder="开始日期" start-placeholder="开始日期"
@ -22,8 +23,7 @@
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
@change="timeChange"> @change="timeChange">
</el-date-picker> </el-date-picker>
<el-alert <el-alert style="width: auto;padding: 4px 16px;margin-left: 10px;"
style="width: auto;padding: 4px 16px;margin-left: 10px;"
:title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" :title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'"
type="error" type="error"
:closable="false" :closable="false"
@ -33,50 +33,72 @@
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" class="mgr20 m-b-20"> <el-card shadow="hover"
class="mgr20 m-b-20">
<div> <div>
<p class="m-b-20">课程</p> <p class="m-b-20">课程</p>
<div class="inline-input"> <div class="inline-input">
<el-select v-model="form.cid" @change="courseChange"> <el-select v-model="form.mallId"
<el-option @change="courseChange">
v-for="item in curriculumList" <el-option v-for="(item, i) in curriculumList"
:key="item.cid" :key="i"
:label="item.curriculumName" :label="item.productName"
:value="item.cid"> :value="item.mallId">
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" class="m-b-20"> <el-card shadow="hover"
class="m-b-20">
<div class="flex-between m-b-20"> <div class="flex-between m-b-20">
<span>实训项目</span> <span>实训项目</span>
<div style="display: inline-flex;"> <div style="display: inline-flex;">
<div> <div>
<el-input placeholder="请输入项目名称" prefix-icon="el-icon-search" v-model.trim="keyword" clearable></el-input> <el-input placeholder="请输入项目名称"
prefix-icon="el-icon-search"
v-model.trim="keyword"
clearable></el-input>
</div> </div>
<el-button style="margin-left: 5px" type="primary" round @click="toProject">自定义实验项目</el-button> <el-button style="margin-left: 5px"
type="primary"
round
@click="toProject">自定义实验项目</el-button>
</div> </div>
</div> </div>
<!-- 实训项目表格 --> <!-- 实训项目表格 -->
<el-table :data="projects" class="table" stripe header-align="center"> <el-table :data="projects"
<el-table-column width="60" label="选择" align="center"> class="table"
stripe
header-align="center">
<el-table-column width="60"
label="选择"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-radio v-model="form.projectId" :label="scope.row.projectId">&nbsp;</el-radio> <el-radio v-model="form.projectId"
:label="scope.row.projectId">&nbsp;</el-radio>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="projectName" label="项目名称" align="center"></el-table-column> <el-table-column prop="projectName"
<el-table-column prop="auth" label="项目权限" align="center"> label="项目名称"
align="center"></el-table-column>
<el-table-column prop="auth"
label="项目权限"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ permissionsKeys[scope.row.permissions] }} {{ permissionsKeys[scope.row.permissions] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="founder" label="创建人" align="center"> <el-table-column prop="founder"
label="创建人"
align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.founder ? '老师创建' : '系统内置' }} {{ scope.row.founder ? '老师创建' : '系统内置' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间" align="center"></el-table-column> <el-table-column prop="createTime"
label="创建时间"
align="center"></el-table-column>
<!-- <el-table-column label="操作" align="center"> <!-- <el-table-column label="操作" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="showProject(scope.row)">查看</el-button> <el-button type="text" @click="showProject(scope.row)">查看</el-button>
@ -84,19 +106,18 @@
</el-table-column> --> </el-table-column> -->
</el-table> </el-table>
<div class="pagination"> <div class="pagination">
<el-pagination <el-pagination background
background
:page-size="pageSize" :page-size="pageSize"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
layout="total,prev, pager, next" layout="total,prev, pager, next"
:total="total" :total="total"></el-pagination>
></el-pagination>
</div> </div>
</el-card> </el-card>
<div style="text-align: center"> <div style="text-align: center">
<el-button @click="back">返回</el-button> <el-button @click="back">返回</el-button>
<el-button type="primary" @click="save">保存</el-button> <el-button type="primary"
@click="save">保存</el-button>
</div> </div>
</div> </div>
</template> </template>
@ -106,7 +127,7 @@ import util from "@/libs/util";
import { Loading } from 'element-ui' import { Loading } from 'element-ui'
export default { export default {
props: ['form', 'step1'], props: ['form', 'step1'],
data() { data () {
return { return {
loadIns: null, loadIns: null,
curriculumList: [], curriculumList: [],
@ -123,49 +144,51 @@ export default {
watch: { watch: {
// , // ,
form: { form: {
handler(){ handler () {
this.updateTime++ this.updateTime++
}, },
deep:true deep: true
}, },
keyword: function(val) { keyword: function (val) {
clearTimeout(this.searchTimer); clearTimeout(this.searchTimer);
this.searchTimer = setTimeout(() => { this.searchTimer = setTimeout(() => {
this.initData(); this.initData();
}, 500); }, 500);
} }
}, },
mounted() { mounted () {
this.getCourse() this.getCourse()
}, },
methods: { methods: {
// //
getCourse() { getCourse () {
this.loadIns = Loading.service() this.loadIns = Loading.service()
const sid = this.$store.state.dataPer.find(e => e.permissionName === '课程管理') this.$post(this.api.listOfGoods, {
this.$post(this.api.curriculumList, {
isShelves: 1,
pageNum: 1, pageNum: 1,
pageSize: 10000, pageSize: 10000,
supplierId: sid ? sid.supplierId : '' hotTag: 1,
sort: 0,
isAssociatedProduct: 1,
}).then(({ page }) => { }).then(({ page }) => {
const list = page.records const list = page.records
this.curriculumList = page.records this.curriculumList = page.records
if (!this.form.cid && list.length) this.form.cid = list[0].cid if (!this.form.mallId && list.length) this.form.mallId = list[0].mallId
this.courseChange() this.courseChange()
}).catch(err => { }).catch(err => {
this.loadIns.close() this.loadIns.close()
}); });
}, },
// //
courseChange(val) { courseChange (val) {
const { systemId } = this.curriculumList.find(e => e.cid == this.form.cid) const { systemId, associatedProduct } = this.curriculumList.find(e => e.mallId == this.form.mallId)
this.sysId = systemId this.sysId = systemId
this.form.cid = associatedProduct
if (val) this.loadIns = Loading.service() if (val) this.loadIns = Loading.service()
this.getProject() this.getProject()
}, },
// //
getProject() { getProject () {
this.$post(this.api.getProjectAssessmentByCompetition, { this.$post(this.api.getProjectAssessmentByCompetition, {
pageNum: this.page, pageNum: this.page,
pageSize: this.pageSize, pageSize: this.pageSize,
@ -181,16 +204,16 @@ export default {
this.loadIns.close() this.loadIns.close()
}); });
}, },
initData() { initData () {
this.page = 1; this.page = 1;
this.getProject(); this.getProject();
}, },
handleCurrentChange(val) { handleCurrentChange (val) {
this.page = val; this.page = val;
this.getProject(); this.getProject();
}, },
// //
toProject() { toProject () {
const { form, curStep } = this.$parent const { form, curStep } = this.$parent
form[curStep] = this.form form[curStep] = this.form
this.$store.commit('setCompetitionCache', { this.$store.commit('setCompetitionCache', {
@ -203,7 +226,7 @@ export default {
this.$router.push(`/projectList?systemId=${systemId}&show=1&name=${item.sysName.split(',')[0]}`) this.$router.push(`/projectList?systemId=${systemId}&show=1&name=${item.sysName.split(',')[0]}`)
}, },
// //
timeChange(val) { timeChange (val) {
if (val.length) { if (val.length) {
const startTime = new Date(val[0]) const startTime = new Date(val[0])
const endTime = new Date(val[1]) const endTime = new Date(val[1])
@ -228,7 +251,7 @@ export default {
} }
}, },
// //
save() { save () {
const { form } = this const { form } = this
if (!form.time.length) return util.warningMsg('请选择比赛时间') if (!form.time.length) return util.warningMsg('请选择比赛时间')
const { playStartTime, playEndTime } = this.step1 const { playStartTime, playEndTime } = this.step1
@ -244,7 +267,7 @@ export default {
this.$emit('hideSet', this.form) this.$emit('hideSet', this.form)
}, },
// //
back() { back () {
this.$emit('hideSet') this.$emit('hideSet')
} }
} }
@ -252,5 +275,4 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
</style> </style>

@ -1,19 +1,29 @@
<template> <template>
<div> <div>
<div v-show="!setVisible" class="page"> <div v-show="!setVisible"
class="page">
<div class="page-content"> <div class="page-content">
<div class="p-title">比赛内容设置</div> <div class="p-title">比赛内容设置</div>
<el-form label-width="170px" label-suffix=":" size="small" :disabled="!editing && id"> <el-form label-width="170px"
<div v-for="(item, i) in form" :key="i" class="step"> label-suffix=":"
size="small"
:disabled="!editing && id">
<div v-for="(item, i) in form"
:key="i"
class="step">
<div class="title"> <div class="title">
<span>{{ item.stageName }}{{ nums[i] }}阶段 | {{ methods.find(e => e.id === item.method).name }} </span> <span>{{ item.stageName }}{{ nums[i] }}阶段 | {{ methods.find(e => e.id === item.method).name }} </span>
<el-button v-if="item.method !== 2" type="primary" @click="toSet(i)">设置</el-button> <el-button v-if="item.method !== 2"
type="primary"
@click="toSet(i)">设置</el-button>
</div> </div>
<el-form-item class="req" prop="time" label="比赛时间"> <el-form-item class="req"
prop="time"
label="比赛时间">
<span v-if="item.method !== 2 && item.startTime">{{ item.startTime + ' ' + item.endTime }}</span> <span v-if="item.method !== 2 && item.startTime">{{ item.startTime + ' ' + item.endTime }}</span>
<div style="display: flex;align-items: center;" v-if="item.method === 2"> <div style="display: flex;align-items: center;"
<el-date-picker v-if="item.method === 2">
v-model="item.time" <el-date-picker v-model="item.time"
type="datetimerange" type="datetimerange"
range-separator="~" range-separator="~"
start-placeholder="开始日期" start-placeholder="开始日期"
@ -22,8 +32,7 @@
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
@change="timeChange"> @change="timeChange">
</el-date-picker> </el-date-picker>
<el-alert <el-alert style="width: auto;padding: 0px 16px;margin-left: 10px;"
style="width: auto;padding: 0px 16px;margin-left: 10px;"
:title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" :title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'"
type="error" type="error"
:closable="false" :closable="false"
@ -32,31 +41,53 @@
</div> </div>
</el-form-item> </el-form-item>
<template v-if="item.method === 2"> <template v-if="item.method === 2">
<el-form-item class="req" label="比赛地点"> <el-form-item class="req"
<el-input v-model="item.offlineAddress" style="width: 80%"></el-input> label="比赛地点">
<el-input v-model="item.offlineAddress"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="req" label="比赛内容"> <el-form-item class="req"
<el-input v-model="item.contentDescription" type="textarea" style="width: 80%"></el-input> label="比赛内容">
<el-input v-model="item.contentDescription"
type="textarea"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="req" label="评分规则"> <el-form-item class="req"
<el-input v-model="item.scoreRule" type="textarea" style="width: 80%"></el-input> label="评分规则">
<el-input v-model="item.scoreRule"
type="textarea"
style="width: 80%"></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item class="req" prop="cid" label="课程系统"> <el-form-item class="req"
prop="cid"
label="课程系统">
{{ item.systemName }} {{ item.systemName }}
</el-form-item> </el-form-item>
<el-form-item class="req" prop="assessmentId" label="已选择考核"> <el-form-item class="req"
prop="assessmentId"
label="已选择考核">
{{ item.projectName }} {{ item.projectName }}
</el-form-item> </el-form-item>
<el-form-item class="req" prop="resultAnnouncementTime" label="比赛地点"> <el-form-item class="req"
prop="resultAnnouncementTime"
label="比赛地点">
<div class="line"> <div class="line">
<el-checkbox v-model="item.onlineButton">线上</el-checkbox> <el-checkbox v-model="item.onlineButton">线上</el-checkbox>
<el-input v-model="item.onlineAddress" clearable placeholder="请输入比赛网址" :disabled="!item.onlineButton" style="width: 400px;margin-left: 10px"></el-input> <el-input v-model="item.onlineAddress"
clearable
placeholder="请输入比赛网址"
:disabled="!item.onlineButton"
style="width: 400px;margin-left: 10px"></el-input>
</div> </div>
<div class="line"> <div class="line">
<el-checkbox v-model="item.offlineButton">线下</el-checkbox> <el-checkbox v-model="item.offlineButton">线下</el-checkbox>
<el-input v-model="item.offlineAddress" clearable placeholder="请输入地址" :disabled="!item.offlineButton" style="width: 400px;margin-left: 10px"></el-input> <el-input v-model="item.offlineAddress"
clearable
placeholder="请输入地址"
:disabled="!item.offlineButton"
style="width: 400px;margin-left: 10px"></el-input>
</div> </div>
</el-form-item> </el-form-item>
</template> </template>
@ -65,7 +96,10 @@
</div> </div>
</div> </div>
<set v-if="setVisible" :form.sync="form[curStep]" :step1.sync="step1" @hideSet="hideSet" /> <set v-if="setVisible"
:form.sync="form[curStep]"
:step1.sync="step1"
@hideSet="hideSet" />
</div> </div>
</template> </template>
@ -74,7 +108,7 @@ import util from "@/libs/util";
import set from './set' import set from './set'
export default { export default {
props: ['setupId', 'competitionId', 'editing'], props: ['setupId', 'competitionId', 'editing'],
data() { data () {
return { return {
id: this.$route.query.id, id: this.$route.query.id,
updateTime: 0, updateTime: 0,
@ -97,6 +131,7 @@ export default {
], ],
originForm: { originForm: {
cid: '', cid: '',
mallId: '',
contentDescription: '', contentDescription: '',
endTime: '', endTime: '',
scoreRule: '', scoreRule: '',
@ -120,18 +155,18 @@ export default {
watch: { watch: {
// , // ,
form: { form: {
handler(){ handler () {
this.updateTime++ this.updateTime++
}, },
deep:true deep: true
}, },
}, },
mounted() { mounted () {
this.handleForm() this.handleForm()
}, },
methods: { methods: {
// //
resumeData() { resumeData () {
if (this.cache) { if (this.cache) {
this.curStep = this.cache.curStep this.curStep = this.cache.curStep
if (this.cache.form) this.form = this.cache.form if (this.cache.form) this.form = this.cache.form
@ -140,7 +175,7 @@ export default {
} }
}, },
// form // form
handleForm() { handleForm () {
// id // id
this.$post(`${this.api.queryCompetitionStageBySetupId}?setupId=${this.setupId}`).then(res => { this.$post(`${this.api.queryCompetitionStageBySetupId}?setupId=${this.setupId}`).then(res => {
res.competitionStages.map(e => { res.competitionStages.map(e => {
@ -150,6 +185,7 @@ export default {
} else { } else {
form.time = [] form.time = []
} }
if (!form.mallId) form.mallId = ''
form.offlineButton = !!form.offlineButton form.offlineButton = !!form.offlineButton
form.onlineButton = !!form.onlineButton form.onlineButton = !!form.onlineButton
form.method = e.method form.method = e.method
@ -161,22 +197,22 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.updateTime = 0 this.updateTime = 0
}) })
}).catch(res => {}) }).catch(res => { })
}, },
// //
toSet(i) { toSet (i) {
this.curStep = i this.curStep = i
this.$parent.showBtns = false this.$parent.showBtns = false
this.setVisible = true this.setVisible = true
}, },
// //
hideSet(form) { hideSet (form) {
if (form) this.form[this.curStep] = form if (form) this.form[this.curStep] = form
this.setVisible = false this.setVisible = false
this.$parent.showBtns = true this.$parent.showBtns = true
}, },
// //
timeChange(val) { timeChange (val) {
if (val.length) { if (val.length) {
const startTime = new Date(val[0]) const startTime = new Date(val[0])
const endTime = new Date(val[1]) const endTime = new Date(val[1])
@ -197,11 +233,11 @@ export default {
} }
}, },
// //
publish() { publish () {
this.competitionId && this.$post(`${this.api.publishCompetition}?competitionId=${this.competitionId}&publishStatus=1`).then(res => {}).catch(err => {}) this.competitionId && this.$post(`${this.api.publishCompetition}?competitionId=${this.competitionId}&publishStatus=1`).then(res => { }).catch(err => { })
}, },
// //
save(status, next = 0) { save (status, next = 0) {
const { form } = this const { form } = this
if (!form.length) { if (!form.length) {
this.$parent.hideLoad() this.$parent.hideLoad()

@ -37,8 +37,8 @@
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 关联产品选择了否才显示产品链接 --> <!-- 关联产品选择了否或者产品分类是数据前瞻才显示产品链接 -->
<el-col v-if="form.mall.isAssociatedProduct" <el-col v-if="form.mall.isAssociatedProduct || form.classificationIds == 5"
:span="14" :span="14"
:offset="5"> :offset="5">
<el-form-item label="产品链接"> <el-form-item label="产品链接">

@ -0,0 +1,336 @@
<template>
<div>
<el-card shadow="hover"
class="mgb20">
<div class="flex-between">
<div class="per_title"
v-preventReClick
@click="$router.back()">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
<span class="per_school">{{ platformName }}日志管理</span>
</div>
</div>
</el-card>
<div class="page">
<div class="inner">
<div class="tool">
<div class="filters">
<h6>日志更新</h6>
<div class="filter">
<label>版本查询</label>
<el-select v-model="versionName"
size="small"
placeholder="请选择版本"
filterable
@change="verChange">
<el-option v-for="item in vers"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div>
<el-button type="primary"
@click="add"
v-auth="'/system:日志更新:管理:新增日志'">新增日志</el-button>
</div>
</div>
<el-timeline class="timeline">
<el-timeline-item placement="top"
v-for="(item, i) in listData"
:key="i"
:class="['item' + i, {draft: item.draft}]">
<p class="sign">{{ item.draft ? '未发布' : item.draftTime }}</p>
<div class="ver">
<div>
{{ item.versionName + (item.draft ? '(草稿)' : '') }}
<span class="action">
<i class="el-icon-edit-outline"
@click="edit(item)"
v-auth="'/system:日志更新:管理:编辑日志'"></i>
<i class="el-icon-delete"
@click="del(item)"
v-auth="'/system:日志更新:管理:删除日志'"></i>
</span>
</div>
<div>
<template v-if="!i && item.withdrawNum !== 1 && item.draft !== 1">
<span class="withdraw"
v-if="item.withdraw && item.open">已撤回</span>
<el-button v-else
style="margin-right: 10px"
type="primary"
size="small"
@click="revoke(item)">撤销</el-button>
</template>
<el-switch v-model="item.open"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, item)"
v-auth="'/system:日志更新:管理:开启日志'"></el-switch>
</div>
</div>
<ul class="detail">
<li v-for="(item, i) in item.logContents"
:key="i">
<p v-if="!isNaN(item.type)"
class="name"><img :src="require('@/assets/img/' + funcList.find(e => e.id === item.type).icon + '.png')"
alt=""> {{ funcList.find(e => e.id === item.type).name }}</p>
<div class="val">
<p class=""
v-for="(item, i) in item.content"
:key="i">{{ item }}</p>
</div>
</li>
</ul>
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
</template>
<script>
import Setting from '@/setting'
export default {
data () {
return {
platformId: this.$route.query.platformId,
platformName: '',
versionName: '',
vers: [],
listData: [],
funcList: [
{
id: 0,
name: '新功能',
icon: 'func'
},
{
id: 1,
name: '修复',
icon: 'bug'
},
{
id: 2,
name: '优化',
icon: 'optimize'
}
]
};
},
mounted () {
this.getData()
},
methods: {
//
getData () {
this.$get(`${this.api.platformLogList}?platformId=${this.platformId}&versionName=${this.versionName}`).then(res => {
const { logList } = res
this.listData = logList
if (logList.length) {
const vers = []
const platformName = Setting.platformList.find(e => e.id === logList[0].platformId).name
this.platformName = platformName
logList.map((e, i) => {
e.logContents.map(n => {
n.content = n.content.split('\n')
})
vers.push({
id: i,
name: e.versionName
})
})
this.vers = vers
}
}).catch(res => { })
},
//
add () {
if (this.listData.find(e => e.draft)) {
this.$confirm("当前有未发布的版本,是否要新增版本?", "提示", {
type: "warning"
}).then(() => {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}).catch(() => { })
} else {
this.$router.push(`/addLog?platformId=${this.platformId}`)
}
},
//
edit (item) {
this.$router.push(`/addLog?platformId=${this.platformId}&id=${item.logId}&draft=${item.draft}`)
},
//
del (item) {
this.$confirm("确定要删除吗?", "提示", {
type: "warning"
}).then(() => {
this.$post(`${this.api.logDel}?logId=${item.logId}`).then(res => {
this.$message.success("删除成功")
this.getData()
}).catch(res => { })
}).catch(() => { })
},
//
revoke (item) {
this.$confirm("确定要撤销吗?", "提示", {
type: "warning"
}).then(() => {
this.$get(`${this.api.logWithdrawal}?platformId=${this.platformId}&logId=${item.logId}`).then(res => {
this.$message.success('撤销成功')
this.getData()
}).catch(res => { })
}).catch(() => { })
},
changeStatus (logId, open, draft) {
this.$post(this.api.listUpdate, {
logId,
open,
draft
}).then(res => {
this.$message.success(open ? '禁用成功' : '启用成功')
this.getData()
}).catch(res => { })
},
//
switchOff (val, row) {
const logId = row.logId
if (row.draft && !val) {
this.$confirm('是否要发布该日志?', '提示', {
type: 'success'
}).then(() => {
this.changeStatus(logId, val, 0)
}).catch(() => {
this.changeStatus(logId, val, 1)
})
} else {
this.changeStatus(logId, val, row.draft)
}
},
//
verChange (i) {
window.scrollTo({
top: document.querySelector(`.item${i}`).offsetTop,
behavior: 'smooth'
})
}
}
};
</script>
<style lang="scss" scoped>
.page {
min-height: calc(100vh - 300px);
padding: 24px 0;
.inner {
width: 900px;
margin: 0 auto;
}
}
.tool {
padding-bottom: 20px;
margin-bottom: 0;
border-bottom: 1px solid #f0f0f0;
}
.filters {
display: inline-flex;
align-items: center;
h6 {
margin-right: 100px;
font-size: 18px;
}
}
/deep/.timeline {
padding-left: 20%;
overflow: hidden;
.el-timeline-item__node--normal {
top: 30px;
}
.el-timeline-item__wrapper {
top: 15px;
padding-left: 40px;
}
.el-timeline-item__tail {
height: 250%;
border-left-width: 1px;
}
.sign {
position: relative;
display: inline-block;
margin-left: -22%;
font-size: 14px;
color: #9076ff;
}
.draft {
.ver,
.sign {
color: #b1b1b1;
}
}
.ver {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 10px;
margin: -19px 0 20px;
font-size: 18px;
color: #9076ff;
border-bottom: 1px dashed #bfbfbf;
}
.withdraw {
margin-right: 10px;
font-size: 13px;
color: #979797;
}
.action {
margin-left: 15px;
i {
margin-left: 8px;
font-size: 14px;
color: #9076ff;
cursor: pointer;
&:hover {
opacity: 0.9;
}
}
}
.detail {
li {
margin-bottom: 20px;
}
.name {
display: flex;
align-items: center;
margin-bottom: 5px;
font-size: 15px;
font-weight: 600;
img {
width: 20px;
margin-right: 5px;
}
}
.val {
font-size: 14px;
line-height: 1.8;
white-space: pre-wrap;
p {
position: relative;
color: #6a6a6a;
&:before {
content: '';
display: inline-block;
width: 5px;
height: 5px;
margin: 0 10px 0 5px;
vertical-align: middle;
border-radius: 20px;
background-color: #c5b8ff;
}
}
}
}
}
</style>
Loading…
Cancel
Save