bug 修改

sale
tianea 3 years ago
parent 5299838758
commit ba444ed6c8

@ -1,6 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"baseUrl": "http://localhost:8899/", "baseUrl": "/",
"paths": { "paths": {
"@/*": ["src/*"] "@/*": ["src/*"]
} }

@ -14,6 +14,8 @@ export function getList(query) {
data: cat data: cat
}) })
} }
export function addSurvey(data){ export function addSurvey(data){
return request({ return request({
@ -44,4 +46,11 @@ export function getList(query) {
method: 'post', method: 'post',
data: cat data: cat
}) })
} }
export function send(data){
return request({
url: baseUrl+"send",
method: 'post',
data: data
})
}

@ -57,4 +57,24 @@ export function getList(query) {
url: baseUrl +"getCount", url: baseUrl +"getCount",
method: 'get' method: 'get'
}) })
}
export function importExcel(obj){
let fd = new FormData()
if(obj instanceof Object){
Object.keys(obj).forEach(key =>{
const o = obj[key]
console.log(o)
if(o instanceof Object){
fd.append(key,o)
}else{
fd.append(key,o)
}
})
}
return request({
url: "/api/question/importExcel",
method: 'post',
data: fd
})
} }

@ -0,0 +1,30 @@
import request from '@/utils/request'
let baseUrl = '/pc/competition/member/'
export function add(cat) {
return request({
url: baseUrl+"add",
method: 'post',
data: cat
})
}
export function uploadExcel(obj){
let fd = new FormData()
if(obj instanceof Object){
Object.keys(obj).forEach(key =>{
const o = obj[key]
console.log(o)
if(o instanceof Object){
fd.append(key,o)
}else{
fd.append(key,o)
}
})
}
return request({
url: "/api/competition/upload/importMember",
method: 'post',
data: fd
})
}

@ -4,7 +4,7 @@ export function login(data) {
return request({ return request({
url: '/api/user/login/password', url: '/api/user/login/password',
method: 'post', method: 'post',
data data: data
}) })
} }
@ -44,6 +44,14 @@ export function addUser(data){
data: data data: data
}) })
} }
export function addAdmin(data){
return request({
url: 'pc/user/addAdmin',
method: 'post',
data: data
})
}
export function deleteUser(data){ export function deleteUser(data){
return request({ return request({
url: 'pc/user/deleteUser', url: 'pc/user/deleteUser',
@ -51,6 +59,15 @@ export function deleteUser(data){
data: data data: data
}) })
} }
export function initPwd(data){
return request({
url: 'pc/user/initPwd',
method: 'post',
data: data
})
}
export function uploadExcel(obj){ export function uploadExcel(obj){
let fd = new FormData() let fd = new FormData()
if(obj instanceof Object){ if(obj instanceof Object){

@ -15,8 +15,8 @@
Drag或<em>点击上传</em> Drag或<em>点击上传</em>
</div> </div>
</el-upload> </el-upload>
<div v-show="url.length>0" class="image-preview"> <div v-show="url&&url.length>0" class="image-preview">
<div v-show="url.length>1" class="image-preview-wrapper"> <div v-show="url&&url.length>1" class="image-preview-wrapper">
<img :src="url"> <img :src="url">
<div class="image-preview-action"> <div class="image-preview-action">
<i class="el-icon-delete" @click="rmImage" /> <i class="el-icon-delete" @click="rmImage" />

@ -24,8 +24,8 @@ import '@/permission' // permission control
* please remove it before going online ! ! ! * please remove it before going online ! ! !
*/ */
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
const { mockXHR } = require('../mock') // const { mockXHR } = require('../mock')
mockXHR() // mockXHR()
} }
// set ElementUI lang to EN // set ElementUI lang to EN

@ -1,6 +1,6 @@
module.exports = { module.exports = {
title: '天金融竞赛平台', title: '天金融竞赛平台',
/** /**
* @type {boolean} true | false * @type {boolean} true | false

@ -33,6 +33,7 @@ const actions = {
const { username, password } = userInfo const { username, password } = userInfo
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login({ username: username.trim(), password: password }).then(response => { login({ username: username.trim(), password: password }).then(response => {
console.log("login5")
const { data } = response const { data } = response
commit('SET_TOKEN', data.token) commit('SET_TOKEN', data.token)
setToken(data.token) setToken(data.token)

@ -2,7 +2,6 @@ import axios from 'axios'
import { MessageBox, Message } from 'element-ui' import { MessageBox, Message } from 'element-ui'
import store from '@/store' import store from '@/store'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
// create an axios instance // create an axios instance
const service = axios.create({ const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
@ -14,7 +13,6 @@ const service = axios.create({
service.interceptors.request.use( service.interceptors.request.use(
config => { config => {
// do something before request is sent // do something before request is sent
if (store.getters.token) { if (store.getters.token) {
// let each request carry token // let each request carry token
// ['X-Token'] is a custom headers key // ['X-Token'] is a custom headers key
@ -43,8 +41,8 @@ service.interceptors.response.use(
* You can also judge the status by HTTP Status Code * You can also judge the status by HTTP Status Code
*/ */
response => { response => {
console.log(response)
const res = response.data const res = response.data
// if the custom code is not 200, it is judged as an error. // if the custom code is not 200, it is judged as an error.
if (res.code !== 200) { if (res.code !== 200) {
Message({ Message({
@ -81,5 +79,4 @@ service.interceptors.response.use(
return Promise.reject(error) return Promise.reject(error)
} }
) )
export default service export default service

@ -101,6 +101,11 @@ export default {
default: 0 default: 0
} }
}, },
watch:{
cmpId:function(v){
console.log(v)
}
},
data() { data() {
return { return {
myGroup: this.group, myGroup: this.group,

@ -21,8 +21,8 @@
</el-form-item> </el-form-item>
<el-form-item v-for="(item ,$index) in survey.stageList" :key="item.name" :label="item.name" class="form-item-line"> <el-form-item v-for="(item ,$index) in survey.stageList" :key="item.name" :label="item.name" class="form-item-line">
<div> <div>
<el-date-picker v-model="item.startTime" type="datetime" placeholder="请选择开始时间" /> <el-date-picker v-model="item.startTime" placeholder="请选择开始时间" />
<el-date-picker v-model="item.endTime" type="datetime" placeholder="请选择结束时间" /> <el-date-picker v-model="item.endTime" placeholder="请选择结束时间" />
<el-button type="danger" @click="deleteStage(item.id,$index)" >删除</el-button> <el-button type="danger" @click="deleteStage(item.id,$index)" >删除</el-button>
</div> </div>
<div> <div>
@ -35,7 +35,7 @@
</el-form-item> </el-form-item>
<el-form-item class="form-item-line"> <el-form-item class="form-item-line">
<el-input v-model="stageTemp.name" style="width: 20%; margin-right: 20px;" placeholder="赛段名称" /> <el-input v-model="stageTemp.name" style="width: 20%; margin-right: 20px;" placeholder="赛段名称" />
<el-date-picker v-model="stageTemp.startTime" type="datetime" placeholder="请选择开始时间" /><el-date-picker v-model="stageTemp.endTime" type="datetime" placeholder="请选择结束时间" /> <el-date-picker v-model="stageTemp.startTime" placeholder="请选择开始时间" /><el-date-picker v-model="stageTemp.endTime" placeholder="请选择结束时间" />
<el-button type="primary" @click="addStage"></el-button> <el-button type="primary" @click="addStage"></el-button>
</el-form-item> </el-form-item>
<el-form-item class="form-item-line" label="大赛缩略图"> <el-form-item class="form-item-line" label="大赛缩略图">

@ -51,6 +51,12 @@
<el-date-picker v-model="temp.examStartTime" placeholder="开始时间" type="datetime"></el-date-picker> <el-date-picker v-model="temp.examStartTime" placeholder="开始时间" type="datetime"></el-date-picker>
<el-date-picker v-model="temp.examEndTime" placeholder="结束时间" type="datetime"></el-date-picker> <el-date-picker v-model="temp.examEndTime" placeholder="结束时间" type="datetime"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="答题时长">
<el-input-number v-model="temp.examDuration" />小时
</el-form-item>
<el-form-item label="赛项logo" style="width:90%">
<upload-image :url.sync ="temp.examLogo" />
</el-form-item>
<el-form-item label="题目设置"> <el-form-item label="题目设置">
<el-table :data="singleTable"> <el-table :data="singleTable">
<el-table-column label="题型" align="center"> <el-table-column label="题型" align="center">
@ -275,16 +281,17 @@ export default {
this.courseOptions = res.data.page.content this.courseOptions = res.data.page.content
} }
}) })
if(this.task.length == 0){
for(var i=0;i<this.survey.stageList.length;i++){ // if(this.task.length == 0){
const stage = this.survey.stageList[i] // for(var i=0;i<this.survey.stageList.length;i++){
this.temp.competitionId = this.cmpId // const stage = this.survey.stageList[i]
this.temp.stageId = stage.id // this.temp.competitionId = this.cmpId
this.task.push(Object.assign({},this.temp)) // this.temp.stageId = stage.id
} // this.task.push(Object.assign({},this.temp))
}else{ // }
this.temp = this.task[0] // }else{
}
// }
this.getQuestion() this.getQuestion()
question.getCount().then(res=> { question.getCount().then(res=> {
if(res.code==200){ if(res.code==200){
@ -294,17 +301,9 @@ export default {
} }
}) })
}, },
watch: { mounted(){
task: { this.temp = this.task[0]
handler: function(nv,ov){ this.tabId = 0
}
},
group: {
handler: function(nv,ov){
}
}
}, },
data(){ data(){
return { return {
@ -355,10 +354,12 @@ export default {
operationStartTime: '', operationStartTime: '',
operationEndTime: '', operationEndTime: '',
tradeType: 1, tradeType: 1,
examDuration:1,
initCapital: 1000000, initCapital: 1000000,
financeBasePower: 40, financeBasePower: 40,
financeProfitPower: 60, financeProfitPower: 60,
operationLogo:'', operationLogo:'',
examLogo: '',
examStartTime: '', examStartTime: '',
examEndTime: '', examEndTime: '',
questionList:[] questionList:[]
@ -369,7 +370,7 @@ export default {
name: '股票基金', name: '股票基金',
}, },
{ {
id: 2, id: 4,
name: '期货' name: '期货'
} }
], ],
@ -505,7 +506,7 @@ export default {
this.stage = item this.stage = item
}, },
confirmEdit(){ confirmEdit(){
this.editStageId =0
}, },
multiScore(){ multiScore(){
let score = 0 let score = 0
@ -516,7 +517,8 @@ export default {
}, },
addQuestion(){ addQuestion(){
let ids = [] let ids = []
this.chooseList.forEach(item => ids.push(item.id)) this.chooseList.forEach(item => ids.push(item.id))
console.log(this.task,this.tabId)
let tmp = this.task[this.tabId].questionList.find(t=> t.groupId ==this.groupId) let tmp = this.task[this.tabId].questionList.find(t=> t.groupId ==this.groupId)
if(tmp){ if(tmp){
tmp.questionIds = ids tmp.questionIds = ids
@ -526,7 +528,6 @@ export default {
questionIds: ids questionIds: ids
}) })
} }
console.log(this.task[this.tabId].questionList)
this.confirmChoose() this.confirmChoose()
}, },
@ -542,7 +543,6 @@ export default {
questionIds: ids questionIds: ids
}) })
} }
console.log(this.task[this.tabId].questionList)
this.confirmChoose2() this.confirmChoose2()
}, },
levelToName(levelId){ levelToName(levelId){
@ -577,7 +577,6 @@ export default {
this.chooseList = [] this.chooseList = []
this.questionList = [] this.questionList = []
} }
}catch{ }catch{
this.chooseList = [] this.chooseList = []
this.questionList = [] this.questionList = []

@ -53,7 +53,13 @@
</div> </div>
<div v-if="teamTabId == 2"> <div v-if="teamTabId == 2">
<div class="filter-container"> <div class="filter-container">
<el-input placeholder="姓名/学号" /> <el-button>搜索</el-button> <el-button v-if="this.survey.type == 2" ></el-button><el-button v-if="this.survey.type == 2" ></el-button> <el-input v-model="memberQuery2.name" placeholder="姓名/学号" />
<el-button @click="listMember2"></el-button>
<el-button v-if="this.survey.type == 2" @click="addMemberVisable2 = true" >添加成员</el-button>
<el-button v-if="this.survey.type == 2" @click="importMember" >
批量导入
<input ref="member-upload-input" type="file" accept=".xlsx" style="display:none;" @change="handleClick2">
</el-button>
</div> </div>
<el-table :data="memberList2"> <el-table :data="memberList2">
<el-table-column label="姓名"> <el-table-column label="姓名">
@ -78,21 +84,23 @@
</el-table-column> </el-table-column>
<el-table-column label="指导教师"> <el-table-column label="指导教师">
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.name }} {{ scope.row.teacher }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<el-button type="danger">移除</el-button> <template slot-scope="scope">
<el-button type="danger" @click="deleteMember2(scope.row)"></el-button>
</template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination <el-pagination
:current-page.sync="teamQuery.pageNo" :current-page.sync="memberQuery2.pageNo"
:page-sizes="[10,15,20]" :page-sizes="[10,15,20]"
:page-size.sync="teamQuery.pageSize" :page-size.sync="memberQuery2.pageSize"
layout="total,prev,pager,next,jumper,sizes" layout="total,prev,pager,next,jumper,sizes"
:total="teamQuery.total" :total="memberQuery2.total"
@size-change="handleSizeChange" @size-change="listMember2"
@current-change="handleCurrentChange" @current-change="listMember2"
/> />
@ -120,9 +128,9 @@
<el-button class="small" @click="confirmEditTeam" >确定</el-button> <el-button class="small" @click="confirmEditTeam" >确定</el-button>
<el-button class="small">取消</el-button> <el-button class="small">取消</el-button>
</el-dialog> </el-dialog>
<el-dialog title="添加员" :visible.sync="addMemberVisable"> <el-dialog title="添加员" :visible.sync="addMemberVisable">
<div class="filter-container"> <div class="filter-container">
<el-input v-model="memberQuery.name" placeholder="输入学号或姓名"/> <el-input v-model="userQuery2.name" placeholder="输入学号或姓名"/>
<el-button @click="searchMember"></el-button> <el-button @click="searchMember"></el-button>
</div> </div>
<el-table :data="addMemberList" <el-table :data="addMemberList"
@ -148,12 +156,56 @@
<el-button @click="addTeamMember"></el-button> <el-button @click="addTeamMember"></el-button>
<el-button @click="addMemberVisable = false">取消</el-button> <el-button @click="addMemberVisable = false">取消</el-button>
</el-dialog> </el-dialog>
<el-dialog title="添加个人赛成员" :visible.sync="addMemberVisable2">
<div class="filter-container">
<el-input v-model="createMember.teacher" placeholder="请输入指导老师"/>
<el-input v-model="userQuery2.name" placeholder="输入学号或姓名"/>
<el-select v-model="userQuery2.levelId">
<el-option v-for="item in levelOptions" :key="item.id" :value="item.id" :label="item.name"></el-option>
</el-select>
<el-button @click="searchUser"></el-button>
</div>
<el-table :data="userList2"
@selection-change="onSelect"
>
<el-table-column type="selection" />
<el-table-column label="学号">
<template slot-scope="scope">
{{ scope.row.studentNo}}
</template>
</el-table-column>
<el-table-column label="姓名">
<template slot-scope="scope">
{{ scope.row.name}}
</template>
</el-table-column>
<el-table-column label="层次">
<template slot-scope="scope">
{{ scope.row.level}}
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page.sync="userQuery2.pageNo"
:page-sizes="[10,15,20]"
:page-size.sync="userQuery2.pageSize"
layout="total,prev,pager,next,jumper,sizes"
:total="userQuery2.total"
@size-change="searchUser"
@current-change="searchUser"
/>
<el-button @click="addTeamMember2"></el-button>
<el-button @click="addMemberVisable2 = false">取消</el-button>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import SelectPanel from './selectPanel.vue' import SelectPanel from './selectPanel.vue'
import * as userApi from '@/api/user' import * as userApi from '@/api/user'
import * as teamApi from '@/api/team' import * as teamApi from '@/api/team'
import * as levelApi from '@/api/level'
import * as teamMemberApi from '@/api/teammember'
export default { export default {
components: { components: {
'select-panel': SelectPanel 'select-panel': SelectPanel
@ -203,6 +255,7 @@ export default {
}, },
editTeamNameVisable: false, editTeamNameVisable: false,
addMemberVisable: false, addMemberVisable: false,
addMemberVisable2: false,
teamList: [], teamList: [],
tabId: 0, tabId: 0,
teamTabId: 0, teamTabId: 0,
@ -218,6 +271,12 @@ export default {
teacher: '', teacher: '',
ids:[] ids:[]
}, },
createMember: {
teacher:'',
ids: [],
competitionId: this.cmpId,
stageId: this.stageId
},
teamQuery: { teamQuery: {
competitionId: this.cmpId, competitionId: this.cmpId,
stageId: this.stageId, stageId: this.stageId,
@ -229,10 +288,28 @@ export default {
userList: [], userList: [],
userSelectList:[], userSelectList:[],
addMemberList:[], addMemberList:[],
userList2: [],
willAddMemberList:[], willAddMemberList:[],
levelOptions: [],
memberQuery: { memberQuery: {
name: '' name: ''
}, },
memberQuery2: {
competitionId: this.cmpId,
stageId: this.stageId,
pageNo: 1,
pageSize: 20,
total: 0,
name: ''
},
userQuery2: {
pageNo: 1,
pageSize: 20,
total: 0,
userType: 1,
levelId: null,
name: ''
},
tempTeamInfo:{}, tempTeamInfo:{},
memberLoading: false, memberLoading: false,
memberList2: [] memberList2: []
@ -266,34 +343,73 @@ export default {
this.columnList.push(tmp) this.columnList.push(tmp)
} }
levelApi.getList().then(res=>{
if(res.code == 200){
this.levelOptions = res.data.list
}
})
this.loadData() this.loadData()
this.listMember2()
}, },
methods: { methods: {
changeTab(index,id){ changeTab(index,id){
this.tabId = index this.tabId = index
this.stageId = id this.stageId = id
this.teamQuery.stageId = this.stageId this.teamQuery.stageId = this.stageId
this.loadData()
if(this.survey.type == 1){
this.loadData()
}else{
this.listMember2()
}
}, },
changeTeamTab(index){ changeTeamTab(index){
this.teamTabId = index this.teamTabId = index
if(this.teamTabId == 2){ if(this.teamTabId == 2){
teamApi.listTeamMember({ this.listMember2()
competitionId: this.cmpId,
stageId: this.stageId,
pageNo: 1,
pageSize: 20
}).then(res=>{
this.memberList2 = res.data.page.content
})
} }
}, },
listMember2(){
this.memberQuery2.stageId = this.stageId
teamApi.listTeamMember(this.memberQuery2).then(res=>{
if(res.code == 200){
this.memberList2 = res.data.page.content
this.memberQuery2.total = res.data.page.totalElements
}
})
},
deleteMember2(item){
console.log(item)
teamApi.deleteMember({id: item.id}).then(res=>{
if(res.code == 200){
this.listMember2()
}
})
},
addMember(item){ addMember(item){
this.tempTeamInfo = item this.tempTeamInfo = item
this.addMemberList = [] this.addMemberList = []
this.addMemberVisable=true this.addMemberVisable=true
}, },
addTeamMember2(){
let ids = []
this.willAddMemberList.forEach(item=> ids.push(item.id) )
this.createMember.stageId =this.stageId
this.createMember.ids = ids
teamMemberApi.add(this.createMember).then(res=> {
if(res.code == 200){
this.$notify({
title: '操作成功',
message: "success",
type: 'success',
duration: 2000
})
this.listMember2()
}
})
},
batchImport(){ batchImport(){
this.$refs['excel-upload-input'].click() this.$refs['excel-upload-input'].click()
}, },
@ -310,6 +426,22 @@ export default {
} }
}) })
}, },
importMember(){
this.$refs["member-upload-input"].click()
},
handleClick2(e) {
const files = e.target.files
const rawFile = files[0] // only use files[0]
teamMemberApi.uploadExcel({
file: rawFile,
competitionId: this.cmpId,
stageId: this.stageId
}).then(res=>{
if(res.code == 200){
this.listMember2()
}
})
},
handleSizeChange(){ handleSizeChange(){
this.loadData() this.loadData()
}, },
@ -402,7 +534,16 @@ export default {
}) })
} }
}) })
}, },
searchUser(){
userApi.getList(this.userQuery2).then(res=>{
if(res.code == 200){
this.userList2 = res.data.userPage.content
this.userQuery2.total = res.data.userPage.totalElements
}
})
},
addTeamMember(){ addTeamMember(){
if(this.willAddMemberList.length == 0){ if(this.willAddMemberList.length == 0){
this.$notify({ this.$notify({
@ -447,6 +588,7 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
this.loadData()
this.dialogVisable =false this.dialogVisable =false
} }
}) })

@ -9,7 +9,7 @@
<div class="tz-content"> <div class="tz-content">
<survey v-if="tabId==0" :survey="comp.survey" /> <survey v-if="tabId==0" :survey="comp.survey" />
<group v-if="tabId==1" :group="comp.group" :cmpId="competitionId" @on-group-change="chgGroup" /> <group v-if="tabId==1" :group="comp.group" :cmpId="competitionId" @on-group-change="chgGroup" />
<task v-if="tabId==2" :survey="comp.survey" :group="comp.group" :task="comp.task" :cmpId="competitionId"/> <task v-if="tabId==2" :survey="comp.survey" :group="comp.group" :task.sync="comp.task" :cmpId="competitionId"/>
<team v-if="tabId==3" :survey="comp.survey" :team="comp.team" :competitionType="comp.type" :cmpId="competitionId" /> <team v-if="tabId==3" :survey="comp.survey" :team="comp.team" :competitionType="comp.type" :cmpId="competitionId" />
<summary-editor ref="summary" v-if="tabId == 4" :content.sync="comp.survey.summary" /> <summary-editor ref="summary" v-if="tabId == 4" :content.sync="comp.survey.summary" />
<rule-editor ref="rule" v-if="tabId == 5" :content.sync="comp.survey.rule" /> <rule-editor ref="rule" v-if="tabId == 5" :content.sync="comp.survey.rule" />
@ -19,7 +19,7 @@
<news-editor :content.sync="news.content" /> <news-editor :content.sync="news.content" />
<div class="news-line"> <div class="news-line">
<upload-image style="width:30%" :url.sync="news.img" /> <upload-image style="width:30%" :url.sync="news.img" />
<el-button type="primary" @click="addNews"></el-button> <el-button type="primary" @click="addNews(1)"></el-button>
</div> </div>
</div> </div>
<div class="new-content" v-for="item in comp.survey.news" :key="item.id"> <div class="new-content" v-for="item in comp.survey.news" :key="item.id">
@ -33,6 +33,25 @@
</div> </div>
</div> </div>
</div> </div>
<div v-if="tabId==8">
<div class="tabBox">
<news-editor :content.sync="schoolNews.content" />
<div class="news-line">
<upload-image style="width:30%" :url.sync="schoolNews.img" />
<el-button type="primary" @click="addNews(2)"></el-button>
</div>
</div>
<div class="new-content" v-for="item in comp.survey.schoolNews" :key="item.id">
<div class="news-header">
<img width="20%" :src="item.img" />
<div v-html="item.content" />
</div>
<div>
<el-button type="primary">编辑</el-button>
<el-button type="danger">删除</el-button>
</div>
</div>
</div>
</div> </div>
<div> <div>
<el-button v-if="tabId>0" type="primary" @click="backStep">上一步</el-button> <el-button type="primary" @click="save">保存</el-button> <el-button v-if="tabId<this.tabList.length - 1" type="primary" @click="nextStep"></el-button> <el-button v-if="tabId>0" type="primary" @click="backStep">上一步</el-button> <el-button type="primary" @click="save">保存</el-button> <el-button v-if="tabId<this.tabList.length - 1" type="primary" @click="nextStep"></el-button>
@ -53,6 +72,14 @@ import * as taskApi from '@/api/task'
export default { export default {
watch:{
comp:{
handler(nv,ov){
console.log(nv)
},
deep:true
}
},
components: { components: {
'survey': Survey, 'survey': Survey,
'group': Group , 'group': Group ,
@ -72,14 +99,18 @@ export default {
content: '', content: '',
img: '', img: '',
}, },
schoolNews: '', schoolNews: {
content: '',
img: ''
},
comp: { comp: {
survey: { survey: {
id: null,
name: '', name: '',
type: 1, type: 1,
sponsor: '', sponsor: '',
teamMinCount: 0, teamMinCount: 2,
teamMaxCount: 0, teamMaxCount: 5,
supporter: '', supporter: '',
stageList: [], stageList: [],
bannerList: [], bannerList: [],
@ -91,7 +122,8 @@ export default {
schoolNews:[] schoolNews:[]
}, },
group: [], group: [],
task: [], task: [
],
team: [], team: [],
}, },
tabId: 0, tabId: 0,
@ -159,16 +191,54 @@ export default {
methods: { methods: {
changeTab(val) { changeTab(val) {
this.tabId = val this.tabId = val
if(this.tabId == 2){
this.initTask()
}
}, },
nextStep(){ nextStep(){
if(this.tabId<this.tabList.length-1) { if(this.tabId<this.tabList.length-1) {
this.tabId = this.tabId+1; this.tabId = this.tabId+1;
} }
if(this.tabId == 2){
this.initTask()
}
}, },
backStep(){ backStep(){
if(this.tabId>0){ if(this.tabId>0){
this.tabId = this.tabId-1; this.tabId = this.tabId-1;
} }
if(this.tabId == 2){
this.initTask()
}
},
initTask(){
if(this.comp.task.length == 0){
for(var i=0;i<this.comp.survey.stageList.length;i++){
let temp ={
id: null,
competitionId: null,
stageId: null,
financePower: 80,
examPower: 20,
operationStartTime: '',
operationEndTime: '',
tradeType: 1,
examDuration:1,
initCapital: 1000000,
financeBasePower: 40,
financeProfitPower: 60,
operationLogo:'',
examLogo: '',
examStartTime: '',
examEndTime: '',
questionList:[]
}
const stage = this.comp.survey.stageList[i]
temp.competitionId = this.competitionId
temp.stageId = stage.id
this.comp.task.push(Object.assign({},temp))
}
}
}, },
save(){ save(){
if(this.tabId == 0|| this.tabId == 4|| this.tabId == 5|| this.tabId == 6){ if(this.tabId == 0|| this.tabId == 4|| this.tabId == 5|| this.tabId == 6){
@ -181,6 +251,9 @@ export default {
type: 'success', type: 'success',
duration: 2000 duration: 2000
}) })
this.competitionId = res.data
this.comp.survey.id = res.data
} }
}) })
}else if(this.tabId == 1){ }else if(this.tabId == 1){
@ -198,6 +271,7 @@ export default {
} }
}) })
} else if(this.tabId == 2){ } else if(this.tabId == 2){
taskApi.add({list: this.comp.task}).then(res=>{ taskApi.add({list: this.comp.task}).then(res=>{
if(res.code == 200) { if(res.code == 200) {
this.comp.task = res.data.list this.comp.task = res.data.list
@ -225,13 +299,21 @@ export default {
chgGroup(val){ chgGroup(val){
this.comp.group = val this.comp.group = val
}, },
addNews(){ addNews(type){
console.log(this.news) if(type == 1){
if(!this.comp.survey.news){ console.log(this.news)
this.comp.survey.news = [] if(!this.comp.survey.news){
this.comp.survey.news = []
}
this.comp.survey.news.push(this.news)
}else{
console.log(this.schoolNews)
if(!this.comp.survey.schoolNews){
this.comp.survey.schoolNews = []
}
this.comp.survey.schoolNews.push(this.schoolNews)
} }
this.comp.survey.news.push(this.news)
} }
} }
} }

@ -24,7 +24,7 @@
</el-table-column> </el-table-column>
<el-table-column label="参赛人数" align="center"> <el-table-column label="参赛人数" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.studentCount }}</span> <span>{{ scope.row.peopleCount }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="大赛模式" align="center"> <el-table-column label="大赛模式" align="center">
@ -39,7 +39,7 @@
</el-table-column> </el-table-column>
<el-table-column label="结束时间" align="center"> <el-table-column label="结束时间" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.endTime }}</span> <span>{{ new Date(scope.row.endTime).Format('yyyy-MM-dd hh:mm:ss') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center"> <el-table-column label="状态" align="center">
@ -49,6 +49,9 @@
</el-table-column> </el-table-column>
<el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width"> <el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width">
<template slot-scope="{row,$index}"> <template slot-scope="{row,$index}">
<el-button v-if="row.status == -1" type="primary" size="mini" @click="handleSend(row)">
发布
</el-button>
<el-button type="primary" size="mini" @click="handleUpdate(row)"> <el-button type="primary" size="mini" @click="handleUpdate(row)">
编辑 编辑
</el-button> </el-button>
@ -175,6 +178,33 @@ export default {
query: {id: row.id} query: {id: row.id}
}) })
}, },
handleDelete(row,index){
competition.del({id: row.id}).then(res =>{
if(res.code == 200 ){
this.list.splice(index,1)
}
})
},
handleSend(row){
competition.send({id:row.id}).then(res=>{
if(res.code == 200){
row.status = 0
this.$notify({
title: '操作成功',
message: "success",
type: 'success',
duration: 2000
})
}else{
this.$notify({
title: '操作失败',
message: res.msg,
type: 'error',
duration: 2000
})
}
})
},
statusToName(status){ statusToName(status){
switch(status){ switch(status){
case -1: case -1:

@ -74,8 +74,8 @@ export default {
} }
return { return {
loginForm: { loginForm: {
username: 'admin', username: '',
password: '111111' password: ''
}, },
loginRules: { loginRules: {
// username: [{ required: true, trigger: 'blur', validator: validateUsername }], // username: [{ required: true, trigger: 'blur', validator: validateUsername }],
@ -106,9 +106,11 @@ export default {
}) })
}, },
handleLogin() { handleLogin() {
this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate(valid => {
if (valid) { if (valid) {
this.loading = true this.loading = true
console.log("login1")
this.$store.dispatch('user/login', this.loginForm).then(() => { this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({ path: this.redirect || '/' }) this.$router.push({ path: this.redirect || '/' })
this.loading = false this.loading = false
@ -116,6 +118,7 @@ export default {
this.loading = false this.loading = false
}) })
} else { } else {
console.log("login3")
return false return false
} }
}) })

@ -2,13 +2,13 @@
<div class="app-container"> <div class="app-container">
<div class="tz-line"> <div class="tz-line">
<el-button @click="dialogFormVisible = false">返回</el-button> <el-button @click="dialogFormVisible = false">返回</el-button>
<el-button type="primary">确认</el-button> <el-button type="primary" @click="handleAdd"></el-button>
</div> </div>
<el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;"> <el-form ref="dataForm" :rules="rules" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;">
<el-form-item label="用户名" prop="studentNo"> <el-form-item label="用户名" prop="studentNo">
<el-input v-model="temp.username" /> <el-input v-model="temp.username" />
</el-form-item> </el-form-item>
<el-form-item label="密码" prop="studentNo"> <el-form-item label="密码" prop="password">
<el-input type="password" v-model="temp.password" /> <el-input type="password" v-model="temp.password" />
</el-form-item> </el-form-item>
<el-form-item label="姓名" prop="name"> <el-form-item label="姓名" prop="name">
@ -19,7 +19,7 @@
</template> </template>
<script> <script>
import { getList } from '@/api/table' import { addAdmin } from '@/api/user'
export default { export default {
filters: { filters: {
@ -62,12 +62,9 @@ export default {
statusOptions: ['published', 'draft', 'deleted'], statusOptions: ['published', 'draft', 'deleted'],
temp: { temp: {
studentNo: undefined, studentNo: undefined,
importance: 1, password:null,
remark: '', name: '',
timestamp: new Date(), userType: 3
title: '',
type: '',
status: 'published'
}, },
rules: { rules: {
studentNo: [{ required: true, message: '学号为必填项', trigger: 'blur' }], studentNo: [{ required: true, message: '学号为必填项', trigger: 'blur' }],
@ -78,7 +75,7 @@ export default {
} }
}, },
created() { created() {
this.fetchData() // this.fetchData()
}, },
methods: { methods: {
fetchData() { fetchData() {
@ -98,6 +95,13 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['dataForm'].clearValidate()
}) })
},
handleAdd(){
addAdmin(this.temp).then(res=>{
if(res.code == 200 ){
}
})
} }
} }
} }

@ -4,6 +4,9 @@
<el-input v-model="listQuery.name" placeholder="用户名/姓名" /> <el-input v-model="listQuery.name" placeholder="用户名/姓名" />
<el-button type="primary" icon="el-icon-search" @click="fetchData"></el-button> <el-button type="primary" icon="el-icon-search" @click="fetchData"></el-button>
</div> </div>
<div class="tz-line">
<el-button type="primary" @click="handleAdd"></el-button>
</div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
@ -53,13 +56,13 @@
<el-form-item label="用户名" prop="type"> <el-form-item label="用户名" prop="type">
<el-input v-model="temp.username" /> <el-input v-model="temp.username" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item label="密码" prop="password">
<el-input type="password" v-model="temp.password" /> <el-input type="password" v-model="temp.password" />
</el-form-item> </el-form-item>
<el-form-item label="姓名" prop="timestamp"> <el-form-item label="姓名" prop="name">
<el-input v-model="temp.name" /> <el-input v-model="temp.name" />
</el-form-item> </el-form-item>
<el-form-item label="电话"> <el-form-item label="电话" prop="mobile">
<el-input v-model="temp.mobile" /> <el-input v-model="temp.mobile" />
</el-form-item> </el-form-item>
@ -68,7 +71,7 @@
<el-button @click="dialogFormVisible = false"> <el-button @click="dialogFormVisible = false">
取消 取消
</el-button> </el-button>
<el-button type="primary"> <el-button type="primary" @click="saveAdmin">
确认 确认
</el-button> </el-button>
</div> </div>
@ -78,7 +81,7 @@
<script> <script>
import { getList } from '@/api/table' import { getList } from '@/api/table'
import { addAdmin } from '@/api/user'
export default { export default {
filters: { filters: {
statusFilter(status) { statusFilter(status) {
@ -103,20 +106,19 @@ export default {
total: 0, total: 0,
limit: 20, limit: 20,
textMap: { textMap: {
update: 'Edit', update: '编辑',
create: 'Create' create: '添加'
}, },
dialogFormVisible: false, dialogFormVisible: false,
dialogStatus: '', dialogStatus: '',
statusOptions: ['published', 'draft', 'deleted'], statusOptions: ['published', 'draft', 'deleted'],
temp: { temp: {
id: undefined, id: null,
importance: 1, name:'',
remark: '', studentNo: '',
timestamp: new Date(), userType: 3,
title: '', mobile: '',
type: '', password: ''
status: 'published'
}, },
rules: { rules: {
type: [{ required: true, message: 'type is required', trigger: 'change' }], type: [{ required: true, message: 'type is required', trigger: 'change' }],
@ -140,12 +142,30 @@ export default {
}, },
handleUpdate(row) { handleUpdate(row) {
this.temp = Object.assign({}, row) // copy obj this.temp = Object.assign({}, row) // copy obj
this.temp.timestamp = new Date(this.temp.timestamp)
this.dialogStatus = 'update' this.dialogStatus = 'update'
this.dialogFormVisible = true this.dialogFormVisible = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['dataForm'].clearValidate() this.$refs['dataForm'].clearValidate()
}) })
},
handleAdd(){
this.temp = {}
this.dialogStatus = 'create'
this.dialogFormVisible = true
},
saveAdmin(){
addAdmin(this.temp).then(res=>{
if(res.code == 200){
this.$notify({
title: '操作成功',
message: "success",
type: 'success',
duration: 2000
})
this.fetchData()
}
this.dialogFormVisible = false
})
} }
} }
} }

@ -179,6 +179,7 @@ export default {
statusOptions: ['published', 'draft', 'deleted'], statusOptions: ['published', 'draft', 'deleted'],
childList:[], childList:[],
temp: { temp: {
id:0,
score: 1, score: 1,
courseId: 1, courseId: 1,
courseName: '', courseName: '',
@ -193,6 +194,7 @@ export default {
type: 0 type: 0
}, },
temp2: { temp2: {
id: 0,
score: 1, score: 1,
courseId: 1, courseId: 1,
courseName: '', courseName: '',

@ -13,7 +13,6 @@
</el-form> </el-form>
<el-button @click="$router.push({ path: '/resource/anli/add'})" >新增</el-button> <el-button @click="$router.push({ path: '/resource/anli/add'})" >新增</el-button>
<el-button>批量导入</el-button>
<el-button @click="batch(1)"></el-button> <el-button @click="batch(1)"></el-button>
<el-button @click="batch(0)"></el-button> <el-button @click="batch(0)"></el-button>

@ -176,7 +176,11 @@ export default {
return this.catOptions.find(cat=>cat.id == catId).name return this.catOptions.find(cat=>cat.id == catId).name
}, },
tagIdToName(tagId){ tagIdToName(tagId){
return this.tagOptions.find(tag=>tag.id === tagId).name let tag = this.tagOptions.find(tag=>tag.id === tagId)
if(tag){
return tag.name
}
return '未知'
}, },
gotoEdit(row){ gotoEdit(row){
this.$router.push({ this.$router.push({

@ -1,5 +1,173 @@
<template> <template>
<div class="app-container"> <div class="app-container">
akdk <div class="tz-line">
<el-button @click="dialogFormVisible = false">返回</el-button>
<el-button type="primary">确认</el-button>
</div> </div>
</template> <div class="tz-line2">
<el-button :loading="downloadLoading" style="margin:0 0 20px 0;" type="primary" icon="el-icon-download" @click="handleDownload">
批量导入模板下载
</el-button>
<el-button :loading="uploading" style="margin:0 20px 20px 20px;" type="primary" icon="el-icon-upload" @click="handelUpload">
批量导入
<input ref="uploadExcel" type="file" accept=".xlsx" style="display:none;" @change="uploadExcel">
</el-button>
</div>
<!-- <upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" /> -->
<el-table
v-loading="listLoading"
:data="list"
element-loading-text="Loading"
border
fit
highlight-current-row
>
<el-table-column label="题干" align="center">
<template slot-scope="scope">
<span>{{ scope.row.stem }}</span>
</template>
</el-table-column>
<el-table-column label="题型">
<template slot-scope="scope">
{{ scope.row.questionType }}
</template>
</el-table-column>
<el-table-column label="题目ID" align="center">
<template slot-scope="scope">
<span>{{ scope.row.id }}</span>
</template>
</el-table-column>
<el-table-column label="归属课程" align="center">
<template slot-scope="scope">
<span>{{ scope.row.courseName }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center">
<template slot-scope="scope">
<span>{{ scope.row.status }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import * as questionApi from '@/api/question'
export default {
filters: {
statusFilter(status) {
const statusMap = {
published: 'success',
draft: 'info',
deleted: 'danger'
}
return statusMap[status]
}
},
data() {
return {
list: null,
listLoading: false,
listQuery: {
pageNo: 0
},
downloadLoading: false,
uploading: false,
total: 0,
limit: 20,
textMap: {
update: 'Edit',
create: 'Create'
},
dialogFormVisible: false,
provincOtions: [{
id: '1',
name: '北京'
}],
regionOptions: [{
id: 1,
name: '东南地区'
}],
levelOtions: [{
id: 1,
name: '本科'
}],
dialogStatus: '',
statusOptions: ['published', 'draft', 'deleted'],
temp: {
}
}
},
created() {
this.fetchData()
},
methods: {
fetchData() {
// this.listLoading = true
},
beforeUpload(file) {
const isLt1M = file.size / 1024 / 1024 < 1
if (isLt1M) {
return true
}
this.$message({
message: 'Please do not upload files larger than 1m in size.',
type: 'warning'
})
return false
},
handleSuccess({ results, header }) {
this.tableData = results
this.tableHeader = header
},
handleDownload() {
location.href = "/excel/questionTemplate.xlsx"
// this.downloadLoading = true
// import('@/vendor/Export2Excel').then(excel => {
// const tHeader = ['', '', '', '', '',""]
// excel.export_json_to_excel({
// header: tHeader,
// filename: 'userTemplate',
// data:[ ['202203929','','','18999999999','','']],
// autoWidth: true,
// bookType: 'xlsx'
// })
// this.downloadLoading = false
// })
},
handelUpload(){
this.$refs['uploadExcel'].click()
},
uploadExcel(e){
this.uploading = true
const files = e.target.files
const rawFile = files[0] // only use files[0]
questionApi.importExcel({
file: rawFile
}).then(res=>{
if(res.code == 200){
this.list = res.data.list
this.uploading =false
}
})
}
}
}
</script>
<style scoped>
.tz-line{
display: flex;
width: 100%;
margin-bottom: 20px;
}
.tz-line button{
margin-right: 10px;
width: 100px;
}
</style>

@ -61,7 +61,7 @@
<el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="deleteUser(row,$index)"> <el-button v-if="row.status!='deleted'" size="mini" type="danger" @click="deleteUser(row,$index)">
删除 删除
</el-button> </el-button>
<el-button v-if="row.status!='published'" size="mini" type="warning" @click="handleModifyStatus(row,'published')"> <el-button v-if="row.status!='published'" size="mini" type="warning" @click="handleModifyStatus(row)">
初始化密码 初始化密码
</el-button> </el-button>
</template> </template>
@ -124,6 +124,7 @@ import * as regionApi from '@/api/region'
import * as levelApi from '@/api/level' import * as levelApi from '@/api/level'
import * as provinceApi from '@/api/province' import * as provinceApi from '@/api/province'
import * as userApi from '@/api/user' import * as userApi from '@/api/user'
import user from '../../store/modules/user'
export default { export default {
filters: { filters: {
@ -217,6 +218,26 @@ export default {
} }
return "未知" return "未知"
}, },
handleModifyStatus(row){
console.log(row.id)
userApi.initPwd({id: row.id}).then(res=>{
if(res.code == 200){
this.$notify({
title: '操作成功',
message: "success",
type: 'success',
duration: 2000
})
}else{
this.$notify({
title: '操作失败',
message: res.msg,
type: 'error',
duration: 2000
})
}
})
},
levelToName(id){ levelToName(id){
let l = this.levelOtions.find(level => level.id == id) let l = this.levelOtions.find(level => level.id == id)
if(l){ if(l){

@ -32,6 +32,7 @@ module.exports = {
devServer: { devServer: {
port: port, port: port,
open: true, open: true,
disableHostCheck: true,
overlay: { overlay: {
warnings: false, warnings: false,
errors: true errors: true

Loading…
Cancel
Save