Vue中常用表格(增删改查)

  1 <template>
  2  <div>
  3   <el-button style="float:left;margin-left:20px;" type="primary" @click="add_dialogVisible = true"
  4    >新增用户</el-button
  5   >
  6   <el-table
  7    :data="getSearchInfo.slice((currpage - 1) * pageSize, currpage * pageSize)"
  8    style=" 100%"
  9   >
 10    <template v-for="(item, index) in user_data_title">
 11     <el-table-column :prop="item.prop" :label="item.label" align="center" :key="index">
 12     </el-table-column>
 13    </template>
 14    <el-table-column align="center">
 15     <template slot="header" slot-scope="scope">
 16      <el-input v-model="search" size="mini" placeholder="输入关键字搜索" />
 17     </template>
 18     <template slot-scope="scope">
 19      <el-button size="mini" plain type="primary" @click="handleEdit(scope.row)">编辑</el-button>
 20      <el-button size="mini" plain type="danger" @click="handleDelete(scope.row)">删除</el-button>
 21      <el-button size="mini" plain type="warning" @click="handleChagePwd(scope.row)"
 22       >修改密码</el-button
 23      >
 24     </template>
 25    </el-table-column>
 26   </el-table>
 27   <el-pagination
 28    background
 29    :page-size="pageSize"
 30    :page-sizes="[10, 20, 50]"
 31    :current-page.sync="currentPage"
 32    :total="getSearchInfo.length"
 33    @size-change="handleSizeChange"
 34    @current-change="handleCurrentChange"
 35    layout="sizes, total, prev, pager, next, jumper"
 36   >
 37   </el-pagination>
 38   <!-- 新增用户 -->
 39   <div class="add_dialog">
 40    <el-dialog
 41     title="新增用户"
 42     :visible.sync="add_dialogVisible"
 43     :close-on-click-modal="false"
 44     :close-on-press-escape="false"
 45     :show-close="false"
 46     width="500px"
 47    >
 48     <el-form>
 49      <el-form-item label="用户名:">
 50       <el-input
 51        v-model.trim="add.user_name"
 52        placeholder="请输入用户名"
 53        autocomplete="off"
 54       ></el-input>
 55      </el-form-item>
 56      <el-form-item label="密码:">
 57       <el-input v-model.trim="add.password" placeholder="请输入密码" autocomplete="off"></el-input>
 58      </el-form-item>
 59     </el-form>
 60     <span slot="footer" class="dialog-footer">
 61      <el-button @click="cancel('add')">取 消</el-button>
 62      <el-button type="primary" @click="add_determine">确 定</el-button>
 63     </span>
 64    </el-dialog>
 65   </div>
 66   <!-- 编辑用户 -->
 67   <div class="edit_dialog">
 68    <el-dialog
 69     title="编辑用户"
 70     :visible.sync="edit_dialogVisible"
 71     :close-on-click-modal="false"
 72     :close-on-press-escape="false"
 73     :show-close="false"
 74     width="500px"
 75    >
 76     <el-form>
 77      <el-form-item label="用户名:">
 78       <el-input
 79        v-model.trim="edit.user_name"
 80        placeholder="请输入用户名"
 81        autocomplete="off"
 82       ></el-input>
 83      </el-form-item>
 84      <el-form-item label="密码:">
 85       <el-input v-model.trim="edit.password" placeholder="请输入密码" autocomplete="off"></el-input>
 86      </el-form-item>
 87     </el-form>
 88     <span slot="footer" class="dialog-footer">
 89      <el-button @click="cancel('edit')">取 消</el-button>
 90      <el-button type="primary" @click="edit_determine">确 定</el-button>
 91     </span>
 92    </el-dialog>
 93   </div>
 94   <!-- 修改密码弹窗 -->
 95   <div class="changePwd_dialog">
 96    <el-dialog
 97     :title="changeName"
 98     :visible.sync="changePwd_dialogVisible"
 99     :close-on-click-modal="false"
100     :close-on-press-escape="false"
101     :show-close="false"
102     width="500px"
103    >
104     <div>
105      <span :style="inlineStyle">修改密码:</span>
106      <el-input
107       :style="inlineStyle"
108       v-model.trim="change.new_pwd"
109       placeholder="请输入新密码"
110      ></el-input>
111     </div>
112     <span slot="footer" class="dialog-footer">
113      <el-button @click="cancel('changePwd')">取 消</el-button>
114      <el-button type="primary" @click="changePwd_determine">确 定</el-button>
115     </span>
116    </el-dialog>
117   </div>
118  </div>
119 </template>
120 
121 <script>
122 export default {
123  name: 'UserManagement',
124  inject: ['reload'],
125  data() {
126   return {
127    add_dialogVisible: false,
128    edit_dialogVisible: false,
129    changePwd_dialogVisible: false,
130    user_data: [],
131    user_data_title: [
132     {
133      prop: 'name',
134      label: '用户名',
135     },
136     {
137      prop: 'password',
138      label: '密码',
139     },
140     {
141      prop: 'createTime',
142      label: '创建时间',
143     },
144    ],
145    search: '',
146    currpage: 1,
147    pageSize: 10,
148    currentPage: null,
149    add: {
150     // 新增用户
151     user_name: '',
152     password: '',
153    },
154    edit: {
155     // 编辑用户
156     user_name: '',
157     password: '',
158    },
159    changeName: '',
160    change: {
161     // 修改密码
162     new_pwd: '',
163    },
164    inlineStyle: {
165     // span和input在同一行
166     display: 'inline',
167    },
168   }
169  },
170  computed: {
171   getSearchInfo() {
172    //   搜索
173    let search = this.search
174    if (search) {
175     this.currpage = 1
176     this.currentPage = 1
177     return this.user_data.filter(data => {
178      return Object.keys(data).some(key => {
179       return (
180        String(data[key])
181         .toLowerCase()
182         .indexOf(search) > -1
183       )
184      })
185     })
186    }
187    return this.user_data
188   },
189  },
190  methods: {
191   get_user_data() {
192    this.user_data = []
193    let data = this.$mockjs.mock({
194     'user_data|20': [
195      {
196       user_id: '@natural',
197       name: '@cname',
198       password: '@word',
199       createTime: '@datetime',
200      },
201     ],
202    })
203    this.user_data = data.user_data
204   },
205   handleEdit(row) {
206    // 编辑
207    console.log(row)
208    this.edit.user_name = row.name
209    this.edit.password = row.password
210    this.edit_dialogVisible = true
211   },
212   edit_determine() {
213    // 提交编辑信息
214    console.log(this.edit)
215   },
216   handleDelete(row) {
217    // 删除
218    this.$confirm('此操作将永久删除该用户, 是否继续?', '提示', {
219     confirmButtonText: '确定',
220     cancelButtonText: '取消',
221     type: 'warning',
222    })
223     .then(() => {
224      this.$message({
225       type: 'success',
226       message: '删除成功!',
227      })
228     })
229     .catch(() => {
230      return false
231     })
232   },
233   handleChagePwd(row) {
234    // 修改密码
235    console.log(row)
236    this.changeName = row.name
237    this.changePwd_dialogVisible = true
238   },
239   changePwd_determine() {
240    // 提交新密码
241    console.log(this.change)
242   },
243   handleCurrentChange(cpage) {
244    // 点击页数
245    this.currpage = cpage
246   },
247   handleSizeChange(val) {
248    this.pageSize = val
249   },
250   add_determine() {
251    // 提交新用户信息
252    console.log(this.add)
253   },
254   cancel(data) {
255    // 取消
256    switch (data) {
257     case 'add':
258      this.add = {}
259      this.add_dialogVisible = false
260      break
261     case 'changePwd':
262      this.change = {}
263      this.changePwd_dialogVisible = false
264      break
265     default:
266      this.edit = {}
267      this.edit_dialogVisible = false
268      break
269    }
270   },
271  },
272  mounted() {
273   this.get_user_data()
274  },
275 }
276 </script>
277 
278 <style scoped>
279 .edit_dialog /deep/ .el-dialog,
280 .add_dialog /deep/ .el-dialog,
281 .changePwd_dialog /deep/ .el-dialog {
282  border-radius: 15px;
283 }
284 .changePwd_dialog /deep/ .el-input__inner {
285   300px;
286 }
287 </style>
原文地址:https://www.cnblogs.com/lyt520/p/14865817.html