AddonsSmartFormTemplate.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. <?php
  2. namespace addons\SmartForm\common\models;
  3. use addons\SmartForm\common\models\AddonsSmartFormTemplateColumn; # 模板字段
  4. use addons\SmartForm\common\models\AddonsSmartFormTemplateUserForm; # 用户表单
  5. use addons\SmartForm\common\models\AddonsSmartFormDecorationForm; # 关联表单
  6. use common\enums\StatusEnum;
  7. use common\models\mall\MallAddons;
  8. use common\models\user\User;
  9. use addons\SmartForm\common\enums\SmartFormEnum;
  10. use common\models\diy\DiyPage;
  11. use Yii;
  12. use yii\db\Exception;
  13. use yii\helpers\Json;
  14. /**
  15. * This is the model class for table "{{%addons_smart_form_template}}".
  16. *
  17. * @property int $id
  18. * @property int $mall_id 商城ID
  19. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  20. * @property int $created_at 创建时间
  21. * @property int $updated_at 修改时间
  22. * @property int $is_repeat 修改时间
  23. */
  24. class AddonsSmartFormTemplate extends \common\models\base\BaseActiveRecord
  25. {
  26. const ADDONS_NAME = 'SmartForm';
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public static function tableName()
  31. {
  32. return '{{%addons_smart_form_template}}';
  33. }
  34. /**
  35. * {@inheritdoc}
  36. */
  37. public function rules()
  38. {
  39. return [
  40. [['mall_id','title'], 'required'],
  41. [['expire_time', 'mall_id', 'jump_type', 'status', 'link_status', 'diy_page_id', 'created_at', 'updated_at','show_header', 'is_repeat'], 'integer'],
  42. [['title'], 'string', 'max' => 150],
  43. [['jump_link','header'], 'string', 'max' => 250],
  44. ];
  45. }
  46. /**
  47. * @method getColumns
  48. * 关联模型 - 表单字段
  49. * @author zqh
  50. * @datetime 2022-05-06T13:59:55+0800
  51. * @return [type] [description]
  52. */
  53. public function getColumns()
  54. {
  55. return $this->hasMany(AddonsSmartFormTemplateColumn::class, ['smart_form_template_id' => 'id'])->orderBy('sort asc');
  56. // ->indexBy('smart_form_components_code');
  57. }
  58. /**
  59. * @method getColumnsCodeInfo
  60. * 关联模型 - 表单字段code
  61. * @author zqh
  62. * @datetime 2022-05-07T21:21:19+0800
  63. * @return [type] [description]
  64. */
  65. public function getColumnsCodeInfo()
  66. {
  67. }
  68. /**
  69. * @method getColumnsInfo
  70. * 关联模型 - 表单字段-方便处理提交表单
  71. * @author zqh
  72. * @datetime 2022-05-06T13:59:55+0800
  73. * @return [type] [description]
  74. */
  75. public function getColumnsInfo()
  76. {
  77. return $this->hasMany(AddonsSmartFormTemplateColumn::class, ['smart_form_template_id' => 'id'])
  78. ->indexBy('id');
  79. }
  80. /**
  81. * {@inheritdoc}
  82. */
  83. public function attributeLabels()
  84. {
  85. return [
  86. 'id' => '主键',
  87. 'mall_id' => '商城id',
  88. 'diy_page_id' => '使用页面id',
  89. 'title' => '标题',
  90. 'show_header' => '开启头部背景',
  91. 'header' => '头部背景',
  92. 'expire_time' => '过期时间[-1:永久有效]',
  93. 'status' => '状态[-1:删除;0:禁用;1:启用,2:已过期]',
  94. 'link_status' => '开启跳转[0:关闭;1:开启]',
  95. 'jump_type' => '跳转类型[0:跳转链接;1:跳转二维码]',
  96. 'jump_link' => '跳转链接',
  97. 'created_at' => '添加时间',
  98. 'updated_at' => '更新时间',
  99. ];
  100. }
  101. /**
  102. * @method getTplInfo
  103. * 通过模板id获取详情
  104. * @author zqh
  105. * @datetime 2022-05-06T14:00:34+0800
  106. * @param [type] $template_id [description]
  107. * @return [type] [description]
  108. */
  109. public static function getTplInfo($template_id=0)
  110. {
  111. if(!$template_id){
  112. self::$static_error = "模板不存在";
  113. return false;
  114. }
  115. $info = AddonsSmartFormTemplate::getOne([['id' => $template_id]], true, [
  116. 'columns'=> function ($query) {
  117. }
  118. ]);
  119. if(!$info){
  120. self::$static_error = "模板不存在";
  121. return false;
  122. }
  123. if($info['columns']){
  124. # 存在模板字段
  125. $columns = $info['columns'];
  126. $classname = new SmartFormEnum();
  127. foreach ($columns as $k => $v) {
  128. if(strpos($v['tips'],SmartFormEnum::FIRST_CUTTER) !== false){
  129. $info['columns'][$k]['tips'] = explode(SmartFormEnum::FIRST_CUTTER,$v['tips']);
  130. }
  131. if(strpos($v['show_default'],SmartFormEnum::FIRST_CUTTER) !== false){
  132. $info['columns'][$k]['show_default'] = explode(SmartFormEnum::FIRST_CUTTER,$v['show_default']);
  133. }
  134. if(strpos($v['option'],SmartFormEnum::FIRST_CUTTER) !== false){
  135. $info['columns'][$k]['option'] = explode(SmartFormEnum::FIRST_CUTTER,$v['option']);
  136. }
  137. $info['columns'][$k]['extra_data'] = Json::decode(!empty($v['extra_data']) ? $v['extra_data'] : '[]');
  138. if(strpos($v['default'],SmartFormEnum::DATE_CUTTER) !== false){
  139. $default = [];
  140. $default = explode(SmartFormEnum::DATE_CUTTER,$v['default']);
  141. foreach ($default as $kd => $kv) {
  142. if(strpos($kv,SmartFormEnum::PARAM_CUTTER) !== false){
  143. list($f,$func,$p) = explode(SmartFormEnum::PARAM_CUTTER,$kv);
  144. $default[$kd] = call_user_func(array($classname, $func),$p);
  145. $info['columns'][$k]['show_now_start'][$kd] = 1;
  146. }else{
  147. $default[$kd] = $kv;
  148. $info['columns'][$k]['show_now_start'][$kd] = 0;
  149. }
  150. }
  151. $info['columns'][$k]['default'] = $default;
  152. }else{
  153. if($v['default']){
  154. if(strpos($v['default'],SmartFormEnum::PARAM_CUTTER) !== false){
  155. list($f,$func,$p) = explode(SmartFormEnum::PARAM_CUTTER,$v['default']);
  156. $default = call_user_func(array($classname, $func),$p);
  157. $info['columns'][$k]['show_now_start'] = 1;
  158. $info['columns'][$k]['default'] = $default;
  159. }else{
  160. $default = $v['default'];
  161. $info['columns'][$k]['show_now_start'] = 0;
  162. }
  163. }
  164. }
  165. }
  166. }
  167. return $info;
  168. }
  169. /**
  170. * @method createTemplate
  171. * 新增模板
  172. * @author zqh
  173. * @datetime 2022-05-05T16:48:46+0800
  174. * @param [type] $params [description]
  175. * @return [type] [description]
  176. */
  177. public static function createTemplate($params)
  178. {
  179. # 模板基础信息 begin
  180. $form = $params['form'];
  181. $column_info = $params['toolList'];
  182. $where['mall_id'] = $params['mall_id'];
  183. $where['title'] = $form['title'];
  184. $where['status'] = StatusEnum::ENABLED;
  185. # 判断当前标题是否已经存在
  186. $find = self::getOne([$where],true);
  187. if($find && !$form['id']){
  188. self::$static_error = "模板名称已经使用,请先删除或修改该模板";
  189. return false;
  190. }
  191. if ($form['id']) {
  192. $tplModel = self::findOne(['and',['id'=>$form['id'],'mall_id'=>$params['mall_id']]]);
  193. if (empty($tplModel)){
  194. self::$static_error = "记录不存在或已删除";
  195. return false;
  196. }
  197. }else{
  198. $tplModel = new self();
  199. $tplModel->loadDefaultValues();
  200. $tplModel->mall_id = $params['mall_id'];
  201. }
  202. $create['mall_id'] = $params['mall_id'];# 商城id
  203. $create['show_header'] = $form['show_heard'];# 开启头部背景
  204. $create['header'] = $form['first_img'];# 头部背景
  205. $create['title'] = $form['title'];# 标题
  206. $create['is_repeat'] = intval($form['is_repeat']);# 是否可重复
  207. if($form['time_type'] == -1){
  208. $create['expire_time'] = $form['time_type'];# 过期时间[-1:永久有效]
  209. }else{
  210. $create['expire_time'] = strtotime($form['date']);
  211. }
  212. $create['link_status'] = $form['link_status']; # 开启跳转[0:关闭;1:开启]
  213. $create['jump_type'] = $form['jump_type']; # 跳转类型[0:跳转链接;1:跳转二维码]
  214. if($form['jump_type']=='1'){
  215. $create['jump_link'] = $form['qcard_img']; # 跳转二维码
  216. }else{
  217. $create['jump_link'] = $form['link']; # 跳转链接
  218. }
  219. // $create['success_link'] = $form['success_link']; # 跳转链接
  220. if(!$tplModel->load($create,'') || !$tplModel->save()){
  221. self::$static_error = $tplModel->getErrorMessage();
  222. return false;
  223. }
  224. # 模板基础信息 end
  225. # 模板字段 begin
  226. $column_info['template_id'] = $tplModel->id;
  227. $columnStatus = AddonsSmartFormTemplateColumn::createColumn($column_info);
  228. if(!$columnStatus){
  229. $AddonsSmartFormTemplateColumnModel = new AddonsSmartFormTemplateColumn();
  230. self::$static_error = $AddonsSmartFormTemplateColumnModel->getErrorMessage();
  231. return false;
  232. }
  233. # 模板字段 end
  234. return true;
  235. }
  236. /**
  237. * @method copyTpl
  238. * 复制模板
  239. * @author zqh
  240. * @datetime 2022-05-06T16:43:48+0800
  241. * @return [type] [description]
  242. */
  243. public static function copyTpl($template_id = 0)
  244. {
  245. if(!$template_id){
  246. self::$static_error = "模板不存在";
  247. return false;
  248. }
  249. # 复制主表
  250. $tplInfo = AddonsSmartFormTemplate::findOne($template_id);
  251. if(!$tplInfo){
  252. self::$static_error = '复制对象不存在';
  253. return false;
  254. }
  255. $tplInfo2 = new AddonsSmartFormTemplate;
  256. $tplInfo2->attributes = $tplInfo->attributes; // 这里需要 rules 支持
  257. $tplInfo2->created_at = time();
  258. $tplInfo2->updated_at = time();
  259. $new = $tplInfo2->save();
  260. if(!$new) {
  261. self::$static_error = '复制模板失败';
  262. return false;
  263. }
  264. # 复制明细字段
  265. $list = AddonsSmartFormTemplateColumn::find()->where(['smart_form_template_id'=>$template_id])->asArray()->all();
  266. if(empty($list)){
  267. self::$static_error = '复制对象不存在';
  268. return false;
  269. }
  270. foreach ($list as $k => $v) {
  271. unset($v['id']);
  272. $data = [];
  273. $data["smart_form_template_id"] = $tplInfo2->id;
  274. $data["smart_form_components_code"] = $v["smart_form_components_code"];
  275. $data["smart_form_components_id"] = $v["smart_form_components_id"];
  276. $data["title"] = $v["title"];
  277. $data["tips"] = $v["tips"];
  278. $data["placeholder"] = $v["placeholder"];
  279. $data["required"] = $v["required"];
  280. $data["limit"] = $v["limit"];
  281. $data["option"] = $v["option"];
  282. $data["show_default"] = $v["show_default"];
  283. $data["default"] = $v["default"];
  284. $data["is_export"] = $v["is_export"];
  285. $data["content_type"] = $v["content_type"];
  286. $data["sort"] = $v["sort"];
  287. $data["status"] = $v["status"];
  288. $data["created_at"] = time();
  289. $data["updated_at"] = time();
  290. $rows[] = $data;
  291. }
  292. // 生成数据
  293. $field = ['smart_form_template_id','smart_form_components_code','smart_form_components_id','title','tips','placeholder','required','limit','option','show_default','default','is_export','content_type','sort','status','created_at','updated_at'];
  294. $s2 = Yii::$app->db->createCommand()->batchInsert(AddonsSmartFormTemplateColumn::tableName(), $field, $rows)->execute();
  295. if(!$s2){
  296. self::$static_error = '复制字段失败';
  297. return false;
  298. }
  299. return $tplInfo2->id;
  300. }
  301. /**
  302. * @method del
  303. * 删除
  304. * @author zqh
  305. * @datetime 2022-05-07T21:23:13+0800
  306. * @param [type] $params [description]
  307. * @return [type] [description]
  308. */
  309. public static function del($params)
  310. {
  311. try{
  312. $trans = Yii::$app->db->beginTransaction();
  313. $model = self::findOne(['id'=>$params['id']]);
  314. if($model){
  315. $s = $s1 = $s2 = true;
  316. $model->status = StatusEnum::DELETE;
  317. $s = $model->save();
  318. if(!$s){
  319. self::$static_error = '删除表单失败';
  320. return false;
  321. }
  322. # 删除 表单字段
  323. $model1 = AddonsSmartFormTemplateColumn::findOne(['smart_form_template_id'=>$model->id,'status'=>StatusEnum::ENABLED]);
  324. if($model1)
  325. $s1 = AddonsSmartFormTemplateColumn::updateAll(['status'=>StatusEnum::DELETE],['smart_form_template_id'=>$model->id]);
  326. if(!$s1){
  327. self::$static_error = '删除表单字段失败';
  328. return false;
  329. }
  330. # 删除 用户提交表单
  331. $model2 = AddonsSmartFormTemplateUserForm::findOne(['smart_form_template_id'=>$model->id,'status'=>StatusEnum::ENABLED]);
  332. if($model2)
  333. $s2 = AddonsSmartFormTemplateUserForm::updateAll(['status'=>StatusEnum::DELETE],['smart_form_template_id'=>$model->id]);
  334. if( !$s2){
  335. self::$static_error = '删除用户提交表单失败';
  336. return false;
  337. }
  338. # 删除页面的引入
  339. # 查找若有引入的页面
  340. # 删除引入表单
  341. $list = AddonsSmartFormDecorationForm::find()->where(['smart_form_template_id'=>$model->id,'status'=>StatusEnum::ENABLED])->asArray()->all();
  342. $s3 = true;
  343. if(!empty($list)){
  344. $s3 = AddonsSmartFormDecorationForm::updateAll(['status'=>StatusEnum::DELETE],['smart_form_template_id'=>$model->id]);
  345. }
  346. if(!$s3){
  347. self::$static_error = '删除引入表单失败';
  348. return false;
  349. }
  350. # 删除页面引入
  351. $s4 = true;
  352. if(!empty($list)){
  353. foreach ($list as $k1 => $v1) {
  354. $diyInfo = DiyPage::findOne(['id' => $v1['diy_page_id']]);
  355. if($diyInfo['content']){
  356. $content = json_decode($diyInfo['content'],true);
  357. $has = false;
  358. foreach ($content as $k => $v) {
  359. if($v['funcListItem']['type']=='smart-form'){
  360. unset($content[$k]);
  361. $has = true;
  362. }
  363. }
  364. if($has){
  365. $content = array_values($content);
  366. $diyInfo['updated_at'] = time();
  367. $diyInfo['content'] = json_encode($content,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
  368. $s4 = $diyInfo->save();
  369. }else{
  370. $s4 = true;
  371. }
  372. if(!$s4){
  373. self::$static_error = '删除引入页面内容失败';
  374. return false;
  375. }
  376. }
  377. }
  378. }
  379. if(!$s4){
  380. self::$static_error = '删除引入页面内容失败';
  381. return false;
  382. }
  383. }
  384. $trans->commit();
  385. return true;
  386. }catch (\Exception $e){
  387. self::$static_error = $e->getMessage();
  388. return false;
  389. }
  390. }
  391. /**
  392. * @method getDiyList
  393. * 装修选择列表
  394. * @author zqh
  395. * @datetime 2022-05-08T07:31:35+0800
  396. * @param [type] $mall_id [description]
  397. * @param [type] $post [description]
  398. * @return [type] [description]
  399. */
  400. public static function getDiyList($mall_id,$post)
  401. {
  402. $params['select'] = 'id,mall_id,diy_page_id,title,show_header,header,expire_time,status,link_status,jump_type,jump_link,created_at';// 查询字段
  403. isset($post['keyword']) && $params['where'][] = ['like','title',$post['keyword']];
  404. $params['where'][] = ['=','status',StatusEnum::ENABLED];
  405. $params['where'][] = ['mall_id' => $mall_id];
  406. $params['with'] = ['columns'=> function ($query) {
  407. $query->where(['status' => StatusEnum::ENABLED])
  408. ->select('id,smart_form_template_id,smart_form_components_code,smart_form_components_id,title,tips,placeholder,required,limit,option,default,show_default,is_export,content_type')->orderBy('sort asc');
  409. }];
  410. $params['limit'] = 15;
  411. $params['order'] = 'created_at desc';
  412. $list = AddonsSmartFormTemplate::listPage($params,false,true);
  413. if($list['list']){
  414. foreach ($list['list'] as $k11 => $v11) {
  415. # 存在模板字段
  416. $columns = $list['list'][$k11]['columns'];
  417. $classname = new SmartFormEnum();
  418. foreach ($columns as $k => $v) {
  419. if(strpos($v['show_default'],SmartFormEnum::FIRST_CUTTER) !== false){
  420. $list['list'][$k11]['columns'][$k]['show_default'] = explode(SmartFormEnum::FIRST_CUTTER,$v['show_default']);
  421. }
  422. if(strpos($v['tips'],SmartFormEnum::FIRST_CUTTER) !== false){
  423. $list['list'][$k11]['columns'][$k]['tips'] = explode(SmartFormEnum::FIRST_CUTTER,$v['tips']);
  424. }
  425. if(strpos($v['option'],SmartFormEnum::FIRST_CUTTER) !== false){
  426. $option = [];
  427. $option = explode(SmartFormEnum::FIRST_CUTTER,$v['option']);
  428. $list['list'][$k11]['columns'][$k]['option'] = $option;
  429. foreach ($option as $k1 => $v1) {
  430. $list['list'][$k11]['columns'][$k]['chooseList'][$k1]['title'] = $v1;
  431. }
  432. }
  433. if(strpos($v['default'],SmartFormEnum::DATE_CUTTER) !== false){
  434. $default = [];
  435. $default = explode(SmartFormEnum::DATE_CUTTER,$v['default']);
  436. foreach ($default as $kd => $kv) {
  437. if(strpos($kv,SmartFormEnum::PARAM_CUTTER) !== false){
  438. list($f,$func,$p) = explode(SmartFormEnum::PARAM_CUTTER,$kv);
  439. $default[$kd] = call_user_func(array($classname, $func),$p);
  440. $list['list'][$k11]['columns'][$k]['show_now_start'][$kd] = 1;
  441. }else{
  442. $default[$kd] = $kv;
  443. $list['list'][$k11]['columns'][$k]['show_now_start'][$kd] = 0;
  444. }
  445. }
  446. $list['list'][$k11]['columns'][$k]['default'] = $default;
  447. }else{
  448. if($v['default']){
  449. if(strpos($v['default'],SmartFormEnum::PARAM_CUTTER) !== false){
  450. list($f,$func,$p) = explode(SmartFormEnum::PARAM_CUTTER,$v['default']);
  451. $default = call_user_func(array($classname, $func),$p);
  452. $list['list'][$k11]['columns'][$k]['show_now_start'] = 1;
  453. $list['list'][$k11]['columns'][$k]['default'] = $default;
  454. }else{
  455. $default = $v['default'];
  456. $list['list'][$k11]['columns'][$k]['show_now_start'] = 0;
  457. }
  458. }
  459. }
  460. }
  461. }
  462. }
  463. return $list;
  464. }
  465. /**
  466. * 获取商品的优惠券设置
  467. * @Author: lun
  468. * @DateTime: 2022/5/12 0012 14:49
  469. * @Copyright: copyright (c) 2021 广东七件事集团
  470. * @param $params
  471. * @return bool|string[]
  472. */
  473. public static function getGoodSetting($params)
  474. {
  475. // 后台页面组件展示
  476. if ($params['type'] == 'show_component') {
  477. return [
  478. 'component' => 'com-smartform-goods',
  479. 'path' => Yii::$app->basePath . '/../addons/SmartForm/backend/views/components/',
  480. 'show_address' => 'header'
  481. ];
  482. return true;
  483. } else {
  484. try {
  485. return true;
  486. } catch (Exception $e) {
  487. self::setStaticError($e->getMessage());
  488. return false;
  489. }
  490. }
  491. }
  492. }