博客列表 >【TP实战】记账后台管理系统实战开发(用户管理页面增删改查)

【TP实战】记账后台管理系统实战开发(用户管理页面增删改查)

 一纸荒凉* Armani
 一纸荒凉* Armani原创
2021年06月01日 10:29:281509浏览

记账后台管理系统实战开发


参考微信小程序墨子记账

后台页面采用layui_admin实现效果

制作记账数据库

  • 主键:代表唯一的
  • 自动递增:新增加数据时,必须有变化,就要自动增加
  • 无符号:不能为负数
  • 用户表 :uid、img(头像)、name(昵称)、status(状态)
  • 分类表 :ID、name(分类名称)、img(未选中图标)、img_s(选中后图标)、status(状态)
  • 记账表 :id、uid(用户)、type(类型)、money(金额)、cat(分类)、date(时间)、remarks(备注)

用户表 jz_user

字段名 类型 备注
uid int (10) 用户id
openid varchar(100) 微信唯一id
nickname varchar(200) 昵称
avatar varchar(300) 头像
province varchar(50) 省份
city varchar(50) 城市
sex tinyint 性别 1男 2女 0未知
status tinyint 状态 1开启 0关闭
money float 月预算
add_time int 注册时间
last_time int 最后登陆时间

账目明细表 jz_list

字段名 类型 备注
id int (10) 记账ID
uid int (10) 用户ID
cid int (10) 分类ID
date date 账目日期
type tinyint 类型 1支出 2收入
money float 金额
add_time int 记账时间
remarks varchar 备注

账目分类表

字段名 类型 备注
id int (10) 分类ID
name varchar 分类名
type tinyint 类型 1支出 2收入
img varchar 分类图
img_s varchar 分类选中图
status tinyint 状态 1开启 0关闭
sort int 排序

在后台新建记账系统导航子菜单分类管理和用户管理

其中内部代码中输入我们的控制器名称/操作方法

点击系统配置\部门管理开启权限

代码中app\bews\controller\Jizhang.php 控制器

  1. <?php
  2. namespace app\bews\controller;
  3. use app\bews\controller\Base;
  4. use think\facade\Db;
  5. use think\facade\View;
  6. use think\facade\Request;
  7. class Jizhang extends Base{
  8. // 渲染分类管理页面
  9. public function cat_list(){
  10. return View::fetch();
  11. }
  12. // 渲染用户管理页面
  13. public function user_list(){
  14. return View::fetch();
  15. }
  16. }
  17. ?>

app\bews\view\Jizhang\cat_list.php 分类列表视图

  1. {include file="public/header" /}
  2. <div style="text-align: center;color:gray;">
  3. <h1>账目分类</h1>
  4. </div>
  5. {include file="public/tail" /}

app\bews\view\Jizhang\user_list.php 用户列表视图

  1. {include file="public/header" /}
  2. <div style="text-align: center;color:gray;">
  3. <h1>记账用户</h1>
  4. </div>
  5. {include file="public/tail" /}


渲染用户管理页面列表

Jizhang.php 控制器

  1. <?php
  2. namespace app\bews\controller;
  3. use app\bews\controller\Base;
  4. use think\facade\Db;
  5. use think\facade\View;
  6. use think\facade\Request;
  7. class Jizhang extends Base{
  8. // 渲染分类管理页面
  9. public function cat_list(){
  10. return View::fetch();
  11. }
  12. // 渲染用户管理页面
  13. public function user_list(){
  14. $select = Db::name('oyk_user')->select();
  15. print_r($select);
  16. View::assign([
  17. 'select'=>$select
  18. ]);
  19. return View::fetch();
  20. }
  21. }
  22. ?>

用户管理列表

页面视图 user_list.php

  1. {include file="public/header" /}
  2. <div class="header">
  3. <span>用户管理列表</span>
  4. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" onclick="add()">
  5. <i class="layui-icon layui-icon-add-1"></i>添加
  6. </button>
  7. <div></div>
  8. </div>
  9. <table class="layui-table">
  10. <thead>
  11. <tr>
  12. <th>ID</th>
  13. <th>昵称</th>
  14. <th>头像</th>
  15. <th>地区</th>
  16. <th>性别</th>
  17. <th>状态</th>
  18. <th>注册时间</th>
  19. <th>操作</th>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. {volist name="select" id='vo'}
  24. <tr>
  25. <td>{$vo['uid']}</td>
  26. <td>{$vo['nickname']}</td>
  27. <td>
  28. <img style="width:30px;height:30px;" onmouseover="show_img(this)" onmouseleave="hide_img()" src="{$vo['avatar']}">
  29. </td>
  30. <td>{$vo['province']}-{$vo['city']}</td>
  31. <td>
  32. {if($vo['sex'] == 1)}
  33. <span style="color:green;"></span>
  34. {elseif($vo['sex'] == 2)/}
  35. <span style="color:red;"></span>
  36. {else /}
  37. <span style="color:grey;">未知</span>
  38. {/if}
  39. </td>
  40. <td>
  41. {if($vo['status'] == 1)}
  42. <span style="color:green;">开启</span>
  43. {else/}
  44. <span style="color:red;">关闭</span>
  45. {/if}
  46. </td>
  47. <td>{:date('Y-m-d H:i:s',$vo.add_time)}</td>
  48. <td>
  49. <button type="button" class="layui-btn layui-btn-primary layui-btn-xs" onclick="edit({$vo.uid})">
  50. <i class="layui-icon layui-icon-edit"></i>编辑
  51. </button>
  52. <button type="button" class="layui-btn layui-btn-primary layui-btn-xs" onclick="del({$vo['uid']})">
  53. <i class="layui-icon layui-icon-delete"></i>删除
  54. </button>
  55. </td>
  56. </tr>
  57. {/volist}
  58. </tbody>
  59. </table>
  60. {include file="public/tail" /}

添加用户

Jizhang.php 控制器 user_add()方法

  1. public function user_add(){
  2. if(Request::isPost()){
  3. $data = Request::post();
  4. $data['add_time'] = time();
  5. if(empty(Request::post('nickname'))){
  6. echo json_encode(['code'=>1,'msg'=>'昵称不能为空']);
  7. die;
  8. }
  9. $res = Db::name('oyk_user')->insert($data);
  10. if(empty($res)){
  11. echo json_encode(['code'=>1,'msg'=>'添加失败,请重试……']);
  12. }else{
  13. echo json_encode(['code'=>0,'msg'=>'添加成功!']);
  14. }
  15. }else{
  16. return View::fetch();
  17. }
  18. }

user_list.php 页面点击添加按钮事件

  1. <button type="button" class="layui-btn layui-btn-primary layui-btn-sm" onclick="add()">
  2. <i class="layui-icon layui-icon-add-1"></i>添加
  3. </button>
  4. <script>
  5. layui.use(['layer'],function(){
  6. layer = layui.layer;
  7. $ = layui.jquery;
  8. });
  9. // 添加
  10. function add(){
  11. layer.open({
  12. type: 2,
  13. title: '添加',
  14. shade: 0.3,
  15. maxmin: true,
  16. area: ['450px','550px'],
  17. content: "{$config['admin_route']}Jizhang/user_add"
  18. });
  19. }
  20. </script>

Jizhang/user_add.php视图

  1. {include file="public/header" /}
  2. <form class="layui-form">
  3. <div class="layui-form-item">
  4. <label class="layui-form-label">openid</label>
  5. <div class="layui-input-block">
  6. <input type="text" class="layui-input" id="openid" name="openid" placeholder="请输入微信openid">
  7. </div>
  8. </div>
  9. <div class="layui-form-item">
  10. <label class="layui-form-label">昵称</label>
  11. <div class="layui-input-block">
  12. <input class="layui-input" id="nickname" name="nickname" placeholder="请输入昵称">
  13. </div>
  14. </div>
  15. <div class="layui-form-item">
  16. <label class="layui-form-label">头像</label>
  17. <div class="layui-input-inline">
  18. <button type="button" class="layui-btn layui-btn-fluid" id="up_avatar">上传图片</button>
  19. </div>
  20. <div class="layui-form-mid layui-word-aux">支持png,jpg,gif</div>
  21. </div>
  22. <div class="layui-form-item">
  23. <label class="layui-form-label">头像预览</label>
  24. <div class="layui-input-block">
  25. <div class="layui-upload-list" id="avatar_img" style="width:90%;float:left;"></div>
  26. </div>
  27. </div>
  28. <div class="layui-form-item">
  29. <label class="layui-form-label">省份</label>
  30. <div class="layui-input-block">
  31. <input type="text" class="layui-input" id="province" name="province" placeholder="请输入省份">
  32. </div>
  33. </div>
  34. <div class="layui-form-item">
  35. <label class="layui-form-label">城市</label>
  36. <div class="layui-input-block">
  37. <input type="text" class="layui-input" id="city" name="city" placeholder="请输入城市">
  38. </div>
  39. </div>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label">性别</label>
  42. <div class="layui-input-block">
  43. <select id="sex" name="sex">
  44. <option value="1" selected>男</option>
  45. <option value="2">女</option>
  46. </select>
  47. </div>
  48. </div>
  49. <div class="layui-form-item">
  50. <label class="layui-form-label">状态</label>
  51. <div class="layui-input-block">
  52. <select id="status" name="status">
  53. <option value="1" selected>开启</option>
  54. <option value="2">关闭</option>
  55. </select>
  56. </div>
  57. </div>
  58. </form>
  59. <div class="layui-form-item" style="margin-top:10px;">
  60. <div class="layui-input-block">
  61. <button type="button" class="layui-btn" onclick="save()">保存</button>
  62. </div>
  63. </div>
  64. <script type="text/javascript">
  65. // 图片上传
  66. layui.use(['layer','form','upload','laydate'],function(){
  67. layer = layui.layer;
  68. $ = layui.jquery;
  69. upload = layui.upload;
  70. upload.render({
  71. elem: "#up_avatar",
  72. url: "{$config['admin_route']}index/upload_img",
  73. multiple: true,
  74. done: function(res,title){
  75. if(res.code > 0){
  76. return layer.msg("上传失败,"+res.msg);
  77. }else{
  78. $("#avatar_img").append('<div class="upload_pic_li" style="position:relative; width:100px; float:left; margin:0 10px 10px 0"><img style="width:100px;height:100px;" src="'+ res.url +'" class="layui-upload-img" onmouseover="show_img(this)" onmouseleave="hide_img()"><input type="hidden" name="avatar" value="'+res.data+'"/><a class="close-img" href="javascript:;" onclick="deleteImage(\''+res.data+'\',this);return false;"></a></div>');
  79. }
  80. }
  81. });
  82. });
  83. // 保存
  84. function save(){
  85. $.post("{$config['admin_route']}Jizhang/user_add",$('form').serialize(),function(res){
  86. if(res.code>0){
  87. layer.msg(res.msg,{'icon':2});
  88. }else{
  89. layer.msg(res.msg,{'icon':1});
  90. setTimeout(function(){parent.window.location.reload();},2000);
  91. }
  92. },'json');
  93. }
  94. </script>
  95. {include file="public/tail" /}

编辑用户

Jizhang.php 控制器

  1. public function user_edit(){
  2. if(Request::isPost()){
  3. $data = Request::post();
  4. $res = Db::name('oyk_user')->update($data);
  5. if(empty($res)){
  6. echo json_encode(['code'=>1,'msg'=>'修改失败,请重试……']);
  7. }else{
  8. echo json_encode(['code'=>0,'msg'=>'修改成功!']);
  9. }
  10. }else{
  11. $id = Request::get('uid');
  12. $res = Db::table('oyk_user')->where(['uid'=>$id])->select();
  13. View::assign([
  14. 'res'=> $res['0']
  15. ]);
  16. return View::fetch();
  17. }
  18. }

user_list.php 页面点击编辑按钮事件

  1. <button type="button" class="layui-btn layui-btn-primary layui-btn-xs" onclick="edit({$vo.uid})">
  2. <i class="layui-icon layui-icon-edit"></i>编辑
  3. </button>
  4. <script>
  5. // 编辑
  6. function edit(uid){
  7. layer.open({
  8. type: 2,
  9. title: '编辑',
  10. shade: 0.3,
  11. area: ['450px','550px'],
  12. content: "{$config['admin_route']}Jizhang/user_edit?uid="+uid
  13. });
  14. }
  15. </script>

Jizhang/user_edit.php视图

  1. {include file="public/header" /}
  2. <form class="layui-form">
  3. <div class="layui-form-item" hidden>
  4. <label class="layui-form-label">ID</label>
  5. <div class="layui-input-block">
  6. <input class="layui-input" id="uid" name="uid" value="{$res['uid']}" readonly>
  7. </div>
  8. </div>
  9. <div class="layui-form-item">
  10. <label class="layui-form-label">昵称</label>
  11. <div class="layui-input-block">
  12. <input class="layui-input" id="nickname" name="nickname" value="{$res['nickname']}" placeholder="请输入昵称">
  13. </div>
  14. </div>
  15. <div class="layui-form-item">
  16. <label class="layui-form-label">头像预览</label>
  17. <div class="layui-input-block">
  18. <div class="layui-upload-list" id="avatar_img" style="width:90%;float:left;">
  19. <div class="upload_pic_li" style="position:relative; width:100px; float:left; margin:0 10px 10px 0">
  20. <img style="width:100px;height:100px;" src="{$res['avatar']}" class="layui-upload-img" onmouseover="show_img(this)" onmouseleave="hide_img()">
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <div class="layui-form-item">
  26. <label class="layui-form-label">省份</label>
  27. <div class="layui-input-block">
  28. <input type="text" class="layui-input" id="province" name="province" value="{$res['province']}" placeholder="请输入省份">
  29. </div>
  30. </div>
  31. <div class="layui-form-item">
  32. <label class="layui-form-label">城市</label>
  33. <div class="layui-input-block">
  34. <input type="text" class="layui-input" id="city" name="city" value="{$res['city']}" placeholder="请输入城市">
  35. </div>
  36. </div>
  37. <div class="layui-form-item">
  38. <label class="layui-form-label">性别</label>
  39. <div class="layui-input-block">
  40. <select id="sex" name="sex">
  41. <option value="1" {if $res['sex']==1}selected{/if} >男</option>
  42. <option value="2" {if $res['sex']==2}selected{/if} >女</option>
  43. </select>
  44. </div>
  45. </div>
  46. <div class="layui-form-item">
  47. <label class="layui-form-label">状态</label>
  48. <div class="layui-input-block">
  49. <select id="status" name="status">
  50. <option value="1" {if $res['status']==1}selected{/if} >开启</option>
  51. <option value="2" {if $res['status']==2}selected{/if} >关闭</option>
  52. </select>
  53. </div>
  54. </div>
  55. </form>
  56. <div class="layui-form-item" style="margin-top:10px;">
  57. <div class="layui-input-block">
  58. <button type="button" class="layui-btn" onclick="save()">保存</button>
  59. </div>
  60. </div>
  61. <script type="text/javascript">
  62. // 图片上传
  63. layui.use(['layer','form'],function(){
  64. layer = layui.layer;
  65. $ = layui.jquery;
  66. });
  67. // 保存
  68. function save(){
  69. $.post("{$config['admin_route']}Jizhang/user_edit",$('form').serialize(),function(res){
  70. if(res.code>0){
  71. layer.msg(res.msg,{'icon':2});
  72. }else{
  73. layer.msg(res.msg,{'icon':1});
  74. setTimeout(function(){parent.window.location.reload();},2000);
  75. }
  76. },'json');
  77. }
  78. </script>
  79. {include file="public/tail" /}

删除用户

Jizhang.php 控制器

  1. public function user_del(){
  2. if(Request::isPost()){
  3. $data = Request::post('uid');
  4. $res = Db::name('oyk_user')->delete($data);
  5. if(empty($res)){
  6. echo json_encode(['code'=>1,'msg'=>'删除失败,请重试……']);
  7. }else{
  8. echo json_encode(['code'=>0,'msg'=>'删除成功!']);
  9. }
  10. }
  11. }

user_list.php 页面点击删除按钮事件

  1. <button type="button" class="layui-btn layui-btn-primary layui-btn-xs" onclick="del({$vo['uid']})">
  2. <i class="layui-icon layui-icon-delete"></i>删除
  3. </button>
  4. <script>
  5. // 删除
  6. function del(uid){
  7. layer.confirm('确定要删除吗?', {
  8. icon:3,
  9. btn: ['确定','取消']
  10. }, function(){
  11. $.post("{$config['admin_route']}Jizhang/user_del",{'uid':uid},function(res){
  12. if(res.code>0){
  13. layer.alert(res.msg,{icon:2});
  14. }else{
  15. layer.msg(res.msg,{icon:1});
  16. setTimeout(function(){window.location.reload();},2000);
  17. }
  18. },'json');
  19. });
  20. }
  21. </script>

分类管理列表

略……基本增删改查逻辑一致

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议