添加订单模块

This commit is contained in:
lilong@dgg.net 2021-03-29 19:30:05 +08:00
parent 22d25d0a2e
commit e7e6cbcf8e
20 changed files with 825 additions and 9 deletions

View File

@ -14,6 +14,17 @@ if (!function_exists('uuid_generate')) {
}
}
if (!function_exists('create_order_num')) {
/**
* 生成唯一订单号
* @return string
*/
function create_order_num()
{
return 'D'.date('YmdHis').\Illuminate\Support\Facades\Redis::incr('order_num_id');
}
}
if (!function_exists('recursive')) {
/**
* 递归树形上下级

View File

@ -6,6 +6,7 @@ use App\Models\Cdr;
use App\Models\CustomerRemark;
use App\Models\Department;
use App\Models\Node;
use App\Models\OrderRemark;
use App\Models\Permission;
use App\Models\Role;
use App\Models\Sip;
@ -93,8 +94,13 @@ class ApiController extends Controller
public function remarkList(Request $request)
{
$id = $request->input('customer_id');
$res = CustomerRemark::query()->where('customer_id','=',$id)->orderByDesc('id')->paginate($request->get('limit', 2));;
$node_type = $request->input('type');
$id = $request->input('id');
if ($node_type == 2){
$res = CustomerRemark::query()->where('customer_id','=',$id)->orderByDesc('id')->paginate($request->get('limit', 2));
}elseif ($node_type == 3){
$res = OrderRemark::query()->where('order_id','=',$id)->orderByDesc('id')->paginate($request->get('limit', 2));
}
return $this->success('ok',['list'=>$res->items(),'lastPage'=>$res->lastPage()]);
}
@ -140,7 +146,7 @@ class ApiController extends Controller
return $this->error('呼叫失败');
}
}
//文件上传
public function upload(Request $request)
{

View File

@ -83,7 +83,11 @@ class CustomerController extends Controller
public function create()
{
return View::make('crm.customer.create');
$fields = CustomerField::query()
->where('visiable',1)
->orderBy('sort','asc')
->get();
return View::make('crm.customer.create',compact('fields'));
}
@ -319,5 +323,4 @@ class CustomerController extends Controller
}
}

View File

@ -0,0 +1,177 @@
<?php
namespace App\Http\Controllers\Order;
use App\Http\Controllers\Controller;
use App\Models\Customer;
use App\Models\Node;
use App\Models\Order;
use App\Models\OrderPay;
use App\Models\OrderRemark;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
class OrderController extends Controller
{
public function index(Request $request)
{
if ($request->ajax()){
$user = $request->user();
$res = Order::query()
->where(function ($q) use ($user){
return $q->where('frontend_user_id',$user->id)->orWhere('backend_user_id',$user->id);
})
->orderBy('status','asc')
->orderByDesc('accept_time')
->paginate($request->get('limit', 30));
return $this->success('ok',$res->items(),$res->total());
}
return View::make('order.order.index');
}
public function create(Request $request)
{
$id = $request->input('customer_id');
$model = Customer::query()->where('id',$id)->first();
return View::make('order.order.create',compact('model'));
}
public function store(Request $request)
{
$id = $request->input('customer_id');
$customer = Customer::query()->where('id',$id)->first();
DB::beginTransaction();
try {
$data = $request->all([
'total_money',
'first_money',
'mid_money',
'last_money',
'user_id',
]);
if ($data['total_money'] != ($data['first_money']+$data['mid_money']+$data['last_money'])){
return $this->error('订单金额比例不正确');
}
$user = User::query()->where('id',$data['user_id'])->first();
$customer->update(['is_end'=>1]);
Order::create([
'num' => create_order_num(),
'customer_id' => $customer->id,
'name' => $customer->name,
'contact_name' => $customer->contact_name,
'contact_phone' => $customer->contact_phone,
'total_money' => $data['total_money'],
'first_money' => $data['first_money'],
'mid_money' => $data['mid_money'],
'last_money' => $data['last_money'],
'payed_money' => 0,
'frontend_department_id' => $customer->owner_department_id??0,
'frontend_user_id' => $customer->owner_user_id,
'frontend_user_nickname' => $customer->owner_user_nickname,
'accept_time' => date('Y-m-d H:i:s'),
'backend_department_id' => $user->department_id??0,
'backend_user_id' => $user->id,
'backend_user_nickname' => $user->nickname,
'created_user_id' => $request->user()->id,
]);
DB::commit();
return $this->success();
}catch (\Exception $exception){
DB::rollBack();
Log::error('生成订单异常:'.$exception->getMessage());
return $this->error();
}
}
public function remark(Request $request)
{
$id = $request->input('id');
$model = Order::query()->where('id',$id)->first();
$nodes = Node::query()->whereIn('type',[1,3])->orderBy('sort','asc')->get();
if ($request->ajax()){
$data = $request->all(['node_id','content','next_follow_time']);
$old_node_id = $model->node_id;
$old_node_name = null;
$new_node_id = $data['node_id']??0;
$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 {
$model->update([
'follow_time' => date('Y-m-d H:i:s'),
'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'],
'remark' => $data['content'],
]);
OrderRemark::create([
'order_id' => $model->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('order.order.remark',compact('model'));
}
public function payForm(Request $request)
{
$model = Order::query()->where('id',$request->input('id'))->first();
return View::make('order.order.pay',compact('model'));
}
public function pay(Request $request)
{
$model = Order::query()->where('id',$request->input('id'))->first();
DB::beginTransaction();
try {
$data = $request->all([
'money',
'pay_type',
'content',
]);
OrderPay::create([
'order_id' => $model->id,
'money' => $data['money'],
'pay_type' => $data['pay_type'],
'content' => $data['content'],
'status' => 0,
]);
DB::commit();
return $this->success('操作成功,等待财务审核');
}catch (\Exception $exception){
DB::rollBack();
Log::error('付款异常:'.$exception->getMessage());
return $this->error();
}
}
}

11
app/Models/Order.php Normal file
View File

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

11
app/Models/OrderPay.php Normal file
View File

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

View File

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

View File

@ -76,4 +76,11 @@ return [
'textarea' => '文本框',
],
'pay_type' => [
1 => '现金',
2 => '对公账户',
3 => '支付宝',
4 => '微信',
5 => '其它',
],
];

View File

@ -0,0 +1,58 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Order extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('order', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('num')->comment('订单号');
$table->unsignedBigInteger('customer_id')->comment('客户ID');
$table->string('name')->nullable()->comment('客户名称');
$table->string('contact_name')->nullable()->comment('联系人');
$table->string('contact_phone')->nullable()->comment('联系电话');
$table->decimal('total_money',10,2)->comment('订单总金额');
$table->decimal('first_money',10,2)->comment('前期款');
$table->decimal('mid_money',10,2)->comment('中期款');
$table->decimal('last_money',10,2)->comment('尾款');
$table->decimal('payed_money',10,2)->comment('已付金额');
$table->unsignedBigInteger('frontend_department_id')->comment('订单成单人部门ID');
$table->unsignedBigInteger('frontend_user_id')->comment('订单成单人ID');
$table->string('frontend_user_nickname')->comment('订单成单人昵称');
$table->dateTime('accept_time')->nullable()->comment('接单时间');
$table->unsignedBigInteger('backend_department_id')->comment('订单生产人部门ID');
$table->unsignedBigInteger('backend_user_id')->comment('订单生产人ID');
$table->string('backend_user_nickname')->comment('订单生产人昵称');
$table->unsignedBigInteger('created_user_id')->comment('订单创建人ID');
$table->tinyInteger('status')->default(0)->comment('订单状态0生产中1已完成2作废');
$table->unsignedBigInteger('node_id')->default(0)->comment('当前节点ID');
$table->string('node_name')->nullable()->comment('当前节点名称');
$table->timestamp('follow_time')->nullable()->comment('最近跟进时间');
$table->unsignedBigInteger('follow_user_id')->default(0)->comment('最近跟进人ID');
$table->string('follow_user_nickname')->nullable()->comment('最近跟进人姓名');
$table->timestamp('next_follow_time')->nullable()->comment('下次跟进时间');
$table->text('remark')->nullable()->comment('备注');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('order');
}
}

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class OrderRemark extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('order_remark', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('order_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('order_remark');
}
}

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class OrderPay extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('order_pay', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('order_id')->comment('订单ID');
$table->decimal('money',10,2)->comment('金额');
$table->tinyInteger('pay_type')->comment('1现金|2对公账户|3支付宝|4微信|5其它');
$table->text('content')->comment('备注');
$table->tinyInteger('status')->default(0)->comment('审核状态,0待审核1审核通过2审核不通过');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('order_pay');
}
}

View File

@ -201,6 +201,25 @@ class MenuTableSeeder extends Seeder
],
]
],
[
'name' => '订单模块',
'route' => null,
'url' => null,
'icon' => 'layui-icon-align-left',
'type' => 2,
'sort' => 2,
'permission_name' => 'order',
'child' => [
[
'name' => '订单管理',
'route' => 'order.order',
'url' => null,
'icon' => 'layui-icon-form',
'type' => 1,
'permission_name' => 'order.order',
],
]
],
];
$permissions = \App\Models\Permission::pluck('id','name')->toArray();
foreach ($datas as $k1 => $d1){

View File

@ -201,7 +201,6 @@ class UserTableSeeder extends Seeder
['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' => '剔除'],
]
@ -232,6 +231,22 @@ class UserTableSeeder extends Seeder
],
],
[
'name' => 'order',
'display_name' => '订单模块',
'child' => [
[
'name' => 'order.order',
'display_name' => '订单管理',
'child' => [
['name' => 'order.order.create', 'display_name' => '下单'],
['name' => 'order.order.pay', 'display_name' => '付款'],
['name' => 'order.order.remark', 'display_name' => '跟进'],
['name' => 'order.order.destroy', 'display_name' => '删除'],
]
],
],
],
];
foreach ($permissions as $pem1) {
//生成一级权限

View File

@ -82,6 +82,9 @@
@can('crm.customer.remove')
<a class="layui-btn layui-btn-sm" lay-event="remove">剔除</a>
@endcan
@can('order.order.create')
<a class="layui-btn layui-btn-sm" lay-event="order">下单</a>
@endcan
</div>
</script>
</div>
@ -113,6 +116,9 @@
,{field: 'follow_time', title: '跟进时间'}
,{field: 'follow_user_nickname', title: '跟进人'}
,{field: 'remark', title: '跟进备注'}
,{field: 'is_end', title: '是否成单',templet:function (d) {
return d.is_end!=1?'<span class="layui-badge layui-bg-gray">跟进中</span>':'<span class="layui-badge layui-bg-green">已成单</span>';
}}
,{fixed: 'right', width: 250, align:'center', toolbar: '#options', title:'操作'}
]]
});
@ -160,6 +166,14 @@
}
});
});
} else if (layEvent === 'order'){
layer.open({
type: 2,
title: "下单",
shadeClose: true,
area: ["800px","600px"],
content: '/order/order/create?customer_id='+data.id,
})
}
});
$("#addBtn").click(function () {

View File

@ -176,7 +176,7 @@
flow.load({
elem: '#remark_list_box' //流加载容器
,done: function(page, next){ //执行下一页的回调
$.post('{{route('api.remarkList',['customer_id'=>$model->id])}}',{page:page},function (res) {
$.post('{{route('api.remarkList')}}',{id:'{{$model->id}}',page:page,type:2},function (res) {
var _html = '';
res.data.list.forEach(function (item,index) {
console.log(item)

View File

@ -0,0 +1,116 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-body">
<form action="{{route('order.order.store',['customer_id'=>$model->id])}}" method="post" class="layui-form">
{{csrf_field()}}
<div class="layui-form-item">
<label for="" class="layui-form-label">客户名称</label>
<div class="layui-input-block">
<input class="layui-input layui-disabled" type="text" value="{{$model->name}}" readonly>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">联系人</label>
<div class="layui-input-block">
<input class="layui-input layui-disabled" type="text" value="{{$model->contact_name}}" readonly>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">联系电话</label>
<div class="layui-input-block">
<input class="layui-input layui-disabled" type="text" value="{{$model->contact_phone}}" readonly>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">接单人</label>
<div class="layui-input-block">
@include('common.get_user')
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">总金额</label>
<div class="layui-input-block">
<input class="layui-input" id="total_money" type="number" name="total_money" placeholder="请输入总金额">
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">前期款</label>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 80px">
<select name="first_percent" lay-filter="money_percent" data-name="first_money">
@for($i=0;$i<=20;$i++)
<option value="{{round($i*5/100,2)}}">{{$i*5}}%</option>
@endfor
</select>
</div>
<div class="layui-input-inline">
<input class="layui-input" type="number" value="0" name="first_money" >
</div>
<div class="layui-word-aux layui-form-mid">根据总金额和比例自动结算</div>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">中期款</label>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 80px">
<select name="mid_percent" lay-filter="money_percent" data-name="mid_money">
@for($i=0;$i<=20;$i++)
<option value="{{round($i*5/100,2)}}">{{$i*5}}%</option>
@endfor
</select>
</div>
<div class="layui-input-inline">
<input class="layui-input" type="number" value="0" name="mid_money" >
</div>
<div class="layui-word-aux layui-form-mid">根据总金额和比例自动结算</div>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">尾款</label>
<div class="layui-inline">
<div class="layui-input-inline" style="width: 80px">
<select name="last_percent"lay-filter="money_percent" data-name="last_money">
@for($i=0;$i<=20;$i++)
<option value="{{round($i*5/100,2)}}">{{$i*5}}%</option>
@endfor
</select>
</div>
<div class="layui-input-inline">
<input class="layui-input" type="number" value="0" name="last_money" >
</div>
<div class="layui-word-aux layui-form-mid">根据总金额和比例自动结算</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" class="layui-btn layui-btn-sm" lay-submit lay-filter="go-close-refresh" >确认</button>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('script')
<script>
layui.use(['element', 'form', 'layer', 'table', 'upload', 'laydate', 'jquery'], function () {
var $ = layui.jquery;
var form = layui.form;
var table = layui.table;
var layer = layui.layer;
form.on('select(money_percent)', function(data){
if($("#total_money").val() == '' || $("#total_money").val() <= 0){
$("#total_money").focus()
layer.msg('请输入总金额',{icon:2})
return false
}
var name = $(data.elem).data('name')
$('input[name="'+name+'"]').val((data.value * $("#total_money").val()).toFixed(2))
});
});
</script>
@endsection

View File

@ -0,0 +1,108 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-header layuiadmin-card-header-auto">
<form class="layui-form" action="{{route("order.order")}}">
<div class="layui-btn-group">
@can('order.order.destroy')
<button type="button" class="layui-btn layui-btn-sm layui-btn-danger" data-url="{{route('crm.customer.destroy')}}" id="listDelete">删除</button>
@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>
</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('order.order.remark')
<a class="layui-btn layui-btn-sm" lay-event="remark">跟进</a>
@endcan
@can('order.order.pay')
<a class="layui-btn layui-btn-sm" lay-event="pay">付款</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('order.order') }}" //数据接口
,page: true //开启分页
,cols: [[ //表头
{checkbox: true}
,{field: 'num', title: '订单号'}
,{field: 'total_money', title: '总金额'}
,{field: 'payed_money', title: '已付金额'}
,{field: 'name', title: '客户名称'}
,{field: 'node_name', title: '当前进度'}
,{field: 'follow_time', title: '跟进时间'}
,{field: 'follow_user_nickname', title: '跟进人'}
,{field: 'remark', title: '跟进备注'}
,{field: 'status', title: '状态',templet:function (d) {
return d.status!=1?'<span class="layui-badge layui-bg-gray">生产中</span>':'<span class="layui-badge layui-bg-green">已完结</span>';
}}
,{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 === 'remark'){
layer.open({
type: 2,
title: "备注",
shadeClose: true,
area: ["80%","80%"],
content: '/order/order/remark?id=' + data.id,
})
} else if (layEvent === 'pay'){
layer.open({
type: 2,
title: "付款",
shadeClose: true,
area: ["600px","400px"],
content: '/order/order/payForm?id=' + data.id,
})
}
});
})
</script>
@endsection

View File

@ -0,0 +1,45 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-card">
<form class="layui-form" action="{{route('order.order.pay',['id'=>$model->id])}}" method="post">
{{csrf_field()}}
<div class="layui-form-item">
<label for="" class="layui-form-label">付款方式</label>
<div class="layui-input-block">
<select name="pay_type" lay-verify="required" >
@foreach(config('freeswitch.pay_type') as $k => $v)
<option value="{{$k}}">{{$v}}</option>
@endforeach
</select>
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">付款金额</label>
<div class="layui-input-block">
<input type="number" name="money" placeholder="付款金额" lay-verify="required" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">备注内容</label>
<div class="layui-input-block">
<textarea name="content" class="layui-textarea" lay-verify="required"></textarea>
</div>
<div class="layui-word-aux layui-form-mid"></div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" lay-submit lay-filter="go-close-refresh" class="layui-btn layui-btn-sm">确认</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,90 @@
@extends('base')
@section('content')
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-row layui-col-space30">
<div class="layui-col-xs6">
<div class="layui-card">
<div class="layui-card-header"><b>跟进记录</b></div>
<div class="layui-card-body">
<ul class="layui-timeline" id="remark_list_box"></ul>
</div>
</div>
</div>
<div class="layui-col-xs6">
<div class="layui-card">
<div class="layui-card-header"><b>备注跟进</b></div>
<div class="layui-card-body">
<form class="layui-form" action="{{route('order.order.remark',['id'=>$model->id])}}" method="post">
{{csrf_field()}}
<div class="layui-form-item">
<label for="" class="layui-form-label">节点</label>
<div class="layui-input-block">
@include('common.get_node',['node_id'=>$model->node_id,'type'=>3])
</div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">备注内容</label>
<div class="layui-input-block">
<textarea name="content" class="layui-textarea" lay-verify="required"></textarea>
</div>
<div class="layui-word-aux layui-form-mid"></div>
</div>
<div class="layui-form-item">
<label for="" class="layui-form-label">下次跟进</label>
<div class="layui-input-block">
<input type="text" id="next_follow_time" name="next_follow_time" placeholder="请选择时间" lay-verify="required" readonly class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button type="button" lay-submit lay-filter="go-close-refresh" class="layui-btn layui-btn-sm">确认</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
layui.use(['layer','table','form','element','flow','laydate'],function () {
var $ = layui.jquery;
var form = layui.form;
var flow = layui.flow;
var laydate = layui.laydate;
laydate.render({
elem: '#next_follow_time',
type: 'datetime'
});
flow.load({
elem: '#remark_list_box' //流加载容器
,done: function(page, next){ //执行下一页的回调
$.post('{{route('api.remarkList')}}',{id:'{{$model->id}}',page:page,'type':3},function (res) {
var _html = '';
res.data.list.forEach(function (item,index) {
console.log(item)
_html += '<li class="layui-timeline-item">';
_html += ' <i class="layui-icon layui-timeline-axis">&#xe63f;</i>';
_html += ' <div class="layui-timeline-content layui-text">';
_html += ' <h3 class="layui-timeline-title">'+item.created_at+'</h3>';
_html += ' <p><b>节点进度:</b>' + item.old_node_name + ' -> '+item.new_node_name+'</p>';
_html += ' <p><b>跟进人:</b>' + item.user_nickname + '</p>';
_html += ' <p><b>跟进内容:</b>' + item.content + '</p>';
_html += ' </div>';
_html += '</li>';
})
next(_html, page < res.data.lastPage); //假设总页数为 10
});
}
});
});
</script>
@endsection

View File

@ -285,8 +285,7 @@ Route::group(['prefix'=>'crm','namespace'=>'Crm','middleware'=>['auth','permissi
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');
});
//公海库
@ -327,3 +326,42 @@ Route::group(['prefix'=>'chat','namespace'=>'Chat','middleware'=>['auth','permis
});
});
/*
|--------------------------------------------------------------------------
| 订单模块
|--------------------------------------------------------------------------
*/
Route::group(['prefix'=>'order','namespace'=>'Order','middleware'=>['auth','permission:order']],function () {
//订单
Route::group([],function (){
Route::get('order','OrderController@index')->name('order.order')->middleware('permission:order.order');
//下单
Route::get('order/create','OrderController@create')->name('order.order.create')->middleware('permission:order.order.create');
Route::post('order/store','OrderController@store')->name('order.order.store')->middleware('permission:order.order.create');
//付款
Route::get('order/payForm','OrderController@payForm')->name('order.order.payForm')->middleware('permission:order.order.pay');
Route::post('order/pay','OrderController@pay')->name('order.order.pay')->middleware('permission:order.order.pay');
//备注跟进
Route::match(['get','post'],'order/remark','OrderController@remark')->name('order.order.remark')->middleware('permission:order.order.remark');
//删除
Route::delete('order/destroy','OrderController@destroy')->name('order.order.destroy')->middleware('permission:order.order.destroy');
});
});