🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 数据库字典 ## 权限表 acl | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | slug | varchar(255), NOT NULL | 模型层控制器方法 | | title | varchar(255), NOT NULL | 权限名称 | | pid | int(11) , DEFAULT '0' | 上一层 | >[info]权限是读取的是数据库 让方法写进权限表里 一定要在控制器的方法注释相应的权限名称 注释一定要规范 例如 : /** * @desc 账号权限 * */ /** * @desc 账号权限 */ ## 权限关联角色表 acl_roles | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11) NOT NULL | 自增 | | acl_id | int(11) NOT NULL | acl表 关联ID | | roles_id | int(11) NOT NULL | 角色ID | | users_id | int(11) NOT NULL | 商家ID| | status | int(4) DEFAULT '0' | 权限状态,1开启,2关闭 | | created | int(11) NOT NULL | 创建时间 | >[info]刚才介绍的权限表只是存权限的方法 要通过 acl_id 和 roles_id 关联角色 来使权限表起到作用 users_id 是商家id 这个角色的所有的权限 只能在这家门店下使用 /* *@desc 权限列表 */ static public function acl_list(){ $id = login::getUid(null,1); $list = users::where('id',$id)->first()->yf_shop_base; if($list){ foreach($list as $k=>$v){ $arr[] = yf_shop_base::where('id',$v->id)->first()->shop_users; } } if($arr){ foreach($arr as $k=>$v){ foreach($v as $k1=>$v1){ $in[] = $v1->id; } } } if($in){ foreach($in as $v){ $role_list[] = role_users::where('user_id',$v)->first(); } } if($role_list){ foreach($role_list as $k=>$v){ $role[] = roles::where('id',$v->role_id)->first(); } } if($role){ $role = array_unique($role); return $role; }else{ return array(); } } ## 超级管理员表 admin_users | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | user | varchar(20) CHARACTER SET utf8 NOT NULL | 账号 | | pwd | varchar(100) CHARACTER SET utf8 NOT NULL | 密码 | | level | tinyint(1) DEFAULT '1' | 等级 | | created | int(11) NOT NULL | 创建时间 | >[info] 设置超级管理员账号 超级管理员账号等级默认为1 1, 超级管理员可行使的权利: 1),创建商家账号 创建门店; 2),查看所有门店的 商品 订单 会员 营业状况 销售单据 交接班记录; 3),员工账号 新建 编辑 删除 4),会员账号 新建 编辑 删除 5),商品分类 新建 编辑 删除 2, 超级管理员不可行使的权利: 1),不可执行退货操作 /* * *@desc 验证登录账号 * */ static function login($user,$pwd){ $one = self::where('user','=',$user)->first(); if(!$one){ return false; }else{ if (password_verify($pwd, $one['pwd'])) { $login = new login(); $login->admin_setcookie($one); return true; }else{ return false; } } } ## 商家账号表 users | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | ucenter_id | bigint(20) NOT NULL | 绑定商城的ucenter_id | | ucenter_name | varchar(200) NOT NULL | 账号 | | service_start_time | datetime NOT NULL | 服务开始时间 | | service_end_time | datetime NOT NULL | 服务结束时间 | | max_stores | int(11) NOT NULL | 最多拥有门店数 | | max_nums | int(11) NOT NULL | 单个门店最多人数 | | authorization_module | int(11) NOT NULL | 授权模块 | | level | tinyint(1) DEFAULT '2' | 等级 | | created | int(11) NOT NULL | 创建时间 | | updated | int(11) NOT NULL | 更新时间 | | deleted_at | datetime NOT NULL | 软删除 | | local_ucenter_id | bigint(20) NOT NULL | 本地ucenter_id | >[info]商家账号分为两种: 1,绑定商城的商家账号: 可同步所属商城账号下 门店 用户 商品 分类 订单等。 2,未绑定商城的商家账号: 只可针对本地 门店 用户 员工 商品 分类 订单 的 进行操作 。 /** * @desc 添加数据 */ public function add(){ return view('users_save'); } /** * @desc 编辑数据 */ public function edit(){ $id = get_data('id'); $data['info'] = model::find($id); return view('users_save',$data); } /** * @desc 删除数据 */ public function delete(){ $id = get_data('id'); model::deleteForm($id); echo 1; exit; } /** * @desc 保存数据 */ public function save(){ if(is_ajax()){ model::saveForm(); exit(json_encode(['status'=>1,'msg'=>__('操作成功') ,'url'=>url('doc/users/index') ])); } } ## 角色表 roles | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | title | varchar(200) NOT NULL | 角色名称 | | slug | varchar(200) NOT NULL | 唯一标识 | | created | int(11) NOT NULL | 创建时间 | | updated | int(11) NOT NULL | 更新时间 | | deleted_at | datetime NOT NULL | 软删除 | >[info]创建角色 可与员工表 权限表 关联 /* *@desc 关联role_users * */ public function role_users(){ return $this->hasMany('models\role_users','role_id'); } ## 角色关联用户表 role_users | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | user_id | int(11) NOT NULL | 员工ID | | role_id | int(11) NOT NULL | 角色ID | >[info] 此表是作为 员工账号表 关联 角色表的一个中间表 一个员工账号 对应一个角色 /** * 获取所属店铺信息 */ public function roles() { return $this->hasOne('models\roles','id','role_id'); } ## 员工账号表 shop_users | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | yf_shop_base_id | int(11) NOT NULL | 所属店铺id | | user | varchar(200) NOT NULL | 账号 | | pwd | varchar(200) NOT NULL | 密码 | | created | int(11) NOT NULL | 创建时间 | | nickname | varchar(50) NOT NULL | 员工姓名 | | sex | tinyint(1) NOT NULL | 性别 | | phone | varchar(50) NOT NULL | 手机号 | | id_card | varchar(200) NOT NULL | 身份证 | | num | varchar(200) NOT NULL | 员工编号 | | level | tinyint(1) DEFAULT '3' | 等级 | | deleted_at | datetime NOT NULL | 软删除 | >[info]商家创建的员工账号 可由商家进行分配 所属门店 ,角色和权限 /** * @desc 获取所属店铺信息 */ public function yf_shop_base() { return $this->hasOne('models\yf_shop_base','id','yf_shop_base_id'); } /** * @desc 获取退货订单信息 */ public function wp_order_return() { $start_time = request_data('start_time')?:date('Y-m-d 00:00:00', time()); $end_time = request_data('end_time')?:date('Y-m-d 23:59:59', time()); return $this->hasMany('models\wp_order_return','shop_users_id') ->where('created','>=',strtotime($start_time)) ->where('created','<=',strtotime($end_time)) ->where('type','!=',1); } /** *@desc 获取所属角色信息 */ public function role_users() { return $this->hasOne('models\role_users','user_id'); } /** *@desc 获取订单信息 */ public function wp_order() { $start_time = request_data('start_time')?:date('Y-m-d 00:00:00', time()); $end_time = request_data('end_time')?:date('Y-m-d 23:59:59', time()); return $this->hasMany('models\wp_order','shop_users_id') ->where('ended','>=',strtotime($start_time)) ->where('ended','<=',strtotime($end_time)) ->where('type','!=',1); } ## 员工交接班记录表 record_succession | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | shop_users_id | int(11) NOT NULL | 收银员帐号 | | start_time | int(11) DEFAULT NULL | 开始时间 | | end_time | int(11) DEFAULT NULL | 结束时间 | | cash_payments | decimal(16,2) DEFAULT '0.00' | 现金支付 | | unionpay_pay | decimal(16,2) DEFAULT '0.00' | 银联支付 | | weixin_pay | decimal(16,2) DEFAULT '0.00' | 微信支付 | | alipay_pay |decimal(16,2) DEFAULT '0.00' | 支付宝支付 | | wp_users_pay | decimal(16,2) DEFAULT '0.00' | 会员余额支付 | | standby_money | decimal(16,2) DEFAULT '0.00' | 备用金 | | yf_shop_base_id | int(11) DEFAULT NULL | 等级所属门店id| >[info]记录当前门店 的收银员 从登录到退出的各种支付方式的营收情况。 /** * @desc 获取账号信息 */ public function shop_users() { return $this->hasOne('models\shop_users','id','shop_users_id'); } /** *@desc 获取所属门店信息 */ public function yf_shop_base() { return $this->hasOne('models\yf_shop_base','id','yf_shop_base_id'); } ## 店铺表 yf_shop_base | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | user_id | int(11) NOT NULL | 属于哪个用户的 | | title | varchar(200) NOT NULL | 门店名称 | | address | varchar(255) NOT NULL | 门店地址 | | phone | varchar(20) NOT NULL | 电话 | | created | int(11) NOT NULL | 门店开启时间 | | updated | int(11) DEFAULT NULL | 门店结束时间 | | type_id | int(11) NOT NULL | 0门店创建,1商城同步 | | shop_num | int(11) NOT NULL | 店员数 | >[info] 门店隶属于商家 一个商家可拥有多家门店 /** * @desc 列表页数据显示 * */ public function index(){ $data['wq'] = get_data('wq'); return view('yf_shop_base_list',$data); } /** * @desc ajax列表搜索 * */ public function ajax(){ $data = []; $model = model::DefaultWhere()->paginate(config('app.page_size')); //设置当前分页中的URL路径 $model->setPath(url(url_string()) ); $data['model'] = $model; $output['html'] = view('yf_shop_base_ajax',$data); echo json_encode(['status'=>true,'html'=>$output['html'],'render'=>'ajax_load_table']); exit; } ## 订单表 wp_order | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | order_id | varchar(200) NOT NULL | 订单编号 | | shop_users_id | int(11) NOT NULL | 收银员ID | | user_id | int(11) DEFAULT NULL | 购买者 | | payid | int(11) NOT NULL | 支付方式 | | good_price | decimal(18,2) NOT NULL | 实际支付的费用 | | user_price | decimal(18,2) DEFAULT NULL | 顾客支付的金额 | | return_price | decimal(18,2) DEFAULT '0.00' | 找零 | | good_num | varchar(200) NOT NULL | 数量 | | created | int(11) NOT NULL | 下单时间 | | ended | int(11) NOT NULL | 结单时间 | | good_price_ori | decimal(18,2) NOT NULL DEFAULT '0.00' | 产品总价 | | order_status | tinyint(1) NOT NULL | 订单状态 6.已完成 1.待支付 | | coupon | varchar(255) DEFAULT NULL | 优惠券 | | type | tinyint(4) NOT NULL | 1代表商城导入 | | deleted_at | datetime NOT NULL | 软删除 | | shop_id | int(11) NOT NULL | 店铺id | | payment_way | int(11) DEFAULT NULL | 记录小票扫码 | >[info] 记录门店的订单 订单信息也可从商城同步到线下 /* * *@desc 获取门店信息 */ public function yf_shop_base(){ return $this->belongsTo('models\yf_shop_base','shop_id'); } /* * *@desc 获取收银员信息 */ public function shop_users(){ return $this->belongsTo('models\shop_users','shop_users_id'); } /* * *@desc 关联订单详情 */ public function wp_order_value(){ return $this->hasMany('models\wp_order_value','order_id','order_id'); } /** * @desc获取会员信息 */ public function wp_users() { return $this->belongsTo('models\wp_users','user_id','ucenter_id'); } ## 订单详情表 wp_order_value | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | order_id | varchar(200) NOT NULL | 订单ID | | goods_id | int(11) NOT NULL | 商品ID | | goods_name | varchar(255) NOT NULL | 商品名称 | | goods_values | text NOT NULL | 商品其他信息 | | good_price | decimal(18,2) NOT NULL | 实际支付的费用 | | shop_id | int(11) NOT NULL | 店铺ID | | shop_name | varchar(255) NOT NULL | 店铺名称 | | shop_users_id | int(11) NOT NULL | 员工id | | num | int(11) NOT NULL | 购买数量 | | status | tinyint(1) NOT NULL DEFAULT '1' | 1为正常,-1为退货 | | good_price_ori | decimal(18,2) NOT NULL | 原价 | | type | tinyint(4) NOT NULL | 1代表商城导入 | | created | int(11) NOT NULL | 下单时间 | | updated | int(11) NOT NULL | 更新时间 | | deleted_at | datetime NOT NULL | 软删除 | >[info]记录门店下 各订单中详细的购买商品的信息 /** * 获取订单信息 */ public function wp_order_info() { return $this->belongsTo('models\wp_order','order_id','order_id'); } ## 订单退货表 wp_order_return | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | order_id | varchar(200) NOT NULL | 订单ID | | goods_id | int(11) NOT NULL | 商品ID | | goods_name | varchar(255) NOT NULL | 商品名称 | | goods_values | text NOT NULL | 商品其他信息 | | good_price | decimal(18,2) NOT NULL | 实际支付的费用 | | shop_id | int(11) NOT NULL | 店铺ID | | shop_name | varchar(255) NOT NULL | 店铺名称 | | shop_users_id | int(11) NOT NULL | 员工id | | num | int(11) NOT NULL | 购买数量 | | status | tinyint(1) NOT NULL DEFAULT '0' | 0为退货 | | return_payid | tinyint(4) NOT NULL | 退货方式 | | good_price_ori | decimal(18,2) NOT NULL | 原价 | | type | tinyint(4) NOT NULL | 1代表商城导入 | | created | int(11) NOT NULL | 下单时间 | | updated | int(11) NOT NULL | 更新时间 | | deleted_at | datetime NOT NULL | 软删除 | >[info]记录门店下 各订单中详细的退货商品的信息。 /* * 关联订单表 * */ public function wp_order(){ return $this->belongsTo('models\wp_order','order_id','order_id','goods_id'); } ## 会员表 wp_users | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | ucenter_id | int(11) NOT NULL | ucenter用户ID | | sex | tinyint(1) NOT NULL | 性别 | | phone | varchar(200) NOT NULL | 手机号 | | email | varchar(200) NOT NULL | 邮箱 | | bron | int(11) DEFAULT NULL | 生日 | | realname | varchar(200) DEFAULT NULL | 真实性名 | | ucenter_name | varchar(200) NOT NULL | 用户名 | | account_balance | decimal(18,2) DEFAULT '0.00' | 会员余额 | | type | tinyint(4) DEFAULT '0' | 1代表商城导入 | | created | int(11) NOT NULL | 注册时间 | | deleted_at | datetime NOT NULL | 软删除 | >[info]会员可在线下门店创建 也可商城同步 同步商城后注册的会员都储存在ucenter里 可直接用会员账号登录商城 /** * @desc 会员列表 */ public function ajax(){ $data = []; $model = model::DefaultWhere()->paginate(config('app.page_size')); $model->setPath(url(url_string()) ); $data['model'] = $model; $output['html'] = view('wp_users_discount_ajax',$data); echo json_encode(['status'=>true,'html'=>$output['html'],'render'=>'ajax_load_table']); exit; } ## 会员折扣表 wp_users_discount | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | wp_user_id | int(11) NOT NULL | ucenter用户ID | | discount | int(11) DEFAULT '100' | 折扣卡 | | users_id | int(11) DEFAULT NULL | 商家id | | numbers | varchar(200) NOT NULL | 会员卡号,自动生成 | | type | tinyint(4) DEFAULT '0' | 1代表商城导入 | | status | tinyint(4) NOT NULL DEFAULT '1' | 是否享受折扣,1享受,0不享受 | | started | int(11) NOT NULL | 开始时间 | | ended | int(11) NOT NULL | 结束时间 | >[info]会员可享受折扣 此表与wp_users表关联 关联表的主要作用是用来区别不同商家下会员享受的不同折扣 /* * @desc 关联会员信息表 */ public function wp_users(){ return $this->belongsTo('models\wp_users', 'wp_user_id')->orderBy('created', 'desc'); } ## 商品分类表 yf_goods_cat | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | cat_name | varchar(50) NOT NULL | 分类名称 | | cat_parent_id | int(11) NOT NULL DEFAULT '0' | 父类 | | cat_displayorder | smallint(3) NOT NULL DEFAULT '255' | 排序 | | level | int(11) NOT NULL | 分类级别 | | type | tinyint(4) DEFAULT NULL | 1代表商城导入 | | deleted_at | datetime NOT NULL | 软删除 | >[info]可用此表把商品分类 分类也可根据门店所经营商品进行创建 也可从商城同步到线下分类表 /** * @desc 同步商城分类 */ public function ajax_sync(){ $model = type::getCat(); $data = []; if($model){ $insertnum = 0; $updatenum = 0; foreach($model as $k=>$v){ $li = model::where('id',$v['cat_id'])->withTrashed()->first(); $data['cat_name'] = $v['cat_name']; $data['cat_parent_id'] = $v['cat_parent_id']; $data['cat_displayorder'] = $v['cat_displayorder']; $data['level'] = $v['level']; $data['type'] = 1; if(!$li){ $data['id'] = $v['cat_id']; model::insert($data); $insertnum++; }else{ model::where('id',$v['cat_id'])->update($data); $updatenum++; } } exit(json_encode(['status'=>1,'msg'=>__('本次同步插入')."$insertnum".__('条数据,更新')."$updatenum".__('条数据')])); }else{ exit(json_encode(['status'=>0,'msg'=>__('无数据导入')])); } } ## 店铺关联商品表 yf_goods_shop_common | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11), NOT NULL | 自增 | | common_id | int(11) NOT NULL | 商品id | | shop_id | int(11) NOT NULL | 店铺id | | type | tinyint(4) DEFAULT '0' | 1代表商城导入 | | deleted_at | datetime NOT NULL | 软删除 | >[info] 店铺关联商品表 作用:一件商品存在于多个门店 /* *获取商品信息 * */ public function yf_goods_common(){ return $this->belongsTo('models\yf_goods_common','common_id'); } /* *获取店铺信息 * */ public function yf_shop_base(){ return $this->belongsTo('models\yf_shop_base','shop_id'); } ## 商品详情表 yf_goods_common | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(10) unsigned NOT NULL | 自增 商品id | | goods_id | int(11) NOT NULL | 商品同步商城id | | common_name | varchar(50) NOT NULL | 商品名称 | | cat_id | int(10) unsigned NOT NULL | 商品分类 | | common_spec_name | varchar(255) DEFAULT NULL | 规格名称 | | file | varchar(255) NOT NULL | 商品主图 | | common_state | tinyint(3) unsigned DEFAULT NULL | 商品状态 2下架,1正常 | | common_add_time | int(11) DEFAULT NULL | 商品添加时间 | | common_sell_time | int(11) NOT NULL | 上架时间 | | common_price | decimal(10,2) NOT NULL | 商品价格 | | common_market_price | decimal(10,2) DEFAULT NULL | 市场价 | | common_cost_price | decimal(10,2) DEFAULT NULL | 成本价 | | common_stock | int(10) unsigned DEFAULT NULL | 商品库存 | | common_alarm | int(10) unsigned DEFAULT '0' | 库存预警值 | | common_cubage | decimal(10,2) DEFAULT NULL | 商品重量 | | common_salenum | int(10) unsigned DEFAULT '0' | 商品销量 | | common_discounts | tinyint(1) DEFAULT '0' | 折扣状态 | | common_invoices | tinyint(3) unsigned DEFAULT '0' | 是否开具增值税发票 | | common_goods_from | tinyint(1) DEFAULT '0' | 1代表商城导入 | | common_code | varchar(200) DEFAULT NULL | 商品条码 | | deleted_at | datetime NOT NULL | 软删除 | >[info] 商品详情表 可从商城店铺同步数据 也可在线下创建 /** * @desc 商品信息管理 */ public function index(){ $data['shop_list'] = yf_shop_base::shop_list(); return view('yf_goods_shop_common_list',$data); } /** * @desc 商品列表 */ public function ajax(){ $model = model::DefaultWhere()->paginate(config('app.page_size')); //设置当前分页中的URL路径 $model->setPath(url(url_string()) ); $data['model'] = $model; $output['html'] = view('yf_goods_shop_common_ajax',$data); echo json_encode(['status'=>true,'html'=>$output['html'],'render'=>'ajax_load_table']); exit; } ## 支付方式表 yf_payment_way | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11) NOT NULL | 自增 | | paycenter_id | int(11) NOT NULL | 绑定商城的paycenter_id | | pay_way | varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL | 支付名称 | | user_id | int(11) DEFAULT NULL | 商家id | | status | tinyint(1) NOT NULL | 是否开启’1 开启, 0关闭 | | created | int(11) NOT NULL | 创建时间 | >[info] 设置门店的支付方式 根据user_is 每家门店可设置自己门店允许的支付方式 /* *@desc 支付方式 */ static function pay_list(){ $model = new self; $list = self::get()->toArray(); if(!$list){ foreach(config('payment') as $k=>$v){ $model->insert(['pay_way'=>$k,'paycenter_id'=>$v,'status'=>1,'created'=>time()]); } } } ## 优惠券表 wp_coupon | 字段 | 类型 | 注释 | | ------------- |:-------------:| -----:| | id | int(11) NOT NULL | 自增 | | title | varchar(255) NOT NULL | 优惠券 | | price | decimal(18,2) NOT NULL | 面值 | | start_time | int(11) NOT NULL | 有效期开始时间 | | end_time | int(11) NOT NULL | 有效期结束时间 | | created | int(11) NOT NULL | 创建时间 | | status | tinyint(1) NOT NULL | 1为启用,0不启用 | | max_num | int(11) NOT NULL | 数量 | | shop_id | int(11) NOT NULL | 店铺 | | cat_id | tinyint(1) NOT NULL | 分类 | | condition | decimal(18,2) NOT NULL | 使用条件 | >[info]可供各门店用于门店活动