mirror of
https://github.com/PanJiaChen/vue-element-admin.git
synced 2025-09-09 20:28:25 +08:00
271 lines
7.9 KiB
Vue
271 lines
7.9 KiB
Vue
<template>
|
|
<el-dialog :visible.sync="dialogFormVisible" title="收件人" width="60%" height="2200">
|
|
<el-tabs type="border-card" style="height: 630px;margin-top:-30px;margin-bottom:10px;" >
|
|
<el-tab-pane label="教师">
|
|
<teacherComplexTable ref="teacherComplexTable" :table-height="450 + 'px'" :type="false" style="margin-top:-20px;"/>
|
|
</el-tab-pane>
|
|
<el-tab-pane v-if="false" label="班级">
|
|
<gradeComplexTable ref="gradeComplexTable" :table-height="450 + 'px'" :type="false" style="margin-top:-20px;"/>
|
|
</el-tab-pane>
|
|
<el-tab-pane v-if="false" label="群组">
|
|
<groupComplexTable ref="groupComplexTable" :table-height="450 + 'px'" :type="false" style="margin-top:-20px;"/>
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button @click="dialogFormVisible = false">{{ $t('table.cancel') }}</el-button>
|
|
<el-button type="primary" @click="addUser">{{ $t('table.add') }}</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article'
|
|
import waves from '@/directive/waves' // 水波纹指令
|
|
import { parseTime } from '@/utils'
|
|
import groupComplexTable from '@/views/group/index'
|
|
import studentComplexTable from '@/views/student/complexTable'
|
|
import teacherComplexTable from '@/views/teacher/complexTable'
|
|
import gradeComplexTable from '@/views/grade/complexTable'
|
|
|
|
const calendarTypeOptions = [
|
|
{ key: 'CN', display_name: 'China' },
|
|
{ key: 'US', display_name: 'USA' },
|
|
{ key: 'JP', display_name: 'Japan' },
|
|
{ key: 'EU', display_name: 'Eurozone' }
|
|
]
|
|
|
|
// arr to obj ,such as { CN : "China", US : "USA" }
|
|
const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
|
|
acc[cur.key] = cur.display_name
|
|
return acc
|
|
}, {})
|
|
|
|
export default {
|
|
name: 'ShowUser',
|
|
directives: {
|
|
waves
|
|
},
|
|
filters: {
|
|
statusFilter(status) {
|
|
const statusMap = {
|
|
published: 'success',
|
|
draft: 'info',
|
|
deleted: 'danger'
|
|
}
|
|
return statusMap[status]
|
|
},
|
|
typeFilter(type) {
|
|
return calendarTypeKeyValue[type]
|
|
}
|
|
},
|
|
components: {
|
|
groupComplexTable,
|
|
studentComplexTable,
|
|
teacherComplexTable,
|
|
gradeComplexTable
|
|
},
|
|
data() {
|
|
return {
|
|
totalStuCount: 0,
|
|
tableKey: 0,
|
|
list: null,
|
|
total: null,
|
|
listLoading: true,
|
|
listQuery: {
|
|
page: 1,
|
|
limit: 20,
|
|
importance: undefined,
|
|
title: undefined,
|
|
type: undefined,
|
|
sort: '+id'
|
|
},
|
|
classId: undefined,
|
|
teacherName: undefined,
|
|
importanceOptions: [1, 2, 3],
|
|
calendarTypeOptions,
|
|
sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
|
|
statusOptions: ['published', 'draft', 'deleted'],
|
|
showReviewer: false,
|
|
temp: {
|
|
id: undefined,
|
|
importance: 1,
|
|
remark: '',
|
|
timestamp: new Date(),
|
|
title: '',
|
|
type: '',
|
|
status: 'published'
|
|
},
|
|
dialogFormVisible: true,
|
|
dialogStatus: '',
|
|
textMap: {
|
|
update: this.$t('edit'),
|
|
create: this.$t('create')
|
|
},
|
|
dialogPvVisible: false,
|
|
pvData: [],
|
|
rules: {
|
|
type: [{ required: true, message: 'type is required', trigger: 'change' }],
|
|
timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
|
|
title: [{ required: true, message: 'title is required', trigger: 'blur' }]
|
|
},
|
|
downloadLoading: false,
|
|
userList: []
|
|
}
|
|
},
|
|
created() {
|
|
this.getList()
|
|
},
|
|
methods: {
|
|
addUser() {
|
|
var map = new Map()
|
|
map.set('user', this.$refs.teacherComplexTable.getSelectUser())
|
|
// map.set('class', this.$refs.gradeComplexTable.getSelectClass())
|
|
// map.set('group', this.$refs.groupComplexTable.getSelectGroup())
|
|
|
|
// this.userList = this.$refs.teacherComplexTable.getSelectUser().concat(this.$refs.studentComplexTable.getSelectUser())
|
|
this.dialogFormVisible = false
|
|
this.$emit('listenToChildEvent', map)
|
|
},
|
|
getTotalStu: function(data) {
|
|
this.totalStuCount = data
|
|
},
|
|
getList() {
|
|
this.listLoading = true
|
|
fetchList(this.listQuery).then(response => {
|
|
this.list = response.data.items
|
|
this.total = response.data.total
|
|
|
|
// Just to simulate the time of the request
|
|
setTimeout(() => {
|
|
this.listLoading = false
|
|
}, 1.5 * 1000)
|
|
})
|
|
},
|
|
handleFilter() {
|
|
this.listQuery.page = 1
|
|
this.getList()
|
|
},
|
|
handleSizeChange(val) {
|
|
this.listQuery.limit = val
|
|
this.getList()
|
|
},
|
|
handleCurrentChange(val) {
|
|
this.listQuery.page = val
|
|
this.getList()
|
|
},
|
|
handleModifyStatus() {
|
|
this.dialogFormVisible = true
|
|
},
|
|
resetTemp() {
|
|
this.temp = {
|
|
id: undefined,
|
|
importance: 1,
|
|
remark: '',
|
|
timestamp: new Date(),
|
|
title: '',
|
|
status: 'published',
|
|
type: ''
|
|
}
|
|
},
|
|
handleCreate() {
|
|
this.resetTemp()
|
|
this.dialogStatus = 'create'
|
|
this.dialogFormVisible = true
|
|
this.$nextTick(() => {
|
|
this.$refs['dataForm'].clearValidate()
|
|
})
|
|
},
|
|
createData() {
|
|
this.$refs['dataForm'].validate((valid) => {
|
|
if (valid) {
|
|
this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id
|
|
this.temp.author = 'vue-element-admin'
|
|
createArticle(this.temp).then(() => {
|
|
this.list.unshift(this.temp)
|
|
this.dialogFormVisible = false
|
|
this.$notify({
|
|
title: '成功',
|
|
message: '创建成功',
|
|
type: 'success',
|
|
duration: 2000
|
|
})
|
|
})
|
|
}
|
|
})
|
|
},
|
|
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()
|
|
})
|
|
},
|
|
updateData() {
|
|
this.$refs['dataForm'].validate((valid) => {
|
|
if (valid) {
|
|
const tempData = Object.assign({}, this.temp)
|
|
tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464
|
|
updateArticle(tempData).then(() => {
|
|
for (const v of this.list) {
|
|
if (v.id === this.temp.id) {
|
|
const index = this.list.indexOf(v)
|
|
this.list.splice(index, 1, this.temp)
|
|
break
|
|
}
|
|
}
|
|
this.dialogFormVisible = false
|
|
this.$notify({
|
|
title: '成功',
|
|
message: '更新成功',
|
|
type: 'success',
|
|
duration: 2000
|
|
})
|
|
})
|
|
}
|
|
})
|
|
},
|
|
handleDelete(row) {
|
|
this.$notify({
|
|
title: '成功',
|
|
message: '删除成功',
|
|
type: 'success',
|
|
duration: 2000
|
|
})
|
|
const index = this.list.indexOf(row)
|
|
this.list.splice(index, 1)
|
|
},
|
|
handleFetchPv(pv) {
|
|
fetchPv(pv).then(response => {
|
|
this.pvData = response.data.pvData
|
|
this.dialogPvVisible = true
|
|
})
|
|
},
|
|
handleDownload() {
|
|
this.downloadLoading = true
|
|
import('@/vendor/Export2Excel').then(excel => {
|
|
const tHeader = ['timestamp', 'title', 'type', 'importance', 'status']
|
|
const filterVal = ['timestamp', 'title', 'type', 'importance', 'status']
|
|
const data = this.formatJson(filterVal, this.list)
|
|
excel.export_json_to_excel({
|
|
header: tHeader,
|
|
data,
|
|
filename: 'table-list'
|
|
})
|
|
this.downloadLoading = false
|
|
})
|
|
},
|
|
formatJson(filterVal, jsonData) {
|
|
return jsonData.map(v => filterVal.map(j => {
|
|
if (j === 'timestamp') {
|
|
return parseTime(v[j])
|
|
} else {
|
|
return v[j]
|
|
}
|
|
}))
|
|
}
|
|
}
|
|
}
|
|
</script>
|