master
parent
442cecdc4d
commit
f6b37bbe8c
@ -0,0 +1,165 @@
|
||||
<template>
|
||||
|
||||
<div class="cs">
|
||||
|
||||
<ReadExcel @file-change="excelFileChange">
|
||||
|
||||
<div class="import-button">导入</div>
|
||||
|
||||
</ReadExcel>
|
||||
<div>
|
||||
<div>团队总量:{{teamCount}}</div>
|
||||
<div>队员总量:{{memberCount}}</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-button @click="startImport" type="primary">开始导入</el-button>
|
||||
</div>
|
||||
<el-table :data="teamList">
|
||||
<el-table-column v-for="(item,$index) in tableHeader" :key="$index" :label="item" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="$index == 0">{{ scope.row.teamName}}</span>
|
||||
<div v-if="$index == 1">
|
||||
<div v-for="(member,$index2) in scope.row.memberList" :key="$index2">
|
||||
{{member.memberName}}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="$index == 2">
|
||||
<div v-for="(member,$index2) in scope.row.memberList" :key="$index2">
|
||||
{{member.studentNo}}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="$index == 3">
|
||||
<div v-for="(member,$index2) in scope.row.memberList" :key="$index2">
|
||||
{{member.className}}
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="$index == 4">
|
||||
{{scope.row.school}}
|
||||
</span>
|
||||
<span v-if="$index == 5">
|
||||
{{scope.row.teacher}}
|
||||
</span>
|
||||
<span v-if="$index == 7">
|
||||
{{scope.row.province}}
|
||||
</span>
|
||||
<span v-if="$index == 8">
|
||||
{{scope.row.level}}
|
||||
</span>
|
||||
<span v-if="$index == 9">
|
||||
{{scope.row.area}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script>
|
||||
import * as competition from '@/api/competition'
|
||||
import * as teamMemberApi from '@/api/teammember'
|
||||
import ReadExcel from './components/teamImport.vue'
|
||||
export default {
|
||||
data(){
|
||||
return {
|
||||
teamInfo:{
|
||||
teamName:'',
|
||||
teacher: '',
|
||||
province: '',
|
||||
level: '',
|
||||
area: '',
|
||||
school: '',
|
||||
memberList:[]
|
||||
},
|
||||
teamList: [],
|
||||
tableHeader: [],
|
||||
fileName: '',
|
||||
teamCount: 0,
|
||||
memberCount: 0
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
||||
ReadExcel,
|
||||
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
excelFileChange(data) {
|
||||
let { merges, body, name, header } = data
|
||||
// console.log(merges, body, name, header)
|
||||
this.fileName =name
|
||||
this.tableHeader = header
|
||||
this.dataToObj(body)
|
||||
},
|
||||
startImport(){
|
||||
let item = this.teamList[0]
|
||||
if(!item){
|
||||
alert("导入完成")
|
||||
return
|
||||
}
|
||||
teamMemberApi.importTeamMember({
|
||||
compI: 3,
|
||||
stageId: 1,
|
||||
teamName: item.teamName,
|
||||
province: item.province,
|
||||
level: item.level,
|
||||
school: item.school,
|
||||
area: item.area,
|
||||
teacher: item.teacher,
|
||||
memberList: item.memberList
|
||||
}).then(res=>{
|
||||
if(res.code == 200){
|
||||
this.teamList.splice(0,1)
|
||||
this.startImport()
|
||||
}else{
|
||||
alert(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
dataToObj(data){
|
||||
let rs = []
|
||||
for(let i = 1;i<data.length;i++){
|
||||
let teamInfo = null;
|
||||
let item = data[i]
|
||||
let teamName = item[0]
|
||||
let member = item[1]
|
||||
let studentNo = item[2]
|
||||
let className = item[3]
|
||||
let school = item[4]
|
||||
let teacher1 = item[5]
|
||||
if(!teacher1){
|
||||
teacher1 = ''
|
||||
}
|
||||
let teacher2 = item[6]
|
||||
let province = item[7]
|
||||
let level = item[8]
|
||||
let area = item[9]
|
||||
if(!teamName){
|
||||
teamInfo = rs[rs.length-1]
|
||||
}else{
|
||||
teamInfo = JSON.parse(JSON.stringify(this.teamInfo))
|
||||
teamInfo.teamName = teamName
|
||||
teamInfo.teacher = !!teacher2?teacher1+","+teacher2:teacher1
|
||||
teamInfo.province = province
|
||||
teamInfo.level = level
|
||||
teamInfo.area = area
|
||||
teamInfo.school = school
|
||||
rs.push(teamInfo)
|
||||
}
|
||||
teamInfo.memberList.push({
|
||||
memberName: member,
|
||||
studentNo: studentNo,
|
||||
className: className
|
||||
})
|
||||
this.memberCount +=1
|
||||
}
|
||||
// console.log(rs)
|
||||
this.teamList = rs
|
||||
this.teamCount = rs.length
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
</script>
|
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<div class="tz-line">
|
||||
<el-date-picker v-model="listQuery.shortDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd" />
|
||||
<el-button type="primary" @click="fetchData" icon="el-icon-search">查询</el-button>
|
||||
<el-button type="primary" @click="exprot" icon="el-icon-searh">导出</el-button>
|
||||
</div>
|
||||
<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">
|
||||
{{ scope.row.studentNo }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.name }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="ip" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.ip }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="学校" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.school }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ new Date(scope.row.updateTime).Format('yyyy-MM-dd hh:mm:ss') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
:current-page="listQuery.pageNo"
|
||||
:page-sizes="[10,15,20]"
|
||||
:page-size="listQuery.pageSize"
|
||||
layout="total,prev,pager,next,jumper,sizes"
|
||||
:total="total"
|
||||
@size-change="fetchData"
|
||||
@current-change="fetchData"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as competition from '@/api/competition'
|
||||
export default {
|
||||
filters: {
|
||||
statusFilter(status) {
|
||||
const statusMap = {
|
||||
published: 'success',
|
||||
draft: 'info',
|
||||
deleted: 'danger'
|
||||
}
|
||||
return statusMap[status]
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: null,
|
||||
listLoading: true,
|
||||
listQuery: {
|
||||
pageNo: 0,
|
||||
pageSize: 20,
|
||||
shortDate: ''
|
||||
},
|
||||
total: 0
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.fetchData()
|
||||
},
|
||||
methods: {
|
||||
fetchData() {
|
||||
this.listLoading = true
|
||||
if(this.listQuery.shortDate.length==0){
|
||||
this.listQuery.shortDate = new Date().Format("yyyy-MM-dd")
|
||||
}
|
||||
competition.getMemberLogList(this.listQuery).then(response => {
|
||||
this.list = response.data.list
|
||||
this.total = response.data.total
|
||||
this.listLoading = false
|
||||
})
|
||||
},
|
||||
formatJson(filterVal,jsonData){
|
||||
return jsonData.map(v => filterVal.map(j => {
|
||||
if(j=='updateTime'){
|
||||
return new Date(v[j]).Format('yyyy-MM-dd hh:mm:ss')
|
||||
}
|
||||
return v[j]
|
||||
}))
|
||||
},
|
||||
exprot(){
|
||||
if(this.listQuery.shortDate.length==0){
|
||||
this.listQuery.shortDate = new Date().Format("yyyy-MM-dd")
|
||||
}
|
||||
competition.getMemberLogListAll(this.listQuery).then(res => {
|
||||
// this.downloadLoading = true
|
||||
import('@/vendor/Export2Excel').then(excel => {
|
||||
const tHeader = [ '学号','姓名','ip','学校','时间']
|
||||
const filterVal = ['studentNo','name','ip','school','updateTime']
|
||||
const list = res.data.list
|
||||
const data = this.formatJson(filterVal, list)
|
||||
console.log(data)
|
||||
excel.export_json_to_excel({
|
||||
header: tHeader,
|
||||
data,
|
||||
filename: 'member-log',
|
||||
autoWidth: true,
|
||||
bookType: 'xlsx'
|
||||
})
|
||||
// this.downloadLoading = false
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.tz-line{
|
||||
display: flex;
|
||||
width: 100%;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.tz-line button{
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue