SystemConfigServices.php 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\system\config;
  12. use app\dao\system\config\SystemConfigDao;
  13. use app\services\agent\AgentManageServices;
  14. use app\services\BaseServices;
  15. use crmeb\exceptions\AdminException;
  16. use crmeb\services\FileService;
  17. use crmeb\services\FormBuilder;
  18. use think\facade\Log;
  19. /**
  20. * 系统配置
  21. * Class SystemConfigServices
  22. * @package app\services\system\config
  23. * @method count(array $where = []) 获取指定条件下的count
  24. * @method save(array $data) 保存数据
  25. * @method get(int $id, ?array $field = []) 获取一条数据
  26. * @method update($id, array $data, ?string $key = null) 修改数据
  27. * @method delete(int $id, ?string $key = null) 删除数据
  28. * @method getUploadTypeList(string $configName) 获取上传配置中的上传类型
  29. */
  30. class SystemConfigServices extends BaseServices
  31. {
  32. /**
  33. * form表单句柄
  34. * @var FormBuilder
  35. */
  36. protected $builder;
  37. /**
  38. * 表单数据切割符号
  39. * @var string
  40. */
  41. protected $cuttingStr = '=>';
  42. /**
  43. * 表单提交url
  44. * @var string[]
  45. */
  46. protected $postUrl = [
  47. 'setting' => [
  48. 'url' => '/setting/config/save_basics',
  49. 'auth' => [],
  50. ],
  51. 'serve' => [
  52. 'url' => '/serve/sms_config/save_basics',
  53. 'auth' => ['short_letter_switch'],
  54. ],
  55. 'freight' => [
  56. 'url' => '/freight/config/save_basics',
  57. 'auth' => ['express'],
  58. ],
  59. 'agent' => [
  60. 'url' => '/agent/config/save_basics',
  61. 'auth' => ['fenxiao'],
  62. ],
  63. 'marketing' => [
  64. 'url' => '/marketing/integral_config/save_basics',
  65. 'auth' => ['point'],
  66. ]
  67. ];
  68. /**
  69. * 子集控制规则
  70. * @var array[]
  71. */
  72. protected $relatedRule = [
  73. 'brokerage_func_status' => [
  74. 'son_type' => [
  75. 'store_brokerage_statu' => [
  76. 'son_type' => ['store_brokerage_price' => ''],
  77. 'show_value' => 3
  78. ],
  79. 'brokerage_bindind' => '',
  80. 'store_brokerage_binding_status' => [
  81. 'son_type' => ['store_brokerage_binding_time' => ''],
  82. 'show_value' => 2
  83. ],
  84. 'spread_banner' => '',
  85. 'brokerage_level' => '',
  86. 'division_status' => '',
  87. ],
  88. 'show_value' => 1
  89. ],
  90. 'brokerage_user_status' => [
  91. 'son_type' => [
  92. 'uni_brokerage_price' => '',
  93. 'day_brokerage_price_upper' => '',
  94. ],
  95. 'show_value' => 1
  96. ],
  97. 'invoice_func_status' => [
  98. 'son_type' => [
  99. 'special_invoice_status' => '',
  100. ],
  101. 'show_value' => 1
  102. ],
  103. 'member_func_status' => [
  104. 'son_type' => [
  105. 'order_give_exp' => '',
  106. 'sign_give_exp' => '',
  107. 'invite_user_exp' => ''
  108. ],
  109. 'show_value' => 1
  110. ],
  111. 'balance_func_status' => [
  112. 'son_type' => [
  113. 'recharge_attention' => '',
  114. 'recharge_switch' => '',
  115. 'store_user_min_recharge' => '',
  116. ],
  117. 'show_value' => 1
  118. ],
  119. 'pay_wechat_type' => [
  120. 'son_type' => [
  121. 'pay_weixin_key' => '',
  122. ],
  123. 'show_value' => 0
  124. ],
  125. 'pay_wechat_type@' => [
  126. 'son_type' => [
  127. 'pay_weixin_serial_no' => '',
  128. 'pay_weixin_key_v3' => ''
  129. ],
  130. 'show_value' => 1
  131. ],
  132. 'image_watermark_status' => [
  133. 'son_type' => [
  134. 'watermark_type' => [
  135. 'son_type' => [
  136. 'watermark_image' => '',
  137. 'watermark_opacity' => '',
  138. 'watermark_rotate' => '',
  139. ],
  140. 'show_value' => 1
  141. ],
  142. 'watermark_position' => '',
  143. 'watermark_x' => '',
  144. 'watermark_y' => '',
  145. 'watermark_type@' => [
  146. 'son_type' => [
  147. 'watermark_text' => '',
  148. 'watermark_text_size' => '',
  149. 'watermark_text_color' => '',
  150. 'watermark_text_angle' => ''
  151. ],
  152. 'show_value' => 2
  153. ],
  154. ],
  155. 'show_value' => 1
  156. ],
  157. 'customer_type' => [
  158. 'son_type' => [
  159. 'customer_phone' => '',
  160. ],
  161. 'show_value' => 1
  162. ],
  163. 'customer_type@' => [
  164. 'son_type' => [
  165. 'customer_url' => '',
  166. 'customer_corpId' => '',
  167. ],
  168. 'show_value' => 2
  169. ],
  170. 'pay_new_weixin_open' => [
  171. 'son_type' => [
  172. 'pay_new_weixin_mchid' => ''
  173. ],
  174. 'show_value' => 1
  175. ]
  176. ];
  177. /**
  178. * SystemConfigServices constructor.
  179. * @param SystemConfigDao $dao
  180. */
  181. public function __construct(SystemConfigDao $dao, FormBuilder $builder)
  182. {
  183. $this->dao = $dao;
  184. $this->builder = $builder;
  185. }
  186. public function getSonConfig()
  187. {
  188. $sonConfig = [];
  189. $rolateRule = $this->relatedRule;
  190. if ($rolateRule) {
  191. foreach ($rolateRule as $key => $value) {
  192. $sonConfig = array_merge($sonConfig, array_keys($value['son_type']));
  193. foreach ($value['son_type'] as $k => $v) {
  194. if (isset($v['son_type'])) {
  195. $sonConfig = array_merge($sonConfig, array_keys($v['son_type']));
  196. }
  197. }
  198. }
  199. }
  200. return $sonConfig;
  201. }
  202. /**
  203. * 获取单个系统配置
  204. * @param string $configName
  205. * @param null $default
  206. * @return mixed|null
  207. */
  208. public function getConfigValue(string $configName, $default = null)
  209. {
  210. $value = $this->dao->getConfigValue($configName);
  211. return is_null($value) ? $default : json_decode($value, true);
  212. }
  213. /**
  214. * 获取全部配置
  215. * @param array $configName
  216. * @return array
  217. */
  218. public function getConfigAll(array $configName = [])
  219. {
  220. return array_map(function ($item) {
  221. return json_decode($item, true);
  222. }, $this->dao->getConfigAll($configName));
  223. }
  224. /**
  225. * 获取配置并分页
  226. * @param array $where
  227. * @return array
  228. * @throws \think\db\exception\DataNotFoundException
  229. * @throws \think\db\exception\DbException
  230. * @throws \think\db\exception\ModelNotFoundException
  231. */
  232. public function getConfigList(array $where)
  233. {
  234. [$page, $limit] = $this->getPageValue();
  235. $list = $this->dao->getConfigList($where, $page, $limit);
  236. $count = $this->dao->count($where);
  237. $tidy_srr = [];
  238. foreach ($list as &$item) {
  239. $item['value'] = $item['value'] ? json_decode($item['value'], true) ?: '' : '';
  240. if ($item['type'] == 'radio' || $item['type'] == 'checkbox') {
  241. $item['value'] = $this->getRadioOrCheckboxValueInfo($item['menu_name'], $item['value']);
  242. }
  243. if ($item['type'] == 'upload' && !empty($item['value'])) {
  244. if ($item['upload_type'] == 1 || $item['upload_type'] == 3) {
  245. $item['value'] = [set_file_url($item['value'])];
  246. } elseif ($item['upload_type'] == 2) {
  247. $item['value'] = set_file_url($item['value']);
  248. }
  249. foreach ($item['value'] as $key => $value) {
  250. $tidy_srr[$key]['filepath'] = $value;
  251. $tidy_srr[$key]['filename'] = basename($value);
  252. }
  253. $item['value'] = $tidy_srr;
  254. }
  255. }
  256. return compact('count', 'list');
  257. }
  258. /**
  259. * 获取单选按钮或者多选按钮的显示值
  260. * @param $menu_name
  261. * @param $value
  262. * @return string
  263. * @throws \think\db\exception\DataNotFoundException
  264. * @throws \think\db\exception\ModelNotFoundException
  265. * @throws \think\exception\DbException
  266. */
  267. public function getRadioOrCheckboxValueInfo(string $menu_name, $value): string
  268. {
  269. $option = [];
  270. $config_one = $this->dao->getOne(['menu_name' => $menu_name]);
  271. if (!$config_one) {
  272. return '';
  273. }
  274. $parameter = explode("\n", $config_one['parameter']);
  275. foreach ($parameter as $k => $v) {
  276. if (isset($v) && strlen($v) > 0) {
  277. $data = explode('=>', $v);
  278. $option[$data[0]] = $data[1];
  279. }
  280. }
  281. $str = '';
  282. if (is_array($value)) {
  283. foreach ($value as $v) {
  284. $str .= $option[$v] . ',';
  285. }
  286. } else {
  287. $str .= !empty($value) ? $option[$value] ?? '' : $option[0] ?? '';
  288. }
  289. return $str;
  290. }
  291. /**
  292. * 获取系统配置信息
  293. * @param int $tabId
  294. * @return array
  295. * @throws \think\db\exception\DataNotFoundException
  296. * @throws \think\db\exception\DbException
  297. * @throws \think\db\exception\ModelNotFoundException
  298. */
  299. public function getReadList(int $tabId)
  300. {
  301. $info = $this->dao->getConfigTabAllList($tabId);
  302. foreach ($info as $k => $v) {
  303. if (!is_null(json_decode($v['value'])))
  304. $info[$k]['value'] = json_decode($v['value'], true);
  305. if ($v['type'] == 'upload' && !empty($v['value'])) {
  306. if ($v['upload_type'] == 1 || $v['upload_type'] == 3) $info[$k]['value'] = explode(',', $v['value']);
  307. }
  308. }
  309. return $info;
  310. }
  311. /**
  312. * 创建单行表单
  313. * @param string $type
  314. * @param array $data
  315. * @return array
  316. */
  317. public function createTextForm(string $type, array $data)
  318. {
  319. $formbuider = [];
  320. switch ($type) {
  321. case 'number':
  322. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : 0;
  323. $formbuider[] = $this->builder->number($data['menu_name'], $data['info'], (float)$data['value'])->appendRule('suffix', [
  324. 'type' => 'div',
  325. 'class' => 'tips-info',
  326. 'domProps' => ['innerHTML' => $data['desc']]
  327. ]);
  328. break;
  329. case 'dateTime':
  330. $formbuider[] = $this->builder->dateTime($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  331. 'type' => 'div',
  332. 'class' => 'tips-info',
  333. 'domProps' => ['innerHTML' => $data['desc']]
  334. ]);
  335. break;
  336. case 'color':
  337. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : '';
  338. $formbuider[] = $this->builder->color($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  339. 'type' => 'div',
  340. 'class' => 'tips-info',
  341. 'domProps' => ['innerHTML' => $data['desc']]
  342. ]);
  343. break;
  344. default:
  345. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : '';
  346. if ($data['menu_name'] == 'api') {
  347. $formbuider[] = $this->builder->input($data['menu_name'], $data['info'], strpos($data['value'], 'http') === false ? sys_config('site_url') . $data['value'] : $data['value'])->appendRule('suffix', [
  348. 'type' => 'div',
  349. 'class' => 'tips-info',
  350. 'domProps' => ['innerHTML' => $data['desc']]
  351. ])->col(13)->readonly(true);
  352. } else {
  353. $formbuider[] = $this->builder->input($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  354. 'type' => 'div',
  355. 'class' => 'tips-info',
  356. 'domProps' => ['innerHTML' => $data['desc']]
  357. ])->col(13);
  358. }
  359. break;
  360. }
  361. return $formbuider;
  362. }
  363. /**
  364. * 创建多行文本框
  365. * @param array $data
  366. * @return mixed
  367. */
  368. public function createTextareaForm(array $data)
  369. {
  370. $data['value'] = json_decode($data['value'], true) ?: '';
  371. $formbuider[] = $this->builder->textarea($data['menu_name'], $data['info'], $data['value'])->placeholder($data['desc'])->appendRule('suffix', [
  372. 'type' => 'div',
  373. 'class' => 'tips-info',
  374. 'domProps' => ['innerHTML' => $data['desc']]
  375. ])->rows(6)->col(13);
  376. return $formbuider;
  377. }
  378. /**
  379. * 创建当选表单
  380. * @param array $data
  381. * @param array $control
  382. * @param array $control_two
  383. * @return array
  384. */
  385. public function createRadioForm(array $data, $control = [], $control_two = [])
  386. {
  387. $formbuider = [];
  388. $data['value'] = json_decode($data['value'], true) ?: '0';
  389. $parameter = explode("\n", $data['parameter']);
  390. $options = [];
  391. if ($parameter) {
  392. foreach ($parameter as $v) {
  393. if (strstr($v, $this->cuttingStr) !== false) {
  394. $pdata = explode($this->cuttingStr, $v);
  395. $res = preg_match('/^[0-9]$/', $pdata[0]);
  396. $options[] = ['label' => $pdata[1], 'value' => $res ? (int)$pdata[0] : $pdata[0]];
  397. }
  398. }
  399. $res = preg_match('/^[0-9]$/', $data['value']);
  400. $formbuider[] = $radio = $this->builder->radio($data['menu_name'], $data['info'], $res ? (int)$data['value'] : $data['value'])->options($options)->appendRule('suffix', [
  401. 'type' => 'div',
  402. 'class' => 'tips-info',
  403. 'domProps' => ['innerHTML' => $data['desc']]
  404. ])->col(13);
  405. if ($control) {
  406. $radio->appendControl($data['show_value'] ?? 1, is_array($control) ? $control : [$control]);
  407. }
  408. if ($control_two && isset($data['show_value2'])) {
  409. $radio->appendControl($data['show_value2'] ?? 2, is_array($control_two) ? $control_two : [$control_two]);
  410. }
  411. return $formbuider;
  412. }
  413. }
  414. /**
  415. * 创建上传组件表单
  416. * @param int $type
  417. * @param array $data
  418. * @return array
  419. */
  420. public function createUploadForm(int $type, array $data)
  421. {
  422. $formbuider = [];
  423. switch ($type) {
  424. case 1:
  425. $data['value'] = json_decode($data['value'], true) ?: '';
  426. if ($data['value'] != '') $data['value'] = set_file_url($data['value']);
  427. $formbuider[] = $this->builder->frameImage($data['menu_name'], $data['info'], $this->url('admin/widget.images/index', ['fodder' => $data['menu_name']], true), $data['value'])
  428. ->icon('ios-image')->width('950px')->height('505px')->modal(['footer-hide' => true])->appendRule('suffix', [
  429. 'type' => 'div',
  430. 'class' => 'tips-info',
  431. 'domProps' => ['innerHTML' => $data['desc']]
  432. ])->col(13);
  433. break;
  434. case 2:
  435. $data['value'] = json_decode($data['value'], true) ?: [];
  436. if ($data['value'])
  437. $data['value'] = set_file_url($data['value']);
  438. $formbuider[] = $this->builder->frameImages($data['menu_name'], $data['info'], $this->url('admin/widget.images/index', ['fodder' => $data['menu_name'], 'type' => 'many', 'maxLength' => 5], true), $data['value'])
  439. ->maxLength(5)->icon('ios-images')->width('950px')->height('505px')->modal(['footer-hide' => true])
  440. ->appendRule('suffix', [
  441. 'type' => 'div',
  442. 'class' => 'tips-info',
  443. 'domProps' => ['innerHTML' => $data['desc']]
  444. ])->col(13);
  445. break;
  446. case 3:
  447. $data['value'] = json_decode($data['value'], true) ?: '';
  448. if ($data['value'] != '') $data['value'] = set_file_url($data['value']);
  449. $formbuider[] = $this->builder->uploadFile($data['menu_name'], $data['info'], $this->url('/adminapi/file/upload/1', ['type' => 1], false, true), $data['value'])
  450. ->name('file')->appendRule('suffix', [
  451. 'type' => 'div',
  452. 'class' => 'tips-info',
  453. 'domProps' => ['innerHTML' => $data['desc']]
  454. ])->col(13)->data(['menu_name' => $data['menu_name']])->headers([
  455. 'Authori-zation' => app()->request->header('Authori-zation'),
  456. ]);
  457. break;
  458. }
  459. return $formbuider;
  460. }
  461. /**
  462. * 创建单选框
  463. * @param array $data
  464. * @return array
  465. * @throws \FormBuilder\Exception\FormBuilderException
  466. */
  467. public function createCheckboxForm(array $data)
  468. {
  469. $formbuider = [];
  470. $data['value'] = json_decode($data['value'], true) ?: [];
  471. $parameter = explode("\n", $data['parameter']);
  472. $options = [];
  473. if ($parameter) {
  474. foreach ($parameter as $v) {
  475. if (strstr($v, $this->cuttingStr) !== false) {
  476. $pdata = explode($this->cuttingStr, $v);
  477. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  478. }
  479. }
  480. $formbuider[] = $this->builder->checkbox($data['menu_name'], $data['info'], $data['value'])->options($options)->appendRule('suffix', [
  481. 'type' => 'div',
  482. 'class' => 'tips-info',
  483. 'domProps' => ['innerHTML' => $data['desc']]
  484. ])->col(13);
  485. }
  486. return $formbuider;
  487. }
  488. /**
  489. * 创建选择框表单
  490. * @param array $data
  491. * @return array
  492. * @throws \FormBuilder\Exception\FormBuilderException
  493. */
  494. public function createSelectForm(array $data)
  495. {
  496. $formbuider = [];
  497. $data['value'] = json_decode($data['value'], true) ?: [];
  498. $parameter = explode("\n", $data['parameter']);
  499. $options = [];
  500. if ($parameter) {
  501. foreach ($parameter as $v) {
  502. if (strstr($v, $this->cuttingStr) !== false) {
  503. $pdata = explode($this->cuttingStr, $v);
  504. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  505. }
  506. }
  507. $formbuider[] = $this->builder->select($data['menu_name'], $data['info'], $data['value'])->options($options)->appendRule('suffix', [
  508. 'type' => 'div',
  509. 'class' => 'tips-info',
  510. 'domProps' => ['innerHTML' => $data['desc']]
  511. ])->col(13);
  512. }
  513. return $formbuider;
  514. }
  515. /**
  516. * 创建颜色选择器
  517. * @param array $data
  518. * @return mixed
  519. */
  520. public function createColorForm(array $data)
  521. {
  522. $data['value'] = json_decode($data['value'], true) ?: '';
  523. $formbuider[] = $this->builder->color($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  524. 'type' => 'div',
  525. 'class' => 'tips-info',
  526. 'domProps' => ['innerHTML' => $data['desc']]
  527. ])->col(13);
  528. return $formbuider;
  529. }
  530. public function bindBuilderData($data, $relatedRule)
  531. {
  532. if (!$data) return false;
  533. $p_list = array();
  534. foreach ($relatedRule as $rk => $rv) {
  535. $p_list[$rk] = $data[$rk];
  536. if (isset($rv['son_type']) && is_array($rv['son_type'])) {
  537. foreach ($rv['son_type'] as $sk => $sv) {
  538. if (is_array($sv) && isset($sv['son_type'])) {
  539. foreach ($sv['son_type'] as $ssk => $ssv) {
  540. $tmp = $data[$sk];
  541. $tmp['console'] = $data[$ssk];
  542. $p_list[$rk]['console'][] = $tmp;
  543. }
  544. } else {
  545. $p_list[$rk]['console'][] = $data[$sk];
  546. }
  547. }
  548. }
  549. }
  550. return array_values($p_list);
  551. }
  552. /**
  553. * 获取系统配置表单
  554. * @param int $id
  555. * @param array $formData
  556. * @return array
  557. * @throws \think\db\exception\DataNotFoundException
  558. * @throws \think\db\exception\DbException
  559. * @throws \think\db\exception\ModelNotFoundException
  560. */
  561. public function formTypeShine($data, $control = false, $controle_two = [])
  562. {
  563. switch ($data['type']) {
  564. case 'text'://文本框
  565. return $this->createTextForm($data['input_type'], $data);
  566. case 'radio'://单选框
  567. return $this->createRadioForm($data, $control, $controle_two);
  568. case 'textarea'://多行文本框
  569. return $this->createTextareaForm($data);
  570. case 'upload'://文件上传
  571. return $this->createUploadForm((int)$data['upload_type'], $data);
  572. case 'checkbox'://多选框
  573. return $this->createCheckboxForm($data);
  574. case 'select'://多选框
  575. return $this->createSelectForm($data);
  576. case 'color':
  577. return $this->createColorForm($data);
  578. }
  579. }
  580. /**
  581. * @param int $tabId
  582. * @param array $formData
  583. * @param array $relatedRule
  584. * @return array|bool
  585. * @throws \think\db\exception\DataNotFoundException
  586. * @throws \think\db\exception\DbException
  587. * @throws \think\db\exception\ModelNotFoundException
  588. */
  589. public function createConfigForm(int $tabId, array $relatedRule)
  590. {
  591. $list = $this->dao->getConfigTabAllList($tabId);
  592. if (!$relatedRule) {
  593. $formbuider = $this->createNoCrontrolForm($list);
  594. } else {
  595. $formbuider = $this->createBindCrontrolForm($list, $relatedRule);
  596. }
  597. return $formbuider;
  598. }
  599. /**
  600. * 创建
  601. * @param array $list
  602. * @return array
  603. * @throws \FormBuilder\Exception\FormBuilderException
  604. * @throws \think\db\exception\DataNotFoundException
  605. * @throws \think\db\exception\DbException
  606. * @throws \think\db\exception\ModelNotFoundException
  607. */
  608. public function createForm(array $list)
  609. {
  610. if (!$list) return [];
  611. $list = array_combine(array_column($list, 'menu_name'), $list);
  612. $formbuider = [];
  613. $relateRule = $this->relatedRule;
  614. $sonConfig = $this->getSonConfig();
  615. foreach ($list as $key => $data) {
  616. if (in_array($key, $sonConfig)) {
  617. continue;
  618. }
  619. switch ($data['type']) {
  620. case 'text'://文本框
  621. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  622. break;
  623. case 'radio'://单选框
  624. $builder = [];
  625. if (isset($relateRule[$key])) {
  626. $role = $relateRule[$key];
  627. $data['show_value'] = $role['show_value'];
  628. foreach ($role['son_type'] as $sk => $sv) {
  629. if (isset($list[$sk])) {
  630. $son_data = $list[$sk];
  631. $son_data['show_value'] = $role['show_value'];
  632. $son_build = [];
  633. if (isset($sv['son_type'])) {
  634. foreach ($sv['son_type'] as $ssk => $ssv) {
  635. $son_data['show_value'] = $sv['show_value'];
  636. $son_build[] = $this->formTypeShine($list[$ssk])[0];
  637. unset($list[$ssk]);
  638. }
  639. }
  640. $son_build_two = [];
  641. if (isset($role['son_type'][$sk . '@'])) {
  642. $son_type_two = $role['son_type'][$sk . '@'];
  643. $son_data['show_value2'] = $son_type_two['show_value'];
  644. if (isset($son_type_two['son_type'])) {
  645. foreach ($son_type_two['son_type'] as $ssk => $ssv) {
  646. if (isset($list[$ssk]['menu_name']) && $list[$ssk]['menu_name'] == 'watermark_text_color') $list[$ssk]['type'] = 'color';
  647. $son_build_two[] = $this->formTypeShine($list[$ssk])[0];
  648. unset($list[$ssk]);
  649. }
  650. }
  651. }
  652. $builder[] = $this->formTypeShine($son_data, $son_build, $son_build_two)[0];
  653. unset($list[$sk]);
  654. }
  655. }
  656. $data['show_value'] = $role['show_value'];
  657. }
  658. $builder_two = [];
  659. if (isset($relateRule[$key . '@'])) {
  660. $role = $relateRule[$key . '@'];
  661. $data['show_value2'] = $role['show_value'];
  662. foreach ($role['son_type'] as $sk => $sv) {
  663. $son_data = $list[$sk];
  664. $son_data['show_value'] = $role['show_value'];
  665. $builder_two[] = $this->formTypeShine($son_data)[0];
  666. }
  667. }
  668. $formbuider = array_merge($formbuider, $this->createRadioForm($data, $builder, $builder_two));
  669. break;
  670. case 'textarea'://多行文本框
  671. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  672. break;
  673. case 'upload'://文件上传
  674. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  675. break;
  676. case 'checkbox'://多选框
  677. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  678. break;
  679. case 'select'://多选框
  680. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  681. break;
  682. }
  683. }
  684. return $formbuider;
  685. }
  686. /**无组件绑定规则
  687. * @param array $list
  688. * @return array|bool
  689. * @throws \FormBuilder\Exception\FormBuilderException
  690. * @throws \think\db\exception\DataNotFoundException
  691. * @throws \think\db\exception\DbException
  692. * @throws \think\db\exception\ModelNotFoundException
  693. */
  694. public function createNoCrontrolForm(array $list)
  695. {
  696. if (!$list) return false;
  697. $formbuider = [];
  698. foreach ($list as $key => $data) {
  699. switch ($data['type']) {
  700. case 'text'://文本框
  701. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  702. break;
  703. case 'radio'://单选框
  704. $formbuider = array_merge($formbuider, $this->createRadioForm($data));
  705. break;
  706. case 'textarea'://多行文本框
  707. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  708. break;
  709. case 'upload'://文件上传
  710. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  711. break;
  712. case 'checkbox'://多选框
  713. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  714. break;
  715. case 'select'://多选框
  716. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  717. break;
  718. }
  719. }
  720. return $formbuider;
  721. }
  722. /**
  723. * 有组件绑定规则
  724. * @param array $list
  725. * @param array $relatedRule
  726. * @return array|bool
  727. * @throws \FormBuilder\Exception\FormBuilderException
  728. * @throws \think\db\exception\DataNotFoundException
  729. * @throws \think\db\exception\DbException
  730. * @throws \think\db\exception\ModelNotFoundException
  731. */
  732. public function createBindCrontrolForm(array $list, array $relatedRule)
  733. {
  734. if (!$list || !$relatedRule) return false;
  735. $formbuider = [];
  736. $new_data = array();
  737. foreach ($list as $dk => $dv) {
  738. $new_data[$dv['menu_name']] = $dv;
  739. }
  740. foreach ($relatedRule as $rk => $rv) {
  741. if (isset($rv['son_type'])) {
  742. $data = $new_data[$rk];
  743. switch ($data['type']) {
  744. case 'text'://文本框
  745. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  746. break;
  747. case 'radio'://单选框
  748. $son_builder = array();
  749. foreach ($rv['son_type'] as $sk => $sv) {
  750. if (isset($sv['son_type'])) {
  751. foreach ($sv['son_type'] as $ssk => $ssv) {
  752. $son_data = $new_data[$sk];
  753. $son_data['show_value'] = $sv['show_value'];
  754. $son_builder[] = $this->formTypeShine($son_data, $this->formTypeShine($new_data[$ssk])[0])[0];
  755. }
  756. } else {
  757. $son_data = $new_data[$sk];
  758. $son_data['show_value'] = $rv['show_value'];
  759. $son_builder[] = $this->formTypeShine($son_data)[0];
  760. }
  761. }
  762. $formbuider = array_merge($formbuider, $this->createRadioForm($data, $son_builder));
  763. break;
  764. case 'textarea'://多行文本框
  765. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  766. break;
  767. case 'upload'://文件上传
  768. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  769. break;
  770. case 'checkbox'://多选框
  771. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  772. break;
  773. case 'select'://多选框
  774. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  775. break;
  776. }
  777. }
  778. }
  779. return $formbuider;
  780. }
  781. /**
  782. * 系统配置form表单创建
  783. * @param int $tabId
  784. * @return array
  785. * @throws \FormBuilder\Exception\FormBuilderException
  786. * @throws \think\db\exception\DataNotFoundException
  787. * @throws \think\db\exception\DbException
  788. * @throws \think\db\exception\ModelNotFoundException
  789. */
  790. public function getConfigForm($url, int $tabId)
  791. {
  792. /** @var SystemConfigTabServices $service */
  793. $service = app()->make(SystemConfigTabServices::class);
  794. $title = $service->value(['id' => $tabId], 'title');
  795. $list = $this->dao->getConfigTabAllList($tabId);
  796. $formbuider = $this->createForm($list);
  797. $name = 'setting';
  798. if ($url) {
  799. $name = explode('/', $url)[2] ?? $name;
  800. }
  801. $postUrl = $this->postUrl[$name]['url'] ?? '/setting/config/save_basics';
  802. return create_form($title, $formbuider, $this->url($postUrl), 'POST');
  803. }
  804. /**
  805. * 新增路由增加设置项验证
  806. * @param $url
  807. * @param $post
  808. * @return bool
  809. */
  810. public function checkParam($url, $post)
  811. {
  812. $name = '';
  813. if ($url) {
  814. $name = explode('/', $url)[2] ?? $name;
  815. }
  816. $auth = $this->postUrl[$name]['auth'] ?? false;
  817. if ($auth === false) {
  818. throw new AdminException(400601);
  819. }
  820. if ($auth) {
  821. /** @var SystemConfigTabServices $systemConfigTabServices */
  822. $systemConfigTabServices = app()->make(SystemConfigTabServices::class);
  823. foreach ($post as $key => $value) {
  824. $tab_ids = $systemConfigTabServices->getColumn([['eng_title', 'IN', $auth]], 'id');
  825. if (!$tab_ids || !in_array($key, $this->dao->getColumn([['config_tab_id', 'IN', $tab_ids]], 'menu_name'))) {
  826. throw new AdminException(400602);
  827. }
  828. }
  829. }
  830. return true;
  831. }
  832. /**
  833. * 修改配置获取form表单
  834. * @param int $id
  835. * @return array
  836. * @throws \FormBuilder\Exception\FormBuilderException
  837. * @throws \think\db\exception\DataNotFoundException
  838. * @throws \think\db\exception\DbException
  839. * @throws \think\db\exception\ModelNotFoundException
  840. */
  841. public function editConfigForm(int $id)
  842. {
  843. $menu = $this->dao->get($id)->getData();
  844. if (!$menu) {
  845. throw new AdminException(100026);
  846. }
  847. /** @var SystemConfigTabServices $service */
  848. $service = app()->make(SystemConfigTabServices::class);
  849. $formbuider = [];
  850. $formbuider[] = $this->builder->input('menu_name', '字段变量', $menu['menu_name'])->disabled(1);
  851. $formbuider[] = $this->builder->hidden('type', $menu['type']);
  852. $formbuider[] = $this->builder->select('config_tab_id', '分类', (int)$menu['config_tab_id'])->setOptions($service->getSelectForm());
  853. $formbuider[] = $this->builder->input('info', '配置名称', $menu['info'])->autofocus(1);
  854. $formbuider[] = $this->builder->input('desc', '配置简介', $menu['desc']);
  855. switch ($menu['type']) {
  856. case 'text':
  857. $menu['value'] = json_decode($menu['value'], true);
  858. $formbuider[] = $this->builder->select('input_type', '类型', $menu['input_type'])->setOptions([
  859. ['value' => 'input', 'label' => '文本框']
  860. , ['value' => 'dateTime', 'label' => '时间']
  861. , ['value' => 'color', 'label' => '颜色']
  862. , ['value' => 'number', 'label' => '数字']
  863. ]);
  864. //输入框验证规则
  865. $formbuider[] = $this->builder->input('value', '默认值', $menu['value']);
  866. if (!empty($menu['required'])) {
  867. $formbuider[] = $this->builder->number('width', '文本框宽(%)', (int)$menu['width']);
  868. $formbuider[] = $this->builder->input('required', '验证规则', $menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  869. }
  870. break;
  871. case 'textarea':
  872. $menu['value'] = json_decode($menu['value'], true);
  873. //多行文本
  874. if (!empty($menu['high'])) {
  875. $formbuider[] = $this->builder->textarea('value', '默认值', $menu['value'])->rows(5);
  876. $formbuider[] = $this->builder->number('width', '文本框宽(%)', (int)$menu['width']);
  877. $formbuider[] = $this->builder->number('high', '多行文本框高(%)', (int)$menu['high']);
  878. } else {
  879. $formbuider[] = $this->builder->input('value', '默认值', $menu['value']);
  880. }
  881. break;
  882. case 'radio':
  883. $formbuider = array_merge($formbuider, $this->createRadioForm($menu));
  884. //单选和多选参数配置
  885. if (!empty($menu['parameter'])) {
  886. $formbuider[] = $this->builder->textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  887. }
  888. break;
  889. case 'checkbox':
  890. $formbuider = array_merge($formbuider, $this->createCheckboxForm($menu));
  891. //单选和多选参数配置
  892. if (!empty($menu['parameter'])) {
  893. $formbuider[] = $this->builder->textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  894. }
  895. break;
  896. case 'upload':
  897. $formbuider = array_merge($formbuider, $this->createUploadForm(($menu['upload_type']), $menu));
  898. //上传类型选择
  899. if (!empty($menu['upload_type'])) {
  900. $formbuider[] = $this->builder->radio('upload_type', '上传类型', $menu['upload_type'])->options([['value' => 1, 'label' => '单图'], ['value' => 2, 'label' => '多图'], ['value' => 3, 'label' => '文件']]);
  901. }
  902. break;
  903. }
  904. $formbuider[] = $this->builder->number('sort', '排序', (int)$menu['sort']);
  905. $formbuider[] = $this->builder->radio('status', '状态', $menu['status'])->options([['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']]);
  906. return create_form('编辑字段', $formbuider, $this->url('/setting/config/' . $id), 'PUT');
  907. }
  908. /**
  909. * 字段状态
  910. * @return array
  911. */
  912. public function formStatus(): array
  913. {
  914. return [['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']];
  915. }
  916. /**
  917. * 选择文文件类型
  918. * @return array
  919. */
  920. public function uploadType(): array
  921. {
  922. return [
  923. ['value' => 1, 'label' => '单图']
  924. , ['value' => 2, 'label' => '多图']
  925. , ['value' => 3, 'label' => '文件']
  926. ];
  927. }
  928. /**
  929. * 选择文本框类型
  930. * @return array
  931. */
  932. public function textType(): array
  933. {
  934. return [
  935. ['value' => 'input', 'label' => '文本框']
  936. , ['value' => 'dateTime', 'label' => '时间']
  937. , ['value' => 'color', 'label' => '颜色']
  938. , ['value' => 'number', 'label' => '数字']
  939. ];
  940. }
  941. /**
  942. * 获取创建配置规格表单
  943. * @param int $type
  944. * @param int $tab_id
  945. * @return array
  946. */
  947. public function createFormRule(int $type, int $tab_id): array
  948. {
  949. /** @var SystemConfigTabServices $service */
  950. $service = app()->make(SystemConfigTabServices::class);
  951. $formbuider = [];
  952. $form_type = '';
  953. $info_type = [];
  954. $parameter = [];
  955. switch ($type) {
  956. case 0://文本框
  957. $form_type = 'text';
  958. $info_type = $this->builder->select('input_type', '类型')->setOptions($this->textType());
  959. $parameter[] = $this->builder->input('value', '默认值');
  960. $parameter[] = $this->builder->number('width', '文本框宽(%)', 100);
  961. $parameter[] = $this->builder->input('required', '验证规则')->placeholder('多个请用,隔开例如:required:true,url:true');
  962. break;
  963. case 1://多行文本框
  964. $form_type = 'textarea';
  965. $parameter[] = $this->builder->textarea('value', '默认值');
  966. $parameter[] = $this->builder->number('width', '文本框宽(%)', 100);
  967. $parameter[] = $this->builder->number('high', '多行文本框高(%)', 5);
  968. break;
  969. case 2://单选框
  970. $form_type = 'radio';
  971. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>男\n2=>女\n3=>保密");
  972. $parameter[] = $this->builder->input('value', '默认值');
  973. break;
  974. case 3://文件上传
  975. $form_type = 'upload';
  976. $parameter[] = $this->builder->radio('upload_type', '上传类型', 1)->options($this->uploadType());
  977. break;
  978. case 4://多选框
  979. $form_type = 'checkbox';
  980. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  981. break;
  982. case 5://下拉框
  983. $form_type = 'select';
  984. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  985. break;
  986. }
  987. if ($form_type) {
  988. $formbuider[] = $this->builder->hidden('type', $form_type);
  989. $formbuider[] = $this->builder->select('config_tab_id', '分类', $tab_id)->setOptions($service->getSelectForm());
  990. if ($info_type) {
  991. $formbuider[] = $info_type;
  992. }
  993. $formbuider[] = $this->builder->input('info', '配置名称')->autofocus(1);
  994. $formbuider[] = $this->builder->input('menu_name', '字段变量')->placeholder('例如:site_url');
  995. $formbuider[] = $this->builder->input('desc', '配置简介');
  996. $formbuider = array_merge($formbuider, $parameter);
  997. $formbuider[] = $this->builder->number('sort', '排序', 0);
  998. $formbuider[] = $this->builder->radio('status', '状态', 1)->options($this->formStatus());
  999. }
  1000. return create_form('添加字段', $formbuider, $this->url('/setting/config'), 'POST');
  1001. }
  1002. /**
  1003. * radio 和 checkbox规则的判断
  1004. * @param $data
  1005. * @return bool
  1006. */
  1007. public function valiDateRadioAndCheckbox($data)
  1008. {
  1009. $option = [];
  1010. $option_new = [];
  1011. $data['parameter'] = str_replace("\r\n", "\n", $data['parameter']);//防止不兼容
  1012. $parameter = explode("\n", $data['parameter']);
  1013. if (count($parameter) < 2) {
  1014. throw new AdminException(400603);
  1015. }
  1016. foreach ($parameter as $k => $v) {
  1017. if (isset($v) && !empty($v)) {
  1018. $option[$k] = explode('=>', $v);
  1019. }
  1020. }
  1021. if (count($option) < 2) {
  1022. throw new AdminException(400603);
  1023. }
  1024. $bool = 1;
  1025. foreach ($option as $k => $v) {
  1026. $option_new[$k] = $option[$k][0];
  1027. foreach ($v as $kk => $vv) {
  1028. $vv_num = strlen($vv);
  1029. if (!$vv_num) {
  1030. $bool = 0;
  1031. }
  1032. }
  1033. }
  1034. if (!$bool) {
  1035. throw new AdminException(400603);
  1036. }
  1037. $num1 = count($option_new);//提取该数组的数目
  1038. $arr2 = array_unique($option_new);//合并相同的元素
  1039. $num2 = count($arr2);//提取合并后数组个数
  1040. if ($num1 > $num2) {
  1041. throw new AdminException(400603);
  1042. }
  1043. return true;
  1044. }
  1045. /**
  1046. * 验证参数
  1047. * @param $data
  1048. * @return bool
  1049. */
  1050. public function valiDateValue($data)
  1051. {
  1052. if (!$data || !isset($data['required']) || !$data['required']) {
  1053. return true;
  1054. }
  1055. $valids = explode(',', $data['required']);
  1056. foreach ($valids as $valid) {
  1057. $valid = explode(':', $valid);
  1058. if (isset($valid[0]) && isset($valid[1])) {
  1059. $k = strtolower(trim($valid[0]));
  1060. $v = strtolower(trim($valid[1]));
  1061. switch ($k) {
  1062. case 'required':
  1063. if ($v == 'true' && $data['value'] === '') {
  1064. throw new AdminException(400604, ['name' => $data['info'] ?? '']);
  1065. }
  1066. break;
  1067. case 'url':
  1068. if ($v == 'true' && !check_link($data['value'])) {
  1069. throw new AdminException(400605, ['name' => $data['info'] ?? '']);
  1070. }
  1071. break;
  1072. }
  1073. }
  1074. }
  1075. }
  1076. /**保存平台电子面单打印信息
  1077. * @param array $data
  1078. * @return bool
  1079. */
  1080. public function saveExpressInfo(array $data)
  1081. {
  1082. if (!is_array($data) || !$data) return false;
  1083. // config_export_id 快递公司id
  1084. // config_export_temp_id 快递公司模板id
  1085. // config_export_com 快递公司编码
  1086. // config_export_to_name 发货人姓名
  1087. // config_export_to_tel 发货人电话
  1088. // config_export_to_address 发货人详细地址
  1089. // config_export_siid 电子面单打印机编号
  1090. foreach ($data as $key => $value) {
  1091. $this->dao->update(['menu_name' => 'config_export_' . $key], ['value' => json_encode($value)]);
  1092. }
  1093. \crmeb\services\CacheService::clear();
  1094. return true;
  1095. }
  1096. /**
  1097. * 获取分享海报 兼容方法
  1098. */
  1099. public function getSpreadBanner()
  1100. {
  1101. //配置
  1102. $banner = sys_config('spread_banner', []);
  1103. if (!$banner) {
  1104. //组合数据
  1105. $banner = sys_data('routine_spread_banner');
  1106. if ($banner) {
  1107. $banner = array_column($banner, 'pic');
  1108. $this->dao->update(['menu_name' => 'spread_banner'], ['value' => json_encode($banner)]);
  1109. \crmeb\services\CacheService::clear();
  1110. }
  1111. }
  1112. return $banner;
  1113. }
  1114. /**
  1115. * 保存wss配置
  1116. * @param int $wssOpen
  1117. * @param string $wssLocalpk
  1118. * @param string $wssLocalCert
  1119. */
  1120. public function saveSslFilePath(int $wssOpen, string $wssLocalpk, string $wssLocalCert)
  1121. {
  1122. $wssFile = root_path() . '.wss';
  1123. $content = <<<WSS
  1124. wssOpen = $wssOpen
  1125. wssLocalpk = $wssLocalpk
  1126. wssLocalCert = $wssLocalCert
  1127. WSS;
  1128. try {
  1129. file_put_contents($wssFile, $content);
  1130. } catch (\Throwable $e) {
  1131. throw new AdminException(400606);
  1132. }
  1133. }
  1134. /**
  1135. * 获取wss配置
  1136. * @param string $key
  1137. * @return array|false|mixed
  1138. */
  1139. public function getSslFilePath(string $key = '')
  1140. {
  1141. $wssFile = root_path() . '.wss';
  1142. try {
  1143. $content = parse_ini_file($wssFile);
  1144. } catch (\Throwable $e) {
  1145. $content = [];
  1146. }
  1147. return $content[$key] ?? $content;
  1148. }
  1149. /**
  1150. * 检测缩略图水印配置是否更改
  1151. * @param array $post
  1152. * @return bool
  1153. */
  1154. public function checkThumbParam(array $post)
  1155. {
  1156. unset($post['upload_type'], $post['image_watermark_status']);
  1157. /** @var SystemConfigTabServices $systemConfigTabServices */
  1158. $systemConfigTabServices = app()->make(SystemConfigTabServices::class);
  1159. //上传配置->基础配置
  1160. $tab_id = $systemConfigTabServices->getColumn(['eng_title' => 'base_config'], 'id');
  1161. if ($tab_id) {
  1162. $all = $this->dao->getColumn(['config_tab_id' => $tab_id], 'value', 'menu_name');
  1163. if (array_intersect(array_keys($all), array_keys($post))) {
  1164. foreach ($post as $key => $item) {
  1165. //配置更改删除原来生成的缩略图
  1166. if (isset($all[$key]) && $item != json_decode($all[$key], true)) {
  1167. try {
  1168. FileService::delDir(public_path('uploads/thumb_water'));
  1169. break;
  1170. } catch (\Throwable $e) {
  1171. }
  1172. }
  1173. }
  1174. }
  1175. }
  1176. return true;
  1177. }
  1178. /**
  1179. * 变更分销绑定关系模式
  1180. * @param array $post
  1181. * @return bool
  1182. */
  1183. public function checkBrokerageBinding(array $post)
  1184. {
  1185. try {
  1186. $config_data = $post['store_brokerage_binding_status'];
  1187. $config_one = $this->dao->getOne(['menu_name' => 'store_brokerage_binding_status']);
  1188. $config_old = json_decode($config_one['value'], true);
  1189. if ($config_old != 2 && $config_data == 2) {
  1190. //自动解绑上级绑定
  1191. /** @var AgentManageServices $agentManage */
  1192. $agentManage = app()->make(AgentManageServices::class);
  1193. $agentManage->resetSpreadTime();
  1194. }
  1195. } catch (\Throwable $e) {
  1196. Log::error('变更分销绑定模式重置绑定时间失败,失败原因:' . $e->getMessage());
  1197. return false;
  1198. }
  1199. return true;
  1200. }
  1201. }