long
2021-01-18 a12059eb143cdd84f87848591b3a5bce30ea3620
提交 | 用户 | age
2a61f6 1 <template>
L 2   <div class="app-container">
3     <!-- 搜索区 ↓↓↓↓↓↓↓↓↓↓ -->
4     <el-form v-show="showSearch" ref="searchForm" :inline="true">
5       <el-form-item label="角色名称">
6         <el-input
7           v-model="keyWord"
8           placeholder="请输入角色名称"
9           clearable
10           size="small"
11           style="width: 240px"
12           @keyup.enter.native="reGetList"
13         />
14       </el-form-item>
15       <el-form-item>
16         <el-button type="cyan" icon="el-icon-search" size="mini" @click="reGetList">搜索</el-button>
17         <el-button icon="el-icon-refresh" size="mini" @click="resetHandle">重置</el-button>
18       </el-form-item>
19     </el-form>
20     <!-- 搜索区 ↑↑↑↑↑↑↑↑↑↑ -->
21
22     <!-- 操作区 ↓↓↓↓↓↓↓↓↓↓ -->
23     <el-row :gutter="10" class="mb8">
24       <el-col :span="1.5">
25         <el-button
26           type="primary"
27           icon="el-icon-plus"
28           size="mini"
838f4f 29           @click="showAddDialog"
2a61f6 30         >新增</el-button>
L 31       </el-col>
32       <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
33     </el-row>
34     <!-- 操作区 ↑↑↑↑↑↑↑↑↑↑ -->
35
36     <el-table :data="list">
37       <el-table-column type="index" label="序号" align="center" width="60" />
38       <el-table-column label="角色名称" prop="name" align="center" min-width="120" />
838f4f 39       <el-table-column label="是否上架" prop="isUp" align="center" min-width="100">
L 40         <template slot-scope="scope">
41           <el-switch
42             v-model="scope.row.isUp"
43             :active-value="1"
44             :inactive-value="0"
45             @change="handleUpChange(scope.row)"
46           />
47         </template>
48       </el-table-column>
49       <el-table-column label="创建时间" prop="createTime" align="center" min-width="160" />
2a61f6 50       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" min-width="100">
L 51         <template slot-scope="scope">
52           <el-button
53             size="mini"
54             type="text"
55             icon="el-icon-edit"
838f4f 56             @click="showEditDialog(scope.row)"
2a61f6 57           >编辑</el-button>
L 58           <el-button
59             size="mini"
60             type="text warn"
61             icon="el-icon-delete"
62             @click="handleDelete(scope.row)"
63           >删除</el-button>
64         </template>
65       </el-table-column>
66     </el-table>
838f4f 67
L 68     <!-- 新增&编辑 -->
69     <el-dialog :title="dialogData.type=='add'?'新增医院科室':'编辑医院科室'" width="500px" :visible.sync="dialogVisible" append-to-body :before-close="hideDialog">
70       <el-form ref="refDialog" :model="dialogData" label-width="110px" :rules="rules" size="small">
71         <el-form-item label="名称" prop="name">
72           <el-input v-model="dialogData.name" placeholder="请输入名称" />
73         </el-form-item>
74         <el-form-item label="是否上架" prop="isUp">
75           <el-switch
76             v-model="dialogData.isUp"
77             :active-value="1"
78             :inactive-value="0"
79           />
80         </el-form-item>
81       </el-form>
82       <div slot="footer" class="dialog-footer">
83         <el-button @click="hideDialog">取消</el-button>
84         <el-button type="primary" @click="submitHandle">确定</el-button>
85       </div>
86     </el-dialog>
2a61f6 87
L 88     <pagination
89       v-show="total>0"
90       :total="total"
91       :page.sync="pageNum"
92       :limit.sync="pageSize"
93       @pagination="getList"
94     />
95   </div>
96 </template>
97
98 <script>
99
100 export default {
838f4f 101   name: 'Demo',
2a61f6 102   data() {
L 103     return {
104       showSearch: true, // 是否显示搜索区
105       keyWord: '',
106
107       list: [],
108
838f4f 109       // 弹窗数据
L 110       dialogVisible: false,
111       dialogData: {},
112
2a61f6 113       // 分页 ↓↓↓↓↓↓↓↓↓↓
L 114       total: 0,
115       pageNum: 1,
838f4f 116       pageSize: 20,
2a61f6 117       // 分页 ↑↑↑↑↑↑↑↑↑↑
838f4f 118
L 119       // 表单校验
120       rules: {
121         name: [
122           { required: true, message: '名称不能为空', trigger: 'change' }
123         ],
124         isUp: [
125           { required: true, message: '是否上架不能为空', trigger: 'change' }
126         ]
127       }
2a61f6 128     }
L 129   },
130   mounted() {
131     this.init()
132   },
133   methods: {
134     // 初始化
135     init() {
136       this.getList()
137     },
138
139     // 获取列表
140     getList() {
141       var { pageNum, pageSize, keyWord } = this
142       this.postFN({
143         url: 'xxx',
144         params: {
145           pageNum: pageNum,
efd7c8 146           pageSize: pageSize,
2a61f6 147           keyWord: keyWord
L 148         },
149         mockData: {
150           code: 100,
151           msg: '',
152           data: {
153             list: [{
154               id: 'xxx',
155               index: 1,
156               name: '超级管理员',
157               createTime: '2020-08-09 10:10:10'
158             }],
159             total: 100
160           }
161         }
162       }, (inf) => {
163         this.list = inf.list || []
164         this.total = inf.total
165       })
166     },
167     // 重新获取列表
168     reGetList() {
169       this.pageNum = 1
170       this.getList()
171     },
172     // 重置
173     resetHandle() {
174       this.keyWord = ''
175       this.reGetList()
176     },
177     // 删除
178     handleDelete(item) {
179       // 打开二次确认弹窗
180       this.$confirm('是否确认删除该角色?', '提示', {
181         confirmButtonText: '确定',
182         cancelButtonText: '取消',
183         type: 'warning'
184       }).then(() => {
185         // 确定回调
186         this.postFN({
187           url: 'xxx',
188           params: {
189             id: item.id
190           },
191           mockData: {
192             code: 100,
193             msg: '',
194             data: {}
195           }
196         }, () => {
197           this.getList()
198           this.$messageSuc('删除成功')
199         })
200       }).catch(() => {})
838f4f 201     },
L 202     // 修改是否上架 todo
203     handleUpChange(item) {
204       const text = item.isUp === 1 ? '上架' : '下架'
205       this.$confirm('确认要' + text + '该角色吗?', '提示', {
206         confirmButtonText: '确定',
207         cancelButtonText: '取消',
208         type: 'warning'
209       }).then(() => {
210         this.postFN({
211           url: 'xxx',
212           params: {
213             id: item.id
214           },
215           mockData: {
216             code: 100,
217             msg: '',
218             data: {}
219           }
220         }, () => {
221           this.$messageSuc(text + '成功')
222         })
223       }).catch(() => {
224         item.isUp = item.isUp === 1 ? 0 : 1
225       })
226     },
227
228     // 打开新增弹窗
229     showAddDialog() {
230       var dialogData = {
231         type: 'add',
232         isUp: 1
233       }
234       this.dialogVisible = true
235       this.$nextTick(() => {
236         this.dialogData = dialogData
237         this.$refs['refDialog'].resetFields()
238       })
239     },
240     // 打开编辑弹框
241     showEditDialog(item) {
242       var dialogData = {
243         type: 'edit',
244         ...item
245       }
246       console.log('dialogData', dialogData)
247       this.dialogVisible = true
248       this.$nextTick(() => {
249         this.dialogData = dialogData
250         this.$refs['refDialog'].resetFields()
251       })
252     },
253     // 关闭编辑弹窗
254     hideDialog() {
255       this.dialogData = {}
256       this.dialogVisible = false
257     },
258     // 提交新增&编辑
259     submitHandle() {
260       this.$refs['refDialog'].validate(valid => {
261         if (valid) {
262           this.submitReq()
263         }
264       })
265     },
266     // 提交接口
267     submitReq() {
268       var { dialogData } = this
269       var params = {
270         name: dialogData.name,
271         isUp: dialogData.isUp
272       }
273
274       if (dialogData.password) params.password = dialogData.password
275
276       var isAdd = dialogData.type === 'add'
277       var url = isAdd ? 'admin/hospital/department/add' : 'admin/hospital/department/edit'
278
279       !isAdd && (params.id = dialogData.id)
280
281       this.postFN({
282         url: url,
283         params: params,
284         mockData: {
285           code: 100,
286           msg: '',
287           data: {}
288         }
289       }, () => {
290         this.$messageSuc('保存成功')
291         this.hideDialog()
292         this.reGetList()
293       })
2a61f6 294     }
L 295   }
296 }
297 </script>
298
299 <style lang="scss" scoped>
300
301 </style>