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


参考微信小程序墨子记账

后台页面采用layui_admin实现效果

制作记账数据库

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

用户表 jz_user

字段名类型备注
uidint (10)用户id
openidvarchar(100)微信唯一id
nicknamevarchar(200)昵称
avatarvarchar(300)头像
provincevarchar(50)省份
cityvarchar(50)城市
sextinyint性别 1男 2女 0未知
statustinyint状态 1开启 0关闭
moneyfloat月预算
add_timeint注册时间
last_timeint最后登陆时间

账目明细表 jz_list

字段名类型备注
idint (10)记账ID
uidint (10)用户ID
cidint (10)分类ID
datedate账目日期
typetinyint类型 1支出 2收入
moneyfloat金额
add_timeint记账时间
remarksvarchar备注

账目分类表

字段名类型备注
idint (10)分类ID
namevarchar分类名
typetinyint类型 1支出 2收入
imgvarchar分类图
img_svarchar分类选中图
statustinyint状态 1开启 0关闭
sortint排序

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

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

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

代码中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>

分类管理列表

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

更多相关文章

  1. PHP:【ThinkPHP】=> 通用后台管理,用户名,头像,判断是否为空
  2. xml标签库标签-Request类-链式操作-博客实战分类搜索
  3. 详解支撑7亿用户搜索的百度图片处理收录中台
  4. 0513会话控制作业
  5. 阿里云网盘横空出世,勇者会恶龙,百度网盘危矣?
  6. 【点宽专栏】教你如何应用朴素贝叶斯分类器进行股价趋势分类预测
  7. Ubuntu因在MOTD植入广告遭批评
  8. PHP:PDO->fetch()和fetchAll()遍历,session进行会话跟踪,用户退出
  9. 4-30用户注册界面

随机推荐

  1. 如何下载php开源代码
  2. USDT PHP开发包OmniTool简介
  3. php中什么是魔术引号
  4. php如何设置日期
  5. php之日期时间操作一箩筐
  6. wampserver怎么下载
  7. PHP如何实现短网址
  8. php适合做微服务么
  9. php array_chunk函数怎么用
  10. php技术栈是什么