Browse Source

feat(sales): 添加销售管理与会员关联功能

- 在 Sales 控制器中增加会员注册逻辑- 更新 SalesService 中的 getInfo 方法,包含 user_id 字段
- 在 admin/components.d.ts 中添加多个 Element 组件类型定义
master
liutong 1 year ago
parent
commit
16ef166ed9
  1. 16
      admin/components.d.ts
  2. 218
      niucloud/addon/zhjw/app/adminapi/controller/sales/Sales.php
  3. 2
      niucloud/addon/zhjw/app/service/admin/sales/SalesService.php

16
admin/components.d.ts

@ -16,14 +16,22 @@ declare module '@vue/runtime-core' {
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
ElCard: typeof import('element-plus/es')['ElCard'] ElCard: typeof import('element-plus/es')['ElCard']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol'] ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer'] ElContainer: typeof import('element-plus/es')['ElContainer']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog'] ElDialog: typeof import('element-plus/es')['ElDialog']
ElDrawer: typeof import('element-plus/es')['ElDrawer'] ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown'] ElDropdown: typeof import('element-plus/es')['ElDropdown']
@ -43,15 +51,20 @@ declare module '@vue/runtime-core' {
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader'] ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElResult: typeof import('element-plus/es')['ElResult'] ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElStatistic: typeof import('element-plus/es')['ElStatistic'] ElStatistic: typeof import('element-plus/es')['ElStatistic']
ElStep: typeof import('element-plus/es')['ElStep'] ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps'] ElSteps: typeof import('element-plus/es')['ElSteps']
@ -62,6 +75,9 @@ declare module '@vue/runtime-core' {
ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree'] ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']

218
niucloud/addon/zhjw/app/adminapi/controller/sales/Sales.php

@ -11,8 +11,11 @@
namespace addon\zhjw\app\adminapi\controller\sales; namespace addon\zhjw\app\adminapi\controller\sales;
use app\model\member\Member;
use app\service\admin\member\MemberService;
use core\base\BaseAdminController; use core\base\BaseAdminController;
use addon\zhjw\app\service\admin\sales\SalesService; use addon\zhjw\app\service\admin\sales\SalesService;
use think\facade\Db;
/** /**
@ -26,26 +29,27 @@ class Sales extends BaseAdminController
* 获取销售管理列表 * 获取销售管理列表
* @return \think\Response * @return \think\Response
*/ */
public function lists(){ public function lists()
{
$data = $this->request->params([ $data = $this->request->params([
["student_phone",""], ["student_phone", ""],
["student_name",""], ["student_name", ""],
["sex",""], ["sex", ""],
["age",["",""]], ["age", ["", ""]],
["school_name",""], ["school_name", ""],
["grade",""], ["grade", ""],
["class_name",""], ["class_name", ""],
["source_channel",""], ["source_channel", ""],
["customer_source",""], ["customer_source", ""],
["add_staff_id",""], ["add_staff_id", ""],
["get_staff_id",""], ["get_staff_id", ""],
["contact_name",""], ["contact_name", ""],
["province_id",""], ["province_id", ""],
["city_id",""], ["city_id", ""],
["district_id",""], ["district_id", ""],
["community_name",""], ["community_name", ""],
["customer_tags",""], ["customer_tags", ""],
["create_time",""] ["create_time", ""]
]); ]);
return success((new SalesService())->getPage($data)); return success((new SalesService())->getPage($data));
} }
@ -55,7 +59,8 @@ class Sales extends BaseAdminController
* @param int $id * @param int $id
* @return \think\Response * @return \think\Response
*/ */
public function info(int $id){ public function info(int $id)
{
return success((new SalesService())->getInfo($id)); return success((new SalesService())->getInfo($id));
} }
@ -63,34 +68,75 @@ class Sales extends BaseAdminController
* 添加销售管理 * 添加销售管理
* @return \think\Response * @return \think\Response
*/ */
public function add(){ public function add()
{
$data = $this->request->params([ $data = $this->request->params([
["student_phone",""], ["student_phone", ""],
["student_name",""], ["student_name", ""],
["sex",""], ["sex", ""],
["age",""], ["age", ""],
["school_name",""], ["school_name", ""],
["grade",""], ["grade", ""],
["class_name",""], ["class_name", ""],
["source_channel",""], ["source_channel", ""],
["customer_source",""], ["customer_source", ""],
["add_staff_id",0], ["add_staff_id", 0],
["get_staff_id",0], ["get_staff_id", 0],
["contact_name",""], ["contact_name", ""],
["province_id",0], ["province_id", 0],
["city_id",0], ["city_id", 0],
["district_id",0], ["district_id", 0],
["community_name",""], ["community_name", ""],
["customer_tags",[]], ["customer_tags", []],
["full_address", ""],
]); ]);
if(!empty($data['customer_tags'])){ if (!empty($data['customer_tags'])) {
$data['customer_tags'] = implode(',',$data['customer_tags']); $data['customer_tags'] = implode(',', $data['customer_tags']);
} }
$this->validate($data, 'addon\zhjw\app\validate\sales\Sales.add'); $this->validate($data, 'addon\zhjw\app\validate\sales\Sales.add');
//查询用户是否注册,注册了提示报错,没注册直接注册账号
$is_member_id = Member::where('username',$data['student_phone'])->value('member_id');
if ($is_member_id){
return fail('手机号已注册');
}
//开启事务
Db::startTrans();
try {
$id = (new SalesService())->add($data); $id = (new SalesService())->add($data);
$member_data = [
'nickname'=> $data['student_name'],
'mobile'=> $data['student_phone'],
'member_no'=> '',
'init_member_no'=> '',
'password' => substr($data['student_phone'], -4), // 截取手机号最后四位作为密码
'headimg'=> '',
'member_label'=> [],//会员标签
'sex'=> $data['sex'],
'birthday'=> '',//出生日期
];
$member_id = (new MemberService())->add($member_data);
if (!$id || !$member_id){
Db::rollback();
return fail('操作失败');
}
(new SalesService())->edit($id, ['user_id'=>$member_id]);
Db::commit();
}catch (\Exception $exception){
Db::rollback();
if ($exception->getMessage() == 'MEMBER_IS_EXIST'){
return fail('账号已存在');
}
return fail('操作失败');
}
return success('ADD_SUCCESS', ['id' => $id]); return success('ADD_SUCCESS', ['id' => $id]);
} }
@ -99,34 +145,71 @@ class Sales extends BaseAdminController
* @param $id 销售管理id * @param $id 销售管理id
* @return \think\Response * @return \think\Response
*/ */
public function edit(int $id){ public function edit(int $id)
{
$data = $this->request->params([ $data = $this->request->params([
["student_phone",""], ["student_phone", ""],
["student_name",""], ["student_name", ""],
["sex",""], ["sex", ""],
["age",""], ["age", ""],
["school_name",""], ["school_name", ""],
["grade",""], ["grade", ""],
["class_name",""], ["class_name", ""],
["source_channel",""], ["source_channel", ""],
["customer_source",""], ["customer_source", ""],
["add_staff_id",0], ["add_staff_id", 0],
["get_staff_id",0], ["get_staff_id", 0],
["contact_name",""], ["contact_name", ""],
["province_id",0], ["province_id", 0],
["city_id",0], ["city_id", 0],
["district_id",0], ["district_id", 0],
["community_name",""], ["community_name", ""],
["customer_tags",[]], ["customer_tags", []],
["full_address", ""],
]); ]);
if(!empty($data['customer_tags'])){ if (!empty($data['customer_tags'])) {
$data['customer_tags'] = implode(',',$data['customer_tags']); $data['customer_tags'] = implode(',', $data['customer_tags']);
} }
$this->validate($data, 'addon\zhjw\app\validate\sales\Sales.edit'); $this->validate($data, 'addon\zhjw\app\validate\sales\Sales.edit');
//查询新手机号是否存在,存在提示报错信息
//修改用户手机号
//查询用户是否注册,注册了提示报错,没注册直接注册账号
$info = (new SalesService())->getInfo($id);
if($data['student_phone'] != $info['student_phone']){
$is_member_id = Member::where('username',$data['student_phone'])->value('member_id');
if ($is_member_id){
return fail('手机号已注册');
}
}
//开启事务
Db::startTrans();
try {
(new SalesService())->edit($id, $data); (new SalesService())->edit($id, $data);
$member_data = [
'username'=> $data['student_phone'],
'mobile'=> $data['student_phone'],
];
if($data['student_phone'] != $info['student_phone']){
$member_data['password'] = substr($data['student_phone'], -4); // 截取手机号最后四位作为密码
}
$member_id = (new MemberService())->edit($info['user_id'],$member_data);
(new SalesService())->edit($id, ['user_id'=>$member_id]);
Db::commit();
}catch (\Exception $exception){
Db::rollback();
return fail('操作失败');
}
return success('EDIT_SUCCESS'); return success('EDIT_SUCCESS');
} }
@ -135,18 +218,21 @@ class Sales extends BaseAdminController
* @param $id 销售管理id * @param $id 销售管理id
* @return \think\Response * @return \think\Response
*/ */
public function del(int $id){ public function del(int $id)
{
(new SalesService())->del($id); (new SalesService())->del($id);
return success('DELETE_SUCCESS'); return success('DELETE_SUCCESS');
} }
public function getStaffAll(){ public function getStaffAll()
return success(( new SalesService())->getStaffAll()); {
return success((new SalesService())->getStaffAll());
} }
public function getSysAreaAll(){ public function getSysAreaAll()
return success(( new SalesService())->getSysAreaAll()); {
return success((new SalesService())->getSysAreaAll());
} }
} }

2
niucloud/addon/zhjw/app/service/admin/sales/SalesService.php

@ -53,7 +53,7 @@ class SalesService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,student_phone,student_name,sex,age,school_name,grade,class_name,source_channel,customer_source,add_staff_id,get_staff_id,contact_name,province_id,city_id,district_id,full_address,community_name,customer_tags,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role'; $field = 'id,user_id,student_phone,student_name,sex,age,school_name,grade,class_name,source_channel,customer_source,add_staff_id,get_staff_id,contact_name,province_id,city_id,district_id,full_address,community_name,customer_tags,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['staff', 'staff', 'sysArea', 'sysArea', 'sysArea'])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['staff', 'staff', 'sysArea', 'sysArea', 'sysArea'])->findOrEmpty()->toArray();

Loading…
Cancel
Save