侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

vue2.5+elementui+hyperf+jwt实现用户列表页中操作栏编辑功能demo

前端  /  管理员 发布于 3年前   1281

该项目是以典型的前后端分离架构:hyperf、jwt + vue、element ui


需求:

用户列表页,操作栏中编辑按钮,通过前后端交互实现编辑用户信息功能

完成功能:用户操作栏中编辑用户信息功能

未完成功能:新增 批量删除 , 操作栏功能,删除等

后续功能:

新增,删除可能就不记录文章了,因为跟编辑差不多一样,批量会继续写


环境:

跟之前的一样(有兴趣的可以自行翻阅)

  "dependencies": {
    "axios": "^0.21.1",
    "element-ui": "^2.15.6",
    "vue": "^2.5.2",
    "vue-router": "^3.0.1",
    "vuex": "^3.6.2"
  },


后端测试接口:

hyperf2.1+jwt

use App\Model\Admin;

/**
 * 用户编辑
 * @Auth("jwt")
 * @GetMapping(path="/admin/useredit")
 */
public function useredit()
{
    $data = $this->request->all();
    $user['name'] = $data['name'];
    $user['password'] = $data['password'];
    $user['created_at'] = $data['created_at'];
    $user['updated_at'] = $data['updated_at'];
    $user['status'] = $data['status'];
    $res = Admin::query()->where('id', $data['id'])->update($user);
    return ['data' => $res];
}


前端vue: 在用户列表页实现功能

/src/views/user/index.vue

<template>
  <div>
    <el-table :data="tableData">
      <el-table-column prop="id" label="ID" width="120"></el-table-column>
      <el-table-column prop="name" label="姓名" width="140"></el-table-column>
      <el-table-column prop="password" label="密码" width="120"></el-table-column>
      <el-table-column prop="created_at" label="添加日期" width="140"></el-table-column>
      <el-table-column prop="updated_at" label="更新日期" width="140"></el-table-column>
      <el-table-column prop="status" label="状态" width="80" align="center">
          <template scope="scope">
              <span v-if="scope.row.status==0" style="color:red;">停用</span>
              <span v-if="scope.row.status==1" style="color:green;">启用</span>
          </template>
      </el-table-column>
     <el-table-column label="操作" width="140" align="center">
         <template scope="scope">
            <el-button type="text" size="mini" @click="blockUp(scope.row)" v-if="scope.row.status==1">停用</el-button>
            <el-button type="text" size="mini" @click="startUsing(scope.row)" v-if="scope.row.status==0">启用</el-button>
            <el-button type="text" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
            <el-dialog title="编辑用户" :visible.sync="dialogFormVisible" width="40%">
              <el-form :model="form">
                <el-form-item label="名称" :label-width="formLabelWidth">
                  <el-input v-model="form.name" auto-complete="off"></el-input>
                </el-form-item>
                <el-form-item label="密码" :label-width="formLabelWidth">
                  <el-input v-model="form.password" auto-complete="off"></el-input>
                </el-form-item>
                <el-form-item label="添加日期" :label-width="formLabelWidth">
                  <div class="block" style="width: 200px;">
                    <el-date-picker v-model="form.created_at" value-format="yyyy-MM-dd HH:mm:ss"  type="datetime" placeholder="选择日期时间"></el-date-picker>
                  </div>
                </el-form-item>
                <el-form-item label="更新日期" :label-width="formLabelWidth">
                  <div class="block" style="width: 200px;">
                    <el-date-picker v-model="form.updated_at" value-format="yyyy-MM-dd HH:mm:ss"  type="datetime" placeholder="选择日期时间"></el-date-picker>
                  </div>
                </el-form-item>
                <el-form-item label="状态" :label-width="formLabelWidth" style="width: 300px;">
                    <el-radio-group v-model="form.status">
                        <el-radio label="1">正常</el-radio>
                        <el-radio label="0">禁用</el-radio>
                    </el-radio-group>
                </el-form-item>
              </el-form>
              <div slot="footer" class="dialog-footer">
                <el-button @click="handleCancel('form')">取 消</el-button>
                <el-button type="primary" @click="handleEditSubmit('form')">确 定</el-button>
              </div>
            </el-dialog>
         </template>
     </el-table-column>
    </el-table>
  </div>
</template>
<script>
   import {users} from '@/components/moduls/config.js'
  export default {
    data() {
      return {
        dialogTableVisible: false,
                dialogFormVisible: false,
                form: {
                  name: '',
                  password: '',
                  created_at: '',
                  type: [],
                  desc: ''
                },
                formLabelWidth: '100px',
        //tableData: Array(2).fill(item)
        tableData: []
      }
    },
    methods: {
     //编辑
      handleEdit: function (index, row) {
        this.dialogFormVisible = true //dialog对话窗口打开
        this.form = Object.assign({}, row) //将数据传入dialog页面
        this.form.index=index //传递当前index
      },
     //取消
      handleCancel(formName) {
        this.dialogFormVisible = false
      },
     //编辑确定
      handleEditSubmit(forName) {
      //dialog页面数据写入到tableData页面上
      //this.$set(tableName,talbeIndex,data)
        this.$set(
          this.tableData,
          this.form.index,
          {
            id:this.form.id,
            name:this.form.name,
            password:this.form.password,
            created_at:this.form.created_at,
            updated_at:this.form.updated_at,
            status:this.form.status
          },
        )
        //异步修改数据
        this.axios({
          method: 'GET',
          url: 'https://blog.zongscan.com/admin/useredit',
          params: this.form
        }).then(res => {
          console.log(res.data)
          this.$alert('状态修改成功!', 'is_state', {
              confirmButtonText: 'ok'
          })
        }).catch(function () {
          console.log('is_state')
        })
        this.dialogFormVisible = false
      }
    },
    // mounted() {
    //   //console.log(localStorage.getItem('token'))
    //   //赋值
    //   users().then(res => {
    //       this.tableData = res.data
    //   })
    // },
    created() {
      this.axios.get('https://blog.zongscan.com/admin/users')
      .then((res) => {
      console.log(res.data, 'user-index.vue')
        this.tableData = res.data
      })
    }
  }
</script>
<style>
</style>

ps: 注意关注编辑功能代码,其他的代码可以测试用,懒的删了


效果图:

vue-user.png

异步请求数据成功返回:

vue-useredit.png


  • 上一条:
    日常记录水贴,庆祝本站升级权重2,历时1年半,特此发文纪念
    下一条:
    Chunk在 Laravel 中最小化内存使用的块
  • 昵称:

    邮箱:

    1条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客