blob: 3713c68297b8fa88633c2e562e5fcdccf6a8f535 [file] [log] [blame]
huibing.xie1f1606f2018-08-20 15:46:55 +08001<template>
2 <div class="app-container">
3 <div class="filter-container">
4 <el-row :gutter="20">
5 <el-col :span="4">
6 <el-select clearable @change="initZyList" class="filter-item" v-model="listQuery.yx" placeholder="院系">
huibing.xiec95b6a22018-08-29 14:15:43 +08007 <el-option v-for="item in yxList" :key="item.id" :label="item.name" :value="item.id">
huibing.xie1f1606f2018-08-20 15:46:55 +08008 </el-option>
9 </el-select>
10 </el-col>
11 <el-col :span="4">
12 <el-select clearable class="filter-item" v-model="listQuery.zy" placeholder="专业">
13 <el-option v-for="item in zyList" :key="item.id" :label="item.zymc" :value="item.id">
14 </el-option>
15 </el-select>
16 </el-col>
17 <el-col :span="4">
18 <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="班级名称" v-model="listQuery.bjmc">
19 </el-input>
20 </el-col>
21 <el-col :span="12">
22 <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查询</el-button>
23 <el-button class="filter-item" style="margin-left: 10px;" @click="handleCreate(null, 'create')" type="primary" icon="el-icon-edit">添加</el-button>
24 <el-button class="filter-item" style="margin-left: 10px;" @click="handleReset" type="primary" icon="el-icon-edit">重置</el-button>
25 </el-col>
26 </el-row>
27 <el-row :gutter="20">
28 <el-col :span="4">
29 <el-select clearable @change="initZyList" class="filter-item" v-model="listQuery.nj" placeholder="年级">
30 <el-option v-for="item in njList" :key="item.id" :label="item.name" :value="item.id">
31 </el-option>
32 </el-select>
33 </el-col>
34 <el-col :span="4">
35 <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="班级代码" v-model="listQuery.bjdm">
36 </el-input>
37 </el-col>
38 <el-col :span="4">
39 <el-select clearable class="filter-item" v-model="listQuery.sfky" placeholder="是否可用">
40 <el-option key="1" label="可用" value="1">
41 </el-option>
42 <el-option key="0" label="不可用" value="0">
43 </el-option>
44 </el-select>
45 </el-col>
46 <el-col :span="12">
47 </el-col>
48 </el-row>
49 </div>
50 <el-table :height="height" :data="items" v-loading="listLoading" element-loading-text="Loading" border fit highlight-current-row>
51 <el-table-column fixed align="center" label='序号' width="95">
52 <template slot-scope="scope">
53 {{scope.row.id}}
54 </template>
55 </el-table-column>
56 <el-table-column label="年级" align="center">
57 <template slot-scope="scope">
58 {{scope.row.njmc}}
59 </template>
60 </el-table-column>
61 <el-table-column label="院系" align="center">
62 <template slot-scope="scope">
63 {{scope.row.yxmc}}
64 </template>
65 </el-table-column>
66 <el-table-column label="专业" align="center">
67 <template slot-scope="scope">
68 {{scope.row.zymc}}
69 </template>
70 </el-table-column>
71 <el-table-column label="班级代码" align="center">
72 <template slot-scope="scope">
73 {{scope.row.bjdm}}
74 </template>
75 </el-table-column>
76 <el-table-column label="班级名称" align="center">
77 <template slot-scope="scope">
78 {{scope.row.bjmc}}
79 </template>
80 </el-table-column>
81 <el-table-column label="是否可用" align="center">
82 <template slot-scope="scope">
83 {{scope.row.sfkymc}}
84 </template>
85 </el-table-column>
86 <el-table-column
87 fixed="right"
88 header-align="center"
89 align="center"
90 width="150"
91 label="操作">
92 <template slot-scope="scope">
93 <el-button type="text" size="small" @click="handleCreate(scope.row.id, 'update')">修改</el-button>
94 <el-button type="text" size="small" @click="handleDelete(scope.row.id)">删除</el-button>
95 </template>
96 </el-table-column>
97 </el-table>
98 <div class="pagination-container">
99 <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.pageIndex"
100 :page-sizes="[10,20,30, 50]" :page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="recordCount">
101 </el-pagination>
102 </div>
103
104 <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
105 <el-form :rules="rules" ref="dataForm" :model="temp" label-position="left" label-width="150px" style='width: 400px; margin-left:50px;'>
106 <el-form-item label="班级代码" prop="bjdm">
107 <el-input v-model="temp.bjdm"></el-input>
108 </el-form-item>
109 <el-form-item label="班级名称" prop="bjmc">
110 <el-input v-model="temp.bjmc"></el-input>
111 </el-form-item>
112 <el-form-item label="院系" prop="yx">
113 <el-select class="filter-item" @change="initFormZyList" v-model="temp.yx" placeholder="--请选择--">
huibing.xiec95b6a22018-08-29 14:15:43 +0800114 <el-option v-for="item in yxList" :key="item.id" :label="item.name" :value="item.id">
huibing.xie1f1606f2018-08-20 15:46:55 +0800115 </el-option>
116 </el-select>
117 </el-form-item>
118 <el-form-item label="专业" prop="zy">
119 <el-select class="filter-item" v-model="temp.zy" placeholder="--请选择--">
120 <el-option v-for="item in formZyList" :key="item.id" :label="item.zymc" :value="item.id">
121 </el-option>
122 </el-select>
123 </el-form-item>
124 <el-form-item label="年级" prop="nj">
125 <el-select class="filter-item" v-model="temp.nj" placeholder="--请选择--">
126 <el-option v-for="item in njList" :key="item.id" :label="item.name" :value="item.id">
127 </el-option>
128 </el-select>
129 </el-form-item>
130 <el-form-item label="是否可用">
131 <el-select class="filter-item" v-model="temp.sfky" placeholder="--请选择--">
132 <el-option key="1" label="可用" value="1">
133 </el-option>
134 <el-option key="0" label="不可用" value="0">
135 </el-option>
136 </el-select>
137 </el-form-item>
138 </el-form>
139 <div slot="footer" class="dialog-footer">
140 <el-button @click="dialogFormVisible = false">返回</el-button>
141 <el-button type="primary" @click="createData">提交</el-button>
142 </div>
143 </el-dialog>
144 </div>
145</template>
146
147<script>
148import { getList, getItem, createClass, deleteClass } from '@/api/class-api'
149import { getDicList } from '@/api/dictionary-api'
huibing.xiebba5eb92018-08-27 11:12:36 +0800150import { getDeptList as getAllDeptList } from '@/api/department-api'
huibing.xie1f1606f2018-08-20 15:46:55 +0800151import { getZyListByYx } from '@/api/major-api'
152import waves from '@/directive/waves' // 水波纹指令
153import { resetForm } from '@/utils'
154import { crudPageList, crudGetItem, crudCreate, crudDelete } from '@/utils/crud'
155import mixindata from '@/utils/crud'
156
157const initData = { sfky: '1' }
158export default {
159 name: 'class',
160 directives: {
161 waves
162 },
163 mixins: [mixindata],
164 data() {
165 return {
166 yxList: [],
167 zyList: [],
168 formZyList: [],
169 njList: [],
170 rules: {
171 bjdm: [{ required: true, message: '班级代码必填', trigger: 'blur' }],
172 bjmc: [{ required: true, message: '班级名称必填', trigger: 'blur' }],
173 yx: [{ required: true, message: '院系必选', trigger: 'change' }],
174 zy: [{ required: true, message: '专业必选', trigger: 'change' }],
175 nj: [{ required: true, message: '年级必选', trigger: 'change' }]
176 }
177 }
178 },
179 filters: {
180 statusFilter(status) {
181 const statusMap = {
182 '1': 'success',
183 '0': 'danger'
184 }
185 return statusMap[status]
186 }
187 },
188 created() {
189 this.initYxList()
190 this.initZyList()
191 this.initNjList()
192 this.handlePageList()
193 this.height = window.innerHeight - 266
194 },
195 methods: {
196 initYxList() {
197 getAllDeptList(this.listQuery).then(response => {
198 this.yxList = response.items
199 })
200 },
201 initZyList() {
202 getZyListByYx({ yx: this.listQuery.yx }).then(response => {
203 this.zyList = response.items
204 // TODO 坑,this.listQuery.zy == null 直接赋值,专业下拉框选择出bug,无法选择,原因未知
205 for (const attr in this.listQuery) {
206 if (attr === 'zy') {
207 this.listQuery['zy'] = null
208 }
209 }
210 })
211 },
212 initFormZyList() {
213 getZyListByYx({ yx: this.temp.yx }).then(response => {
214 this.formZyList = response.items
215 // TODO 坑,this.listQuery.zy == null 直接赋值,专业下拉框选择出bug,无法选择,原因未知
216 for (const attr in this.temp) {
217 if (attr === 'zy') {
218 this.temp['zy'] = null
219 }
220 }
221 })
222 },
223 initNjList() {
huibing.xie99536f52018-08-29 14:30:32 +0800224 getDicList({ dicType: 'nj' }).then(response => {
huibing.xie1f1606f2018-08-20 15:46:55 +0800225 this.njList = response.items
226 })
227 },
228 handlePageList() {
229 crudPageList(this, getList)
230 },
231 handleCreate(rowid, dialogStatus) {
232 this.dialogStatus = dialogStatus
233 crudGetItem(this, getItem, rowid, initData)
234 },
235 handleReset() {
236 resetForm(this.listQuery)
237 },
238 handleFilter() {
239 this.listQuery.pageIndex = 1
240 this.handlePageList()
241 },
242 handleSizeChange(val) {
243 this.listQuery.pageSize = val
244 this.handlePageList()
245 },
246 handleCurrentChange(val) {
247 this.listQuery.pageIndex = val
248 this.handlePageList()
249 },
250 createData() {
251 crudCreate(this, createClass, this.handlePageList)
252 },
253 handleDelete(rowid) {
254 crudDelete(this, deleteClass, rowid, this.handlePageList)
255 }
256 }
257}
258</script>