添加客户管理(个人库)

This commit is contained in:
lilong@dgg.net 2021-03-24 20:50:21 +08:00
parent a087800c0e
commit 00e281e4c6
14 changed files with 736 additions and 5 deletions

View File

@ -66,7 +66,7 @@ class AssignmentController extends Controller
public function store(Request $request)
{
$user = Auth::user();
$user = $request->user();
$data = $request->all(['name','contact_name','contact_phone']);
$dataInfo = [];
$fields = CustomerField::query()->where('visiable','=',1)->get();
@ -95,7 +95,10 @@ class AssignmentController extends Controller
'created_user_nickname' => $user->nickname,
'owner_user_id' => $user->id,
'owner_user_nickname' => $user->nickname,
'assignment_user_id' => $user->id,
'assignment_user_nickname' => $user->nickname,
'status' => 1,
'status_time' => date('Y-m-d H:i:s'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);

View File

@ -4,7 +4,10 @@ namespace App\Http\Controllers\Crm;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
class BusinessController extends Controller
@ -27,6 +30,7 @@ class BusinessController extends Controller
->when($data['contact_name'], function ($query) use ($data) {
return $query->where('contact_name', $data['contact_name'] );
})
->where('owner_user_id','=',$request->user()->id)
->where('status','=',2)
->orderByDesc('id')
->paginate($request->get('limit', 30));
@ -35,4 +39,33 @@ class BusinessController extends Controller
return View::make('crm.business.index');
}
public function to(Request $request)
{
$ids = $request->get('ids',[]);
$user = User::where('id',$request->get('user_id'))->first();
if ($user == null){
return $this->error('请选择员工');
}
DB::beginTransaction();
try{
$data = [
'owner_user_id' => $user->id,
'owner_user_nickname' => $user->nickname,
'owner_department_id' => $user->department_id??0,
'assignment_user_id' => $request->user()->id,
'assignment_user_nickname' => $request->user()->nickname,
'status' => 3,
'status_time' => date('Y-m-d H:i:s'),
];
Customer::query()->whereIn('id',$ids)->update($data);
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('分配异常:'.$exception->getMessage());
return $this->error();
}
}
}

View File

@ -4,14 +4,252 @@ namespace App\Http\Controllers\Crm;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use App\Models\CustomerField;
use App\Models\CustomerFieldValue;
use App\Models\CustomerRemark;
use App\Models\Node;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
class CustomerController extends Controller
{
public function index(Request $request)
{
if ($request->ajax()){
}
return View::make('crm.customer.index');
}
public function create()
{
return View::make('crm.customer.create');
}
public function store(Request $request)
{
$user = $request->user();
$data = $request->all(['name','contact_name','contact_phone']);
$dataInfo = [];
$fields = CustomerField::query()->where('visiable','=',1)->get();
foreach ($fields as $d){
$items = [
'customer_field_id' => $d->id,
'data' => $request->get($d->field_key),
];
if ($d->field_type=='checkbox'){
if (!empty($items['data'])){
$items['data'] = implode(',',$items['data']);
}else{
$items['data'] = null;
}
}
array_push($dataInfo,$items);
}
DB::beginTransaction();
try{
$customer_id = DB::table('customer')->insertGetId([
'uuid' => uuid_generate(),
'name' => $data['name'],
'contact_name' => $data['contact_name'],
'contact_phone' => $data['contact_phone'],
'created_user_id' => $user->id,
'created_user_nickname' => $user->nickname,
'owner_user_id' => $user->id,
'owner_user_nickname' => $user->nickname,
'owner_department_id' => $user->department_id??0,
'assignment_user_id' => $user->id,
'assignment_user_nickname' => $user->nickname,
'status' => 3,
'status_time' => date('Y-m-d H:i:s'),
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
foreach ($dataInfo as $d){
DB::table('customer_field_value')->insert([
'customer_id' => $customer_id,
'customer_field_id' => $d['customer_field_id'],
'data' => $d['data'],
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
}
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('客户录入个人库异常:'.$exception->getMessage());
return $this->error();
}
}
public function edit($id)
{
$model = Customer::query()->findOrFail($id);
$fields = CustomerField::query()
->where('visiable',1)
->orderBy('sort','asc')
->get();
$data = CustomerFieldValue::query()->where('customer_id','=',$model->id)->pluck('data','customer_field_id')->toArray();
return View::make('crm.customer.edit',compact('model','fields','data'));
}
public function update(Request $request,$id)
{
$data = $request->all(['name','contact_name','contact_phone']);
$dataInfo = [];
$fields = CustomerField::query()->where('visiable','=',1)->get();
foreach ($fields as $d){
$items = [
'customer_field_id' => $d->id,
'data' => $request->get($d->field_key),
];
if ($d->field_type=='checkbox'){
if (!empty($items['data'])){
$items['data'] = implode(',',$items['data']);
}else{
$items['data'] = null;
}
}
array_push($dataInfo,$items);
}
DB::beginTransaction();
try{
DB::table('customer')->where('id',$id)->update([
'name' => $data['name'],
'contact_name' => $data['contact_name'],
'contact_phone' => $data['contact_phone'],
'updated_at' => date('Y-m-d H:i:s'),
]);
foreach ($dataInfo as $d){
DB::table('customer_field_value')
->where('customer_id','=',$id)
->where('customer_field_id',$d['customer_field_id'])
->update(['data'=>$d['data']]);
}
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('更新个人库客户异常:'.$exception->getMessage());
return $this->error();
}
}
public function destroy(Request $request)
{
$ids = $request->input('ids');
try {
Customer::query()->whereIn('id',$ids)->where('status','=',1)->delete();
return $this->success();
}catch (\Exception $exception){
Log::error('删除个人库客户异常:'.$exception->getMessage());
return $this->error();
}
}
public function transfer(Request $request)
{
$ids = $request->get('ids',[]);
$user = User::where('id',$request->get('user_id'))->first();
if ($user == null){
return $this->error('请选择员工');
}
DB::beginTransaction();
try{
$data = [
'owner_user_id' => $user->id,
'owner_user_nickname' => $user->nickname,
'owner_department_id' => $user->department_id??0,
];
Customer::query()->whereIn('id',$ids)->update($data);
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('移交异常:'.$exception->getMessage());
return $this->error();
}
}
public function remove(Request $request)
{
$customer_ids = $request->input('customer_ids');
if (!is_array($customer_ids) || empty($customer_ids)){
return $this->error('请选择剔除项');
}
try {
Customer::query()->whereIn('id',$customer_ids)->update([
'status' => 5,
'status_time' => date('Y-m-d H:i:s'),
'owner_user_id' => 0,
'owner_user_nickname' => null,
'owner_department_id' => 9,
]);
return $this->success();
}catch (\Exception $exception){
Log::error('剔除客户异常:'.$exception->getMessage());
return $this->error();
}
}
public function remark(Request $request,$id)
{
$customer = Customer::query()->where('id','=',$id)->first();
$nodes = Node::query()->whereIn('type',[1,2])->orderBy('sort','asc')->get();
if ($request->ajax()){
$data = $request->all(['node_id','content','next_follow_time']);
$old_node_id = $customer->node_id;
$old_node_name = null;
$new_node_id = $data['node_id'];
$new_node_name = null;
foreach ($nodes as $node){
if ($node->id == $old_node_id){
$old_node_name = $node->name;
}
if ($node->id == $new_node_id){
$new_node_name = $node->name;
}
}
DB::beginTransaction();
try {
$customer->update([
'node_id' => $new_node_id,
'node_name' => $new_node_name,
'follow_user_id' => $request->user()->id,
'follow_user_nickname' => $request->user()->nickname,
'next_follow_time' => $data['next_follow_time'],
]);
CustomerRemark::create([
'customer_id' => $customer->id,
'old_node_id' => $old_node_id,
'old_node_name' => $old_node_name,
'new_node_id' => $new_node_id,
'new_node_name' => $new_node_name,
'content' => $data['content'],
'next_follow_time' => $data['next_follow_time'],
'user_id' => $request->user()->id,
'user_nickname' => $request->user()->nickname,
]);
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('备注跟进客户异常:'.$exception->getMessage());
return $this->error();
}
}
return View::make('crm.customer.remark',compact('customer','nodes'));
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace App\Http\Controllers\Crm;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
class GrabController extends Controller
{
public function index(Request $request)
{
if ($request->ajax()){
$data = $request->all(['name','contact_name','contact_phone']);
$res = Customer::query()
//客户名称
->when($data['name'], function ($query) use ($data) {
return $query->where('name', $data['name']);
})
//联系电话
->when($data['contact_phone'], function ($query) use ($data) {
return $query->where('contact_phone', $data['contact_phone']);
})
//联系人
->when($data['contact_name'], function ($query) use ($data) {
return $query->where('contact_name', $data['contact_name'] );
})
->where('department_id','=',$request->user()->department_id)
->where('status','=',4)
->orderByDesc('status_time')
->paginate($request->get('limit', 30));
return $this->success('ok',$res->items(),$res->total());
}
return View::make('crm.grab.index');
}
public function store(Request $request)
{
$customer_id = $request->input('customer_id');
$model = Customer::query()
->where('id','=',$customer_id)
->where('status','=',4)
->first();
if ($model == null){
return $this->error('很遗憾已被其它用户抢得');
}
try {
$model->update([
'owner_user_id' => $request->user()->id,
'owner_user_nickname' => $request->user()->nickname,
'status' => 3,
'status_time' => date('Y-m-d H:i:s'),
]);
return $this->success('抢单成功,请在个人库里查看');
}catch (\Exception $exception){
Log::error('抢单异常:'.$exception->getMessage());
return $this->error('抢单失败');
}
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class CustomerRemark extends Model
{
protected $table = 'customer_remark';
protected $guarded = ['id'];
}

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CustomerRemark extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('customer_remark', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('customer_id')->comment('客户ID');
$table->unsignedBigInteger('old_node_id')->default(0)->comment('原节点ID');
$table->unsignedBigInteger('new_node_id')->default(0)->comment('新节点ID');
$table->string('old_node_name')->nullable()->comment('原节点名称');
$table->string('new_node_name')->nullable()->comment('新节点名称');
$table->text('content')->nullable()->comment('备注跟进内容');
$table->unsignedBigInteger('user_id')->default(0)->comment('备注跟进人ID');
$table->string('user_nickname')->nullable()->comment('备注跟进人昵称');
$table->dateTime('next_follow_time')->nullable()->comment('下次跟进时间');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('customer_remark');
}
}

View File

@ -148,6 +148,22 @@ class MenuTableSeeder extends Seeder
'type' => 1,
'permission_name' => 'crm.business',
],
[
'name' => '部门抢单',
'route' => 'crm.grab',
'url' => null,
'icon' => 'layui-icon-carousel',
'type' => 1,
'permission_name' => 'crm.grab',
],
[
'name' => '客户管理',
'route' => 'crm.customer',
'url' => null,
'icon' => 'layui-icon-reply-fill',
'type' => 1,
'permission_name' => 'crm.customer',
],
]
],
];

View File

@ -172,6 +172,30 @@ class UserTableSeeder extends Seeder
['name' => 'crm.business.to', 'display_name' => '分配'],
]
],
[
'name' => 'crm.grab',
'display_name' => '部门抢单',
'child' => [
['name' => 'crm.grab.store', 'display_name' => '抢单'],
]
],
[
'name' => 'crm.customer',
'display_name' => '客户管理',
'route' => 'crm.customer',
'child' => [
['name' => 'crm.customer.create', 'display_name' => '添加'],
['name' => 'crm.customer.edit', 'display_name' => '编辑'],
['name' => 'crm.customer.destroy', 'display_name' => '删除'],
['name' => 'crm.customer.show', 'display_name' => '详情'],
['name' => 'crm.customer.remark', 'display_name' => '备注跟进'],
['name' => 'crm.customer.list_all', 'display_name' => '查看所有客户'],
['name' => 'crm.customer.list_department', 'display_name' => '查看本部门客户'],
['name' => 'crm.customer.order', 'display_name' => '下单'],
['name' => 'crm.customer.transfer', 'display_name' => '移交'],
['name' => 'crm.customer.remove', 'display_name' => '剔除'],
]
],
],
],
];

View File

@ -5,10 +5,7 @@
<div class="layui-card-header layuiadmin-card-header-auto">
<form class="layui-form" action="{{route("crm.business")}}">
<div class="layui-btn-group">
@can('crm.business.destroy')
<button type="button" class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删除</button>
@endcan
<button type="button" lay-submit lay-filter="search" class="layui-btn layui-btn-sm" >搜索</button>
<button type="button" lay-submit lay-filter="search" class="layui-btn layui-btn-sm" >搜索</button>
</div>
<div class="layui-form-item">
<div class="layui-inline">

View File

@ -0,0 +1,15 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-body">
<form action="{{route('crm.customer.store')}}" method="post" class="layui-form">
@include('common.customer_create',['fields'=>$fields])
</form>
</div>
</div>
@endsection
@section('script')
@include('common.customer_js')
@endsection

View File

@ -0,0 +1,15 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-body">
<form action="{{route('crm.customer.update',['id'=>$model->id])}}" method="post" class="layui-form">
@include('common.customer_edit',['model'=>$model,'fields'=>$fields,'data'=>$data])
</form>
</div>
</div>
@endsection
@section('script')
@include('common.customer_js')
@endsection

View File

@ -0,0 +1,149 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-header layuiadmin-card-header-auto">
<form class="layui-form" action="{{route("crm.customer")}}">
<div class="layui-btn-group">
@can('crm.customer.destroy')
<button type="button" class="layui-btn layui-btn-sm layui-btn-danger" id="listDelete">删除</button>
@endcan
@can('crm.customer.create')
<a class="layui-btn layui-btn-sm" id="addBtn">添加</a>
@endcan
<button type="button" lay-submit lay-filter="search" class="layui-btn layui-btn-sm" >搜索</button>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label for="" class="layui-form-label">客户名称:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="name" placeholder="请输入名称" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label for="" class="layui-form-label">联系人:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="contact_name" placeholder="请输入联系人" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label for="" class="layui-form-label">联系电话:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="contact_phone" placeholder="请输入联系电话" class="layui-input" >
</div>
</div>
</div>
</form>
@can('crm.customer.transfer')
<form class="layui-form" action="{{route("crm.customer.transfer")}}">
<div class="layui-form-item">
<div class="layui-inline">
<label for="" class="layui-form-label">员工:</label>
<div class="layui-input-block" style="width: 275px">
@include('common.get_user')
</div>
</div>
<button type="button" class="layui-btn layui-btn-sm" lay-submit lay-filter="assignment_to" >移交</button>
</div>
</form>
@endcan
</div>
<div class="layui-card-body">
<table id="dataTable" lay-filter="dataTable"></table>
<script type="text/html" id="options">
<div class="layui-btn-group">
@can('crm.customer.edit')
<a class="layui-btn layui-btn-sm" lay-event="edit">编辑</a>
@endcan
</div>
</script>
</div>
</div>
@endsection
@section('script')
<script>
layui.use(['layer','table','form','laydate','upload'],function () {
var $ = layui.jquery;
var layer = layui.layer;
var form = layui.form;
var table = layui.table;
var laydate = layui.laydate;
var upload = layui.upload;
//用户表格初始化
var dataTable = table.render({
elem: '#dataTable'
,height: 'full-200'
,url: "{{ route('crm.customer') }}" //数据接口
,page: true //开启分页
,cols: [[ //表头
{checkbox: true}
,{field: 'uuid', title: '客户编号'}
,{field: 'name', title: '客户名称'}
,{field: 'contact_name', title: '联系人'}
,{field: 'contact_phone', title: '联系电话'}
,{field: 'created_at', title: '录入时间'}
,{fixed: 'right', width: 250, align:'center', toolbar: '#options', title:'操作'}
]]
});
//监听工具条
table.on('tool(dataTable)', function(obj){ //注tool是工具条事件名dataTable是table原始容器的属性 lay-filter="对应的值"
var data = obj.data //获得当前行数据
,layEvent = obj.event; //获得 lay-event 对应的值
if(layEvent === 'edit'){
layer.open({
type: 2,
title: "编辑",
shadeClose: true,
area: ["90%","90%"],
content: '/crm/customer/'+data.id+'/edit',
})
}
});
$("#addBtn").click(function () {
layer.open({
type: 2,
title: "添加",
shadeClose: true,
area: ["90%","90%"],
content: "{{route("crm.customer.create")}}",
})
})
//移交
form.on('submit(assignment_to)', function (data) {
var ids = [];
var hasCheck = table.checkStatus('dataTable');
var hasCheckData = hasCheck.data;
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
if (ids.length === 0){
layer.msg('请选择移交项', {icon: 2});
return false
}
layer.confirm('确认移交吗?', function (index) {
layer.close(index);
let load = layer.load();
$.post(data.form.action, {ids:ids,user_id:data.field.user_id}, function (res) {
layer.close(load);
let code = res.code
layer.msg(res.msg, {time: 2000, icon: code == 0 ? 1 : 2}, function () {
if (code === 0) {
dataTable.reload()
}
});
});
})
return false;
})
})
</script>
@endsection

View File

@ -0,0 +1,95 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-header layuiadmin-card-header-auto">
<form class="layui-form" action="{{route("crm.business")}}">
<div class="layui-btn-group">
<button type="button" lay-submit lay-filter="search" class="layui-btn layui-btn-sm" >搜索</button>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label for="" class="layui-form-label">客户名称:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="name" placeholder="请输入名称" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label for="" class="layui-form-label">联系人:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="contact_name" placeholder="请输入联系人" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label for="" class="layui-form-label">联系电话:</label>
<div class="layui-input-block" style="width: 275px">
<input type="text" name="contact_phone" placeholder="请输入联系电话" class="layui-input" >
</div>
</div>
</div>
</form>
</div>
<div class="layui-card-body">
<table id="dataTable" lay-filter="dataTable"></table>
<script type="text/html" id="options">
<div class="layui-btn-group">
@can('crm.grab.store')
<a class="layui-btn layui-btn-sm" lay-event="store">抢单</a>
@endcan
</div>
</script>
</div>
</div>
@endsection
@section('script')
<script>
layui.use(['layer','table','form','laydate','upload'],function () {
var $ = layui.jquery;
var layer = layui.layer;
var form = layui.form;
var table = layui.table;
var laydate = layui.laydate;
var upload = layui.upload;
//用户表格初始化
var dataTable = table.render({
elem: '#dataTable'
,height: 'full-200'
,url: "{{ route('crm.grab') }}" //数据接口
,page: true //开启分页
,cols: [[ //表头
{checkbox: true}
,{field: 'uuid', title: '客户编号'}
,{field: 'name', title: '客户名称'}
,{field: 'contact_name', title: '联系人'}
,{field: 'contact_phone', title: '联系电话'}
,{field: 'assignment_user_nickname', title: '分配人'}
,{field: 'status_time', title: '分配时间'}
,{field: 'created_at', title: '录入时间'}
,{align:'center', toolbar: '#options', title:'操作'}
]]
});
//监听工具条
table.on('tool(dataTable)', function(obj){ //注tool是工具条事件名dataTable是table原始容器的属性 lay-filter="对应的值"
var data = obj.data //获得当前行数据
,layEvent = obj.event; //获得 lay-event 对应的值
if(layEvent === 'store'){
layer.confirm('确认抢单吗?',function (index) {
layer.close(index);
var load = layer.load()
$.post('{{route('crm.grab.store')}}',{customer_id:data.id},function (res) {
layer.close(load)
layer.msg(res.msg,{time:2000,icon:res.code==0?1:2},function () {
if (res.code==0){
obj.del();
}
})
})
})
}
});
})
</script>
@endsection

View File

@ -258,4 +258,34 @@ Route::group(['prefix'=>'crm','namespace'=>'Crm','middleware'=>['auth','permissi
Route::post('business/to','BusinessController@to')->name('crm.business.to')->middleware('permission:crm.business.to');
});
//部门抢单库
Route::group([],function (){
Route::get('grab','GrabController@index')->name('crm.grab')->middleware('permission:crm.grab');
//抢单
Route::post('grab/store','GrabController@store')->name('crm.grab.store')->middleware('permission:crm.grab.store');
});
//客户管理
Route::group([],function (){
Route::get('customer','CustomerController@index')->name('crm.customer')->middleware('permission:crm.customer');
//添加
Route::get('customer/create','CustomerController@create')->name('crm.customer.create')->middleware('permission:crm.customer.create');
Route::post('customer/store','CustomerController@store')->name('crm.customer.store')->middleware('permission:crm.customer.create');
//编辑
Route::get('customer/{id}/edit','CustomerController@edit')->name('crm.customer.edit')->middleware('permission:crm.customer.edit');
Route::put('customer/{id}/update','CustomerController@update')->name('crm.customer.update')->middleware('permission:crm.customer.edit');
//详情
Route::get('customer/{id}/show','CustomerController@show')->name('crm.customer.show')->middleware('permission:crm.customer.show');
//删除
Route::delete('customer/destroy','CustomerController@destroy')->name('crm.customer.destroy')->middleware('permission:crm.customer.destroy');
//剔除
Route::post('customer/remove','CustomerController@remove')->name('crm.customer.remove')->middleware('permission:crm.customer.remove');
//备注跟进
Route::match(['get','post'],'customer/{id}/remark','CustomerController@remark')->name('crm.customer.remark')->middleware('permission:crm.customer.remark');
//移交
Route::post('customer/transfer','CustomerController@transfer')->name('crm.customer.transfer')->middleware('permission:crm.customer.transfer');
//下单
Route::post('customer/{id}/order','CustomerController@order')->name('crm.customer.order')->middleware('permission:crm.customer.order');
});
});