<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          配合前端vue實現表格的增刪改查

          2021-10-13    前端達人

          前言:

                  這個章節內容是比較多的,分為前端部分和后端部分。

          目錄:

          實現效果:增刪改查

           一、后端部分:

          (1)數據庫:

                  新建一張表user,設置幾個字段,效果如下:

           (2)egg邏輯部分:

          提供的接口:http://localhost:7001/setUserList

           (3)egg具體實現步驟:

          1、router.js中添加:

          2、新建:app / controller / new / user.js

          (1)查,模糊查詢 

          (2)增

           (3)改

           (4)刪

           user.js 源碼:

          3、引入mysql:點我

          4、跨域問題解決:點我

           二、前端部分:

          新建vue文件:testApi.vue

          1、初始化查詢列表數據:頁面展示列表,列表數據mouted獲取

          2、頁面點擊新增:展示彈框,并將彈框內容去除掉,點擊新增,將彈框內容發送給后端

           3、頁面點擊列表里面具體數據的編輯:彈框,并回填數據,修改將當前數據的id和表格數據傳給后端

          4、刪除按鈕,點擊出現二次確認彈框,點擊確認將當前數據的id給后端就行 

           testApi.vue 源碼:


          實現效果:增刪改查

           一、后端部分:

          (1)數據庫:

                  新建一張表user,設置幾個字段,效果如下:

           (2)egg邏輯部分:

          提供的接口:http://localhost:7001/setUserList

          1. get 請求,獲取數據,支持模糊查詢
          2. post 請求,新增數據
          3. put 請求,給后端當前數據id,修改內容
          4. delete 請求,根據數據id刪除當前條數據

           (3)egg具體實現步驟:

          1、router.js中添加:

           
          
          1. /**
          2. * 路由配置
          3. * @param app
          4. */
          5. module.exports = app => {
          6. const { router, controller } = app;
          7. //--------------------------------------------------
          8. // server接口
          9. //--------------------------------------------------
          10. app.get('/setUserList', controller.new.user.getUserList);
          11. app.post('/setUserList', controller.new.user.postUserList);
          12. app.put('/setUserList', controller.new.user.putUserList);
          13. app.delete('/setUserList', controller.new.user.deleteUserList);
          14. }

          2、新建:app / controller / new / user.js

          (1)查,模糊查詢 

          select * from user where name like ? % 內容 %

          (2)增

          this.app.mysql.insert('表名',內容)

           (3)改

          UPDATE loginlist SET `password` = 'Ad123456' WHERE id = 2

           (4)刪

          delete from user where id = 1

           user.js 源碼:

           
          
          1. /**
          2. * 用戶信息路由
          3. * @param app
          4. * @returns {HomeController}
          5. */
          6. const Controller = require('egg').Controller;
          7. class NewsController extends Controller {
          8. async getUserList() {
          9. //查詢庫里的user表
          10. let params = this.ctx.query //獲取路徑后面的參數
          11. console.log('用戶的參數:');
          12. console.log(params);
          13. let sql = 'select * from user'
          14. let initSql = sql
          15. let content = [];//參數
          16. let isMore = false;//是否有多個查詢參數
          17. /**
          18. * @模糊查詢-量大的時候效率低
          19. * select * from user where name like ? % 內容 %
          20. * 在user表中全局查找name值 == 內容的
          21. * % 內容 % 全局查找內容
          22. * 內容 % 查找以 內容 開頭的數據
          23. * */
          24. if(params.name){
          25. sql += " where name like ?";
          26. content.push( "%"+params.name+"%" );
          27. isMore = true;
          28. }
          29. if(params.age){
          30. if(isMore){//true代表有多個參數
          31. sql += "and age LIKE ?";//and是兩個條件都必須滿足,or是或的關系
          32. }else{
          33. sql += " WHERE age LIKE ?";
          34. }
          35. content.push( "%"+params.age+"%" )
          36. isMore = true;
          37. }
          38. if(params.address){
          39. if(isMore){//true代表有多個參數
          40. sql += "and address LIKE ?";//and是兩個條件都必須滿足,or是或的關系
          41. }else{
          42. sql += " WHERE address LIKE ?";
          43. }
          44. content.push( "%"+params.address+"%" )
          45. isMore = true;
          46. }
          47. if(params.phone){
          48. if(isMore){//true代表有多個參數
          49. sql += "and phone LIKE ?";//and是兩個條件都必須滿足,or是或的關系
          50. }else{
          51. sql += " WHERE phone LIKE ?";
          52. }
          53. content.push( "%"+params.phone+"%" )
          54. }
          55. //開啟分頁
          56. if(params.page || params.pageSize){
          57. let current = params.page;//當前頁碼
          58. let pageSize = params.pageSize;//一頁展示多少條數據
          59. sql += " limit ?,?";
          60. content.push((current-1)*pageSize,parseInt(pageSize));
          61. }
          62. let allList = await this.app.mysql.query(initSql);
          63. let userList= await this.app.mysql.query(
          64. sql,content
          65. );
          66. this.ctx.body = {
          67. code:200,
          68. masg:'success',
          69. data: {
          70. list:userList,
          71. total:allList.length
          72. }
          73. };
          74. }
          75. /**
          76. * 新增用戶信息
          77. * INSERT INTO loginlist (aaa,bbb,ccc) VALUES ('"'+111+'","'+222+'","'+333+'"')
          78. * this.app.mysql.insert('表名',內容)
          79. * this.app.mysql.insert('表名',{
          80. * name:123,
          81. * age:1,
          82. * address:西安
          83. * })
          84. */
          85. //
          86. async postUserList() {
          87. console.log(this.ctx.request.body);
          88. //新增數據-user表
          89. let data = this.ctx.request.body
          90. data.id = parseInt(Math.random()*100000)
          91. let insertResult = await this.app.mysql.insert(
          92. 'user', data
          93. );
          94. this.ctx.body = {
          95. code:200,
          96. masg:'success',
          97. data:insertResult
          98. };
          99. }
          100. /**
          101. * 修改用戶信息
          102. * UPDATE loginlist SET `password` = 'Ad123456' WHERE id = 2(唯一值),修改一個
          103. * UPDATE loginlist SET username = 'admins', `password` = 'Ad123456' WHERE id = 2,修改多個
          104. */
          105. async putUserList(){
          106. //新增數據-user表
          107. let id = this.ctx.query.id //獲取路徑后面的參數
          108. let data = this.ctx.request.body
          109. let sql = 'update user set '
          110. let isMore = false;//是否有多個查詢參數
          111. if(!id){
          112. this.ctx.body = {
          113. code:200,
          114. masg:'warning',
          115. data:'id沒有傳'
          116. };
          117. return
          118. }
          119. //姓名
          120. if(data.name){
          121. sql += 'name = "'+data.name+'"'
          122. isMore = true
          123. }
          124. //年齡
          125. if(data.age){
          126. if(isMore){
          127. sql += ',age = "'+data.age+'"'
          128. }else{
          129. sql += 'age = "'+data.age+'"'
          130. }
          131. isMore = true
          132. }
          133. //地址
          134. if(data.address){
          135. if(isMore){
          136. sql += ',address = "'+data.address+'"'
          137. }else{
          138. sql += 'address = "'+data.address+'"'
          139. }
          140. isMore = true
          141. }
          142. //手機號
          143. if(data.phone){
          144. if(isMore){
          145. sql += ',phone = "'+data.phone+'"'
          146. }else{
          147. sql += 'phone = "'+data.phone+'"'
          148. }
          149. isMore = true
          150. }
          151. //郵箱地址
          152. if(data.email){
          153. if(isMore){
          154. sql += ',email = "'+data.email+'"'
          155. }else{
          156. sql += 'email = "'+data.email+'"'
          157. }
          158. }
          159. sql += ' where id = ' + id
          160. let insertResult = await this.app.mysql.query(sql)
          161. this.ctx.body = {
          162. code:200,
          163. masg:'success',
          164. data:insertResult
          165. };
          166. }
          167. /**
          168. * 注銷用戶接口
          169. * DELETE FROM loginlist WHERE username = 'superman'
          170. */
          171. async deleteUserList(){
          172. //查詢庫里的user表
          173. let params = this.ctx.query //獲取路徑后面的參數
          174. console.log('用戶的參數:');
          175. console.log(params);
          176. let sql = 'delete from user where id = '+ params.id
          177. let res = await this.app.mysql.query(
          178. sql
          179. );
          180. this.ctx.body = {
          181. code:200,
          182. masg:'success',
          183. data:res
          184. };
          185. }
          186. /**
          187. * 模糊查詢封裝方法
          188. * @params = auth
          189. * */
          190. async query( auth ) {
          191. const TABLE_NAME = 'user';
          192. const QUERY_STR = 'id, name, age, phone, address';
          193. let sql = `select ${QUERY_STR} from ${TABLE_NAME} where authName like "%${auth.authName}%"`;
          194. const row = await this.app.mysql.query(sql);
          195. return row;
          196. }
          197. }
          198. module.exports = NewsController;

          3、引入mysql:點我

          4、跨域問題解決:點我

           二、前端部分:

          新建vue文件:testApi.vue

          1、初始化查詢列表數據:頁面展示列表,列表數據mouted獲取

           
          
          1. <el-table
          2. :data="tableInfo.list"
          3. style="width: 100%">
          4. <el-table-column
          5. type="index"
          6. label="序號"
          7. align="center">
          8. </el-table-column>
          9. <el-table-column
          10. prop="name"
          11. label="姓名"
          12. align="center">
          13. </el-table-column>
          14. <el-table-column
          15. prop="age"
          16. label="年齡"
          17. align="center">
          18. </el-table-column>
          19. <el-table-column
          20. prop="address"
          21. label="地址">
          22. </el-table-column>
          23. <el-table-column
          24. prop="phone"
          25. label="手機號">
          26. </el-table-column>
          27. <el-table-column
          28. prop="email"
          29. label="郵箱">
          30. </el-table-column>
          31. <el-table-column
          32. label="操作"
          33. width="100">
          34. <template slot-scope="scope">
          35. <el-button type="text" size="small" @click="editFun(scope.row)">編輯</el-button>
          36. <el-button type="text" size="small" @click="deleteFun(scope.row)">刪除</el-button>
          37. </template>
          38. </el-table-column>
          39. </el-table>
           
          
          1. mounted(){
          2. this.initPage()
          3. },
          4. methods: {
          5. /***
          6. * 獲取列表數據
          7. */
          8. initPage() {
          9. let params = {
          10. page: this.tableInfo.page, //當前頁
          11. pageSize: this.tableInfo.pageSize //一頁展示多少條
          12. }
          13. this.$axios.get('http://localhost:7001/setUserList',{
          14. params
          15. }).then(res => {
          16. this.tableInfo.list = res.data.data.list
          17. this.tableInfo.total = res.data.data.total
          18. }).catch(error => {
          19. this.$message(error.data.message)
          20. })
          21. },
          22. }

          2、頁面點擊新增:展示彈框,并將彈框內容去除掉,點擊新增,將彈框內容發送給后端

           3、頁面點擊列表里面具體數據的編輯:彈框,并回填數據,修改將當前數據的id和表格數據傳給后端

           

           

          4、刪除按鈕,點擊出現二次確認彈框,點擊確認將當前數據的id給后端就行 

           testApi.vue 源碼:

           
          
          1. <template>
          2. <div class="pro_body">
          3. <el-button type='success' @click="addModal">新增</el-button>
          4. <el-table
          5. :data="tableInfo.list"
          6. style="width: 100%">
          7. <el-table-column
          8. type="index"
          9. label="序號"
          10. align="center">
          11. </el-table-column>
          12. <el-table-column
          13. prop="name"
          14. label="姓名"
          15. align="center">
          16. </el-table-column>
          17. <el-table-column
          18. prop="age"
          19. label="年齡"
          20. align="center">
          21. </el-table-column>
          22. <el-table-column
          23. prop="address"
          24. label="地址">
          25. </el-table-column>
          26. <el-table-column
          27. prop="phone"
          28. label="手機號">
          29. </el-table-column>
          30. <el-table-column
          31. prop="email"
          32. label="郵箱">
          33. </el-table-column>
          34. <el-table-column
          35. label="操作"
          36. width="100">
          37. <template slot-scope="scope">
          38. <el-button type="text" size="small" @click="editFun(scope.row)">編輯</el-button>
          39. <el-button type="text" size="small" @click="deleteFun(scope.row)">刪除</el-button>
          40. </template>
          41. </el-table-column>
          42. </el-table>
          43. <el-pagination
          44. class="work_pagination"
          45. background
          46. :layout="'total,prev, pager, next,sizes'"
          47. :total="tableInfo.total"
          48. :hide-on-single-page="false"
          49. :current-page="tableInfo.page"
          50. :page-size="tableInfo.pageSize"
          51. @current-change="pageChange"
          52. @size-change="pageSizeChange"
          53. >
          54. </el-pagination>
          55. <!--彈框部分-->
          56. <el-dialog
          57. custom-class="modalName"
          58. :visible.sync="modal.show"
          59. :width="modal.type === 'delete'? '470px' : '800px'">
          60. <h3 v-if="modal.type === 'add'" slot="title">新增</h3>
          61. <h3 v-if="modal.type === 'edit'" slot="title">修改</h3>
          62. <h3 v-if="modal.type === 'delete'" slot="title">提示</h3>
          63. <div v-if="modal.type !== 'delete'" class="editNameBody">
          64. <el-form class="editNameFrom" :model="modalFrom" label-width="120px" label-position="right">
          65. <el-form-item label="姓名:">
          66. <el-input v-model="modalFrom.name"></el-input>
          67. </el-form-item>
          68. <el-form-item label="年紀:">
          69. <el-input v-model="modalFrom.age"></el-input>
          70. </el-form-item>
          71. <el-form-item label="手機號:">
          72. <el-input v-model="modalFrom.phone"></el-input>
          73. </el-form-item>
          74. <el-form-item label="郵箱:">
          75. <el-input v-model="modalFrom.email"></el-input>
          76. </el-form-item>
          77. <el-form-item label="地址:">
          78. <el-input v-model="modalFrom.address" type="textarea"></el-input>
          79. </el-form-item>
          80. </el-form>
          81. </div>
          82. <div v-if="modal.type === 'delete'">
          83. <i class="el-icon-warning" style="margin-right:7px;color:#FFAA00;font-size: 16px;"></i>請確認是否刪除
          84. </div>
          85. <div slot="footer" class="dialog-footer">
          86. <el-button @click="modal.show = false">取 消</el-button>
          87. <el-button v-if="modal.type === 'add'" type="primary" @click="addUserList">新增</el-button>
          88. <el-button v-if="modal.type === 'edit'" type="primary" @click="editUserList">修改</el-button>
          89. <el-button v-if="modal.type === 'delete'" type="primary" @click="deleteUserList">確 認</el-button>
          90. </div>
          91. </el-dialog>
          92. </div>
          93. </template>
          94. <script>
          95. export default {
          96. data() {
          97. return {
          98. tableInfo:{
          99. columns:[
          100. {
          101. title: '序號',
          102. type: 'index',
          103. },{
          104. title: '姓名',
          105. prop: 'name',
          106. align: 'center'
          107. },
          108. {
          109. title: '年齡',
          110. prop: 'age',
          111. align: 'center'
          112. },{
          113. title: '地址',
          114. prop: 'address',
          115. align: 'center'
          116. },{
          117. title: '郵箱',
          118. prop: 'email',
          119. align: 'center'
          120. },{
          121. title: '手機號',
          122. prop: 'phone',
          123. align: 'center'
          124. },
          125. {//內容slot
          126. slot: 'operateT'
          127. }
          128. ],
          129. list:[],
          130. page:1,
          131. pageSize:10,
          132. total:0,
          133. },
          134. modal:{
          135. show:false,
          136. type:'add'
          137. },
          138. modalFrom:{
          139. name:'',
          140. age:'',
          141. phone:'',
          142. address:'',
          143. email:''
          144. }
          145. };
          146. },
          147. mounted(){
          148. this.initPage()
          149. },
          150. methods: {
          151. /***
          152. * 獲取列表數據
          153. */
          154. initPage() {
          155. let params = {
          156. page: this.tableInfo.page, //當前頁
          157. pageSize: this.tableInfo.pageSize //一頁展示多少條
          158. }
          159. this.$axios.get('http://localhost:7001/setUserList',{
          160. params
          161. }).then(res => {
          162. this.tableInfo.list = res.data.data.list
          163. this.tableInfo.total = res.data.data.total
          164. }).catch(error => {
          165. this.$message(error.data.message)
          166. })
          167. },
          168. /**
          169. * 當前頁發生改變
          170. * */
          171. pageChange(page) {
          172. this.tableInfo.page = page
          173. this.initPage() //刷新列表數據
          174. },
          175. /**
          176. * 當前第幾頁發生改變
          177. * */
          178. pageSizeChange(pageSize) {
          179. this.tableInfo.page = 1
          180. this.tableInfo.pageSize = pageSize
          181. this.initPage() //刷新列表數據
          182. },
          183. //新增彈框
          184. addModal(){
          185. this.modalFrom ={
          186. name:'',
          187. age:'',
          188. phone:'',
          189. address:'',
          190. email:''
          191. }
          192. this.modal.show = true
          193. this.modal.type = 'add'
          194. },
          195. //修改彈框
          196. editFun(row){
          197. this.modalFrom = row
          198. this.modal.show = true
          199. this.modal.type = 'edit'
          200. },
          201. //刪除彈框
          202. deleteFun(row){
          203. this.modalFrom = row
          204. this.modal.show = true
          205. this.modal.type = 'delete'
          206. },
          207. addUserList(){
          208. this.$axios({
          209. method:'post',
          210. url:'http://localhost:7001/setUserList',
          211. data:this.modalFrom
          212. }).then(res => {
          213. this.$message.success('新增成功')
          214. this.initPage() //刷新數據
          215. this.modal.show = false
          216. })
          217. },
          218. editUserList(){
          219. this.$axios({
          220. method:'put',
          221. url:'http://localhost:7001/setUserList',
          222. params:{
          223. id:this.modalFrom.id
          224. },
          225. data:this.modalFrom
          226. }).then(res => {
          227. this.$message.success('修改成功')
          228. this.initPage() //刷新數據
          229. this.modal.show = false
          230. })
          231. },
          232. deleteUserList(){
          233. this.$axios({
          234. method:'delete',
          235. url:'http://localhost:7001/setUserList',
          236. params:{
          237. id:this.modalFrom.id
          238. }
          239. }).then(res => {
          240. this.$message.success('刪除成功')
          241. this.initPage() //刷新數據
          242. this.modal.show = false
          243. })
          244. }
          245. }
          246. }
          247. </script>
          248. <style lang='scss'>
          249. .modalName{
          250. h3{
          251. padding:10px;
          252. }
          253. }
          254. </style>


          藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉自:csdn
          免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合