添加订单模块
This commit is contained in:
parent
22d25d0a2e
commit
e7e6cbcf8e
|
|
@ -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')) {
|
||||
/**
|
||||
* 递归树形上下级
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
|||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Order extends Model
|
||||
{
|
||||
protected $table = 'order';
|
||||
protected $guarded = ['id'];
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class OrderPay extends Model
|
||||
{
|
||||
protected $table = 'order_pay';
|
||||
protected $guarded = ['id'];
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class OrderRemark extends Model
|
||||
{
|
||||
protected $table = 'order_remark';
|
||||
protected $guarded = ['id'];
|
||||
}
|
||||
|
|
@ -76,4 +76,11 @@ return [
|
|||
'textarea' => '文本框',
|
||||
],
|
||||
|
||||
'pay_type' => [
|
||||
1 => '现金',
|
||||
2 => '对公账户',
|
||||
3 => '支付宝',
|
||||
4 => '微信',
|
||||
5 => '其它',
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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){
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
//生成一级权限
|
||||
|
|
|
|||
|
|
@ -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 () {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
@ -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"></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
|
||||
|
||||
|
|
@ -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');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue