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. 232
      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']
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
ElButton: typeof import('element-plus/es')['ElButton']
ElCalendar: typeof import('element-plus/es')['ElCalendar']
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']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
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']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElContainer: typeof import('element-plus/es')['ElContainer']
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']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
@ -43,15 +51,20 @@ declare module '@vue/runtime-core' {
ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption']
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElProgress: typeof import('element-plus/es')['ElProgress']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRate: typeof import('element-plus/es')['ElRate']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSlider: typeof import('element-plus/es')['ElSlider']
ElStatistic: typeof import('element-plus/es')['ElStatistic']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
@ -62,6 +75,9 @@ declare module '@vue/runtime-core' {
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
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']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']

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

@ -11,8 +11,11 @@
namespace addon\zhjw\app\adminapi\controller\sales;
use app\model\member\Member;
use app\service\admin\member\MemberService;
use core\base\BaseAdminController;
use addon\zhjw\app\service\admin\sales\SalesService;
use think\facade\Db;
/**
@ -22,30 +25,31 @@ use addon\zhjw\app\service\admin\sales\SalesService;
*/
class Sales extends BaseAdminController
{
/**
* 获取销售管理列表
* @return \think\Response
*/
public function lists(){
/**
* 获取销售管理列表
* @return \think\Response
*/
public function lists()
{
$data = $this->request->params([
["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",""],
["community_name",""],
["customer_tags",""],
["create_time",""]
["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", ""],
["community_name", ""],
["customer_tags", ""],
["create_time", ""]
]);
return success((new SalesService())->getPage($data));
}
@ -55,7 +59,8 @@ class Sales extends BaseAdminController
* @param int $id
* @return \think\Response
*/
public function info(int $id){
public function info(int $id)
{
return success((new SalesService())->getInfo($id));
}
@ -63,34 +68,75 @@ class Sales extends BaseAdminController
* 添加销售管理
* @return \think\Response
*/
public function add(){
public function add()
{
$data = $this->request->params([
["student_phone",""],
["student_name",""],
["sex",""],
["age",""],
["school_name",""],
["grade",""],
["class_name",""],
["source_channel",""],
["customer_source",""],
["add_staff_id",0],
["get_staff_id",0],
["contact_name",""],
["province_id",0],
["city_id",0],
["district_id",0],
["community_name",""],
["customer_tags",[]],
["student_phone", ""],
["student_name", ""],
["sex", ""],
["age", ""],
["school_name", ""],
["grade", ""],
["class_name", ""],
["source_channel", ""],
["customer_source", ""],
["add_staff_id", 0],
["get_staff_id", 0],
["contact_name", ""],
["province_id", 0],
["city_id", 0],
["district_id", 0],
["community_name", ""],
["customer_tags", []],
["full_address", ""],
]);
if(!empty($data['customer_tags'])){
$data['customer_tags'] = implode(',',$data['customer_tags']);
if (!empty($data['customer_tags'])) {
$data['customer_tags'] = implode(',', $data['customer_tags']);
}
$this->validate($data, 'addon\zhjw\app\validate\sales\Sales.add');
$id = (new SalesService())->add($data);
//查询用户是否注册,注册了提示报错,没注册直接注册账号
$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);
$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]);
}
@ -99,34 +145,71 @@ class Sales extends BaseAdminController
* @param $id 销售管理id
* @return \think\Response
*/
public function edit(int $id){
public function edit(int $id)
{
$data = $this->request->params([
["student_phone",""],
["student_name",""],
["sex",""],
["age",""],
["school_name",""],
["grade",""],
["class_name",""],
["source_channel",""],
["customer_source",""],
["add_staff_id",0],
["get_staff_id",0],
["contact_name",""],
["province_id",0],
["city_id",0],
["district_id",0],
["community_name",""],
["customer_tags",[]],
["student_phone", ""],
["student_name", ""],
["sex", ""],
["age", ""],
["school_name", ""],
["grade", ""],
["class_name", ""],
["source_channel", ""],
["customer_source", ""],
["add_staff_id", 0],
["get_staff_id", 0],
["contact_name", ""],
["province_id", 0],
["city_id", 0],
["district_id", 0],
["community_name", ""],
["customer_tags", []],
["full_address", ""],
]);
if(!empty($data['customer_tags'])){
$data['customer_tags'] = implode(',',$data['customer_tags']);
if (!empty($data['customer_tags'])) {
$data['customer_tags'] = implode(',', $data['customer_tags']);
}
$this->validate($data, 'addon\zhjw\app\validate\sales\Sales.edit');
(new SalesService())->edit($id, $data);
//查询新手机号是否存在,存在提示报错信息
//修改用户手机号
//查询用户是否注册,注册了提示报错,没注册直接注册账号
$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);
$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');
}
@ -135,18 +218,21 @@ class Sales extends BaseAdminController
* @param $id 销售管理id
* @return \think\Response
*/
public function del(int $id){
public function del(int $id)
{
(new SalesService())->del($id);
return success('DELETE_SUCCESS');
}
public function getStaffAll(){
return success(( new SalesService())->getStaffAll());
public function getStaffAll()
{
return success((new SalesService())->getStaffAll());
}
public function getSysAreaAll(){
return success(( new SalesService())->getSysAreaAll());
public function 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)
{
$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();

Loading…
Cancel
Save