bug 修改

sale
tianea 3 years ago
parent 5299838758
commit ba444ed6c8

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

@ -14,6 +14,8 @@ export function getList(query) {
data: cat
})
}
export function addSurvey(data){
return request({
@ -44,4 +46,11 @@ export function getList(query) {
method: 'post',
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",
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({
url: '/api/user/login/password',
method: 'post',
data
data: data
})
}
@ -44,6 +44,14 @@ export function addUser(data){
data: data
})
}
export function addAdmin(data){
return request({
url: 'pc/user/addAdmin',
method: 'post',
data: data
})
}
export function deleteUser(data){
return request({
url: 'pc/user/deleteUser',
@ -51,6 +59,15 @@ export function deleteUser(data){
data: data
})
}
export function initPwd(data){
return request({
url: 'pc/user/initPwd',
method: 'post',
data: data
})
}
export function uploadExcel(obj){
let fd = new FormData()
if(obj instanceof Object){

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

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

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

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

@ -2,7 +2,6 @@ import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
// create an axios instance
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
@ -14,7 +13,6 @@ const service = axios.create({
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
// let each request carry token
// ['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
*/
response => {
console.log(response)
const res = response.data
// if the custom code is not 200, it is judged as an error.
if (res.code !== 200) {
Message({
@ -81,5 +79,4 @@ service.interceptors.response.use(
return Promise.reject(error)
}
)
export default service

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

@ -21,8 +21,8 @@
</el-form-item>
<el-form-item v-for="(item ,$index) in survey.stageList" :key="item.name" :label="item.name" class="form-item-line">
<div>
<el-date-picker v-model="item.startTime" type="datetime" placeholder="请选择开始时间" />
<el-date-picker v-model="item.endTime" type="datetime" placeholder="请选择结束时间" />
<el-date-picker v-model="item.startTime" placeholder="请选择开始时间" />
<el-date-picker v-model="item.endTime" placeholder="请选择结束时间" />
<el-button type="danger" @click="deleteStage(item.id,$index)" >删除</el-button>
</div>
<div>
@ -35,7 +35,7 @@
</el-form-item>
<el-form-item class="form-item-line">
<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-form-item>
<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.examEndTime" placeholder="结束时间" type="datetime"></el-date-picker>
</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-table :data="singleTable">
<el-table-column label="题型" align="center">
@ -275,16 +281,17 @@ export default {
this.courseOptions = res.data.page.content
}
})
if(this.task.length == 0){
for(var i=0;i<this.survey.stageList.length;i++){
const stage = this.survey.stageList[i]
this.temp.competitionId = this.cmpId
this.temp.stageId = stage.id
this.task.push(Object.assign({},this.temp))
}
}else{
this.temp = this.task[0]
}
// if(this.task.length == 0){
// for(var i=0;i<this.survey.stageList.length;i++){
// const stage = this.survey.stageList[i]
// this.temp.competitionId = this.cmpId
// this.temp.stageId = stage.id
// this.task.push(Object.assign({},this.temp))
// }
// }else{
// }
this.getQuestion()
question.getCount().then(res=> {
if(res.code==200){
@ -294,17 +301,9 @@ export default {
}
})
},
watch: {
task: {
handler: function(nv,ov){
}
},
group: {
handler: function(nv,ov){
}
}
mounted(){
this.temp = this.task[0]
this.tabId = 0
},
data(){
return {
@ -355,10 +354,12 @@ export default {
operationStartTime: '',
operationEndTime: '',
tradeType: 1,
examDuration:1,
initCapital: 1000000,
financeBasePower: 40,
financeProfitPower: 60,
operationLogo:'',
examLogo: '',
examStartTime: '',
examEndTime: '',
questionList:[]
@ -369,7 +370,7 @@ export default {
name: '股票基金',
},
{
id: 2,
id: 4,
name: '期货'
}
],
@ -505,7 +506,7 @@ export default {
this.stage = item
},
confirmEdit(){
this.editStageId =0
},
multiScore(){
let score = 0
@ -516,7 +517,8 @@ export default {
},
addQuestion(){
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)
if(tmp){
tmp.questionIds = ids
@ -526,7 +528,6 @@ export default {
questionIds: ids
})
}
console.log(this.task[this.tabId].questionList)
this.confirmChoose()
},
@ -542,7 +543,6 @@ export default {
questionIds: ids
})
}
console.log(this.task[this.tabId].questionList)
this.confirmChoose2()
},
levelToName(levelId){
@ -577,7 +577,6 @@ export default {
this.chooseList = []
this.questionList = []
}
}catch{
this.chooseList = []
this.questionList = []

@ -53,7 +53,13 @@
</div>
<div v-if="teamTabId == 2">
<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>
<el-table :data="memberList2">
<el-table-column label="姓名">
@ -78,21 +84,23 @@
</el-table-column>
<el-table-column label="指导教师">
<template slot-scope="scope">
{{ scope.row.name }}
{{ scope.row.teacher }}
</template>
</el-table-column>
<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>
<el-pagination
:current-page.sync="teamQuery.pageNo"
:current-page.sync="memberQuery2.pageNo"
:page-sizes="[10,15,20]"
:page-size.sync="teamQuery.pageSize"
:page-size.sync="memberQuery2.pageSize"
layout="total,prev,pager,next,jumper,sizes"
:total="teamQuery.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="memberQuery2.total"
@size-change="listMember2"
@current-change="listMember2"
/>
@ -120,9 +128,9 @@
<el-button class="small" @click="confirmEditTeam" >确定</el-button>
<el-button class="small">取消</el-button>
</el-dialog>
<el-dialog title="添加员" :visible.sync="addMemberVisable">
<el-dialog title="添加员" :visible.sync="addMemberVisable">
<div class="filter-container">
<el-input v-model="memberQuery.name" placeholder="输入学号或姓名"/>
<el-input v-model="userQuery2.name" placeholder="输入学号或姓名"/>
<el-button @click="searchMember"></el-button>
</div>
<el-table :data="addMemberList"
@ -148,12 +156,56 @@
<el-button @click="addTeamMember"></el-button>
<el-button @click="addMemberVisable = false">取消</el-button>
</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>
</template>
<script>
import SelectPanel from './selectPanel.vue'
import * as userApi from '@/api/user'
import * as teamApi from '@/api/team'
import * as levelApi from '@/api/level'
import * as teamMemberApi from '@/api/teammember'
export default {
components: {
'select-panel': SelectPanel
@ -203,6 +255,7 @@ export default {
},
editTeamNameVisable: false,
addMemberVisable: false,
addMemberVisable2: false,
teamList: [],
tabId: 0,
teamTabId: 0,
@ -218,6 +271,12 @@ export default {
teacher: '',
ids:[]
},
createMember: {
teacher:'',
ids: [],
competitionId: this.cmpId,
stageId: this.stageId
},
teamQuery: {
competitionId: this.cmpId,
stageId: this.stageId,
@ -229,10 +288,28 @@ export default {
userList: [],
userSelectList:[],
addMemberList:[],
userList2: [],
willAddMemberList:[],
levelOptions: [],
memberQuery: {
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:{},
memberLoading: false,
memberList2: []
@ -266,34 +343,73 @@ export default {
this.columnList.push(tmp)
}
levelApi.getList().then(res=>{
if(res.code == 200){
this.levelOptions = res.data.list
}
})
this.loadData()
this.listMember2()
},
methods: {
changeTab(index,id){
this.tabId = index
this.stageId = id
this.teamQuery.stageId = this.stageId
this.loadData()
if(this.survey.type == 1){
this.loadData()
}else{
this.listMember2()
}
},
changeTeamTab(index){
this.teamTabId = index
if(this.teamTabId == 2){
teamApi.listTeamMember({
competitionId: this.cmpId,
stageId: this.stageId,
pageNo: 1,
pageSize: 20
}).then(res=>{
this.memberList2 = res.data.page.content
})
this.listMember2()
}
},
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){
this.tempTeamInfo = item
this.addMemberList = []
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(){
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(){
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(){
if(this.willAddMemberList.length == 0){
this.$notify({
@ -447,6 +588,7 @@ export default {
type: 'success',
duration: 2000
})
this.loadData()
this.dialogVisable =false
}
})

@ -9,7 +9,7 @@
<div class="tz-content">
<survey v-if="tabId==0" :survey="comp.survey" />
<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" />
<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" />
@ -19,7 +19,7 @@
<news-editor :content.sync="news.content" />
<div class="news-line">
<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 class="new-content" v-for="item in comp.survey.news" :key="item.id">
@ -33,6 +33,25 @@
</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>
<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 {
watch:{
comp:{
handler(nv,ov){
console.log(nv)
},
deep:true
}
},
components: {
'survey': Survey,
'group': Group ,
@ -72,14 +99,18 @@ export default {
content: '',
img: '',
},
schoolNews: '',
schoolNews: {
content: '',
img: ''
},
comp: {
survey: {
id: null,
name: '',
type: 1,
sponsor: '',
teamMinCount: 0,
teamMaxCount: 0,
teamMinCount: 2,
teamMaxCount: 5,
supporter: '',
stageList: [],
bannerList: [],
@ -91,7 +122,8 @@ export default {
schoolNews:[]
},
group: [],
task: [],
task: [
],
team: [],
},
tabId: 0,
@ -159,16 +191,54 @@ export default {
methods: {
changeTab(val) {
this.tabId = val
if(this.tabId == 2){
this.initTask()
}
},
nextStep(){
if(this.tabId<this.tabList.length-1) {
this.tabId = this.tabId+1;
}
if(this.tabId == 2){
this.initTask()
}
},
backStep(){
if(this.tabId>0){
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(){
if(this.tabId == 0|| this.tabId == 4|| this.tabId == 5|| this.tabId == 6){
@ -181,6 +251,9 @@ export default {
type: 'success',
duration: 2000
})
this.competitionId = res.data
this.comp.survey.id = res.data
}
})
}else if(this.tabId == 1){
@ -198,6 +271,7 @@ export default {
}
})
} else if(this.tabId == 2){
taskApi.add({list: this.comp.task}).then(res=>{
if(res.code == 200) {
this.comp.task = res.data.list
@ -225,13 +299,21 @@ export default {
chgGroup(val){
this.comp.group = val
},
addNews(){
console.log(this.news)
if(!this.comp.survey.news){
this.comp.survey.news = []
addNews(type){
if(type == 1){
console.log(this.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 label="参赛人数" align="center">
<template slot-scope="scope">
<span>{{ scope.row.studentCount }}</span>
<span>{{ scope.row.peopleCount }}</span>
</template>
</el-table-column>
<el-table-column label="大赛模式" align="center">
@ -39,7 +39,7 @@
</el-table-column>
<el-table-column label="结束时间" align="center">
<template slot-scope="scope">
<span>{{ scope.row.endTime }}</span>
<span>{{ new Date(scope.row.endTime).Format('yyyy-MM-dd hh:mm:ss') }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center">
@ -49,6 +49,9 @@
</el-table-column>
<el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width">
<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>
@ -175,6 +178,33 @@ export default {
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){
switch(status){
case -1:

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

@ -2,13 +2,13 @@
<div class="app-container">
<div class="tz-line">
<el-button @click="dialogFormVisible = false">返回</el-button>
<el-button type="primary">确认</el-button>
<el-button type="primary" @click="handleAdd"></el-button>
</div>
<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-input v-model="temp.username" />
</el-form-item>
<el-form-item label="密码" prop="studentNo">
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="temp.password" />
</el-form-item>
<el-form-item label="姓名" prop="name">
@ -19,7 +19,7 @@
</template>
<script>
import { getList } from '@/api/table'
import { addAdmin } from '@/api/user'
export default {
filters: {
@ -62,12 +62,9 @@ export default {
statusOptions: ['published', 'draft', 'deleted'],
temp: {
studentNo: undefined,
importance: 1,
remark: '',
timestamp: new Date(),
title: '',
type: '',
status: 'published'
password:null,
name: '',
userType: 3
},
rules: {
studentNo: [{ required: true, message: '学号为必填项', trigger: 'blur' }],
@ -78,7 +75,7 @@ export default {
}
},
created() {
this.fetchData()
// this.fetchData()
},
methods: {
fetchData() {
@ -98,6 +95,13 @@ export default {
this.$nextTick(() => {
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-button type="primary" icon="el-icon-search" @click="fetchData"></el-button>
</div>
<div class="tz-line">
<el-button type="primary" @click="handleAdd"></el-button>
</div>
<el-table
v-loading="listLoading"
:data="list"
@ -53,13 +56,13 @@
<el-form-item label="用户名" prop="type">
<el-input v-model="temp.username" />
</el-form-item>
<el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" v-model="temp.password" />
</el-form-item>
<el-form-item label="姓名" prop="timestamp">
<el-form-item label="姓名" prop="name">
<el-input v-model="temp.name" />
</el-form-item>
<el-form-item label="电话">
<el-form-item label="电话" prop="mobile">
<el-input v-model="temp.mobile" />
</el-form-item>
@ -68,7 +71,7 @@
<el-button @click="dialogFormVisible = false">
取消
</el-button>
<el-button type="primary">
<el-button type="primary" @click="saveAdmin">
确认
</el-button>
</div>
@ -78,7 +81,7 @@
<script>
import { getList } from '@/api/table'
import { addAdmin } from '@/api/user'
export default {
filters: {
statusFilter(status) {
@ -103,20 +106,19 @@ export default {
total: 0,
limit: 20,
textMap: {
update: 'Edit',
create: 'Create'
update: '编辑',
create: '添加'
},
dialogFormVisible: false,
dialogStatus: '',
statusOptions: ['published', 'draft', 'deleted'],
temp: {
id: undefined,
importance: 1,
remark: '',
timestamp: new Date(),
title: '',
type: '',
status: 'published'
id: null,
name:'',
studentNo: '',
userType: 3,
mobile: '',
password: ''
},
rules: {
type: [{ required: true, message: 'type is required', trigger: 'change' }],
@ -140,12 +142,30 @@ export default {
},
handleUpdate(row) {
this.temp = Object.assign({}, row) // copy obj
this.temp.timestamp = new Date(this.temp.timestamp)
this.dialogStatus = 'update'
this.dialogFormVisible = true
this.$nextTick(() => {
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'],
childList:[],
temp: {
id:0,
score: 1,
courseId: 1,
courseName: '',
@ -193,6 +194,7 @@ export default {
type: 0
},
temp2: {
id: 0,
score: 1,
courseId: 1,
courseName: '',

@ -13,7 +13,6 @@
</el-form>
<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(0)"></el-button>

@ -176,7 +176,11 @@ export default {
return this.catOptions.find(cat=>cat.id == catId).name
},
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){
this.$router.push({

@ -1,5 +1,173 @@
<template>
<div class="app-container">
akdk
<div class="app-container">
<div class="tz-line">
<el-button @click="dialogFormVisible = false">返回</el-button>
<el-button type="primary">确认</el-button>
</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>
<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>
</template>
@ -124,6 +124,7 @@ import * as regionApi from '@/api/region'
import * as levelApi from '@/api/level'
import * as provinceApi from '@/api/province'
import * as userApi from '@/api/user'
import user from '../../store/modules/user'
export default {
filters: {
@ -217,6 +218,26 @@ export default {
}
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){
let l = this.levelOtions.find(level => level.id == id)
if(l){

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

Loading…
Cancel
Save