chenqp 8 kuukautta sitten
vanhempi
commit
98c21f5fb4

+ 1 - 1
app/Http/Controllers/Api/OaController.php

@@ -361,7 +361,7 @@ class OaController extends BaseController
             if($value['menu_id'] == 16) unset($oa[$key]);
         }
 
-        return $this->json_return(200,'', $oa);
+        return $this->json_return(200,'', array_values($oa));
     }
 
 

+ 4 - 0
app/Model/OrderOperation.php

@@ -40,6 +40,8 @@ class OrderOperation extends Model
     const twenty_four = 24;
     const twenty_five = 25;
     const twenty_six = 26;
+    const twenty_seven = 27;
+    const twenty_eight = 28;
 
     public static $type = [
         self::zero => '系统设置变更 ',
@@ -69,5 +71,7 @@ class OrderOperation extends Model
         self::twenty_four => '客户移交',
         self::twenty_five => '合同批量确认',
         self::twenty_six => '施工单分配/调配',
+        self::twenty_seven => '活动包确认',
+        self::twenty_eight => '活动包弃审',
     ];
 }

+ 13 - 0
app/Model/SportsBag.php

@@ -9,4 +9,17 @@ class SportsBag extends UseScopeBaseModel
     const UPDATED_AT = 'upd_time';
     protected $dateFormat = 'U';
     const range_function = 'sportsBagRange';
+    const is_check_function = 'sportsBagCheck';
+
+    const prefix = 'HD';
+    const State_minus_one = -1;//驳回
+    const STATE_ZERO = 0;//未审核
+    const STATE_ONE = 1;//待审核
+    const STATE_TWO = 2;//已审核
+    public static $name = [
+        self::State_minus_one => '驳回',
+        self::STATE_ZERO => '未审核',
+        self::STATE_ONE => '待审核',
+        self::STATE_TWO => '已审核'
+    ];
 }

+ 55 - 1
app/Service/CheckService.php

@@ -26,6 +26,7 @@ use App\Model\SalesOrderInfo;
 use App\Model\SalesOrderOtherFee;
 use App\Model\SalesOrderProductInfo;
 use App\Model\SeeRange;
+use App\Model\SportsBag;
 use App\Model\Storehouse;
 use App\Model\Supplier;
 use App\Service\OaService;
@@ -48,6 +49,7 @@ class CheckService extends Service
     const nine = 9; //合同客户完结
     const ten  = 10; //收付款确认
     const eve  = 11; //接受派单
+    const twl  = 12; //活动包
 
     //中文对照
     public $map = [
@@ -62,6 +64,7 @@ class CheckService extends Service
         self::nine => '合同客户完结',
         self::ten => '收付款确认',
         self::eve => '接受门店派单',
+        self::twl => '活动包',
     ];
 
     //入库操作
@@ -93,6 +96,7 @@ class CheckService extends Service
         self::seven => 'waitPurchaseConfirm', //采购单确认
         self::eight => 'waitSales', // 合同安装件 合同确认
         self::ten => 'waitPaymentReceipt', //收付款确认
+        self::twl => 'waitSportsBag', //活动包确认
     ];
 
     public static $finished = [
@@ -111,6 +115,7 @@ class CheckService extends Service
         self::seven => 'confirmPurchaseOrderState',
         self::eight => 'confirmSales', // 合同 安装件 合同确认
         self::ten => 'confirmPaymentReceipt', // 确认收付款单
+        self::twl => 'confirmSportsBag', // 确认活动包
     ];
 
     //单据库存流水
@@ -133,7 +138,7 @@ class CheckService extends Service
 //        self::four => 'delCreatePurchaseOrder', // 派给分社的合同确认以后生成虚拟采购单
     ];
 
-    //审核通过后 驳回
+    //审核通过后 弃审
     public static $opt_case_reject = [
         self::four => 'reject_sales', // 合同
 //        self::three => 'reject_purchase', //采购入库
@@ -141,6 +146,7 @@ class CheckService extends Service
         self::five => 'reject_construction',//施工单
         self::six => 'reject_return_exchange',//退换货
         self::ten => 'reject_payment_receipt',//收付款单
+        self::twl => 'reject_sports_bag',//活动包
     ];
 
     //审核通过后 驳回 产生流水
@@ -159,6 +165,7 @@ class CheckService extends Service
         self::seven => OrderOperation::thi,//采购单确认
         self::three => OrderOperation::fourteen,//采购单入库
         self::ten => OrderOperation::twenty_one,//收付款单
+        self::twl => OrderOperation::twenty_one,//收付款单
     ];
 
     //旅程日志 驳回
@@ -169,6 +176,7 @@ class CheckService extends Service
         self::three => OrderOperation::fif,//采购单入库弃审
         self::seven => OrderOperation::twenty,//采购单确认弃审
         self::ten => OrderOperation::twenty_two,//收付款单
+        self::twl => OrderOperation::twenty_eight,//活动包
     ];
 
     //校验
@@ -307,6 +315,19 @@ class CheckService extends Service
 
         return [true, $model->toArray()];
     }
+
+    public function waitSportsBag($data){
+        $model = SportsBag::where('id', $data['id'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '活动包不存在或已被删除'];
+        if(! in_array($model->state, [SportsBag::State_minus_one,SportsBag::STATE_ZERO])) return [false, '请确认活动包状态,操作失败'];
+
+        SportsBag::where('del_time',0)->where('id',$data['id'])
+            ->update(['state' => PaymentReceipt::STATE_ONE]);
+
+        return [true, $model->toArray()];
+    }
     //改为待审核---------------------------------
 
     //自动生成-----------------------------------
@@ -520,6 +541,26 @@ class CheckService extends Service
 
     //自动生成删除
 
+    public function confirmSportsBag($data){
+        $model = SportsBag::where('order_number',$data['order_number'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '活动包不存在或已被删除'];
+        if($model->state != SportsBag::STATE_ONE) return [false, '请确认活动包状态,操作失败'];
+
+        if($data['type'] == self::TYPE_ONE){
+            //通过
+            $model->state = SportsBag::STATE_TWO;
+            $model->save();
+        }else{
+            //驳回
+            $model->state = SportsBag::State_minus_one;
+            $model->save();
+        }
+
+        return [true, $model->toArray()];
+    }
+
     public function confirmPaymentReceipt($data){
         $model = PaymentReceipt::where('order_number',$data['order_number'])
             ->where('del_time',0)
@@ -984,6 +1025,19 @@ class CheckService extends Service
         return [true, $model->toArray()];
     }
 
+    public function reject_sports_bag($data){
+        $model = SportsBag::where('order_number', $data['order_number'])
+            ->where('del_time',0)
+            ->first();
+        if(empty($model)) return [false, '活动包不存在或已被删除'];
+        if($model->state != SportsBag::STATE_TWO) return [false, '请确认活动包状态,操作失败'];
+
+        $model->state = SportsBag::STATE_ZERO;
+        $model->save();
+
+        return [true, $model->toArray()];
+    }
+
     public function reject_return_exchange($data){
         $model = ReturnExchangeOrder::where('order_number', $data['order_number'])
             ->where('del_time',0)

+ 1 - 1
app/Service/OaService.php

@@ -515,7 +515,7 @@ class OaService extends Service
         } catch (\Exception $e) {
             DB::rollBack();
             $this->returnOa($order_no, 2, $type);
-            return [false, $e->getLine() . ':' . $e->getMessage()];
+            return [false, $e->getFile() . ':' .$e->getLine() . ':' . $e->getMessage()];
         }
     }
 

+ 65 - 8
app/Service/PurchaseOrderService.php

@@ -14,6 +14,8 @@ use App\Model\PurchaseOrderInfo;
 use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use App\Model\SeeRange;
+use App\Model\SportsBag;
+use App\Model\SportsBagProductInfo;
 use App\Model\Storehouse;
 use App\Model\Supplier;
 use Illuminate\Http\Request;
@@ -63,6 +65,8 @@ class PurchaseOrderService extends Service
             if(!empty($data['product'])){
                 $sub = [];
                 foreach ($data['product'] as $value){
+                    $sports_bag_product_info_id = 0;
+                    if(! empty($value['sports_bag_id'])) $sports_bag_product_info_id = empty($value['id']) ? 0 : $value['id'];
                     $sub[] = [
                         'purchase_order_id' => $material_model->id,
                         'order_number' => $data['order_number'],
@@ -72,6 +76,9 @@ class PurchaseOrderService extends Service
                         'basic_type_id' => $value['basic_type_id'],
                         'price' => $value['price'],
                         'mark' => $value['mark'] ?? '',
+                        'final_amount' => $value['final_amount'] ?? 0,
+                        'sports_bag_id' => $value['sports_bag_id'] ?? 0,
+                        'sports_bag_product_info_id' => $sports_bag_product_info_id,
                         'rate' => $value['rate'] ?? 0,
                     ];
                 }
@@ -163,6 +170,8 @@ class PurchaseOrderService extends Service
             if(!empty($data['product'])){
                 $sub = [];
                 foreach ($data['product'] as $value){
+                    $sports_bag_product_info_id = 0;
+                    if(! empty($value['sports_bag_id'])) $sports_bag_product_info_id = empty($value['id']) ? 0 : $value['id'];
                     $sub[] = [
                         'purchase_order_id' => $material_model->id,
                         'order_number' => $data['order_number'],
@@ -172,6 +181,9 @@ class PurchaseOrderService extends Service
                         'basic_type_id' => $value['basic_type_id'],
                         'price' => $value['price'],
                         'mark' => $value['mark'] ?? '',
+                        'final_amount' => $value['final_amount'] ?? 0,
+                        'sports_bag_id' => $value['sports_bag_id'] ?? 0,
+                        'sports_bag_product_info_id' => $sports_bag_product_info_id,
                         'rate' => $value['rate'] ?? 0,
                     ];
                 }
@@ -233,7 +245,7 @@ class PurchaseOrderService extends Service
             ->first();
         if(empty($order)) return [false, '采购订单不存在或已被删除'];
         $order = $order->toArray();
-        $order['file'] = [];
+        $order['activity_product'] = $order['file'] = [];
         $order['purchase_type_title'] = BasicType::where('id',$order['purchase_type'])->value('title') ?? '';
         $order['storehouse_title'] = Storehouse::where('id',$order['storehouse_id'])->value('title');
         $supplier = Supplier::where('id',$order['supplier'])->first();
@@ -249,17 +261,62 @@ class PurchaseOrderService extends Service
         $p_info = PurchaseOrderInfo::where('del_time',0)
             ->where('order_number',$data['order_number'])
             ->get()->toArray();
+        $sports_bag_id = array_unique(array_column($p_info,'sports_bag_id'));
+        $bag = SportsBag::whereIn('id',$sports_bag_id)->get()->toArray();
+        $bag_pro = SportsBagProductInfo::where('del_time',0)->whereIn('sports_bag_id',$sports_bag_id)
+            ->get()->toArray();
+        $bag_map = array_column($bag,null,'id');
+        $bag_pro_map = [];
+        foreach ($bag_pro as $value){
+            $bag_pro_map[$value['sports_bag_id']][] = $value;
+        }
+
         $basic_price = BasicType::whereIn('id',array_unique(array_column($p_info,'basic_type_id')))->pluck('title','id')->toArray();
         $map = (new ProductService())->getProductDetail(array_column($p_info,'product_id'));
+        $sports_bag_arr = [];
+        $sports_bag_pro = [];
         foreach ($p_info as $value){
             $tmp = $map[$value['product_id']] ?? [];
-            $value['title'] = $tmp['title'] ?? "";
-            $value['code'] = $tmp['code'] ?? "";
-            $value['size'] = $tmp['size'] ?? "";
-            $value['unit'] = $tmp['unit'] ?? "";
-            $value['bar_code'] = $tmp['bar_code'] ?? "";
-            $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
-            $order['product'][] = $value;
+            if(! empty($value['sports_bag_id'])){
+                $bag_tmp = $bag_map[$value['sports_bag_id']] ?? [];
+                if(! isset($sports_bag_arr[$value['sports_bag_id']])) $sports_bag_arr[$value['sports_bag_id']] = $bag_tmp;
+                $bag_pro_tmp = $bag_pro_map[$value['sports_bag_id']] ?? [];
+                foreach ($bag_pro_tmp as $k => $v){
+                    if($v['product_id'] != $value['product_id']) continue;
+                    $is_choose = false;
+                    $final_amount = 0;
+                    $number = $v['number'];
+                    $mark = "";
+                    if($v['id'] == $value['sports_bag_product_info_id']){
+                        $is_choose = true;
+                        $final_amount = $value['final_amount'];
+                        $number = $value['number'];
+                        $mark = $value['mark'];
+                    }
+                    $bag_pro_tmp[$k]['is_choose'] = $is_choose;
+                    $bag_pro_tmp[$k]['final_amount'] = $final_amount;
+                    $bag_pro_tmp[$k]['number'] = $number;
+                    $bag_pro_tmp[$k]['title'] = $tmp['title'] ?? "";
+                    $bag_pro_tmp[$k]['code'] = $tmp['code'] ?? "";
+                    $bag_pro_tmp[$k]['size'] = $tmp['size'] ?? "";
+                    $bag_pro_tmp[$k]['unit'] = $tmp['unit'] ?? "";
+                    $bag_pro_tmp[$k]['bar_code'] = $tmp['bar_code'] ?? "";
+                    $bag_pro_tmp[$k]['mark'] = $mark ?? "";
+                    $sports_bag_pro[$value['sports_bag_id']][] = $bag_pro_tmp[$k];
+                }
+            }else{
+                $value['title'] = $tmp['title'] ?? "";
+                $value['code'] = $tmp['code'] ?? "";
+                $value['size'] = $tmp['size'] ?? "";
+                $value['unit'] = $tmp['unit'] ?? "";
+                $value['bar_code'] = $tmp['bar_code'] ?? "";
+                $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
+                $order['product'][] = $value;
+            }
+        }
+        foreach ($sports_bag_arr as $key => $value){
+            $value['product'] = $sports_bag_pro[$key] ?? [];
+            $order['activity_product'][] = $value;
         }
 
         $file = PurchaseOrderFile::where('del_time',0)

+ 14 - 0
app/Service/RangeService.php

@@ -18,6 +18,7 @@ use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderInfo;
 use App\Model\SeeRange;
+use App\Model\SportsBag;
 use Illuminate\Support\Facades\DB;
 
 class RangeService extends Service
@@ -589,6 +590,19 @@ class RangeService extends Service
     }
 
     //全部 待审 已审核 -----------------------------------------------
+    public static function sportsBagCheck($user,$search){
+        $args = "";
+        if($search['is_check'] == 1) {
+            //待审核
+            $args = "(state = ". SportsBag::STATE_ONE . ")";
+        }elseif($search['is_check'] == 2){
+            //已审
+            $args = "(state = ". SportsBag::STATE_TWO . ")";
+        }
+
+        return $args;
+    }
+
     public static function paymentReceiptCheck($user,$search){
         $args = "";
         if($search['is_check'] == 1) {

+ 93 - 2
app/Service/SportsBagService.php

@@ -2,7 +2,10 @@
 
 namespace App\Service;
 
+use App\Model\BasicType;
+use App\Model\Construction;
 use App\Model\Employee;
+use App\Model\PurchaseOrder;
 use App\Model\SeeRange;
 use App\Model\SportsBag;
 use App\Model\SportsBagProductInfo;
@@ -14,10 +17,14 @@ class SportsBagService extends Service
         list($status,$msg) = $this->orderRule($data,$user,false);
         if(!$status) return [$status,$msg];
 
+        $params = $this->getDataFile($data);
+        (new OperationLogService())->setOperationList($params,$user,2);
+
         try{
             DB::beginTransaction();
             $material_model = SportsBag::where('id',$data['id'])->first();
             $material_model->title = $data['title'];
+            $material_model->purchase_attribute = $data['purchase_attribute'];
             $material_model->mark = $data['mark'] ?? "";
             $material_model->number = $data['number'];
             $material_model->start_time = $data['start_time'] ?? 0;
@@ -55,6 +62,16 @@ class SportsBagService extends Service
             return [false,$e->getMessage()];
         }
 
+        if(! empty($data['check'])) {
+            list($status,$msg) = (new CheckService())->checkAll([
+                "id" => $material_model->id,
+                "order_number" => $data['order_number'],
+                "opt_case" => CheckService::twl,
+                "menu_id" => $data['menu_id']
+            ],$user);
+            if(! $status) return [true, '保存成功,活动包确认失败,异常信息:' . $msg];
+        }
+
         return [true,''];
     }
 
@@ -65,6 +82,8 @@ class SportsBagService extends Service
         try{
             DB::beginTransaction();
             $material_model = new SportsBag();
+            $material_model->order_number = $data['order_number'];
+            $material_model->purchase_attribute = $data['purchase_attribute'];
             $material_model->title = $data['title'];
             $material_model->mark = $data['mark'] ?? "";
             $material_model->number = $data['number'];
@@ -100,9 +119,24 @@ class SportsBagService extends Service
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
+            if (str_contains($e->getMessage(), '1062') || str_contains($e->getMessage(), 'Duplicate entry')) {
+                return [false, '网络环境波动,请重新操作'];
+            }
             return [false,$e->getMessage()];
         }
 
+        (new OperationLogService())->setOperationList($data,$user);
+
+        if(! empty($data['check'])) {
+            list($status,$msg) = (new CheckService())->checkAll([
+                "id" => $material_model->id,
+                "order_number" => $data['order_number'],
+                "opt_case" => CheckService::twl,
+                "menu_id" => $data['menu_id']
+            ],$user);
+            if(! $status) return [true, '保存成功,活动包确认失败,异常信息:' . $msg];
+        }
+
         return [true,''];
     }
 
@@ -114,6 +148,16 @@ class SportsBagService extends Service
             ->first();
         if(empty($order)) return [false, '活动包不存在或已被删除'];
         $order = $order->toArray();
+        $basic_type = BasicType::whereRaw("FIND_IN_SET(?, id)", [$order['purchase_attribute']])->pluck('title','id')->toArray();
+        $str = "";
+        if(! empty($basic_type)){
+            $purchase_attribute = explode(',',$order['purchase_attribute']);
+            foreach ($purchase_attribute as $value){
+                $str .= $basic_type[$value] . ',';
+            }
+        }
+        $order['purchase_attribute_title'] = $str;
+
         $start_time = $order['start_time'] ? date("Y-m-d H:i",$order['start_time']) : '';
         $end_time = $order['end_time'] ? date("Y-m-d H:i",$order['end_time']) : '';
         $order['sports_bag_time'] = $start_time . '——' . $end_time;
@@ -135,6 +179,10 @@ class SportsBagService extends Service
 
         $order['crt_name'] = Employee::where('id',$order['crt_id'])->value('emp_name');
         $order['crt_time'] = $order['crt_time'] ? date("Y-m-d H:i:s",$order['crt_time']): '';
+
+        $state_array = $this->getStateMake([$order]);
+        $order['state_title'] = $this->makeState($order,$state_array);
+
         //可见范围
         $return = (new RangeService())->RangeDetail($order['id'],SeeRange::type_eight);
         $order['depart'] = $return[0] ?? [];
@@ -147,6 +195,7 @@ class SportsBagService extends Service
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
         $order = SportsBag::where('del_time',0)->where('id',$data['id'])->first();
         if(empty($order)) return [false,'活动包不存在或已被删除'];
+        if($order['state'] > SportsBag::STATE_ZERO) return [false, '请确认活动包状态,删除失败!'];
 
         try{
             DB::beginTransaction();
@@ -170,9 +219,11 @@ class SportsBagService extends Service
     public function getList($data,$user){
         $model = SportsBag::Clear($user,$data);
         $model = $model->where('del_time',0)
-            ->select('id','title','number','start_time','end_time','crt_time','crt_id','mark','total_amount')
+            ->select('id','title','number','start_time','end_time','crt_time','crt_id','mark','total_amount','state','order_number','purchase_attribute')
             ->orderby('id', 'desc');
 
+        if(! empty($data['purchase_attribute'])) $model->whereRaw("FIND_IN_SET(?, purchase_attribute)", [$data['purchase_attribute']]);
+        if(isset($data['state'])) $model->where('state', $data['state']);
         if(isset($data['valid'])) {
             //获取有效时间内的活动包
             $time = time();
@@ -222,18 +273,53 @@ class SportsBagService extends Service
                 $product[$value['sports_bag_id']][] = $value;
             }
         }
+
+        //订单状态数据组织
+        $state_array = $this->getStateMake($data['data']);
+
         foreach ($data['data'] as $key => $value){
             $start_time = $value['start_time'] ? date("Y-m-d H:i",$value['start_time']) : '';
             $end_time = $value['end_time'] ? date("Y-m-d H:i",$value['end_time']) : '';
             $data['data'][$key]['sports_bag_time'] = $start_time . '——' . $end_time;
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']) : '';
             $data['data'][$key]['crt_name'] = $emp_map[$value['crt_id']] ?? '';
+            $data['data'][$key]['state_title'] = $this->makeState($data['data'][$key], $state_array);
             $data['data'][$key]['product'] = $product[$value['id']] ?? [];
         }
 
         return $data;
     }
 
+    public function makeState($value, $state_array){
+        if(! empty($state_array[$value['order_number']])){
+            $return = $state_array[$value['order_number']];
+            if($value['state'] == SportsBag::State_minus_one){
+                $state = "驳回:" . $return;
+            }else{
+                $state = "待" . $return . "审核";
+            }
+        }elseif($value['state'] == SportsBag::STATE_ZERO){
+            $state = "待" . $value['crt_name'] . "提交";
+        }else{
+            $state = SportsBag::$name[$value['state']] ?? '';
+        }
+
+        return $state;
+    }
+
+    public function getStateMake($data){
+        if(empty($data)) return [];
+
+        $order_no = [];
+        foreach ($data as $value){
+            if(! in_array($value['state'], [SportsBag::State_minus_one,SportsBag::STATE_ONE])) continue;
+
+            $order_no[] = $value['order_number'];
+        }
+
+        return (new OaService())->getOaTeamDetailList($order_no);
+    }
+
     public function orderRule(&$data, $user, $is_check = true){
         if(empty($data['title'])) return [false,'请填写活动名称'];
         if(empty($data['sports_bag_time'][0]) || empty($data['sports_bag_time'][1])) return [false,'请填写活动时间范围'];
@@ -252,9 +338,14 @@ class SportsBagService extends Service
         $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
 
         if($is_check){
-
+            $order_number = (new OrderNoService())->createOrderNumber(SportsBag::prefix);
+            if(empty($order_number)) return [false,'活动包唯一单号生成失败!'];
+            $data['order_number'] = $order_number;
         }else{
             if($this->isEmpty($data,'id')) return [false,'活动包ID不能为空!'];
+            $purchase = SportsBag::where('del_time',0)->where('id',$data['id'])->first();
+            if(empty($purchase)) return [false, '活动包不存在或已被删除'];
+            if($purchase->state > SportsBag::STATE_ZERO) return [false,'请确认活动包状态,修改失败'];
         }
 
         return [true, ''];

+ 37 - 0
config/header/30.php

@@ -0,0 +1,37 @@
+<?php
+/**
+ * '菜单ID' => [
+ *     '字段英文名' =》 '字段中文名'
+ * ]
+ */
+
+return [
+    [
+        'key' => 'title',
+        'value' => '活动包名称',
+    ],
+    [
+        'key' => 'sports_bag_time',
+        'value' => '活动包时间范围',
+    ],
+    [
+        'key' => 'total_amount',
+        'value' => '活动包金额',
+    ],
+    [
+        'key' => 'mark',
+        'value' => '活动包备注',
+    ],
+    [
+        'key' => 'crt_time',
+        'value' => '创建时间',
+    ],
+    [
+        'key' => 'crt_name',
+        'value' => '创建人',
+    ],
+    [
+        'key' => 'state_title',
+        'value' => '订单状态',
+    ],
+];

+ 34 - 146
config/oa.php

@@ -123,152 +123,6 @@ return [
             ],
         ]
     ],
-//    [
-//        'menu_id' => 43,
-//        'menu_title' => '派单合同',
-//        'children' => [
-//            [
-//                'key' => 'sales_order_type',
-//                'title' => '销售订单类型',
-//            ],
-//            [
-//                'key' => 'model_type',
-//                'title' => '销售订单模板',
-//            ],
-//            [
-//                'key' => 'order_number',
-//                'title' => '订单合同编号',
-//            ],
-//            [
-//                'key' => 'sales_order_type',
-//                'title' => '销售订单类型',
-//            ],
-//            [
-//                'key' => 'title',
-//                'title' => '合同名称',
-//            ],
-//            [
-//                'key' => 'selling_price',
-//                'title' => '含精品售价',
-//            ],
-//            [
-//                'key' => 'vin_no',
-//                'title' => '车架号',
-//            ],
-//            [
-//                'key' => 'order_type',
-//                'title' => '订单类型',
-//            ],
-//            [
-//                'key' => 'deal_type',
-//                'title' => '成交类型',
-//            ],
-//            [
-//                'key' => 'customer_id',
-//                'title' => '客户id',
-//            ],
-//            [
-//                'key' => 'sign_time',
-//                'title' => '签订日期',
-//            ],
-//            [
-//                'key' => 'contract_state',
-//                'title' => '合同状态',
-//            ],
-//            [
-//                'key' => 'product_total',
-//                'title' => '产品合计',
-//            ],
-//            [
-//                'key' => 'rate',
-//                'title' => '整单扣除率',
-//            ],
-//            [
-//                'key' => 'crt_id',
-//                'title' => '创建人ID',
-//            ],
-//            [
-//                'key' => 'crt_time',
-//                'title' => '创建时间',
-//            ],
-//            [
-//                'key' => 'mark',
-//                'title' => '备注',
-//            ],
-//            [
-//                'key' => 'construction_time',
-//                'title' => '施工日期',
-//            ],
-//            [
-//                'key' => 'handover_time',
-//                'title' => '交车日期',
-//            ],
-//            [
-//                'key' => 'expire_time',
-//                'title' => '到期日期',
-//            ],
-//            [
-//                'key' => 'other_fee',
-//                'title' => '其它费用',
-//            ],
-//            [
-//                'key' => 'discount_fee',
-//                'title' => '优惠金额',
-//            ],
-//            [
-//                'key' => 'contract_fee',
-//                'title' => '合同金额',
-//            ],
-//            [
-//                'key' => 'contract_type',
-//                'title' => '合同类型',
-//            ],
-//            [
-//                'key' => 'pay_way',
-//                'title' => '付款类型',
-//            ],
-//            [
-//                'key' => 'send_state',
-//                'title' => '发货状态',
-//            ],
-//            [
-//                'key' => 'logistics_company',
-//                'title' => '物流公司',
-//            ],
-//            [
-//                'key' => 'logistics_number',
-//                'title' => '物流单号',
-//            ],
-//            [
-//                'key' => 'car_type',
-//                'title' => '车型',
-//            ],
-//            [
-//                'key' => 'year',
-//                'title' => '年份',
-//            ],
-//            [
-//                'key' => 'mileage',
-//                'title' => '表显里程',
-//            ],
-//            [
-//                'key' => 'color',
-//                'title' => '外观内饰颜色',
-//            ],
-//            [
-//                'key' => 'original_set',
-//                'title' => '原装配置',
-//            ],
-//            [
-//                'key' => 'processing',
-//                'title' => '自有后加装产品',
-//            ],
-//            [
-//                'key' => 'state',
-//                'title' => '单据状态',
-//            ],
-//        ]
-//    ],
     [
         'menu_id' => 35,
         'menu_title' => '退换货单',
@@ -564,6 +418,40 @@ return [
         ]
     ],
     [
+        'menu_id' => 30,
+        'menu_title' => '组合活动价',
+        'children' => [
+            [
+                'key' => 'title',
+                'title' => '活动价名称',
+            ],
+            [
+                'key' => 'total_amount',
+                'title' => '活动包金额',
+            ],
+            [
+                'key' => 'purchase_attribute_title',
+                'title' => '采购属性',
+            ],
+            [
+                'key' => 'crt_name',
+                'title' => '创建人',
+            ],
+            [
+                'key' => 'crt_time',
+                'title' => '创建时间',
+            ],
+            [
+                'key' => 'mark',
+                'title' => '备注',
+            ],
+            [
+                'key' => 'state_title',
+                'title' => '活动价状态',
+            ],
+        ]
+    ],
+    [
         'menu_id' => 16,
         'menu_title' => '客户管理',
         'children' => [