123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- <?php
- namespace App\Service\HeaderWord;
- use App\Model\Header_ext;
- use App\Model\Header_ext_sub;
- use App\Service\Service;
- use Illuminate\Support\Facades\DB;
- /**
- * 表头相关工厂模式
- * @package App\Models
- */
- class HeaderWordHookService extends Service
- {
- protected static $instance;
- protected static $header;
- protected static $header_detail;
- public function __construct(){
- }
- public static function getInstance(): self
- {
- if (self::$instance == null) {
- self::$instance = new HeaderWordHookService();
- }
- return self::$instance;
- }
- public function getHeaderWord($data){
- if(!isset($data['type'])) return [false,'not found type'];
- $type = $data['type'];
- $list = Header_ext::where('type',$type)->orderBy('sort_type','asc')->select('*')->get()->toArray();
- // self::$header_detail = Header_ext::where('type',$type_detail)->pluck('value','key')->toArray();
- return [true,$list];
- }
- public function getHeaderSettings($data){
- if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
- $type = 1;
- if(! $this->isEmpty($data,'type')) $type = $data['type'];
- $header = config("header.{$data['menu_id']}")[$type] ?? [];
- return [true,$header];
- }
- public function edit($data){
- list($status,$msg) = $this->headerRule($data,false);
- if(!$status) return [$status,$msg];
- return [true,'保存成功!'];
- }
- public function add($data){
- list($status,$msg) = $this->headerRule($data);
- if(!$status) return [$status,$msg];
- DB::beginTransaction();
- try{
- Header_ext::where('menu_id',$data['menu_id'])
- ->where('type',$data['type'])
- ->where('del_time',0)
- ->update(['del_time'=>time()]);
- Header_ext_sub::where('menu_id',$data['menu_id'])
- ->where('type',$data['type'])
- ->where('del_time',0)
- ->update(['del_time'=>time()]);
- $insert = [];
- foreach ($data['data'] as $value){
- $insert[] = [
- 'key' => $value['key'] ?? '',
- 'value' => $value['value'],
- 'type' => $value['type'],
- 'menu_id' => $value['menu_id'],
- 'position' => $value['position'],
- 'x_axis' => $value['x'],
- 'y_axis' => $value['y'],
- ];
- }Header_ext::insert($insert);
- Header_ext_sub::insert([
- 'type' => $data['type'],
- 'menu_id' => $data['menu_id'],
- 'merge_cells' => json_encode($data['mergeCells']),
- 'max_length' => $data['maxLength'],
- ]);
- DB::commit();
- }catch (\Exception $e){
- DB::rollBack();
- return [false,$e->getMessage()];
- }
- return [true,'保存成功!'];
- }
- public function del($data){
- if($this->isEmpty($data,'id')) return [false,'ID不能为空!'];
- return [true,'删除成功'];
- }
- public function detail($data){
- if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
- if($this->isEmpty($data,'type')) return [false,'TYPE不能为空!'];
- $result = Header_ext::where('del_time',0)
- ->select('key','value','position','x_axis as x','y_axis as y')
- ->where('menu_id',$data['menu_id'])
- ->where('type',$data['type'])
- ->get()->toArray();
- $result_sub = Header_ext_sub::where('del_time',0)
- ->select('merge_cells','max_length')
- ->where('menu_id',$data['menu_id'])
- ->where('type',$data['type'])
- ->get()->toArray();
- $return['data'] = $result;
- $return['mergeCells'] = ! empty($result_sub[0]['merge_cells']) ? json_decode($result_sub[0]['merge_cells'],true) : [];
- $return['maxLength'] = $result_sub[0]['max_length'] ?? 1;
- return [true,$return];
- }
- public function headerRule(&$data,$is_add = true){
- if($this->isEmpty($data,'menu_id')) return [false,'菜单ID不能为空!'];
- if($this->isEmpty($data,'data')) return [false,'数据不能为空!'];
- foreach ($data['data'] as $key => $value){
- if (strpos($value['position'], ',') !== false) {
- $tmp = explode(',',$value['position']);
- $str_col = $str_ros = '';
- foreach ($tmp as $v){
- $tmp_v = explode(':',$v);
- if($tmp_v[0] != $tmp_v[1]) {
- // 截取头部
- $head = explode(':', $tmp[0])[0];
- // 截取尾部
- $tail = explode(':', end($tmp))[1];
- $str_ros = $head . ":" . $tail;
- continue;
- }else{
- $str_col .= $tmp_v[0] . ':';
- }
- }
- $str_col = rtrim($str_col,':');
- if($str_col) $data['data'][$key]['position'] = $str_col;
- if($str_ros) $data['data'][$key]['position'] = $str_ros;
- }
- }
- return [true,''];
- }
- }
|