From 1093db06f58c1091638ab79dd07fc4ea97dce6c9 Mon Sep 17 00:00:00 2001
From: wangxinglong <2371974647@qq.com>
Date: Tue, 30 Nov 2021 15:26:38 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E5=95=86=E5=AE=B6?=
=?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controller/api/User.php | 1 -
app/controller/manager/Agency.php | 20 ++-
app/controller/manager/Area.php | 40 +++++
app/controller/manager/Business.php | 48 ++++--
app/controller/manager/BusinessCircle.php | 15 +-
app/controller/manager/Coupon.php | 33 +++-
app/controller/manager/Index.php | 4 +-
app/controller/manager/Login.php | 1 +
app/controller/manager/Member.php | 4 +-
app/model/Account.php | 13 +-
app/model/CouponMain.php | 7 +
app/model/Member.php | 46 ++++--
app/repository/BillRepository.php | 44 +++---
app/repository/BusinessRepository.php | 23 ++-
app/traits/CouponBillTrait.php | 5 +
app/traits/cms/MenuTrait.php | 3 +
public/static/manager/js/area.js | 22 ++-
public/static/manager/js/bill.js | 21 +--
public/static/manager/js/business/business.js | 1 +
view/manager/agency/add.html | 8 +-
view/manager/agency/edit.html | 23 +--
view/manager/area/index.html | 9 ++
view/manager/business/business_detail.html | 14 +-
view/manager/business_circle/add.html | 144 ++++++++++++++++-
view/manager/business_circle/edit.html | 145 +++++++++++++++++-
view/manager/coupon/edit.html | 8 +
view/manager/member/edit.html | 2 +-
27 files changed, 583 insertions(+), 121 deletions(-)
diff --git a/app/controller/api/User.php b/app/controller/api/User.php
index b743d18..7d77d31 100644
--- a/app/controller/api/User.php
+++ b/app/controller/api/User.php
@@ -74,7 +74,6 @@ class User extends Base
'create_time' => $nowDate,
'login_time' => $nowDate,
'type' => Account::type_consumer, // 默认为普通消费者
- 'state' => Account::state_default,
'nick_name' => $params['nick_name'] ?: generateDefaultNickName(),
'avatar_url' => $params['avatar_url'] ?: Account::DEFAULT_AVATAR,
'gender' => $params['gender'],
diff --git a/app/controller/manager/Agency.php b/app/controller/manager/Agency.php
index 4cdd530..173a115 100644
--- a/app/controller/manager/Agency.php
+++ b/app/controller/manager/Agency.php
@@ -4,7 +4,6 @@ namespace app\controller\manager;
use app\model\Business as BusinessModel;
use app\model\Log;
-use app\model\Member;
use app\model\Member as MemberModel;
use app\repository\BusinessRepository;
use Exception;
@@ -49,8 +48,10 @@ class Agency extends Base
return $this->json(4002, '请输入正确的手机号码');
}
- $item['roles'] = [Member::ANENT_ROLE_ID];
- $item['status'] = Member::COMMON_ON;
+ $item['roles'] = [MemberModel::STAFF_ROLE_ID];
+ $item['status'] = MemberModel::COMMON_ON;
+ $item['pid'] = $this->auth["user_id"];
+ $item['business_code'] = $this->auth["business_code"];
$roles = [];
if ($item['roles']) {
@@ -124,7 +125,7 @@ class Agency extends Base
if (!checkMobile($item['mobile'])) {
return $this->json(4002, '请输入正确的手机号码');
}
- $item['roles'] = [Member::ANENT_ROLE_ID];
+ $item['roles'] = [MemberModel::STAFF_ROLE_ID];
$roles = [];
if ($item['roles']) {
$roles = $item['roles'];
@@ -178,7 +179,7 @@ class Agency extends Base
/**
- * 轮播图列表
+ * 列表
*
* @return Json|View
* @throws Exception
@@ -191,10 +192,15 @@ class Agency extends Base
$size = $this->request->param('size/d', 30);
//只查询拥有渠道商的账号
- $whereMap = [['roles', "=", Member::ANENT_ROLE_ID], ['id', "<>", 1]];
+ $whereMap = [['roles', "=", MemberModel::STAFF_ROLE_ID], ['id', "<>", 1]];
$orders = ['id' => 'asc'];
- $list = Member::findList($whereMap, [], $page, $size, null, $orders);
+ //如果是渠道商或者工作人员 只查看自己的商家
+ if (MemberModel::is_agency($this->auth['roles'])){
+ $whereMap[] = ["pid", "=", $this->auth['user_id']];
+ }
+
+ $list = MemberModel::findList($whereMap, [], $page, $size, null, $orders);
return $this->json(0, 'success', $list);
}
diff --git a/app/controller/manager/Area.php b/app/controller/manager/Area.php
index ab6ca8c..932d13e 100644
--- a/app/controller/manager/Area.php
+++ b/app/controller/manager/Area.php
@@ -6,6 +6,7 @@ use app\repository\CmsRepository;
use app\model\Area as AreaModel;
+use think\exception\ValidateException;
use think\response\Json;
use think\response\View;
@@ -36,4 +37,43 @@ class Area extends Base
}
return $this->view();
}
+
+ /**
+ * 单个字段编辑
+ *
+ * @return Json
+ * @throws DataNotFoundException
+ * @throws DbException
+ * @throws ModelNotFoundException
+ * @throws Exception
+ */
+ public function modify(): Json
+ {
+ if ($this->request->isPost()) {
+ $item = input('post.');
+ $validate = $this->validateByApi($item, [
+ 'field' => 'require',
+ 'value' => 'require',
+ ]);
+
+ if ($validate !== true) {
+ return $validate;
+ }
+
+ if (!$info = AreaModel::findById($item['id'])) {
+ return $this->json(4001, '记录不存在');
+ }
+
+ $update = [$item['field'] => $item['value']];
+
+ try {
+ $info->save($update);
+ return $this->json();
+ } catch (ValidateException $e) {
+ return $this->json(4001, $e->getError());
+ }
+ }
+ return $this->json(4000, '非法请求');
+ }
+
}
\ No newline at end of file
diff --git a/app/controller/manager/Business.php b/app/controller/manager/Business.php
index bcb8c7d..faf1126 100644
--- a/app/controller/manager/Business.php
+++ b/app/controller/manager/Business.php
@@ -3,14 +3,16 @@
namespace app\controller\manager;
use app\exception\RepositoryException;
-use app\model\BusinessFlow;
+use app\model\Account;
use app\model\Coupon;
use app\model\CouponMain;
use app\model\Category as CategoryModel;
use app\model\Business as BusinessModel;
use app\model\Member;
use app\model\BusinessCircle as BusinessCircleModel ;
+use app\repository\AccountRepository;
use app\repository\BusinessRepository;
+use app\repository\CouponRepository;
use app\repository\RechargeRepository;
use app\service\wx\WechatPay;
use Exception;
@@ -33,18 +35,20 @@ class Business extends Base
public function index()
{
if ($this->request->isPost()) {
- $model = new BusinessFlow();
- $repo = BusinessRepository::getInstance($model);
+ $repo = BusinessRepository::getInstance();
$keyword = $this->request->param('keyword/s', '');
$page = $this->request->param('page/d', 1);
$size = $this->request->param('size/d', 30);
- $whereMap = [["c.state", "=", BusinessModel::state_on]];
+ $whereMap = [["a.state", "=", BusinessModel::state_on]];
$orders = ['a.id' => 'desc'];
if (!empty($keyword)) {
- $whereMap[] = ['b.nick_name|c.business_name', 'like', "%$keyword%"];
+ $whereMap[] = ['b.nick_name|a.business_name', 'like', "%$keyword%"];
+ }
+ //如果是渠道商或者工作人员 只查看自己的下级商家
+ if(Member::is_agency($this->auth['roles'])){
+ $whereMap[] = ['a.agency_code', '=', $this->auth['business_code']];
}
-
$list = $repo->businessList($whereMap, $page, $size, $orders);
$list["list"]->each(function ($item) {
//得到当前商家的所有优惠券
@@ -74,6 +78,9 @@ class Business extends Base
->where("is_verificated", "=", Coupon::is_verificated_on)
->count();
+ //产生的总收益数
+ $item->coupon_profit_count = BusinessRepository::getInstance()->businessProfitTotal( $item->business_code);
+
//商家充值总额
$item->recharge_total_money = $item->total_recharge;
});
@@ -185,7 +192,7 @@ class Business extends Base
public function businessDetail()
{
$businessCode = input("business_code/s", "");
- $business = $repo = BusinessRepository::getInstance()->findOneByWhere(['code' => $businessCode]);
+ $business = BusinessRepository::getInstance()->findOneByWhere(['code' => $businessCode]);
if ($this->request->isPost()) {
if(empty($business)){
return $this->json(4001,"商家不存在");
@@ -248,16 +255,22 @@ class Business extends Base
public function businessWaitList()
{
if ($this->request->isPost()) {
- $model = new BusinessFlow();
- $repo = BusinessRepository::getInstance($model);
+
+ $repo = BusinessRepository::getInstance();
$keyword = $this->request->param('keyword/s', '');
$page = $this->request->param('page/d', 1);
$size = $this->request->param('size/d', 30);
- $whereMap = [["business.state", "in", [BusinessModel::state_reviewing, BusinessModel::state_off]]];
- $orders = ['business.id' => 'desc'];
+
+
+ $whereMap = [["a.state", "in", [BusinessModel::state_reviewing, BusinessModel::state_off]]];
+ //如果是渠道商或者工作人员 只查看自己的下级商家
+ if(Member::is_agency($this->auth['roles'])){
+ $whereMap[] = ['a.agency_code', '=', $this->auth['business_code']];
+ }
+ $orders = ['a.id' => 'desc'];
if (!empty($keyword)) {
- $whereMap[] = ['account.nick_name|business.business_name', 'like', "%$keyword%"];
+ $whereMap[] = ['b.nick_name|a.business_name', 'like', "%$keyword%"];
}
$list = $repo->businessList($whereMap, $page, $size, $orders);
@@ -280,6 +293,10 @@ class Business extends Base
$businessCode = input("business_code/s", "");
$state = input("state/d", 0);
$reason = input("reason/s", '');
+ if (!in_array($state, [BusinessModel::state_off, BusinessModel::state_on])) {
+ return $this->json(4001, "错误的审核状态");
+ }
+
$business = BusinessRepository::getInstance()->findOneByWhere(["code" => $businessCode]);
if (empty($business)) {
return $this->json(4001, "商家不存在");
@@ -287,12 +304,15 @@ class Business extends Base
if ($business['state'] != BusinessModel::state_reviewing) {
return $this->json(4001, "商家当前状态不可审核");
}
- if (!in_array($state, [BusinessModel::state_off, BusinessModel::state_on])) {
- return $this->json(4001, "错误的审核状态");
+ $account = AccountRepository::getInstance()->findOneByWhere(["business_code" => $businessCode]);
+ if (empty($account)) {
+ return $this->json(4001, "关联用户不存在");
}
+
Db::startTrans();
try {
$business->save(["state" => $state, "reason" => $reason]);
+ $account->save(["type" => Account::type_business]);
Db::commit();
return $this->json();
} catch (RepositoryException $e) {
diff --git a/app/controller/manager/BusinessCircle.php b/app/controller/manager/BusinessCircle.php
index 2ca16dd..9b37231 100644
--- a/app/controller/manager/BusinessCircle.php
+++ b/app/controller/manager/BusinessCircle.php
@@ -4,6 +4,7 @@ namespace app\controller\manager;
use app\model\BusinessCircle as BusinessCircleModel;
+use app\repository\BusinessRepository;
use Exception;
use think\facade\Db;
use think\db\exception\DataNotFoundException;
@@ -41,8 +42,14 @@ class BusinessCircle extends Base
if ($this->request->isPost()) {
$item = input('post.');
$validate = $this->validateByApi($item, [
- 'sort|标题' => 'require|number',
+ 'sort|排序' => 'require|number',
'name|标题' => 'require|max:100',
+ 'province|省市区' => 'require',
+ 'city|省市区' => 'require',
+ 'county|省市区' => 'require',
+ 'business_address|详细地址' => 'require',
+ 'lng|经度' => 'require',
+ 'lat|纬度' => 'require',
]);
if ($validate !== true) {
@@ -82,6 +89,7 @@ class BusinessCircle extends Base
if ($validate !== true) {
return $validate;
}
+ $item['create_time'] = date("Y-m-d H:i:s");
try {
BusinessCircleModel::create($item);
return $this->json();
@@ -104,6 +112,11 @@ class BusinessCircle extends Base
return $this->json(4000, '非法请求');
}
$ids = $this->request->param('ids/a', []);
+ foreach ($ids as $item){
+ if(count(BusinessRepository::getInstance()->getByCircleId($item)->toArray())){
+ return $this->json("4002","该商圈存在绑定商家 不能删除");
+ }
+ }
BusinessCircleModel::destroy($ids);
return $this->json();
}
diff --git a/app/controller/manager/Coupon.php b/app/controller/manager/Coupon.php
index c253fe7..e7e8ca8 100644
--- a/app/controller/manager/Coupon.php
+++ b/app/controller/manager/Coupon.php
@@ -5,6 +5,7 @@ namespace app\controller\manager;
use app\exception\RepositoryException;
use app\model\CouponMain;
+use app\model\Member;
use app\repository\BusinessRepository;
use app\repository\CouponRepository;
use app\validate\CouponRelease;
@@ -47,7 +48,7 @@ class Coupon extends Base
$size = $this->request->param('size/d', 30);
$whereMap = [];
- $orders = ['id' => 'desc'];
+ $orders = ['sort' => 'desc',"id"=>"desc"];
if (!empty($on_shelf) && in_array($on_shelf, [CouponMain::COMMON_ON, CouponMain::COMMON_OFF])) {
$whereMap[] = ['on_shelf', '=', $on_shelf];
}
@@ -60,18 +61,35 @@ class Coupon extends Base
if (!empty($keyword)) {
$whereMap[] = ['name', 'like', "%" . $keyword . "%"];
}
+
$list = $repo->findList($whereMap, [], $page, $size, function ($q) {
if (!empty($keyword)) {
return $q::hasWhere('business', function ($q) use ($keyword) {
- $q->where('business_name', 'like', "%" . $keyword . "%")->field("code,business_name,business_subtitle,type")
+ $q->where('business_name', 'like', "%" . $keyword . "%")
+ //如果是渠道商或者工作人员 只查看自己的下级商家
+ ->when(Member::is_agency($this->auth['roles']),function ($q){
+ $q->where( 'agency_code', '=', $this->auth['business_code']);
+ })
+ ->field("code,business_name,business_subtitle,type")
->with('category');
});
}
- return $q->with(["business" => function ($query) {
- $query->field("code,business_name,business_subtitle,type")
- ->with('category');
- }]);
+
+ if(Member::is_agency($this->auth['roles'])){
+ return $q::hasWhere('business', function ($q) {
+ $q//如果是渠道商或者工作人员 只查看自己的下级商家
+ ->where( 'agency_code', '=', $this->auth['business_code'])
+ ->field("code,business_name,business_subtitle,type")
+ ->with('category');
+ });
+ }else{
+ return $q->with(["business" => function ($query) {
+ $query->field("code,business_name,business_subtitle,type")
+ ->with('category');
+ }]);
+ }
+
}, $orders);
$time = time();
$list['list']->each(function ($item) use ($time) {
@@ -88,6 +106,9 @@ class Coupon extends Base
return $this->view();
}
+ /**
+ * 上架状态 0上架 1下架
+ * */
public function shelf()
{
$id = input("id/d", 0);
diff --git a/app/controller/manager/Index.php b/app/controller/manager/Index.php
index 77a74a2..bb6b670 100644
--- a/app/controller/manager/Index.php
+++ b/app/controller/manager/Index.php
@@ -65,7 +65,9 @@ class Index extends Base
$menus[$k]['icon'] = !empty($m['icon']) ? 'fa '.$m['icon'] : '';
$menus[$k]['href'] = ltrim($m['href'], '/');
}
- $menus = CmsRepository::getInstance()->buildMenuChild(0, $menus, 'child');
+
+ $menus = CmsRepository::getInstance()->buildMenuChild(0, $menus, 'child',);
+
$res['menuInfo'] = $menus;
return json($res);
diff --git a/app/controller/manager/Login.php b/app/controller/manager/Login.php
index 7525433..f4b5988 100644
--- a/app/controller/manager/Login.php
+++ b/app/controller/manager/Login.php
@@ -47,6 +47,7 @@ class Login extends BaseController
'username' => $member['username'],
'nickname' => $member['nickname'],
'business_code' => $member['business_code'],
+ 'roles' => $member['roles'],
];
$jwtToken = Jwt::generate($userInfo, env('app.expire', 7200));
diff --git a/app/controller/manager/Member.php b/app/controller/manager/Member.php
index 11b3c00..80c8670 100644
--- a/app/controller/manager/Member.php
+++ b/app/controller/manager/Member.php
@@ -143,14 +143,14 @@ class Member extends Base
try {
//之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家
if ($info['business_code'] != $item['business_code']) {
- if(!empty($info['business_code']) ){
+ if($info['business_code']!="_" ){
$oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]);
if (!empty($oldBusiness)) {
$oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]);
}
}
//如果改变了关联商家
- if(!empty($item['business_code'])){
+ if($item['business_code']!="_"){
$Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]);
if (empty($Business)) {
Db::rollback();
diff --git a/app/model/Account.php b/app/model/Account.php
index b1f494c..8650038 100644
--- a/app/model/Account.php
+++ b/app/model/Account.php
@@ -13,22 +13,11 @@ class Account extends Base
public const type_business = 1;//商家
public const type_staff = 2;//员工
- public const state_default = 0;// 未提交
- public const state_examineing = 1 ;// 1审核中
- public const state_fail = 2;// 2拒绝
- public const state_success = 3;// 3审核通过
// 默认头像
public const DEFAULT_AVATAR = '/static/images/default-avatar.png';
- public static function allState(){
- return [
- self::state_default=>"未提交",
- self::state_examineing=>"审核中",
- self::state_fail=>"拒绝",
- self::state_success=>"审核通过",
- ];
- }
+
public static function accountTypeDescList(): array
{
diff --git a/app/model/CouponMain.php b/app/model/CouponMain.php
index 9333cd2..f5a07a9 100644
--- a/app/model/CouponMain.php
+++ b/app/model/CouponMain.php
@@ -6,6 +6,7 @@ use think\Collection;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
+use think\Model;
/**
* 优惠券主表
@@ -27,4 +28,10 @@ class CouponMain extends Base
{
return $this->hasOne(CouponType::class, 'id',"type_id");
}
+
+ public static function onAfterInsert( $obj)
+ {
+ $obj->sort = $obj->id;
+ $obj->save();
+ }
}
\ No newline at end of file
diff --git a/app/model/Member.php b/app/model/Member.php
index a626080..e90e849 100644
--- a/app/model/Member.php
+++ b/app/model/Member.php
@@ -6,11 +6,12 @@ use think\facade\Db;
class Member extends Base
{
- public const STATUS_NORMAL = 1;//正常
+ public const STATUS_NORMAL = 1;//正常
public const STATUS_DISABLE = 0;//禁用
+ public const MANAGER_ROLE_ID = 1;//角色id 2 为管理员
public const ANENT_ROLE_ID = 2;//角色id 2 为代理商
-
+ public const STAFF_ROLE_ID = 3;//角色id 2 为工作人员
public static function getList($limit = 40)
@@ -25,23 +26,25 @@ class Member extends Base
/**
* 获取所有代理商
* */
- public static function getAgentAll(){
+ public static function getAgentAll()
+ {
$subQuery = Db::name('member')
->field('id,business_code,nickname')
- ->whereRaw('(find_in_set("'.Member::ANENT_ROLE_ID .'", roles))')
+ ->whereRaw('(find_in_set("' . Member::ANENT_ROLE_ID . '", roles))')
->buildSql();
- return Db::table($subQuery . ' a')
- ->join("business b" ,"a.business_code = b.code")
- ->field("a.*")
+ return Db::table($subQuery . ' a')
+ ->join("business b", "a.business_code = b.code")
+ ->field("a.*")
->order('a.id', 'desc')
->select();
}
+
/**
* 根据角色分组返回用户
- * @param int $groupId 角色分组ID
- * @param int $limit 每页数量
+ * @param int $groupId 角色分组ID
+ * @param int $limit 每页数量
*/
public static function getListByGroup($groupId, $limit = 40)
{
@@ -75,7 +78,30 @@ class Member extends Base
public static function updateCates($id, $cates)
{
$cates = implode(',', $cates);
- $data = ['cates' => $cates];
+ $data = ['cates' => $cates];
self::updateById($id, $data);
}
+
+ /**
+ * 验证当前用户是否是渠道商
+ * @param string $roles
+ */
+ public static function is_agency(string $roles)
+ {
+ if (empty($roles)) {
+ return true;
+ }
+
+ $roles = explode(",", $roles);
+
+ //包含管理员就返回false
+ if (in_array(self::MANAGER_ROLE_ID, $roles)) {
+ return false;
+ }
+
+ if (in_array(self::STAFF_ROLE_ID, $roles) || in_array(self::ANENT_ROLE_ID, $roles)) {
+ return true;
+ }
+ return false;
+ }
}
\ No newline at end of file
diff --git a/app/repository/BillRepository.php b/app/repository/BillRepository.php
index c319c98..1f10845 100644
--- a/app/repository/BillRepository.php
+++ b/app/repository/BillRepository.php
@@ -8,6 +8,7 @@ use app\model\BusinessFlow;
use app\model\CouponBill;
use app\model\CouponMain;
use app\model\Deduction;
+use app\model\Member as MemberModel;
use app\model\Recharge;
use app\service\Repository;
use think\Collection;
@@ -44,25 +45,28 @@ class BillRepository extends Repository
'size' => $size,
'list' => new Collection(),
];
- $rep = CouponBill::with([
- "business" => function ($query) use ($keyword) {
- $query->field(["code", "business_name"])->when(empty($keyword), function ($q) use ($keyword) {
- $q->where("business_name", "like", "%$keyword%");
- });
- },
- "account" => function ($q) {
- $q->field(["user_code", "nick_name"]);
- },
- "couponMain" => function ($q) {
- $q->field(["id", "name"]);
- },
- ])
+ $rep = CouponBill::alias("a")
+ ->join("business b","a.business_code = b.code")
+ ->join("account c","a.user_code = c.user_code")
+ ->join("coupon_main d","a.coupon_main_id = d.id")
+
+ ->when(!empty($keyword),function ($q) use($keyword){
+ $q->where("b.business_name|c.nick_name|d.name", "like", "%$keyword%");
+ })
+ ->when(MemberModel::is_agency(session("auth")['roles']),function ($q) {
+ $q->where("b.agency_code", "=", session("auth")['business_code']);
+ })
->when(!empty($startTime), function ($q) use ($startTime) {
- $q->whereTime("create_time", ">=", $startTime);
+ $q->whereTime("a.create_time", ">=", $startTime);
})
->when(!empty($endTime), function ($q) use ($endTime) {
- $q->whereTime("create_time", "<=", $endTime);
- });
+ $q->whereTime("a.create_time", "<=", $endTime);
+ })
+ ->field("a.*,b.business_name,c.nick_name,c.avatar_url,d.name as coupon_main_name")
+ ;
+
+
+
$failData ['total'] = $rep->count();
$failData ['list'] = $rep
@@ -84,9 +88,13 @@ class BillRepository extends Repository
{
return CouponBill::when(!empty($start_time), function ($q) use ($start_time) {
$q->whereTime("create_time", ">=", $start_time);
- })->when(!empty($end_time), function ($q) use ($end_time) {
+ })
+ ->when(!empty($end_time), function ($q) use ($end_time) {
$q->whereTime("create_time", "<=", $end_time);
- })
+ })
+ ->when(MemberModel::is_agency(session("auth")['roles']),function ($q) {
+ $q->where("agency_code", "=", session("auth")['business_code']);
+ })
->sum($field);
}
diff --git a/app/repository/BusinessRepository.php b/app/repository/BusinessRepository.php
index 951d76e..77b2a14 100644
--- a/app/repository/BusinessRepository.php
+++ b/app/repository/BusinessRepository.php
@@ -9,6 +9,7 @@ use app\model\CouponMain;
use app\model\Deduction;
use app\model\Recharge;
use app\service\Repository;
+use app\traits\CouponBillTrait;
use think\Collection;
use think\Model;
@@ -21,6 +22,7 @@ use think\Model;
*/
class BusinessRepository extends Repository
{
+ use CouponBillTrait;
/**
* 根据条件查询列表
*
@@ -34,9 +36,15 @@ class BusinessRepository extends Repository
public function businessList(array $where = [], int $page = 1, int $limit = 0, array $order = [])
{
$q = $this->model->alias("a")
- ->join("account b","a.user_code = b.user_code")
- ->join("business c","a.business_code = c.code")
- ->field(["c.code as business_code","b.avatar_url", "b.nick_name as account_nick_name","c.business_name","c.total_recharge","c.id as basiness_id","c.balance"]);
+ ->join("account b","a.code = b.business_code")
+ ->field(["a.code as business_code",
+ "b.avatar_url",
+ "b.nick_name as account_nick_name",
+ "a.business_name",
+ "a.total_recharge",
+ "a.id as basiness_id",
+ "a.balance"])
+ ->group("a.id");
$data = [
'total' => 0,
'current' => $page,
@@ -144,4 +152,13 @@ class BusinessRepository extends Repository
return $Flow;
}
+ /**
+ * 查看指定商圈下的商家
+ * @param $businessCircleId
+ * @return Business
+ */
+ public function getByCircleId($businessCircleId)
+ {
+ return Business::where("business_circle_id",$businessCircleId)->select();
+ }
}
\ No newline at end of file
diff --git a/app/traits/CouponBillTrait.php b/app/traits/CouponBillTrait.php
index 1b3432f..caeacb8 100644
--- a/app/traits/CouponBillTrait.php
+++ b/app/traits/CouponBillTrait.php
@@ -14,5 +14,10 @@ trait CouponBillTrait
return CouponBill::where("user_code",$userCode)->sum("consumer_money");
}
+ //商家 提供的总收益数
+ public function businessProfitTotal($businessCode)
+ {
+ return CouponBill::where("business_code",$businessCode)->sum("admin_money");
+ }
}
\ No newline at end of file
diff --git a/app/traits/cms/MenuTrait.php b/app/traits/cms/MenuTrait.php
index e52b5db..7a0acb0 100644
--- a/app/traits/cms/MenuTrait.php
+++ b/app/traits/cms/MenuTrait.php
@@ -3,6 +3,7 @@
namespace app\traits\cms;
use app\model\Menu;
+use tauthz\facade\Enforcer;
use think\Collection;
trait MenuTrait
@@ -36,7 +37,9 @@ trait MenuTrait
$node[$childName] = $child;
$node['has_children'] = true;
}
+
// todo 后续此处加上用户的权限判断
+
$treeList[] = $node;
}
}
diff --git a/public/static/manager/js/area.js b/public/static/manager/js/area.js
index baa0c99..6d2d4d9 100644
--- a/public/static/manager/js/area.js
+++ b/public/static/manager/js/area.js
@@ -32,17 +32,27 @@ layui.use(['laytpl', 'treeTable', 'jquery', 'iconPickerFa', 'form', 'miniTab', '
},
cols: [[
{type: 'checkbox'},
- {field: 'title', title: '菜单名称', minWidth: 150, singleLine: true},
- {title: '图标', width: 50, templet: '
',align: 'center'},
- {field: 'name', title: '路由标识'},
-
- {templet: '#menu-operate', minWidth: 250, fixed: 'right', align: 'center', title: '操作'}
+ {field: 'name', title: '名称', minWidth: 150, singleLine: true},
+ {field: 'name', title: '状态'},
+ {templet: '#row-status',field: 'status', minWidth: 180,align: 'center', title: '状态'},
]],
done: function () {
}
});
+ let modifyUrl = $('#row-modify').data('url');
-
+ //监听状态改变
+ form.on('switch(changeStatus)', function(obj){
+ let val = obj.elem.checked ? 1 : 0;
+ $.post(modifyUrl, {id: this.value, field: this.name, value: val}, function (res) {
+ layer.msg(res.msg)
+ if (res.code === 0) {
+ setTimeout(function () {
+ //insTb.reload();
+ }, 1000)
+ }
+ })
+ });
//监听工具条 注意区别toolbar和tool toolbar是表头上的工具条 tool是行中的工具条
treeTable.on('toolbar(menu-table)', function (obj) {
diff --git a/public/static/manager/js/bill.js b/public/static/manager/js/bill.js
index 4104672..357ad71 100644
--- a/public/static/manager/js/bill.js
+++ b/public/static/manager/js/bill.js
@@ -45,24 +45,9 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect',"laydate"]
page: true,
cols: [[
{type: 'checkbox'},
- {templet:function(d){
- if( d.account != undefined &&d.account){
- return d.account.nick_name
- }
- return '';
- }, title: '用户昵称'},
- {templet:function(d){
- if( d.business != undefined &&d.business){
- return d.business.business_name
- }
- return '';
- }, title: '商家名称'},
- {templet:function(d){
- if( d.couponMain != undefined &&d.couponMain){
- return d.couponMain.name
- }
- return '';
- }, title: '优惠券名称'},
+ {field: "nick_name",title: '用户昵称'},
+ {field: "business_name", title: '商家名称'},
+ {field: "coupon_main_name", title: '优惠券名称'},
{templet:"#row-commission", title: '持有比例(渠道商:平台:消费者)'},
{field: 'money', minWidth: 200, title: '金额'},
{field: 'create_time', minWidth: 200, title: '时间'},
diff --git a/public/static/manager/js/business/business.js b/public/static/manager/js/business/business.js
index 5791c7b..749f016 100644
--- a/public/static/manager/js/business/business.js
+++ b/public/static/manager/js/business/business.js
@@ -49,6 +49,7 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function
{field: 'coupon_receive_count', title: '已领取优惠券数量'},
{field: 'coupon_be_overdue_count', title: '过期未使用优惠券数量'},
{field: 'coupon_used_count', title: '已使用优惠数量'},
+ {field: 'coupon_profit_count', title: '为平台提供的总收益'},
{field: 'balance',title: '商家余额'},
{field: 'recharge_total_money', title: '充值总额'},
diff --git a/view/manager/agency/add.html b/view/manager/agency/add.html
index d31d49b..8d12f10 100644
--- a/view/manager/agency/add.html
+++ b/view/manager/agency/add.html
@@ -34,14 +34,14 @@
-
+
关联商家
- {foreach $business as $bitem}
- {$bitem['contact_name']}_{$bitem['business_name']}
- {/foreach}
+
+
+
diff --git a/view/manager/agency/edit.html b/view/manager/agency/edit.html
index 492a78e..4b8c107 100644
--- a/view/manager/agency/edit.html
+++ b/view/manager/agency/edit.html
@@ -28,17 +28,18 @@
-
-
关联商家
-
-
-
- {foreach $business as $bitem}
- {$bitem['contact_name']}_{$bitem['business_name']}
- {/foreach}
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/view/manager/coupon/edit.html b/view/manager/coupon/edit.html
index 265d35d..c94b2d5 100644
--- a/view/manager/coupon/edit.html
+++ b/view/manager/coupon/edit.html
@@ -129,6 +129,14 @@
+
+
+
请填写完整整数 总和为100
diff --git a/view/manager/member/edit.html b/view/manager/member/edit.html
index a9d6b93..efd789e 100644
--- a/view/manager/member/edit.html
+++ b/view/manager/member/edit.html
@@ -36,7 +36,7 @@
关联商家
-
+ 不绑定
{foreach $business as $bitem}
{$bitem['contact_name']}_{$bitem['business_name']}
{/foreach}
From c7d77f4ca652e7f35f72774860606ccdc1bf1cc7 Mon Sep 17 00:00:00 2001
From: wangxinglong <2371974647@qq.com>
Date: Tue, 30 Nov 2021 18:31:58 +0800
Subject: [PATCH 2/2] setter
---
app/controller/manager/Agency.php | 288 ++++++++++++++----
app/controller/manager/Business.php | 1 -
app/controller/manager/Comment.php | 4 +-
app/controller/manager/Consumer.php | 27 +-
app/controller/manager/Login.php | 13 +
app/model/Business.php | 5 +
app/model/BusinessFlow.php | 2 +-
app/model/Deduction.php | 4 +
app/model/Member.php | 12 +
app/repository/BillRepository.php | 6 -
app/repository/BusinessRepository.php | 60 +++-
public/static/manager/js/agency.js | 13 +
.../js/business/business_deduction_list.js | 7 +
public/static/manager/js/channel.js | 119 ++++++++
view/manager/agency/add.html | 12 -
view/manager/agency/add_channel.html | 58 ++++
view/manager/agency/channel_list.html | 58 ++++
view/manager/agency/edit.html | 12 -
view/manager/agency/edit_channel.html | 53 ++++
.../business/business_deduction_list.html | 5 +
view/manager/consumer/blank_list.html | 9 -
view/manager/consumer/index.html | 13 -
22 files changed, 629 insertions(+), 152 deletions(-)
create mode 100644 public/static/manager/js/channel.js
create mode 100644 view/manager/agency/add_channel.html
create mode 100644 view/manager/agency/channel_list.html
create mode 100644 view/manager/agency/edit_channel.html
diff --git a/app/controller/manager/Agency.php b/app/controller/manager/Agency.php
index 173a115..7e85170 100644
--- a/app/controller/manager/Agency.php
+++ b/app/controller/manager/Agency.php
@@ -48,31 +48,71 @@ class Agency extends Base
return $this->json(4002, '请输入正确的手机号码');
}
- $item['roles'] = [MemberModel::STAFF_ROLE_ID];
+ $item['roles'] = MemberModel::STAFF_ROLE_ID;
$item['status'] = MemberModel::COMMON_ON;
- $item['pid'] = $this->auth["user_id"];
- $item['business_code'] = $this->auth["business_code"];
+ $item['pid'] = $this->auth["user_id"];
+ $item['business_code'] = $this->auth["business_code"];
- $roles = [];
- if ($item['roles']) {
- $roles = $item['roles'];
- $item['roles'] = implode(',', $item['roles']);
- }
+ $roles = [MemberModel::STAFF_ROLE_ID];
Db::startTrans();
try {
-
- //如果关联商家
- if (!empty($item['business_code'])) {
- $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]);
- if (empty($Business)) {
- Db::rollback();
- return $this->json(4001, "指定商家不存在");
- }
- $Business->save(["is_agency" => BusinessModel::COMMON_ON]);
+ $item['password'] = md5($item['password'] . $item['username']);
+ $member = MemberModel::create($item);
+ foreach ($roles as $role) {
+ Enforcer::addRoleForUser($member['id'], $role);
}
+ Db::commit();
+ return $this->json();
+ } catch (ValidateException $e) {
+ Db::rollback();
+ return $this->json(4001, $e->getError());
+ }
+ }
+
+ $this->data['roleJson'] = $this->roleJson();
+ $this->data['business'] = BusinessRepository::getInstance()->getBusinessAll();
+
+ return $this->view();
+ }
+
+ /**
+ * 添加平台商
+ *
+ * @return Json|View
+ * @throws Exception
+ */
+ public function addChannel()
+ {
+ if ($this->request->isPost()) {
+ $item = input('post.');
+
+ $validate = $this->validateByApi($item, [
+ 'username|用户名' => 'require|alphaDash|min:4|max:16|unique:member',
+ 'mobile|手机号' => 'require|unique:member',
+ 'nickname|昵称' => 'require|chsAlphaNum|min:2|max:10',
+ 'password|密码' => 'require|min:4|max:16',
+ 'remark|备注信息' => 'max:255',
+ ]);
+
+ if ($validate !== true) {
+ return $validate;
+ }
+
+ if (!checkMobile($item['mobile'])) {
+ return $this->json(4002, '请输入正确的手机号码');
+ }
+
+ $item['roles'] = MemberModel::ANENT_ROLE_ID;
+ $item['status'] = MemberModel::COMMON_ON;
+ $item['pid'] = 0;
+ $roles = [MemberModel::ANENT_ROLE_ID];
+
+
+ Db::startTrans();
+ try {
$item['password'] = md5($item['password'] . $item['username']);
$member = MemberModel::create($item);
foreach ($roles as $role) {
@@ -125,42 +165,11 @@ class Agency extends Base
if (!checkMobile($item['mobile'])) {
return $this->json(4002, '请输入正确的手机号码');
}
- $item['roles'] = [MemberModel::STAFF_ROLE_ID];
- $roles = [];
- if ($item['roles']) {
- $roles = $item['roles'];
- $item['roles'] = implode(',', $item['roles']);
- }
-
Db::startTrans();
try {
- //之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家
- if ($info['business_code'] != $item['business_code']) {
- if (!empty($info['business_code'])) {
- $oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]);
- if (!empty($oldBusiness)) {
- $oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]);
- }
- }
- //如果改变了关联商家
- if (!empty($item['business_code'])) {
- $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]);
- if (empty($Business)) {
- Db::rollback();
- return $this->json(4001, "指定商家不存在");
- }
- $Business->save(["is_agency" => BusinessModel::COMMON_ON]);
- }
- }
$info->save($item);
- //删除所有角色
- Enforcer::deleteRolesForUser($id);
- //新增角色
- foreach ($roles as $role) {
- Enforcer::addRoleForUser($id, $role);
- }
Db::commit();
return $this->json();
} catch (ValidateException $e) {
@@ -170,16 +179,85 @@ class Agency extends Base
}
$this->data['item'] = $info;
- $this->data['roleJson'] = $this->roleJson(explode(',', $info['roles']));
+ return $this->view();
+ }
+
+ /**
+ * 编辑
+ *
+ * @return Json|View
+ * @throws DataNotFoundException
+ * @throws DbException
+ * @throws ModelNotFoundException
+ * @throws Exception
+ */
+ public function editChannel()
+ {
+ $id = input('id/d', 0);
+
+ if (!$info = MemberModel::findById($id)) {
+ return $this->json(4001, '记录不存在');
+ }
+
+ if ($this->request->isPost()) {
+ $item = input('post.');
+
+ $validate = $this->validateByApi($item, [
+ 'mobile|手机号' => 'require|unique:member,mobile,' . $id,
+ 'nickname|昵称' => 'require|chsAlphaNum|min:2|max:10',
+ 'remark|备注信息' => 'max:255',
+ ]);
+
+ if ($validate !== true) {
+ return $validate;
+ }
+
+ if (!checkMobile($item['mobile'])) {
+ return $this->json(4002, '请输入正确的手机号码');
+ }
+
+ Db::startTrans();
+ try {
+ //之前关联的商家不为空 并且已经改变 吧之前的商家 从代理商变成普通商家
+ if ($info['business_code'] != $item['business_code']) {
+ if($info['business_code']!="_" ){
+ $oldBusiness = BusinessRepository::getInstance()->findOneByWhere(["code" => $info['business_code']]);
+ if (!empty($oldBusiness)) {
+ $oldBusiness->save(["is_agency" => BusinessModel::COMMON_OFF]);
+ }
+ }
+ //如果改变了关联商家
+ if($item['business_code']!="_"){
+ $Business = BusinessRepository::getInstance()->findOneByWhere(["code" => $item['business_code']]);
+ if (empty($Business)) {
+ Db::rollback();
+ return $this->json(4001, "指定商家不存在");
+ }
+ $Business->save(["is_agency" => BusinessModel::COMMON_ON]);
+ }
+
+ //修改下级工作人员的平台商号
+ BusinessModel::where("pid",$info['id'])->update(["business_code"=>$item['business_code']]);
+ }
+
+ $info->save($item);
+ Db::commit();
+ return $this->json();
+ } catch (ValidateException $e) {
+ Db::rollback();
+ return $this->json(4001, $e->getError());
+ }
+ }
+
+ $this->data['item'] = $info;
$this->data['business'] = BusinessRepository::getInstance()->getBusinessAll();
return $this->view();
}
-
/**
- * 列表
+ * 工作人员列表
*
* @return Json|View
* @throws Exception
@@ -190,23 +268,86 @@ class Agency extends Base
if ($this->request->isPost()) {
$page = $this->request->param('page/d', 1);
$size = $this->request->param('size/d', 30);
-
//只查询拥有渠道商的账号
$whereMap = [['roles', "=", MemberModel::STAFF_ROLE_ID], ['id', "<>", 1]];
$orders = ['id' => 'asc'];
-
//如果是渠道商或者工作人员 只查看自己的商家
- if (MemberModel::is_agency($this->auth['roles'])){
+ if (MemberModel::is_agency($this->auth['roles'])) {
$whereMap[] = ["pid", "=", $this->auth['user_id']];
}
-
$list = MemberModel::findList($whereMap, [], $page, $size, null, $orders);
-
return $this->json(0, 'success', $list);
}
return $this->view();
}
+ /**
+ * 渠道商列表
+ *
+ * @return Json|View
+ * @throws Exception
+ */
+ public function channelList()
+ {
+ if ($this->request->isPost()) {
+ $page = $this->request->param('page/d', 1);
+ $size = $this->request->param('size/d', 30);
+ //只查询拥有渠道商的账号
+ $whereMap = [['roles', "=", MemberModel::ANENT_ROLE_ID], ['id', "<>", 1]];
+ $orders = ['id' => 'asc'];
+
+ $list = MemberModel::findList($whereMap, [], $page, $size, null, $orders);
+
+ $list["list"]->each(function ($item) {
+ //管理的商家数
+ $item->business_count = BusinessRepository::getInstance()->agencyHasBusinessCount($item['business_code']);
+ //管理的商家的优惠券数
+ $item->coupon_count = BusinessRepository::getInstance()->agencyHasCouponCount($item['business_code']);
+ });
+ return $this->json(0, 'success', $list);
+ }
+ return $this->view();
+ }
+
+
+ /**
+ * 单个字段编辑
+ *
+ * @return Json
+ * @throws DataNotFoundException
+ * @throws DbException
+ * @throws ModelNotFoundException
+ * @throws Exception
+ */
+ public function modify(): Json
+ {
+ if ($this->request->isPost()) {
+ $item = input('post.');
+ $validate = $this->validateByApi($item, [
+ 'field' => 'require',
+ 'value' => 'require',
+ ]);
+
+ if ($validate !== true) {
+ return $validate;
+ }
+
+ if (!$info = MemberModel::findById($item['id'])) {
+ return $this->json(4001, '记录不存在');
+ }
+
+ $update = [$item['field'] => $item['value']];
+
+
+ try {
+ $info->save($update);
+ return $this->json();
+ } catch (ValidateException $e) {
+ return $this->json(4001, $e->getError());
+ }
+ }
+ return $this->json(4000, '非法请求');
+ }
/**
* 删除
@@ -220,6 +361,11 @@ class Agency extends Base
if (empty($ids)) {
$ids[] = input('post.id/d');
}
+ foreach ($ids as $id) {
+ if ($id == 1) {
+ return $this->json(5000, "错误的删除操作");
+ }
+ }
MemberModel::deleteByIds($ids);
foreach ($ids as $id) {
Enforcer::deleteRolesForUser($id);
@@ -231,6 +377,36 @@ class Agency extends Base
}
+ /**
+ * 删除
+ *
+ * @return Json
+ */
+ public function delChannel(): Json
+ {
+ if ($this->request->isPost()) {
+ $ids = input('post.ids/a', []);
+ if (empty($ids)) {
+ $ids[] = input('post.id/d');
+ }
+ foreach ($ids as $id) {
+ if ($id == 1) {
+ return $this->json(5000, "错误的删除操作");
+ }
+ if(MemberModel::hasStaff($id)){
+ return $this->json(5000, "还存在员工,不能删除");
+ }
+ }
+ MemberModel::deleteByIds($ids);
+ foreach ($ids as $id) {
+ Enforcer::deleteRolesForUser($id);
+ }
+ Log::write(get_class() . 'Del', 'del', '涉及到的ID为:' . implode(',', $ids));
+ return $this->json();
+ }
+ return $this->json(4001, '非法请求!');
+ }
+
/**
* 修改密码
*
diff --git a/app/controller/manager/Business.php b/app/controller/manager/Business.php
index faf1126..94f7970 100644
--- a/app/controller/manager/Business.php
+++ b/app/controller/manager/Business.php
@@ -12,7 +12,6 @@ use app\model\Member;
use app\model\BusinessCircle as BusinessCircleModel ;
use app\repository\AccountRepository;
use app\repository\BusinessRepository;
-use app\repository\CouponRepository;
use app\repository\RechargeRepository;
use app\service\wx\WechatPay;
use Exception;
diff --git a/app/controller/manager/Comment.php b/app/controller/manager/Comment.php
index ac25a15..7760310 100644
--- a/app/controller/manager/Comment.php
+++ b/app/controller/manager/Comment.php
@@ -180,7 +180,7 @@ class Comment extends Base
$whereMap = [["comment.is_delete", "=", CommentModel::COMMON_OFF]];
$orders = ['comment.id' => 'desc'];
if (!empty($keyword)) {
- $whereMap[] = ['account.nick_name', 'like', "%$keyword%"];
+ $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"];
}
if ($type >= 0) {
$whereMap[] = ['comment.type', '=', $type];
@@ -217,7 +217,7 @@ class Comment extends Base
$size = $this->request->param('size/d', 30);
$whereMap = [["comment.is_delete", "=", CommentModel::COMMON_ON]];
if (!empty($keyword)) {
- $whereMap[] = ['account.nick_name', 'like', "%$keyword%"];
+ $whereMap[] = ['account.nick_name|comment.comment', 'like', "%$keyword%"];
}
$orders = ['comment.id' => 'desc'];
$list = CommentModel::findList($whereMap, [], $page, $size, function ($q) {
diff --git a/app/controller/manager/Consumer.php b/app/controller/manager/Consumer.php
index 2bb3ef7..5390443 100644
--- a/app/controller/manager/Consumer.php
+++ b/app/controller/manager/Consumer.php
@@ -2,23 +2,11 @@
namespace app\controller\manager;
-use app\exception\RepositoryException;
use app\model\Account;
-use app\model\BusinessFlow;
use app\model\Coupon;
-use app\model\CouponMain;
-use app\model\Recharge;
-use app\model\Business as BusinessModel;
-use app\model\Member;
-use app\model\Tag;
use app\repository\AccountRepository;
-use app\repository\BusinessRepository;
-use app\repository\CouponRepository;
-use app\repository\RechargeRepository;
-use app\service\wx\WechatPay;
use Exception;
-use think\facade\Db;
use think\response\Json;
use think\response\View;
@@ -36,11 +24,9 @@ class Consumer extends Base
*/
public function index()
{
- $stateArray = Account::allState();
if ($this->request->isPost()) {
$repo = AccountRepository::getInstance();
$keyword = $this->request->param('keyword/s', '');
- $state = $this->request->param('state/d', "-1");
$page = $this->request->param('page/d', 1);
$size = $this->request->param('size/d', 30);
@@ -49,9 +35,6 @@ class Consumer extends Base
if (!empty($keyword)) {
$whereMap[] = ['nick_name', 'like', "%$keyword%"];
}
- if (isset($stateArray[$state])) {
- $whereMap[] = ['state', '=', $state];
- }
$list = $repo->findList($whereMap, [], $page, $size, function ($q) {
return $q->with("tag");
}, $orders);
@@ -71,7 +54,6 @@ class Consumer extends Base
return $this->json(0, 'success', $list);
}
- $this->data["state"] = $stateArray;
return $this->view();
}
@@ -141,11 +123,11 @@ class Consumer extends Base
*/
public function blankList()
{
- $stateArray = Account::allState();
+
if ($this->request->isPost()) {
$repo = AccountRepository::getInstance();
$keyword = $this->request->param('keyword/s', '');
- $state = $this->request->param('state/d', "-1");
+
$page = $this->request->param('page/d', 1);
$size = $this->request->param('size/d', 30);
@@ -157,9 +139,7 @@ class Consumer extends Base
if (!empty($keyword)) {
$whereMap[] = ['nick_name', 'like', "%$keyword%"];
}
- if (isset($stateArray[$state])) {
- $whereMap[] = ['state', '=', $state];
- }
+
$list = $repo->findList($whereMap, [], $page, $size, null, $orders);
$time = time();
$list["list"]->each(function ($item) use ($time) {
@@ -183,7 +163,6 @@ class Consumer extends Base
return $this->json(0, 'success', $list);
}
- $this->data["state"] = $stateArray;
return $this->view();
}
diff --git a/app/controller/manager/Login.php b/app/controller/manager/Login.php
index f4b5988..af743f4 100644
--- a/app/controller/manager/Login.php
+++ b/app/controller/manager/Login.php
@@ -6,6 +6,7 @@ use app\service\Jwt;
use Exception;
use app\model\{Member, AuthRule, LoginLog};
use app\controller\BaseController;
+use tauthz\facade\Enforcer;
use think\response\Json;
use think\response\View;
@@ -41,6 +42,18 @@ class Login extends BaseController
if ($member['status'] != Member::STATUS_NORMAL) {
return $this->json(4004, '账号已被禁用');
}
+ if($member['pid']){
+ $parentNumber = Member::getById($member['pid']);
+ if(empty($parentNumber)){
+ return $this->json(4004, '平台商账号不存在');
+ }
+ if ($parentNumber['status'] != Member::STATUS_NORMAL) {
+ return $this->json(4004, '所属平台商账号已被禁用');
+ }
+
+ }
+
+
$userInfo = [
'user_id' => $member['id'],
diff --git a/app/model/Business.php b/app/model/Business.php
index ebaf2f7..db7020e 100644
--- a/app/model/Business.php
+++ b/app/model/Business.php
@@ -7,8 +7,13 @@ class Business extends Base
const state_reviewing = 0;
const state_on = 1;
const state_off = 2;
+
public function category()
{
return $this->hasOne(Category::class, 'id',"type");
}
+ public function account()
+ {
+ return $this->hasOne(Account::class, 'business_code',"code");
+ }
}
diff --git a/app/model/BusinessFlow.php b/app/model/BusinessFlow.php
index 433450b..126769b 100644
--- a/app/model/BusinessFlow.php
+++ b/app/model/BusinessFlow.php
@@ -2,7 +2,7 @@
namespace app\model;
-//商家和用户的链接表
+//用户关注的商家
class BusinessFlow extends Base
{
public function account()
diff --git a/app/model/Deduction.php b/app/model/Deduction.php
index fbcdad1..fd8d776 100644
--- a/app/model/Deduction.php
+++ b/app/model/Deduction.php
@@ -15,4 +15,8 @@ use think\db\exception\ModelNotFoundException;
class Deduction extends Base
{
+ public function couponMain()
+ {
+ return $this->hasOne(CouponMain::class,"id","coupon_main_id");
+ }
}
\ No newline at end of file
diff --git a/app/model/Member.php b/app/model/Member.php
index e90e849..9eabf77 100644
--- a/app/model/Member.php
+++ b/app/model/Member.php
@@ -3,6 +3,7 @@
namespace app\model;
use think\facade\Db;
+use think\Model;
class Member extends Base
{
@@ -104,4 +105,15 @@ class Member extends Base
}
return false;
}
+
+ public static function onAfterInsert ($obj)
+ {
+ $obj->create_time = date("Y-m-d H:i:s");
+ $obj->save();
+ }
+
+ public static function hasStaff($id)
+ {
+ return self::where("pid",$id)->count();
+ }
}
\ No newline at end of file
diff --git a/app/repository/BillRepository.php b/app/repository/BillRepository.php
index 1f10845..450ea62 100644
--- a/app/repository/BillRepository.php
+++ b/app/repository/BillRepository.php
@@ -2,14 +2,8 @@
namespace app\repository;
-use app\exception\RepositoryException;
-use app\model\Business;
-use app\model\BusinessFlow;
use app\model\CouponBill;
-use app\model\CouponMain;
-use app\model\Deduction;
use app\model\Member as MemberModel;
-use app\model\Recharge;
use app\service\Repository;
use think\Collection;
use think\Model;
diff --git a/app/repository/BusinessRepository.php b/app/repository/BusinessRepository.php
index 77b2a14..5c62796 100644
--- a/app/repository/BusinessRepository.php
+++ b/app/repository/BusinessRepository.php
@@ -1,10 +1,9 @@
model->alias("a")
- ->join("account b","a.code = b.business_code")
+ ->join("account b", "a.code = b.business_code")
->field(["a.code as business_code",
"b.avatar_url",
"b.nick_name as account_nick_name",
@@ -44,7 +44,7 @@ class BusinessRepository extends Repository
"a.total_recharge",
"a.id as basiness_id",
"a.balance"])
- ->group("a.id");
+ ->group("a.id");
$data = [
'total' => 0,
'current' => $page,
@@ -101,7 +101,9 @@ class BusinessRepository extends Repository
*/
public function businessDeductionList($where, int $page = 1, int $limit = 0, array $order = ["create_time" => "desc", "id" => "desc"])
{
- return Deduction::findList($where, [], $page, $limit, null, $order);
+ return Deduction::findList($where, [], $page, $limit, function ($q) {
+ return $q->with("couponMain");
+ }, $order);
}
/**
@@ -124,26 +126,26 @@ class BusinessRepository extends Repository
/* 获取所有的商家*/
public function getBusinessAll()
{
- return BusinessFlow::alias("a")
- ->join("account b","a.user_code = b.user_code")
- ->join("business c","a.business_code = c.code")
- ->field("c.code , c.business_name ")
- ->order("a.id desc")
- ->select();
+ return Business::alias("a")
+ ->join("account b", "a.code = b.business_code")
+ ->field("a.code , a.business_name ")
+ ->order("a.id desc")
+ ->group("a.id")
+ ->select();
}
/**
* 获取单个商家详情
* @param $businessCode
* @param bool $lock
- * @return BusinessFlow|array|Model|null
+ * @return array|Model|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
- public function getBusinessAccount($businessCode,bool $lock = false)
+ public function getBusinessAccount($businessCode, bool $lock = false)
{
- $Flow = BusinessFlow::with(["account", "business"])->where("business_code", $businessCode)->when($lock,function ($q){
+ $Flow = Business::with(["account"])->where("code", $businessCode)->when($lock, function ($q) {
$q->lock(true);
})->find();
if (empty($Flow) || empty($Flow->account) || empty($Flow->business)) {
@@ -155,10 +157,36 @@ class BusinessRepository extends Repository
/**
* 查看指定商圈下的商家
* @param $businessCircleId
- * @return Business
+ * @return Business[]|array|Collection
+ * @throws \think\db\exception\DataNotFoundException
+ * @throws \think\db\exception\DbException
+ * @throws \think\db\exception\ModelNotFoundException
*/
public function getByCircleId($businessCircleId)
{
- return Business::where("business_circle_id",$businessCircleId)->select();
+ return Business::where("business_circle_id", $businessCircleId)->select();
+ }
+
+ /**
+ * 平台商下有多少商家
+ * @param $agencyCode
+ * @return int
+ */
+ public function agencyHasBusinessCount($agencyCode)
+ {
+ return Business::where("agency_code", $agencyCode)->count();
+ }
+
+ /**
+ * 平台商下商家 所持有的优惠券数量
+ * @param $agencyCode
+ * @return int
+ */
+ public function agencyHasCouponCount($agencyCode)
+ {
+ return Business::alias("a")
+ ->join("coupon_main b", "a.code =b.business_code")
+ ->where("a.agency_code", $agencyCode)
+ ->sum("b.count");
}
}
\ No newline at end of file
diff --git a/public/static/manager/js/agency.js b/public/static/manager/js/agency.js
index a8eac18..6eb2a5f 100644
--- a/public/static/manager/js/agency.js
+++ b/public/static/manager/js/agency.js
@@ -5,6 +5,7 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function
layer = layui.layer,
xmSelect = layui.xmSelect,
miniTab = layui.miniTab;
+ let modifyUrl = $('#row-modify').data('url');
/**** index begin ***/
//index页面
@@ -60,6 +61,18 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function
return false;
});
+ //监听状态改变
+ form.on('switch(changeStatus)', function(obj){
+ let val = obj.elem.checked ? 1 : 0;
+ $.post(modifyUrl, {id: this.value, field: this.name, value: val}, function (res) {
+ layer.msg(res.msg)
+ if (res.code === 0) {
+ setTimeout(function () {
+ insTb.reload();
+ }, 1000)
+ }
+ })
+ });
/** td edit **/
table.on('edit(table-container)', function (obj) {
diff --git a/public/static/manager/js/business/business_deduction_list.js b/public/static/manager/js/business/business_deduction_list.js
index 7e930d9..8ba3595 100644
--- a/public/static/manager/js/business/business_deduction_list.js
+++ b/public/static/manager/js/business/business_deduction_list.js
@@ -43,6 +43,13 @@ layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function
{field: 'create_time', title: '扣费时间'},
{field: 'money', title: '扣费金额'},
{field: 'reason', title: '扣费原因'},
+ {templet : '#row-other', title: '其他'},
+ {templet : function (d) {
+ if(d.couponMain!=undefined){
+ return d.couponMain.name;
+ }
+ return '';
+ }, title: '优惠券名称'},
{field: 'balance' , title: '当前余额'},
]],
done: function () {
diff --git a/public/static/manager/js/channel.js b/public/static/manager/js/channel.js
new file mode 100644
index 0000000..15e3341
--- /dev/null
+++ b/public/static/manager/js/channel.js
@@ -0,0 +1,119 @@
+layui.use(['laytpl', 'table', 'jquery', 'form', 'miniTab', 'xmSelect'], function () {
+ let $ = layui.jquery,
+ form = layui.form,
+ table = layui.table,
+ layer = layui.layer,
+ xmSelect = layui.xmSelect,
+ miniTab = layui.miniTab;
+ let modifyUrl = $('#row-modify').data('url');
+
+ /**** index begin ***/
+ //index页面
+ if ($('.location-index-page').length > 0) {
+ miniTab.listen();
+
+ // 渲染表格
+ let listUrl = $('#table-container').data('url');
+ let insTb = table.render({
+ elem: '#table-container',
+ toolbar: '#toolbar-tpl',
+ defaultToolbar: [null],
+ url: listUrl,
+ method: 'post',
+ even: true,
+ limits: [10,20,50,100,200,500,1000],
+ request: {
+ pageName: 'page',
+ limitName: 'size',
+ },
+ parseData: function (res) {
+ return {
+ "code": res.code, //解析接口状态
+ "msg": res.msg, //解析提示文本
+ "count": res.data.total, //解析数据长度
+ "data": res.data.list //解析数据列表
+ };
+ },
+ page: true,
+ cols: [[
+ {type: 'checkbox'},
+ {field: 'id', width: 80, title: 'ID'},
+ {field: 'nickname', title: '昵称'},
+ {field: 'business_count', title: '下属商家数'},
+ {field: 'coupon_count', title: '下属优惠券数'},
+ {field: 'create_time', title: '注册时间'},
+ {templet: '#row-status', title: '状态'},
+
+ {templet: '#row-operate', minWidth: 150, field: 'right', align: 'center', title: '操作', fixed: 'right'}
+ ]],
+ done: function () {
+ Tools.setInsTb(insTb);
+ }
+ });
+
+ // 监听搜索操作
+ form.on('submit(data-search-btn)', function (data) {
+ //执行搜索重载
+ table.reload('table-container', {
+ page: {curr: 1}
+ , where: data.field
+ }, 'data');
+
+ return false;
+ });
+
+ //监听状态改变
+ form.on('switch(changeStatus)', function(obj){
+ let val = obj.elem.checked ? 1 : 0;
+ $.post(modifyUrl, {id: this.value, field: this.name, value: val}, function (res) {
+ layer.msg(res.msg)
+ if (res.code === 0) {
+ setTimeout(function () {
+ insTb.reload();
+ }, 1000)
+ }
+ })
+ });
+ /** td edit **/
+
+ table.on('edit(table-container)', function (obj) {
+ let id = obj.data.id;
+ if (obj.field == 'sort') {
+ $.ajax('/manager/slide/sort', {
+ data: {
+ "sort": obj.value,
+ "id": id
+ }
+ ,dataType : 'json'
+ ,type: 'POST'
+ })
+ .done(function () {
+ insTb.reload();
+ })
+ }
+ });
+ }
+ /*** index end ***/
+
+ /** add and edit **/
+ if ($('.location-operate-page').length > 0) {
+ //监听提交
+ form.on('submit(saveMember)', function (data) {
+ let url = $(data.elem).data('url');
+ $.post(url, data.field, function (res) {
+ layer.msg(res.msg);
+ if (res.code === 0) {
+ //刷新父级列表
+ parent.layui.$('[data-table-refresh]').trigger("click");
+ setTimeout(function () {
+ //关闭当前弹出层
+ let iframeIndex = parent.layer.getFrameIndex(window.name);
+ parent.layer.close(iframeIndex);
+ }, 1000)
+ }
+ });
+ return false;
+ });
+ }
+
+});
\ No newline at end of file
diff --git a/view/manager/agency/add.html b/view/manager/agency/add.html
index 8d12f10..2309b04 100644
--- a/view/manager/agency/add.html
+++ b/view/manager/agency/add.html
@@ -34,18 +34,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/view/manager/consumer/blank_list.html b/view/manager/consumer/blank_list.html
index e47da67..81084d3 100644
--- a/view/manager/consumer/blank_list.html
+++ b/view/manager/consumer/blank_list.html
@@ -31,15 +31,6 @@
- 状态
-
-
-
- {foreach $state as $key=> $sitem }
- {$sitem}
- {/foreach}
-
-
搜 索
diff --git a/view/manager/consumer/index.html b/view/manager/consumer/index.html
index 2e5ccd0..4888298 100644
--- a/view/manager/consumer/index.html
+++ b/view/manager/consumer/index.html
@@ -34,19 +34,6 @@
-
-
状态
-
-
-
- {foreach $state as $key=> $sitem }
- {$sitem}
- {/foreach}
-
-
-
-
-
搜 索