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