mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-03-17 19:23:33 +00:00
up
This commit is contained in:
parent
9f058e2702
commit
2e643290e4
@ -10,6 +10,7 @@ use think\db\exception\ModelNotFoundException;
|
|||||||
use think\exception\Handle;
|
use think\exception\Handle;
|
||||||
use think\exception\HttpException;
|
use think\exception\HttpException;
|
||||||
use think\exception\HttpResponseException;
|
use think\exception\HttpResponseException;
|
||||||
|
use think\exception\RouteNotFoundException;
|
||||||
use think\exception\ValidateException;
|
use think\exception\ValidateException;
|
||||||
use think\facade\Log;
|
use think\facade\Log;
|
||||||
use think\Response;
|
use think\Response;
|
||||||
@ -92,6 +93,9 @@ class ExceptionHandle extends Handle
|
|||||||
if (strpos($e->getMessage(), 'open_basedir') !== false) {
|
if (strpos($e->getMessage(), 'open_basedir') !== false) {
|
||||||
return fail('OPEN_BASEDIR_ERROR');
|
return fail('OPEN_BASEDIR_ERROR');
|
||||||
}
|
}
|
||||||
|
if (strpos($e->getMessage(), 'Allowed memory size of') !== false) {
|
||||||
|
return fail('PHP_SCRIPT_RUNNING_OUT_OF_MEMORY');
|
||||||
|
}
|
||||||
if ($e instanceof DbException) {
|
if ($e instanceof DbException) {
|
||||||
return fail(get_lang('DATA_GET_FAIL').':'.$e->getMessage(), [
|
return fail(get_lang('DATA_GET_FAIL').':'.$e->getMessage(), [
|
||||||
'file' => $e->getFile(),
|
'file' => $e->getFile(),
|
||||||
@ -108,6 +112,8 @@ class ExceptionHandle extends Handle
|
|||||||
return fail($e->getMessage(), [], $e->getCode() ?: 400);
|
return fail($e->getMessage(), [], $e->getCode() ?: 400);
|
||||||
}else if($e instanceof ServerException){
|
}else if($e instanceof ServerException){
|
||||||
return fail($e->getMessage(), http_code:$e->getCode());
|
return fail($e->getMessage(), http_code:$e->getCode());
|
||||||
|
} else if ($e instanceof RouteNotFoundException) {
|
||||||
|
return fail('当前访问路由未定义或不匹配 路由地址:' . request()->baseUrl());
|
||||||
} else {
|
} else {
|
||||||
return fail($e->getMessage(), $massageData);
|
return fail($e->getMessage(), $massageData);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -268,4 +268,41 @@ class Diy extends BaseAdminController
|
|||||||
$id = ( new DiyService() )->copy($params);
|
$id = ( new DiyService() )->copy($params);
|
||||||
return success('ADD_SUCCESS', [ 'id' => $id ]);
|
return success('ADD_SUCCESS', [ 'id' => $id ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取自定义主题配色
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getDiyTheme()
|
||||||
|
{
|
||||||
|
return success(( new DiyService() )->getDiyTheme());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加主题配色
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function setDiyTheme()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'id', '' ],
|
||||||
|
[ 'key', '' ],
|
||||||
|
[ 'mode', '' ],
|
||||||
|
[ 'color_mark', '' ],
|
||||||
|
[ 'color_name', '' ],
|
||||||
|
[ 'diy_value', '' ],
|
||||||
|
[ 'value', '' ],
|
||||||
|
]);
|
||||||
|
( new DiyService() )->setDiyTheme($data);
|
||||||
|
return success('ADD_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置主题配色
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getDefaultThemeColor()
|
||||||
|
{
|
||||||
|
return success(( new DiyService() )->getDefaultThemeColor());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
370
niucloud/app/adminapi/controller/diy/DiyForm.php
Normal file
370
niucloud/app/adminapi/controller/diy/DiyForm.php
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\adminapi\controller\diy;
|
||||||
|
|
||||||
|
use app\service\admin\diy_form\DiyFormConfig;
|
||||||
|
use app\service\admin\diy_form\DiyFormRecordsService;
|
||||||
|
use app\service\admin\diy_form\DiyFormService;
|
||||||
|
use core\base\BaseAdminController;
|
||||||
|
use think\db\exception\DataNotFoundException;
|
||||||
|
use think\db\exception\DbException;
|
||||||
|
use think\db\exception\ModelNotFoundException;
|
||||||
|
use think\Response;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单控制器
|
||||||
|
* Class DiyForm
|
||||||
|
* @package app\adminapi\controller\diy
|
||||||
|
*/
|
||||||
|
class DiyForm extends BaseAdminController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @notes 获取万能表单分页列表
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function pages()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "title", "" ],
|
||||||
|
[ "type", "" ],
|
||||||
|
[ 'addon', '' ]
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getPage($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @notes 获取万能表单列表
|
||||||
|
* @return Response
|
||||||
|
* @throws DataNotFoundException
|
||||||
|
* @throws DbException
|
||||||
|
* @throws ModelNotFoundException
|
||||||
|
*/
|
||||||
|
public function lists()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "title", "" ],
|
||||||
|
[ 'status', 0 ],
|
||||||
|
[ "type", "" ],
|
||||||
|
[ 'addon', '' ]
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getList($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单详情
|
||||||
|
* @param int $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function info(int $id)
|
||||||
|
{
|
||||||
|
return success(( new DiyFormService() )->getInfo($id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加万能表单
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "title", "" ],
|
||||||
|
[ "page_title", "" ],
|
||||||
|
[ "type", "" ],
|
||||||
|
[ "value", [] ],
|
||||||
|
[ 'template', '' ],
|
||||||
|
]);
|
||||||
|
$this->validate($data, 'app\validate\diy\DiyForm.add');
|
||||||
|
$id = ( new DiyFormService() )->add($data);
|
||||||
|
return success('ADD_SUCCESS', [ 'id' => $id ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单编辑
|
||||||
|
* @param $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "title", "" ],
|
||||||
|
[ "page_title", "" ],
|
||||||
|
[ "value", [] ],
|
||||||
|
[ 'template', '' ],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->validate($data, 'app\validate\diy\DiyForm.edit');
|
||||||
|
( new DiyFormService() )->edit($id, $data);
|
||||||
|
return success('MODIFY_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单删除
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function del()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
[ 'form_ids', [] ]
|
||||||
|
]);
|
||||||
|
( new DiyFormService() )->del($params[ 'form_ids' ]);
|
||||||
|
return success('DELETE_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单初始化数据
|
||||||
|
* @return Response
|
||||||
|
* @throws DbException
|
||||||
|
*/
|
||||||
|
public function getInit()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
[ 'form_id', "" ],
|
||||||
|
[ "type", "" ],
|
||||||
|
[ "title", "" ],
|
||||||
|
]);
|
||||||
|
$diy_service = new DiyFormService();
|
||||||
|
return success($diy_service->getInit($params));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单模板
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getTemplate()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
[ 'type', '' ],
|
||||||
|
[ 'template_key', '' ],
|
||||||
|
]);
|
||||||
|
$diy_service = new DiyFormService();
|
||||||
|
return success($diy_service->getTemplate($params));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改页面分享内容
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function modifyShare()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", "" ],
|
||||||
|
[ "share", "" ],
|
||||||
|
]);
|
||||||
|
( new DiyFormService() )->modifyShare($data);
|
||||||
|
return success('MODIFY_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模板页面(存在的应用插件列表)
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getApps()
|
||||||
|
{
|
||||||
|
return success(( new DiyFormService() )->getApps());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 复制模版 todo 靠后
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function copy()
|
||||||
|
{
|
||||||
|
$params = $this->request->params([
|
||||||
|
[ 'form_id', '' ],
|
||||||
|
]);
|
||||||
|
$form_id = ( new DiyFormService() )->copy($params);
|
||||||
|
return success('ADD_SUCCESS', [ 'form_id' => $form_id ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取模板页面(存在的应用插件列表)
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
return success(( new DiyFormService() )->getFormType());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改状态
|
||||||
|
* @return \think\Response
|
||||||
|
*/
|
||||||
|
public function modifyStatus()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'form_id', '' ],
|
||||||
|
[ 'status', 1 ],
|
||||||
|
]);
|
||||||
|
( new DiyFormService() )->modifyStatus($data);
|
||||||
|
return success('SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getRecordPages()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", 0 ],
|
||||||
|
[ "keyword", "" ],
|
||||||
|
[ "create_time", "" ],
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getRecordPages($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录详情
|
||||||
|
* @param int $record_id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getRecordInfo(int $record_id)
|
||||||
|
{
|
||||||
|
return success(( new DiyFormService() )->getRecordInfo($record_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用记录删除
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function delRecord()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", 0 ],
|
||||||
|
[ 'record_id', 0 ],
|
||||||
|
]);
|
||||||
|
( new DiyFormService() )->delRecord($data);
|
||||||
|
return success('DELETE_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单字段记录
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getFieldsList()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", 0 ],
|
||||||
|
[ 'order', '' ],
|
||||||
|
[ 'sort', '' ]
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getFieldsList($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写配置
|
||||||
|
* @param $form_id int 所属万能表单id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getWriteConfig($form_id)
|
||||||
|
{
|
||||||
|
return success(( new DiyFormConfig() )->getWriteConfig($form_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑表单填写配置
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function editWriteConfig()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'id', 0 ],
|
||||||
|
[ 'form_id', 0 ], // 所属万能表单id
|
||||||
|
[ 'write_way', '' ], // 填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入
|
||||||
|
[ 'join_member_type', '' ], // 参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签
|
||||||
|
[ 'level_ids', [] ], // 会员等级id集合
|
||||||
|
[ 'label_ids', [] ], // 会员标签id集合
|
||||||
|
[ 'member_write_type', '' ], // 每人可填写次数,no_limit:不限制,diy:自定义
|
||||||
|
[ 'member_write_rule', [] ], // 每人可填写次数自定义规则
|
||||||
|
[ 'form_write_type', '' ], // 表单可填写数量,no_limit:不限制,diy:自定义
|
||||||
|
[ 'form_write_rule', [] ], // 表单可填写总数自定义规则
|
||||||
|
[ 'time_limit_type', '' ], // 填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间
|
||||||
|
[ 'time_limit_rule', [] ], // 填写时间限制规则
|
||||||
|
[ 'is_allow_update_content', 0 ], // 是否允许修改自己填写的内容,0:否,1:是
|
||||||
|
[ 'write_instruction', '' ], // 表单填写须知
|
||||||
|
]);
|
||||||
|
( new DiyFormConfig() )->editWriteConfig($data);
|
||||||
|
return success('EDIT_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单提交成功 也配置
|
||||||
|
* @param $form_id int 所属万能表单id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getSubmitConfig($form_id)
|
||||||
|
{
|
||||||
|
return success(( new DiyFormConfig() )->getSubmitConfig($form_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑表单提交成功页配置
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function editSubmitConfig()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'id', 0 ],
|
||||||
|
[ 'form_id', 0 ], // 所属万能表单id
|
||||||
|
[ 'submit_after_action', '' ], // 填表人提交后操作,text:文字信息,voucher:核销凭证
|
||||||
|
[ 'tips_type', '' ], // 提示内容类型,default:默认提示,diy:自定义提示
|
||||||
|
[ 'tips_text', '' ], // 自定义提示内容
|
||||||
|
[ 'time_limit_type', [] ], // 核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期
|
||||||
|
[ 'time_limit_rule', '' ], // 核销凭证时间限制规则,json格式 todo 结构待定
|
||||||
|
[ 'voucher_content_rule', [] ], // 核销凭证内容,json格式 todo 结构待定
|
||||||
|
[ 'success_after_action', '' ], // 填写成功后续操作
|
||||||
|
]);
|
||||||
|
( new DiyFormConfig() )->editSubmitConfig($data);
|
||||||
|
return success('EDIT_SUCCESS');
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo 查询表单详情
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单填表人统计列表
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function memberStatPages()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", 0 ],
|
||||||
|
[ "keyword", '' ],
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormRecordsService() )->getPage($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单字段统计列表
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function fieldStatList()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", 0 ],
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormRecordsService() )->getFieldStatList($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单微信小程序二维码
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getQrcode()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ "form_id", '' ],
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getQrcode($data[ 'form_id' ]));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -82,6 +82,19 @@ class CashOut extends BaseAdminController
|
|||||||
return success();
|
return success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注转账信息
|
||||||
|
* @param $id
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function remark($id)
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
['remark', ''],
|
||||||
|
]);
|
||||||
|
(new MemberCashOutService())->remark($id, $data);
|
||||||
|
return success();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
* @return Response
|
* @return Response
|
||||||
@ -98,4 +111,13 @@ class CashOut extends BaseAdminController
|
|||||||
{
|
{
|
||||||
return success((new MemberCashOutService())->stat());
|
return success((new MemberCashOutService())->stat());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验数组是否
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function checkTransferStatus($id){
|
||||||
|
(new MemberCashOutService())->checkTransferStatus($id);
|
||||||
|
return success();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,7 +125,8 @@ class Site extends BaseAdminController
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function del($id) {
|
public function del($id)
|
||||||
|
{
|
||||||
( new SiteService() )->del($id);
|
( new SiteService() )->del($id);
|
||||||
return success('DELETE_SUCCESS');
|
return success('DELETE_SUCCESS');
|
||||||
}
|
}
|
||||||
@ -151,7 +152,8 @@ class Site extends BaseAdminController
|
|||||||
* 获取站点拥有的应用
|
* 获取站点拥有的应用
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function addons() {
|
public function addons()
|
||||||
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'title', '' ],
|
[ 'title', '' ],
|
||||||
]);
|
]);
|
||||||
@ -159,4 +161,10 @@ class Site extends BaseAdminController
|
|||||||
return success(data:$data);
|
return success(data:$data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function showApp()
|
||||||
|
{
|
||||||
|
return success(( new SiteService() )->getShowAppTools());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,6 +84,15 @@ Route::group('diy', function() {
|
|||||||
// 复制模版
|
// 复制模版
|
||||||
Route::post('copy', 'diy.Diy/copy');
|
Route::post('copy', 'diy.Diy/copy');
|
||||||
|
|
||||||
|
// 获取自定义主题配色
|
||||||
|
Route::get('theme', 'diy.Diy/getDiyTheme');
|
||||||
|
|
||||||
|
// 设置主题配色
|
||||||
|
Route::post('theme', 'diy.Diy/setDiyTheme');
|
||||||
|
|
||||||
|
// 获取默认主题配色
|
||||||
|
Route::get('theme/color', 'diy.Diy/getDefaultThemeColor');
|
||||||
|
|
||||||
/***************************************************** 配置相关 *****************************************************/
|
/***************************************************** 配置相关 *****************************************************/
|
||||||
|
|
||||||
// 底部导航列表
|
// 底部导航列表
|
||||||
@ -95,6 +104,76 @@ Route::group('diy', function() {
|
|||||||
// 设置底部导航
|
// 设置底部导航
|
||||||
Route::post('bottom', 'diy.Config/setBottomConfig');
|
Route::post('bottom', 'diy.Config/setBottomConfig');
|
||||||
|
|
||||||
|
/***************************************************** 万能表单管理 ****************************************************/
|
||||||
|
|
||||||
|
// 万能表单分页列表
|
||||||
|
Route::get('form', 'diy.DiyForm/pages');
|
||||||
|
|
||||||
|
// 万能表单列表
|
||||||
|
Route::get('form/list', 'diy.DiyForm/lists');
|
||||||
|
|
||||||
|
// 万能表单类型
|
||||||
|
Route::get('form/type', 'diy.DiyForm/getFormType');
|
||||||
|
|
||||||
|
// 添加万能表单
|
||||||
|
Route::post('form', 'diy.DiyForm/add');
|
||||||
|
|
||||||
|
// 编辑万能表单
|
||||||
|
Route::put('form/:id', 'diy.DiyForm/edit');
|
||||||
|
|
||||||
|
// 万能表单详情
|
||||||
|
Route::get('form/:id', 'diy.DiyForm/info');
|
||||||
|
|
||||||
|
// 删除万能表单
|
||||||
|
Route::put('form/delete', 'diy.DiyForm/del');
|
||||||
|
|
||||||
|
// 获取万能表单微信小程序二维码
|
||||||
|
Route::get('form/qrcode', 'diy.DiyForm/getQrcode');
|
||||||
|
|
||||||
|
// 页面初始化数据
|
||||||
|
Route::get('form/init', 'diy.DiyForm/getInit');
|
||||||
|
|
||||||
|
// 获取页面模板
|
||||||
|
Route::get('form/template', 'diy.DiyForm/getTemplate');
|
||||||
|
|
||||||
|
// 获取万能表单填写配置
|
||||||
|
Route::get('form/write/:form_id', 'diy.DiyForm/getWriteConfig');
|
||||||
|
|
||||||
|
// 编辑万能表单填写配置
|
||||||
|
Route::put('form/write', 'diy.DiyForm/editWriteConfig');
|
||||||
|
|
||||||
|
// 获取万能表单填写配置
|
||||||
|
Route::get('form/submit/:form_id', 'diy.DiyForm/getSubmitConfig');
|
||||||
|
|
||||||
|
// 编辑万能表单填写配置
|
||||||
|
Route::put('form/submit', 'diy.DiyForm/editSubmitConfig');
|
||||||
|
|
||||||
|
// 编辑万能表单分享内容
|
||||||
|
Route::put('form/share', 'diy.DiyForm/modifyShare');
|
||||||
|
|
||||||
|
// 复制模版
|
||||||
|
Route::post('form/copy', 'diy.DiyForm/copy');
|
||||||
|
|
||||||
|
// 修改万能表单状态
|
||||||
|
Route::put('form/status', 'diy.DiyForm/modifyStatus');
|
||||||
|
|
||||||
|
//获取填写记录列表
|
||||||
|
Route::get('form/records', 'diy.DiyForm/getRecordPages');
|
||||||
|
|
||||||
|
//获取填写记录详情
|
||||||
|
Route::get('form/records/:record_id', 'diy.DiyForm/getRecordInfo');
|
||||||
|
|
||||||
|
//删除填写记录
|
||||||
|
Route::put('form/records/delete', 'diy.DiyForm/delRecord');
|
||||||
|
|
||||||
|
//获取万能表单字段记录
|
||||||
|
Route::get('form/fields/list', 'diy.DiyForm/getFieldsList');
|
||||||
|
|
||||||
|
//获取填表人统计列表
|
||||||
|
Route::get('form/records/member/stat', 'diy.DiyForm/memberStatPages');
|
||||||
|
|
||||||
|
//获取字段统计列表
|
||||||
|
Route::get('form/records/field/stat', 'diy.DiyForm/fieldStatList');
|
||||||
|
|
||||||
})->middleware([
|
})->middleware([
|
||||||
AdminCheckToken::class,
|
AdminCheckToken::class,
|
||||||
|
|||||||
@ -120,6 +120,10 @@ Route::group('member', function() {
|
|||||||
Route::get('cash_out/:id', 'member.CashOut/info');
|
Route::get('cash_out/:id', 'member.CashOut/info');
|
||||||
//会员提现审核
|
//会员提现审核
|
||||||
Route::put('cash_out/audit/:id/:action', 'member.CashOut/audit');
|
Route::put('cash_out/audit/:id/:action', 'member.CashOut/audit');
|
||||||
|
//会员提现备注
|
||||||
|
Route::put('cash_out/remark/:id', 'member.CashOut/remark');
|
||||||
|
//校验会员提现转账状态
|
||||||
|
Route::put('cash_out/check/:id', 'member.CashOut/checkTransferStatus');
|
||||||
//转账方式
|
//转账方式
|
||||||
Route::get('cash_out/transfertype', 'member.CashOut/getTransferType');
|
Route::get('cash_out/transfertype', 'member.CashOut/getTransferType');
|
||||||
//转账方式
|
//转账方式
|
||||||
|
|||||||
@ -87,6 +87,8 @@ Route::group('site', function () {
|
|||||||
Route::get('account/type', 'site.SiteAccount/accountType');
|
Route::get('account/type', 'site.SiteAccount/accountType');
|
||||||
// 获取店铺包含的插件
|
// 获取店铺包含的插件
|
||||||
Route::get('addons', 'site.Site/addons');
|
Route::get('addons', 'site.Site/addons');
|
||||||
|
// 获取应用列表
|
||||||
|
Route::get('showapp', 'site.Site/showApp');
|
||||||
})->middleware([
|
})->middleware([
|
||||||
AdminCheckToken::class,
|
AdminCheckToken::class,
|
||||||
AdminCheckRole::class,
|
AdminCheckRole::class,
|
||||||
|
|||||||
@ -18,17 +18,19 @@ use think\Response;
|
|||||||
class DiyForm extends BaseApiController
|
class DiyForm extends BaseApiController
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 系统表单详情
|
* 万能表单详情
|
||||||
* @param int $id
|
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function info(int $id)
|
public function info()
|
||||||
{
|
{
|
||||||
return success(( new DiyFormService() )->getInfo($id));
|
$data = $this->request->params([
|
||||||
|
[ 'form_id', '' ],
|
||||||
|
]);
|
||||||
|
return success(( new DiyFormService() )->getInfo($data[ 'form_id' ]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加使用记录
|
* 提交填表记录
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function addRecord()
|
public function addRecord()
|
||||||
@ -38,6 +40,30 @@ class DiyForm extends BaseApiController
|
|||||||
[ 'value', [] ],
|
[ 'value', [] ],
|
||||||
[ 'relate_id', '' ],
|
[ 'relate_id', '' ],
|
||||||
]);
|
]);
|
||||||
return success(( new DiyFormService())->addRecord($data));
|
return success('SUCCESS', ( new DiyFormService() )->addRecord($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写结果信息
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getResult()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'record_id', '' ],
|
||||||
|
]);
|
||||||
|
return success('SUCCESS', ( new DiyFormService() )->getResult($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写记录
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getRecord()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'record_id', '' ],
|
||||||
|
]);
|
||||||
|
return success('SUCCESS', ( new DiyFormService() )->getFormRecordInfo($data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,10 +84,13 @@ class Login extends BaseController
|
|||||||
{
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'mobile', '' ],
|
[ 'mobile', '' ],
|
||||||
|
[ 'nickname', '' ],
|
||||||
|
[ 'headimg', '' ],
|
||||||
|
[ 'mobile', '' ]
|
||||||
]);
|
]);
|
||||||
//校验登录注册配置
|
//校验登录注册配置
|
||||||
( new ConfigService() )->checkLoginConfig(MemberLoginTypeDict::MOBILE);
|
( new ConfigService() )->checkLoginConfig(MemberLoginTypeDict::MOBILE);
|
||||||
return success(( new LoginService() )->mobile($data[ 'mobile' ]));
|
return success(( new LoginService() )->mobile($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -57,7 +57,8 @@ class CashOutAccount extends BaseApiController
|
|||||||
['account_type', ''],
|
['account_type', ''],
|
||||||
['bank_name', ''],
|
['bank_name', ''],
|
||||||
['realname', ''],
|
['realname', ''],
|
||||||
['account_no', '']
|
['account_no', ''],
|
||||||
|
['transfer_payment_code', '']
|
||||||
]);
|
]);
|
||||||
$this->validate($data, 'app\validate\member\CashOutAccount.addOrEdit');
|
$this->validate($data, 'app\validate\member\CashOutAccount.addOrEdit');
|
||||||
$id = (new MemberCashOutAccountService())->add($data);
|
$id = (new MemberCashOutAccountService())->add($data);
|
||||||
@ -74,7 +75,8 @@ class CashOutAccount extends BaseApiController
|
|||||||
['account_type', ''],
|
['account_type', ''],
|
||||||
['bank_name', ''],
|
['bank_name', ''],
|
||||||
['realname', ''],
|
['realname', ''],
|
||||||
['account_no', '']
|
['account_no', ''],
|
||||||
|
['transfer_payment_code', '']
|
||||||
]);
|
]);
|
||||||
$this->validate($data, 'app\validate\member\CashOutAccount.addOrEdit');
|
$this->validate($data, 'app\validate\member\CashOutAccount.addOrEdit');
|
||||||
(new MemberCashOutAccountService())->edit($account_id, $data);
|
(new MemberCashOutAccountService())->edit($account_id, $data);
|
||||||
|
|||||||
@ -24,7 +24,8 @@ class Member extends BaseApiController
|
|||||||
* 会员信息
|
* 会员信息
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function info(){
|
public function info()
|
||||||
|
{
|
||||||
return success(( new MemberService() )->getInfo());
|
return success(( new MemberService() )->getInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +33,8 @@ class Member extends BaseApiController
|
|||||||
* 会员中心
|
* 会员中心
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function center(){
|
public function center()
|
||||||
|
{
|
||||||
return success(( new MemberService() )->center());
|
return success(( new MemberService() )->center());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +43,8 @@ class Member extends BaseApiController
|
|||||||
* @param $field
|
* @param $field
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function modify($field){
|
public function modify($field)
|
||||||
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'value', '' ],
|
[ 'value', '' ],
|
||||||
[ 'field', $field ],
|
[ 'field', $field ],
|
||||||
@ -56,7 +59,8 @@ class Member extends BaseApiController
|
|||||||
* 编辑会员
|
* 编辑会员
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function edit(){
|
public function edit()
|
||||||
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'data', [] ],
|
[ 'data', [] ],
|
||||||
]);
|
]);
|
||||||
@ -68,7 +72,8 @@ class Member extends BaseApiController
|
|||||||
* 绑定手机号
|
* 绑定手机号
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function mobile(){
|
public function mobile()
|
||||||
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'mobile', '' ],
|
[ 'mobile', '' ],
|
||||||
[ 'mobile_code', '' ],
|
[ 'mobile_code', '' ],
|
||||||
@ -80,7 +85,8 @@ class Member extends BaseApiController
|
|||||||
* 会员日志
|
* 会员日志
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
public function log(){
|
public function log()
|
||||||
|
{
|
||||||
$data = $this->request->params([
|
$data = $this->request->params([
|
||||||
[ 'route', '' ],
|
[ 'route', '' ],
|
||||||
[ 'params', '' ],
|
[ 'params', '' ],
|
||||||
@ -93,7 +99,20 @@ class Member extends BaseApiController
|
|||||||
/**
|
/**
|
||||||
* 获取会员码
|
* 获取会员码
|
||||||
*/
|
*/
|
||||||
public function qrcode(){
|
public function qrcode()
|
||||||
|
{
|
||||||
return success(( new MemberService() )->getQrcode());
|
return success(( new MemberService() )->getQrcode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取手机号
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function getMobile()
|
||||||
|
{
|
||||||
|
$data = $this->request->params([
|
||||||
|
[ 'mobile_code', '' ],
|
||||||
|
]);
|
||||||
|
return success(( new AuthService() )->getMobile($data[ 'mobile_code' ]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,7 +72,8 @@ class MemberCashOut extends BaseApiController
|
|||||||
[ 'apply_money', 0 ],
|
[ 'apply_money', 0 ],
|
||||||
[ 'account_type', MemberAccountTypeDict::MONEY ],
|
[ 'account_type', MemberAccountTypeDict::MONEY ],
|
||||||
[ 'transfer_type', '' ],
|
[ 'transfer_type', '' ],
|
||||||
[ 'account_id', 0 ]
|
[ 'account_id', 0 ],
|
||||||
|
[ 'transfer_payee', []] ,//收款方信息
|
||||||
]);
|
]);
|
||||||
$this->validate($data, 'app\validate\member\CashOut.apply');
|
$this->validate($data, 'app\validate\member\CashOut.apply');
|
||||||
return success(data:( new MemberCashOutService() )->apply($data));
|
return success(data:( new MemberCashOutService() )->apply($data));
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
namespace app\api\controller\sys;
|
namespace app\api\controller\sys;
|
||||||
|
|
||||||
use app\service\api\diy\DiyConfigService;
|
use app\service\api\diy\DiyConfigService;
|
||||||
|
use app\service\api\diy\DiyService;
|
||||||
use app\service\api\member\MemberConfigService;
|
use app\service\api\member\MemberConfigService;
|
||||||
use app\service\api\member\MemberLevelService;
|
use app\service\api\member\MemberLevelService;
|
||||||
use app\service\api\member\MemberService;
|
use app\service\api\member\MemberService;
|
||||||
@ -87,6 +88,7 @@ class Config extends BaseApiController
|
|||||||
$res[ 'site_info' ] = ( new SiteService() )->getSiteCache();
|
$res[ 'site_info' ] = ( new SiteService() )->getSiteCache();
|
||||||
$res[ 'member_level' ] = ( new MemberLevelService() )->getList();
|
$res[ 'member_level' ] = ( new MemberLevelService() )->getList();
|
||||||
$res[ 'login_config' ] = ( new MemberConfigService() )->getLoginConfig($data[ 'url' ]);
|
$res[ 'login_config' ] = ( new MemberConfigService() )->getLoginConfig($data[ 'url' ]);
|
||||||
|
$res[ 'theme_list' ] = ( new DiyService() )->getDiyTheme();
|
||||||
|
|
||||||
( new MemberService() )->initMemberData();
|
( new MemberService() )->initMemberData();
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,18 @@ class Upload extends BaseApiController
|
|||||||
return success($upload_service->image($data['file']));
|
return success($upload_service->image($data['file']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频上传
|
||||||
|
* @return Response
|
||||||
|
*/
|
||||||
|
public function video(){
|
||||||
|
$data = $this->request->params([
|
||||||
|
['file', 'file'],
|
||||||
|
]);
|
||||||
|
$upload_service = new UploadService();
|
||||||
|
return success($upload_service->video($data['file']));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程图片拉取
|
* 远程图片拉取
|
||||||
* @return Response
|
* @return Response
|
||||||
|
|||||||
@ -26,9 +26,15 @@ class Weapp extends BaseApiController
|
|||||||
*/
|
*/
|
||||||
public function login()
|
public function login()
|
||||||
{
|
{
|
||||||
$data = $this->request->params([ [ 'code', '' ] ]);
|
$data = $this->request->params([
|
||||||
|
[ 'code', '' ],
|
||||||
|
[ 'nickname', '' ],
|
||||||
|
[ 'headimg', '' ],
|
||||||
|
[ 'mobile', '' ],
|
||||||
|
[ 'mobile_code', '' ]
|
||||||
|
]);
|
||||||
$weapp_auth_service = new WeappAuthService();
|
$weapp_auth_service = new WeappAuthService();
|
||||||
return success($weapp_auth_service->login($data[ 'code' ]));
|
return success($weapp_auth_service->login($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -28,19 +28,25 @@ Route::group('diy', function() {
|
|||||||
|
|
||||||
Route::get('share', 'diy.Diy/share');
|
Route::get('share', 'diy.Diy/share');
|
||||||
|
|
||||||
|
// 万能表单详情
|
||||||
|
Route::get('form', 'diy.DiyForm/info');
|
||||||
|
|
||||||
})->middleware(ApiLog::class)
|
})->middleware(ApiLog::class)
|
||||||
->middleware(ApiCheckToken::class, false);
|
->middleware(ApiCheckToken::class, false);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义页面
|
* 自定义表单
|
||||||
*/
|
*/
|
||||||
Route::group('diy', function() {
|
Route::group('diy', function() {
|
||||||
// 系统表单详情
|
|
||||||
Route::get('form/:id', 'diy.DiyForm/info');
|
|
||||||
|
|
||||||
//添加使用记录
|
// 提交填表记录
|
||||||
Route::post('form/records', 'diy.DiyForm/addRecord');
|
Route::post('form/record', 'diy.DiyForm/addRecord');
|
||||||
|
|
||||||
|
// 获取表单填写结果信息
|
||||||
|
Route::get('form/result', 'diy.DiyForm/getResult');
|
||||||
|
|
||||||
|
// 获取填表记录
|
||||||
|
Route::get('form/record', 'diy.DiyForm/getRecord');
|
||||||
|
|
||||||
})->middleware(ApiLog::class)
|
})->middleware(ApiLog::class)
|
||||||
->middleware(ApiCheckToken::class, true);
|
->middleware(ApiCheckToken::class, true);
|
||||||
|
|||||||
@ -23,11 +23,22 @@ Route::group('file', function () {
|
|||||||
/***************************************************** 会员管理 ****************************************************/
|
/***************************************************** 会员管理 ****************************************************/
|
||||||
//上传图片
|
//上传图片
|
||||||
Route::post('image', 'upload.Upload/image');
|
Route::post('image', 'upload.Upload/image');
|
||||||
|
//上传视频
|
||||||
|
Route::post('video', 'upload.Upload/video');
|
||||||
//拉取图片
|
//拉取图片
|
||||||
Route::post('image/fetch', 'upload.Upload/imageFetch');
|
Route::post('image/fetch', 'upload.Upload/imageFetch');
|
||||||
//base64图片
|
|
||||||
Route::post('image/base64', 'upload.Upload/imageBase64');
|
|
||||||
|
|
||||||
})->middleware(ApiChannel::class)
|
})->middleware(ApiChannel::class)
|
||||||
->middleware(ApiCheckToken::class, true)
|
->middleware(ApiCheckToken::class, true)
|
||||||
->middleware(ApiLog::class);
|
->middleware(ApiLog::class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员个人信息管理
|
||||||
|
*/
|
||||||
|
Route::group('file', function() {
|
||||||
|
|
||||||
|
//base64图片
|
||||||
|
Route::post('image/base64', 'upload.Upload/imageBase64');
|
||||||
|
|
||||||
|
})->middleware(ApiChannel::class)
|
||||||
|
->middleware(ApiLog::class);
|
||||||
|
|||||||
@ -116,6 +116,9 @@ Route::group('member', function () {
|
|||||||
//会员日志
|
//会员日志
|
||||||
Route::post('log', 'member.Member/log');
|
Route::post('log', 'member.Member/log');
|
||||||
|
|
||||||
|
// 获取手机号
|
||||||
|
Route::put('getMobile', 'member.Member/getMobile');
|
||||||
|
|
||||||
/***************************************************** 会员等级 **************************************************/
|
/***************************************************** 会员等级 **************************************************/
|
||||||
Route::get('level', 'member.Level/lists');
|
Route::get('level', 'member.Level/lists');
|
||||||
})->middleware(ApiChannel::class)
|
})->middleware(ApiChannel::class)
|
||||||
|
|||||||
@ -978,3 +978,43 @@ function is_special_character($str)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间格式转换
|
||||||
|
* @param $time
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function get_last_time($time = null)
|
||||||
|
{
|
||||||
|
$text = '';
|
||||||
|
$time = $time === null || $time > time() ? time() : intval($time);
|
||||||
|
$t = time() - $time; //时间差 (秒)
|
||||||
|
$y = date('Y', $time) - date('Y', time());//是否跨年
|
||||||
|
switch ($t) {
|
||||||
|
case 0:
|
||||||
|
$text = '刚刚';
|
||||||
|
break;
|
||||||
|
case $t < 60:
|
||||||
|
$text = $t . '秒前'; // 一分钟内
|
||||||
|
break;
|
||||||
|
case $t < 60 * 60:
|
||||||
|
$text = floor($t / 60) . '分钟前'; //一小时内
|
||||||
|
break;
|
||||||
|
case $t < 60 * 60 * 24:
|
||||||
|
$text = floor($t / ( 60 * 60 )) . '小时前'; // 一天内
|
||||||
|
break;
|
||||||
|
case $t < 60 * 60 * 24 * 3:
|
||||||
|
$text = floor($time / ( 60 * 60 * 24 )) == 1 ? '昨天' . date('H:i', $time) : '前天' . date('H:i', $time); //昨天和前天
|
||||||
|
break;
|
||||||
|
case $t < 60 * 60 * 24 * 30:
|
||||||
|
$text = date('m-d H:i', $time); //一个月内
|
||||||
|
break;
|
||||||
|
case $t < 60 * 60 * 24 * 365 && $y == 0:
|
||||||
|
$text = date('m-d', $time); //一年内
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$text = date('Y-m-d', $time); //一年以前
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
|||||||
1300
niucloud/app/dict/diy_form/ComponentDict.php
Normal file
1300
niucloud/app/dict/diy_form/ComponentDict.php
Normal file
File diff suppressed because it is too large
Load Diff
51
niucloud/app/dict/diy_form/ConfigDict.php
Normal file
51
niucloud/app/dict/diy_form/ConfigDict.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\dict\diy_form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单提交页配置项
|
||||||
|
*/
|
||||||
|
class ConfigDict
|
||||||
|
{
|
||||||
|
|
||||||
|
//填表人提交后操作
|
||||||
|
const TEXT = 'text'; // 文字
|
||||||
|
const VOUCHER = 'voucher'; // 核销凭证
|
||||||
|
|
||||||
|
//提示内容类型
|
||||||
|
const DEFAULT = 'default'; // 默认提示
|
||||||
|
const DIY = 'diy'; // 自定义提示
|
||||||
|
|
||||||
|
// 核销凭证有效期限制类型 / 填写时间限制类型
|
||||||
|
const NO_LIMIT = 'no_limit'; // 不限制
|
||||||
|
const SPECIFY_TIME = 'specify_time'; // 指定固定开始结束时间
|
||||||
|
const VALIDITY_TIME = 'validity_time'; // 按提交时间设置有效期
|
||||||
|
|
||||||
|
// 填写方式
|
||||||
|
const WRITE_WAY_NO_LIMIT = 'no_limit'; // 不限制
|
||||||
|
const WRITE_WAY_SCAN = 'scan'; // 仅限微信扫一扫
|
||||||
|
const WRITE_WAY_URL = 'url'; // 仅限链接进入
|
||||||
|
|
||||||
|
// 参与会员
|
||||||
|
const ALL_MEMBER = 'all_member';// 所有会员参与
|
||||||
|
const SELECTED_MEMBER_LEVEL = 'selected_member_level'; // 指定会员等级
|
||||||
|
const SELECTED_MEMBER_LABEL = 'selected_member_label'; // 指定会员标签
|
||||||
|
|
||||||
|
// 填写次数限制
|
||||||
|
const WRITE_NUM_NO_LIMIT = 'no_limit'; // 不限制
|
||||||
|
const WRITE_NUM_DIY = 'diy'; // 自定义
|
||||||
|
|
||||||
|
// 是否允许修改自己填写的内容
|
||||||
|
const NO = 0; // 否
|
||||||
|
const YES = 1; // 是
|
||||||
|
|
||||||
|
}
|
||||||
785
niucloud/app/dict/diy_form/TemplateDict.php
Normal file
785
niucloud/app/dict/diy_form/TemplateDict.php
Normal file
@ -0,0 +1,785 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\dict\diy_form;
|
||||||
|
|
||||||
|
use core\dict\DictLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面模板
|
||||||
|
*/
|
||||||
|
class TemplateDict
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 获取万能表单模版
|
||||||
|
* @param array $params
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public static function getTemplate($params = [])
|
||||||
|
{
|
||||||
|
$other_template_data = ( new DictLoader("DiyFormTemplate") )->load([]);
|
||||||
|
$template = self::template();
|
||||||
|
$data = array_merge($other_template_data, $template);
|
||||||
|
if (!empty($params) && !empty($params[ 'type' ])) {
|
||||||
|
if (!empty($params[ 'template_key' ])) {
|
||||||
|
return $data[ $params[ 'type' ] ][ $params[ 'template_key' ] ] ?? [];
|
||||||
|
}
|
||||||
|
return $data[ $params[ 'type' ] ] ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function template()
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
"DIY_FORM" => [
|
||||||
|
'active_sign_up' => [ // 页面标识
|
||||||
|
"title" => "活动报名", // 页面名称
|
||||||
|
'cover' => '', // 页面封面图
|
||||||
|
'preview' => '', // 页面预览图
|
||||||
|
'desc' => '适用于活动宣传,收集报名信息,快速统计报名总人数', // 页面描述
|
||||||
|
'containField' => '共8个字段,包含8个字段:姓名、手机号、身份证号、邮箱、日期、报名职位、特长优点、入职时长', // 包含字段
|
||||||
|
// 页面数据源
|
||||||
|
"data" => [
|
||||||
|
"global" => [
|
||||||
|
"title" => "活动报名",
|
||||||
|
"completeLayout" => "style-1",
|
||||||
|
"completeAlign" => "left",
|
||||||
|
"borderControl" => true,
|
||||||
|
"pageStartBgColor" => "rgba(255, 255, 255, 1)",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"bgUrl" => "",
|
||||||
|
"bgHeightScale" => 100,
|
||||||
|
"imgWidth" => "",
|
||||||
|
"imgHeight" => "",
|
||||||
|
"topStatusBar" => [
|
||||||
|
"isShow" => true,
|
||||||
|
"bgColor" => "#ffffff",
|
||||||
|
"rollBgColor" => "#ffffff",
|
||||||
|
"style" => "style-1",
|
||||||
|
"styleName" => "风格1",
|
||||||
|
"textColor" => "#333333",
|
||||||
|
"rollTextColor" => "#333333",
|
||||||
|
"textAlign" => "center",
|
||||||
|
"inputPlaceholder" => "请输入搜索关键词",
|
||||||
|
"imgUrl" => "",
|
||||||
|
"link" => [
|
||||||
|
"name" => ""
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"bottomTabBarSwitch" => true,
|
||||||
|
"popWindow" => [
|
||||||
|
"imgUrl" => "",
|
||||||
|
"imgWidth" => "",
|
||||||
|
"imgHeight" => "",
|
||||||
|
"count" => -1,
|
||||||
|
"show" => 0,
|
||||||
|
"link" => [
|
||||||
|
"name" => ""
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"template" => [
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 0,
|
||||||
|
"bottom" => 0,
|
||||||
|
"both" => 0
|
||||||
|
],
|
||||||
|
"isHidden" => false
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"value" => [
|
||||||
|
[
|
||||||
|
"path" => "edit-image-ads",
|
||||||
|
"uses" => 0,
|
||||||
|
"componentType" => "diy",
|
||||||
|
"id" => "36vpa1zz5mw0",
|
||||||
|
"componentName" => "ImageAds",
|
||||||
|
"componentTitle" => "图片广告",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"imageHeight" => 150,
|
||||||
|
"isSameScreen" => false,
|
||||||
|
"list" => [
|
||||||
|
[
|
||||||
|
"link" => [
|
||||||
|
"name" => ""
|
||||||
|
],
|
||||||
|
"imageUrl" => "static/resource/images/diy_form/diy_form_active_sign_up_banner.png",
|
||||||
|
"imgWidth" => 750,
|
||||||
|
"imgHeight" => 300,
|
||||||
|
"id" => "4wk5whtbi0m0",
|
||||||
|
"width" => 375,
|
||||||
|
"height" => 150
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 0,
|
||||||
|
"bottom" => 0,
|
||||||
|
"both" => 0
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "padding-top:2rpx;padding-bottom:0rpx;padding-right:0rpx;padding-left:0rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-input",
|
||||||
|
"uses" => 0,
|
||||||
|
"position" => "",
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "46wkksoz5ew0",
|
||||||
|
"componentName" => "FormInput",
|
||||||
|
"componentTitle" => "单行文本",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "姓名",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => true,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => "",
|
||||||
|
"value" => ""
|
||||||
|
],
|
||||||
|
"placeholder" => "请输入姓名",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 15,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:30rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-mobile",
|
||||||
|
"uses" => 1,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "6tsdwql8ds00",
|
||||||
|
"componentName" => "FormMobile",
|
||||||
|
"componentTitle" => "手机号",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "手机号",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => false,
|
||||||
|
"unique" => true,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => true,
|
||||||
|
"default" => "",
|
||||||
|
"value" => ""
|
||||||
|
],
|
||||||
|
"placeholder" => "请输入手机号",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-identity",
|
||||||
|
"uses" => 1,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "4hy63cm1lj80",
|
||||||
|
"componentName" => "FormIdentity",
|
||||||
|
"componentTitle" => "身份证号",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "身份证号",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => false,
|
||||||
|
"unique" => true,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => "",
|
||||||
|
"value" => ""
|
||||||
|
],
|
||||||
|
"placeholder" => "请输入身份证号",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-email",
|
||||||
|
"uses" => 0,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "13f2w3r9h9vg",
|
||||||
|
"componentName" => "FormEmail",
|
||||||
|
"componentTitle" => "邮箱",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "邮箱",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => false,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => "",
|
||||||
|
"value" => ""
|
||||||
|
],
|
||||||
|
"placeholder" => "请输入邮箱",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-date",
|
||||||
|
"uses" => 0,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "7dc7gd9hh400",
|
||||||
|
"componentName" => "FormDate",
|
||||||
|
"componentTitle" => "日期",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "日期",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => true,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => [
|
||||||
|
"date" => "2025-01-11",
|
||||||
|
"timestamp" => 1736564405.243
|
||||||
|
],
|
||||||
|
"value" => [
|
||||||
|
"date" => "2025-01-11 11=>02",
|
||||||
|
"timestamp" => 1736564520
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"placeholder" => "请选择日期",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"dateFormat" => "YYYY-MM-DD HH:mm",
|
||||||
|
"dateWay" => "current",
|
||||||
|
"defaultControl" => true,
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-radio",
|
||||||
|
"uses" => 0,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "3z2yq22p9xc0",
|
||||||
|
"componentName" => "FormRadio",
|
||||||
|
"componentTitle" => "单选项",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "报名职位",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => true,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => [],
|
||||||
|
"value" => []
|
||||||
|
],
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"style" => "style-2",
|
||||||
|
"options" => [
|
||||||
|
[
|
||||||
|
"id" => "fzjmiaochnsd",
|
||||||
|
"text" => "前台"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => "mabstfflrdpj",
|
||||||
|
"text" => "收银"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => "1ogre1qndmrk",
|
||||||
|
"text" => "后厨"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => "1mv5qku9wihs",
|
||||||
|
"text" => "财务"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => "qfdjp035qsw",
|
||||||
|
"text" => "经理"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"logicalRule" => [
|
||||||
|
[
|
||||||
|
"triggerOptionId" => "",
|
||||||
|
"execEvent" => [
|
||||||
|
[
|
||||||
|
"id" => "",
|
||||||
|
"componentName" => "",
|
||||||
|
"componentTitle" => ""
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-textarea",
|
||||||
|
"uses" => 0,
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "39m5zel59cw0",
|
||||||
|
"componentName" => "FormTextarea",
|
||||||
|
"componentTitle" => "多行文本",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "特长优点",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => false,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => "",
|
||||||
|
"value" => ""
|
||||||
|
],
|
||||||
|
"placeholder" => "请输入特长优点",
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"rowCount" => 4,
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-date-scope",
|
||||||
|
"uses" => 0,
|
||||||
|
"convert" => [],
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "mj9fl99x02o",
|
||||||
|
"componentName" => "FormDateScope",
|
||||||
|
"componentTitle" => "日期范围",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"field" => [
|
||||||
|
"name" => "入职时长",
|
||||||
|
"remark" => [
|
||||||
|
"text" => "",
|
||||||
|
"color" => "#999999",
|
||||||
|
"fontSize" => 14
|
||||||
|
],
|
||||||
|
"required" => false,
|
||||||
|
"unique" => false,
|
||||||
|
"autofill" => false,
|
||||||
|
"privacyProtection" => false,
|
||||||
|
"default" => [
|
||||||
|
"start" => [
|
||||||
|
"date" => "2025-01-11",
|
||||||
|
"timestamp" => 1736585705
|
||||||
|
],
|
||||||
|
"end" => [
|
||||||
|
"date" => "2025-01-18",
|
||||||
|
"timestamp" => 1737190505
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"value" => [
|
||||||
|
"start" => [
|
||||||
|
"date" => "2025/01/11",
|
||||||
|
"timestamp" => 1736524800
|
||||||
|
],
|
||||||
|
"end" => [
|
||||||
|
"date" => "2025/01/11",
|
||||||
|
"timestamp" => 1736524800
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"fontSize" => 14,
|
||||||
|
"fontWeight" => "bold",
|
||||||
|
"dateFormat" => "YYYY/MM/DD",
|
||||||
|
"start" => [
|
||||||
|
"placeholder" => "请选择起始日期",
|
||||||
|
"dateWay" => "diy",
|
||||||
|
"defaultControl" => true
|
||||||
|
],
|
||||||
|
"end" => [
|
||||||
|
"placeholder" => "请选择结束日期",
|
||||||
|
"dateWay" => "diy",
|
||||||
|
"defaultControl" => true
|
||||||
|
],
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "#FFFFFF",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 0,
|
||||||
|
"bottomElementRounded" => 0,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 10,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "background-color:#FFFFFF;padding-top:10rpx;padding-bottom:20rpx;padding-right:34rpx;padding-left:34rpx;"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"path" => "edit-form-submit",
|
||||||
|
"uses" => 1,
|
||||||
|
"position" => "bottom_fixed",
|
||||||
|
"componentType" => "diy_form",
|
||||||
|
"id" => "38b02iygfzc0",
|
||||||
|
"componentName" => "FormSubmit",
|
||||||
|
"componentTitle" => "表单提交",
|
||||||
|
"ignore" => [
|
||||||
|
"componentBgUrl"
|
||||||
|
],
|
||||||
|
"btnPosition" => "follow_content",
|
||||||
|
"submitBtn" => [
|
||||||
|
"text" => "提交",
|
||||||
|
"color" => "#ffffff",
|
||||||
|
"bgColor" => "#409EFF"
|
||||||
|
],
|
||||||
|
"resetBtn" => [
|
||||||
|
"control" => true,
|
||||||
|
"text" => "重置",
|
||||||
|
"color" => "",
|
||||||
|
"bgColor" => ""
|
||||||
|
],
|
||||||
|
"textColor" => "#303133",
|
||||||
|
"pageStartBgColor" => "",
|
||||||
|
"pageEndBgColor" => "",
|
||||||
|
"pageGradientAngle" => "to bottom",
|
||||||
|
"componentBgUrl" => "",
|
||||||
|
"componentBgAlpha" => 2,
|
||||||
|
"componentStartBgColor" => "",
|
||||||
|
"componentEndBgColor" => "",
|
||||||
|
"componentGradientAngle" => "to bottom",
|
||||||
|
"topRounded" => 0,
|
||||||
|
"bottomRounded" => 0,
|
||||||
|
"elementBgColor" => "",
|
||||||
|
"topElementRounded" => 50,
|
||||||
|
"bottomElementRounded" => 50,
|
||||||
|
"margin" => [
|
||||||
|
"top" => 5,
|
||||||
|
"bottom" => 5,
|
||||||
|
"both" => 25
|
||||||
|
],
|
||||||
|
"isHidden" => false,
|
||||||
|
"pageStyle" => "padding-top:10rpx;padding-bottom:10rpx;padding-right:20rpx;padding-left:20rpx;"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
],
|
||||||
|
],
|
||||||
|
// todo 靠后完善
|
||||||
|
// 'SIGN_REGISTRATION' => [
|
||||||
|
// 'active_sign_up' => [ // 页面标识
|
||||||
|
// "title" => "活动报名", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '适用于活动宣传,收集报名信息,快速统计报名总人数', // 页面描述
|
||||||
|
// 'containField' => '共2个字段,包含2个字段:姓名、手机号', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// 'attendance_clock_in' => [ // 页面标识
|
||||||
|
// "title" => "考勤打卡", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '无需额外设备,员工直接使用微信扫码完成考勤打卡,管理员可随时查看考勤汇总数据,导出后进行工作考核', // 页面描述
|
||||||
|
// 'containField' => '包含5个字段:打卡类型、姓名、手机号、定位、备注', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// 'meeting_sign_up' => [ // 页面标识
|
||||||
|
// "title" => "会议报名", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '填表人报名后获取核销凭证,活动现场出示,主办方可核销', // 页面描述
|
||||||
|
// 'containField' => '包含4个字段:姓名、手机号、公司名称、职务', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// 'service_reservation' => [ // 页面标识
|
||||||
|
// "title" => "服务预约", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '扫码填写预约报名信息,管理者可及时查看预约情况', // 页面描述
|
||||||
|
// 'containField' => '共5个字段,包含5个字段:姓名、联系方式、预约日期、预约时间、备注', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// 'person_registration' => [ // 页面标识
|
||||||
|
// "title" => "人员信息登记", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '适用于员工、学生、居民和访客等各类人员的信息收集场景', // 页面描述
|
||||||
|
// 'containField' => '包含8个字段:姓名、手机号、性别、身份证号、出生日期、民族、籍贯、家庭地址', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// ],
|
||||||
|
// 'LEAVE_MESSAGE_SUGGESTION' => [
|
||||||
|
// 'feedback_collection' => [ // 页面标识
|
||||||
|
// "title" => "反馈意见收集", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '反馈人扫码即可随时随地进行留言建议,管理人可以审核内容,在线回复', // 页面描述
|
||||||
|
// 'containField' => '共5个字段,包含5个字段:您要反馈哪方面的问题?、详细描述、相关图片、反馈人、手机号', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// 'Satisfaction_level_questionnaire' => [ // 页面标识
|
||||||
|
// "title" => "满意度调查问卷", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '通过满意度调研表单制作一个满意度调研二维码,所有人扫码即可填写,代替原有纸质方式;所有的评价都将汇总在管理后台,可以统一导出进行统计,了解整体的服务质量', // 页面描述
|
||||||
|
// 'containField' => '包含12个字段:1. 商场温度舒适度、2. 电梯及扶梯是否运行正常、3. 商场地面、墙面及天花板清洁、4. 卫生间地面、台盆及镜面清洁、5. 卫生间客用品是否缺失、6. 卫生间有无异味、7. 保洁员工仪容仪表及工作态度、8. 安保员工仪容仪表及工作态度、9. 车场停车费扫码付费便捷度、姓名、联系方式、图文描述', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// ],
|
||||||
|
// 'WRITE_OFF_VOUCHER' => [
|
||||||
|
// 'gift_receive_reservation' => [ // 页面标识
|
||||||
|
// "title" => "礼品领取预约", // 页面名称
|
||||||
|
// 'cover' => '', // 页面封面图
|
||||||
|
// 'preview' => '', // 页面预览图
|
||||||
|
// 'desc' => '客户线上填写信息并选择礼品,完成后获取二维码凭证。在现场,出示该凭证领取礼品,工作人员扫描凭证进行核销', // 页面描述
|
||||||
|
// 'containField' => '包含3个字段:姓名、手机、礼品选择', // 包含字段
|
||||||
|
// // 页面数据源
|
||||||
|
// "data" => [
|
||||||
|
// "global" => [],
|
||||||
|
// "value" => []
|
||||||
|
// ]
|
||||||
|
// ],
|
||||||
|
// ],
|
||||||
|
];
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
70
niucloud/app/dict/diy_form/TypeDict.php
Normal file
70
niucloud/app/dict/diy_form/TypeDict.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\dict\diy_form;
|
||||||
|
|
||||||
|
use core\dict\DictLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单类型
|
||||||
|
*/
|
||||||
|
class TypeDict
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单类型
|
||||||
|
* @param array $params
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public static function getType($params = [])
|
||||||
|
{
|
||||||
|
$system_pages = [
|
||||||
|
//自定义表单
|
||||||
|
'DIY_FORM' => [
|
||||||
|
'title' => get_lang('dict_diy_form.type_diy_form'),
|
||||||
|
'preview' => 'static/resource/images/diy_form/diy_from_preview.jpg', // 预览图
|
||||||
|
'sort' => 10001,
|
||||||
|
'addon' => ''
|
||||||
|
],
|
||||||
|
//签到报名登记 todo 靠后完善
|
||||||
|
// 'SIGN_REGISTRATION' => [
|
||||||
|
// 'title' => get_lang('dict_diy_form.type_sign_registration'),
|
||||||
|
// 'preview' => 'static/resource/images/diy_form/diy_from_preview.png',
|
||||||
|
// 'sort' => 10002,
|
||||||
|
// 'addon' => ''
|
||||||
|
// ],
|
||||||
|
//留言建议 todo 靠后完善
|
||||||
|
// 'LEAVE_MESSAGE_SUGGESTION' => [
|
||||||
|
// 'title' => get_lang('dict_diy_form.type_leave_message_suggestion'),
|
||||||
|
// 'preview' => 'static/resource/images/diy_form/diy_from_preview.png',
|
||||||
|
// 'sort' => 10003,
|
||||||
|
// 'addon' => ''
|
||||||
|
// ],
|
||||||
|
//核销凭证 todo 靠后完善
|
||||||
|
// 'WRITE_OFF_VOUCHER' => [
|
||||||
|
// 'title' => get_lang('dict_diy_form.type_write_off_voucher'),
|
||||||
|
// 'preview' => 'static/resource/images/diy_form/diy_from_preview.png',
|
||||||
|
// 'sort' => 10004,
|
||||||
|
// 'addon' => ''
|
||||||
|
// ],
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = ( new DictLoader("DiyFormType") )->load($system_pages);
|
||||||
|
|
||||||
|
if (!empty($params) && !empty($params[ 'type' ])) {
|
||||||
|
return $data[ $params[ 'type' ] ];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -20,6 +20,7 @@ class MemberCashOutDict
|
|||||||
{
|
{
|
||||||
public const WAIT_AUDIT = 1;//待审核
|
public const WAIT_AUDIT = 1;//待审核
|
||||||
public const WAIT_TRANSFER = 2;//待转账
|
public const WAIT_TRANSFER = 2;//待转账
|
||||||
|
public const TRANSFER_ING = 4;//转账中
|
||||||
public const TRANSFERED = 3;//已转账
|
public const TRANSFERED = 3;//已转账
|
||||||
public const REFUSE = -1;//已拒绝
|
public const REFUSE = -1;//已拒绝
|
||||||
public const CANCEL = -2;//已取消
|
public const CANCEL = -2;//已取消
|
||||||
@ -33,6 +34,7 @@ class MemberCashOutDict
|
|||||||
return [
|
return [
|
||||||
self::WAIT_AUDIT => get_lang('dict_member_cash_out.status_wait_audit'),//待审核
|
self::WAIT_AUDIT => get_lang('dict_member_cash_out.status_wait_audit'),//待审核
|
||||||
self::WAIT_TRANSFER => get_lang('dict_member_cash_out.status_wait_transfer'),//待转账
|
self::WAIT_TRANSFER => get_lang('dict_member_cash_out.status_wait_transfer'),//待转账
|
||||||
|
self::TRANSFER_ING => get_lang('dict_member_cash_out.status_transfer_ing'),//转账中
|
||||||
self::TRANSFERED => get_lang('dict_member_cash_out.status_transfered'),//已转账
|
self::TRANSFERED => get_lang('dict_member_cash_out.status_transfered'),//已转账
|
||||||
self::REFUSE => get_lang('dict_member_cash_out.status_refuse'),//已拒绝
|
self::REFUSE => get_lang('dict_member_cash_out.status_refuse'),//已拒绝
|
||||||
self::CANCEL => get_lang('dict_member_cash_out.status_cancel'),//已取消
|
self::CANCEL => get_lang('dict_member_cash_out.status_cancel'),//已取消
|
||||||
|
|||||||
@ -6,7 +6,7 @@ return [
|
|||||||
'menu_short_name' => '首页',
|
'menu_short_name' => '首页',
|
||||||
'parent_key' => '',
|
'parent_key' => '',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Monitor',
|
'icon' => 'iconfont iconshouye2',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => 'index',
|
'router_path' => 'index',
|
||||||
'view_path' => 'index/index',
|
'view_path' => 'index/index',
|
||||||
@ -37,7 +37,7 @@ return [
|
|||||||
'menu_short_name' => '配置',
|
'menu_short_name' => '配置',
|
||||||
'parent_key' => '',
|
'parent_key' => '',
|
||||||
'menu_type' => '0',
|
'menu_type' => '0',
|
||||||
'icon' => 'element Setting',
|
'icon' => 'iconfont iconshezhi11',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
@ -51,7 +51,7 @@ return [
|
|||||||
'menu_key' => 'website_setting',
|
'menu_key' => 'website_setting',
|
||||||
'menu_short_name' => '网站设置',
|
'menu_short_name' => '网站设置',
|
||||||
'menu_type' => '0',
|
'menu_type' => '0',
|
||||||
'icon' => 'iconfont iconwangzhan1',
|
'icon' => 'iconfont iconwangzhanshezhi',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
@ -65,7 +65,7 @@ return [
|
|||||||
'menu_key' => 'base_setting',
|
'menu_key' => 'base_setting',
|
||||||
'menu_short_name' => '基础设置',
|
'menu_short_name' => '基础设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Basketball',
|
'icon' => 'iconfont iconjichushezhi1',
|
||||||
'api_url' => 'sys/config/website',
|
'api_url' => 'sys/config/website',
|
||||||
'router_path' => 'setting/website/system',
|
'router_path' => 'setting/website/system',
|
||||||
'view_path' => 'setting/system',
|
'view_path' => 'setting/system',
|
||||||
@ -95,7 +95,7 @@ return [
|
|||||||
'menu_key' => 'setting_copyright',
|
'menu_key' => 'setting_copyright',
|
||||||
'menu_short_name' => '版权设置',
|
'menu_short_name' => '版权设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconbanquan1',
|
'icon' => 'iconfont iconbanquanshezhi',
|
||||||
'api_url' => 'sys/config/copyright',
|
'api_url' => 'sys/config/copyright',
|
||||||
'router_path' => 'setting/website/copyright',
|
'router_path' => 'setting/website/copyright',
|
||||||
'view_path' => 'setting/copyright',
|
'view_path' => 'setting/copyright',
|
||||||
@ -127,7 +127,7 @@ return [
|
|||||||
'menu_key' => 'auth',
|
'menu_key' => 'auth',
|
||||||
'menu_short_name' => '权限设置',
|
'menu_short_name' => '权限设置',
|
||||||
'menu_type' => '0',
|
'menu_type' => '0',
|
||||||
'icon' => 'iconfont iconquanxianguanli',
|
'icon' => 'iconfont iconquanxianshezhi',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
@ -141,7 +141,7 @@ return [
|
|||||||
'menu_key' => 'auth_list',
|
'menu_key' => 'auth_list',
|
||||||
'menu_short_name' => '管理员',
|
'menu_short_name' => '管理员',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Lock',
|
'icon' => 'iconfont iconguanliyuan',
|
||||||
'api_url' => 'site/user',
|
'api_url' => 'site/user',
|
||||||
'router_path' => 'setting/auth/user',
|
'router_path' => 'setting/auth/user',
|
||||||
'view_path' => 'auth/user',
|
'view_path' => 'auth/user',
|
||||||
@ -255,7 +255,7 @@ return [
|
|||||||
'menu_key' => 'auth_role',
|
'menu_key' => 'auth_role',
|
||||||
'menu_short_name' => '管理员角色',
|
'menu_short_name' => '管理员角色',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconhuiyuanliebiao',
|
'icon' => 'iconfont iconguanliyuanjiaose',
|
||||||
'api_url' => 'sys/role',
|
'api_url' => 'sys/role',
|
||||||
'router_path' => 'setting/auth/role',
|
'router_path' => 'setting/auth/role',
|
||||||
'view_path' => 'auth/role',
|
'view_path' => 'auth/role',
|
||||||
@ -313,7 +313,7 @@ return [
|
|||||||
'menu_key' => 'auth_log',
|
'menu_key' => 'auth_log',
|
||||||
'menu_short_name' => '操作日志',
|
'menu_short_name' => '操作日志',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Document',
|
'icon' => 'iconfont iconcaozuorizhi',
|
||||||
'api_url' => 'sys/log',
|
'api_url' => 'sys/log',
|
||||||
'router_path' => 'setting/auth/log',
|
'router_path' => 'setting/auth/log',
|
||||||
'view_path' => 'auth/log',
|
'view_path' => 'auth/log',
|
||||||
@ -329,7 +329,7 @@ return [
|
|||||||
'menu_key' => 'setting_storage',
|
'menu_key' => 'setting_storage',
|
||||||
'menu_short_name' => '存储设置',
|
'menu_short_name' => '存储设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element FolderChecked',
|
'icon' => 'iconfont iconcunchushezhi',
|
||||||
'api_url' => 'sys/storage',
|
'api_url' => 'sys/storage',
|
||||||
'router_path' => 'setting/storage',
|
'router_path' => 'setting/storage',
|
||||||
'view_path' => 'setting/storage',
|
'view_path' => 'setting/storage',
|
||||||
@ -373,7 +373,7 @@ return [
|
|||||||
'menu_key' => 'setting_login',
|
'menu_key' => 'setting_login',
|
||||||
'menu_short_name' => '登录设置',
|
'menu_short_name' => '登录设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconzhuceshezhi',
|
'icon' => 'iconfont icondenglushezhi',
|
||||||
'api_url' => 'sys/config/login',
|
'api_url' => 'sys/config/login',
|
||||||
'router_path' => 'setting/adminlogin',
|
'router_path' => 'setting/adminlogin',
|
||||||
'view_path' => 'setting/adminlogin',
|
'view_path' => 'setting/adminlogin',
|
||||||
@ -403,7 +403,7 @@ return [
|
|||||||
'menu_key' => 'wx_oplatform',
|
'menu_key' => 'wx_oplatform',
|
||||||
'menu_short_name' => '微信开放平台',
|
'menu_short_name' => '微信开放平台',
|
||||||
'menu_type' => '0',
|
'menu_type' => '0',
|
||||||
'icon' => 'iconfont iconweixin',
|
'icon' => 'iconfont iconweixinkaifangpingtai',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
@ -417,7 +417,7 @@ return [
|
|||||||
'menu_key' => 'setting_oplatform',
|
'menu_key' => 'setting_oplatform',
|
||||||
'menu_short_name' => '开放平台配置',
|
'menu_short_name' => '开放平台配置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconweixin',
|
'icon' => 'iconfont iconkaifangpingtaipeizhi',
|
||||||
'api_url' => 'wxoplatform/config',
|
'api_url' => 'wxoplatform/config',
|
||||||
'router_path' => 'setting/oplatform',
|
'router_path' => 'setting/oplatform',
|
||||||
'view_path' => 'wxoplatform/setting',
|
'view_path' => 'wxoplatform/setting',
|
||||||
@ -447,7 +447,7 @@ return [
|
|||||||
'menu_key' => 'oplatform_weapp_version',
|
'menu_key' => 'oplatform_weapp_version',
|
||||||
'menu_short_name' => '小程序同步',
|
'menu_short_name' => '小程序同步',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconweixin',
|
'icon' => 'iconfont iconxiaochengxutongbu',
|
||||||
'api_url' => 'wxoplatform/weapp/commit',
|
'api_url' => 'wxoplatform/weapp/commit',
|
||||||
'router_path' => 'wxoplatform/weapp_version',
|
'router_path' => 'wxoplatform/weapp_version',
|
||||||
'view_path' => 'wxoplatform/weapp_version',
|
'view_path' => 'wxoplatform/weapp_version',
|
||||||
@ -479,7 +479,7 @@ return [
|
|||||||
'menu_key' => 'attachment',
|
'menu_key' => 'attachment',
|
||||||
'menu_short_name' => '素材管理',
|
'menu_short_name' => '素材管理',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Files',
|
'icon' => 'iconfont iconsucaiguanli1',
|
||||||
'api_url' => 'sys/attachment',
|
'api_url' => 'sys/attachment',
|
||||||
'router_path' => 'setting/attachment',
|
'router_path' => 'setting/attachment',
|
||||||
'view_path' => 'tools/attachment',
|
'view_path' => 'tools/attachment',
|
||||||
@ -579,7 +579,7 @@ return [
|
|||||||
'menu_key' => 'map_setting',
|
'menu_key' => 'map_setting',
|
||||||
'menu_short_name' => '地图设置',
|
'menu_short_name' => '地图设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Message',
|
'icon' => 'iconfont iconditu2',
|
||||||
'api_url' => 'sys/config/map',
|
'api_url' => 'sys/config/map',
|
||||||
'router_path' => 'setting/map',
|
'router_path' => 'setting/map',
|
||||||
'view_path' => 'setting/map',
|
'view_path' => 'setting/map',
|
||||||
@ -609,7 +609,7 @@ return [
|
|||||||
'menu_key' => 'layout_setting',
|
'menu_key' => 'layout_setting',
|
||||||
'menu_short_name' => '布局设置',
|
'menu_short_name' => '布局设置',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element Message',
|
'icon' => 'iconfont iconbujushezhi',
|
||||||
'api_url' => 'sys/config/layout',
|
'api_url' => 'sys/config/layout',
|
||||||
'router_path' => 'setting/layout',
|
'router_path' => 'setting/layout',
|
||||||
'view_path' => 'setting/layout',
|
'view_path' => 'setting/layout',
|
||||||
@ -642,7 +642,7 @@ return [
|
|||||||
'menu_short_name' => '站点',
|
'menu_short_name' => '站点',
|
||||||
'parent_key' => '',
|
'parent_key' => '',
|
||||||
'menu_type' => '0',
|
'menu_type' => '0',
|
||||||
'icon' => 'element Memo',
|
'icon' => 'iconfont iconzhandianguanli',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
@ -656,7 +656,7 @@ return [
|
|||||||
'menu_key' => 'site_list',
|
'menu_key' => 'site_list',
|
||||||
'menu_short_name' => '站点列表',
|
'menu_short_name' => '站点列表',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element OfficeBuilding',
|
'icon' => 'iconfont iconzhandianliebiao',
|
||||||
'api_url' => 'site/site',
|
'api_url' => 'site/site',
|
||||||
'router_path' => 'site/list',
|
'router_path' => 'site/list',
|
||||||
'view_path' => 'site/list',
|
'view_path' => 'site/list',
|
||||||
@ -770,7 +770,7 @@ return [
|
|||||||
'menu_key' => 'site_group',
|
'menu_key' => 'site_group',
|
||||||
'menu_short_name' => '站点套餐',
|
'menu_short_name' => '站点套餐',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element PriceTag',
|
'icon' => 'iconfont iconzhandiantaocan',
|
||||||
'api_url' => 'site/group',
|
'api_url' => 'site/group',
|
||||||
'router_path' => 'site/group',
|
'router_path' => 'site/group',
|
||||||
'view_path' => 'site/group',
|
'view_path' => 'site/group',
|
||||||
@ -846,7 +846,7 @@ return [
|
|||||||
'menu_key' => 'site_user_list',
|
'menu_key' => 'site_user_list',
|
||||||
'menu_short_name' => '用户',
|
'menu_short_name' => '用户',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconhuiyuanzhongxin',
|
'icon' => 'iconfont iconyonghu1',
|
||||||
'api_url' => 'user/user',
|
'api_url' => 'user/user',
|
||||||
'router_path' => 'site/user',
|
'router_path' => 'site/user',
|
||||||
'view_path' => 'site/user',
|
'view_path' => 'site/user',
|
||||||
@ -961,7 +961,7 @@ return [
|
|||||||
'menu_short_name' => '应用',
|
'menu_short_name' => '应用',
|
||||||
'parent_key' => '',
|
'parent_key' => '',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'element ShoppingBag',
|
'icon' => 'iconfont iconyingyong2',
|
||||||
'api_url' => 'addon/local',
|
'api_url' => 'addon/local',
|
||||||
'router_path' => 'app_manage/app_store',
|
'router_path' => 'app_manage/app_store',
|
||||||
'view_path' => 'index/store',
|
'view_path' => 'index/store',
|
||||||
@ -1061,7 +1061,7 @@ return [
|
|||||||
'menu_key' => 'app_manage_tool',
|
'menu_key' => 'app_manage_tool',
|
||||||
'menu_short_name' => '开发',
|
'menu_short_name' => '开发',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconchajian1',
|
'icon' => 'iconfont icona-kaifa1',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => 'app_manage/tools',
|
'router_path' => 'app_manage/tools',
|
||||||
'view_path' => 'index/tools',
|
'view_path' => 'index/tools',
|
||||||
@ -1090,7 +1090,7 @@ return [
|
|||||||
'menu_key' => 'addon_develop',
|
'menu_key' => 'addon_develop',
|
||||||
'menu_short_name' => '插件开发',
|
'menu_short_name' => '插件开发',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconchajiankaifa',
|
'icon' => 'iconfont iconchajiankaifa1',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => 'tools/addon',
|
'router_path' => 'tools/addon',
|
||||||
'view_path' => 'tools/addon/index',
|
'view_path' => 'tools/addon/index',
|
||||||
@ -1134,7 +1134,7 @@ return [
|
|||||||
'menu_key' => 'code',
|
'menu_key' => 'code',
|
||||||
'menu_short_name' => '代码生成',
|
'menu_short_name' => '代码生成',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont icondaimashengcheng',
|
'icon' => 'iconfont icondaimashengcheng1',
|
||||||
'api_url' => 'generator/generator',
|
'api_url' => 'generator/generator',
|
||||||
'router_path' => 'tools/code',
|
'router_path' => 'tools/code',
|
||||||
'view_path' => 'tools/code/index',
|
'view_path' => 'tools/code/index',
|
||||||
@ -1264,7 +1264,7 @@ return [
|
|||||||
'menu_key' => 'sys_dict_dict_dict_list',
|
'menu_key' => 'sys_dict_dict_dict_list',
|
||||||
'menu_short_name' => '数据字典',
|
'menu_short_name' => '数据字典',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconwenzhangguanli1',
|
'icon' => 'iconfont iconshujuzidian',
|
||||||
'api_url' => 'dict/post/post',
|
'api_url' => 'dict/post/post',
|
||||||
'router_path' => 'tools/list',
|
'router_path' => 'tools/list',
|
||||||
'view_path' => 'dict/list',
|
'view_path' => 'dict/list',
|
||||||
@ -1322,7 +1322,7 @@ return [
|
|||||||
'menu_key' => 'tools_check_environment',
|
'menu_key' => 'tools_check_environment',
|
||||||
'menu_short_name' => '环境检测',
|
'menu_short_name' => '环境检测',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconhuanjingjiance',
|
'icon' => 'iconfont iconhuanjingjiance1',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => 'tools/detection',
|
'router_path' => 'tools/detection',
|
||||||
'view_path' => 'tools/detection',
|
'view_path' => 'tools/detection',
|
||||||
@ -1336,7 +1336,7 @@ return [
|
|||||||
'menu_key' => 'platform_menu',
|
'menu_key' => 'platform_menu',
|
||||||
'menu_short_name' => '平台菜单',
|
'menu_short_name' => '平台菜单',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => '',
|
'icon' => 'iconfont iconpingtaicaidan',
|
||||||
'api_url' => 'sys/menu',
|
'api_url' => 'sys/menu',
|
||||||
'router_path' => 'tools/admin_menu',
|
'router_path' => 'tools/admin_menu',
|
||||||
'view_path' => 'auth/menu',
|
'view_path' => 'auth/menu',
|
||||||
@ -1408,7 +1408,7 @@ return [
|
|||||||
'menu_key' => 'site_menu',
|
'menu_key' => 'site_menu',
|
||||||
'menu_short_name' => '站点菜单',
|
'menu_short_name' => '站点菜单',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => '',
|
'icon' => 'iconfont iconzhandiancaidan',
|
||||||
'api_url' => 'sys/menu',
|
'api_url' => 'sys/menu',
|
||||||
'router_path' => 'tools/site_menu',
|
'router_path' => 'tools/site_menu',
|
||||||
'view_path' => 'auth/site_menu',
|
'view_path' => 'auth/site_menu',
|
||||||
@ -1480,7 +1480,7 @@ return [
|
|||||||
'menu_key' => 'tools_schedule',
|
'menu_key' => 'tools_schedule',
|
||||||
'menu_short_name' => '计划任务',
|
'menu_short_name' => '计划任务',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconjihuarenwu',
|
'icon' => 'iconfont iconjihuarenwu1',
|
||||||
'api_url' => 'sys/schedule/list',
|
'api_url' => 'sys/schedule/list',
|
||||||
'router_path' => 'tools/schedule',
|
'router_path' => 'tools/schedule',
|
||||||
'view_path' => 'tools/schedule',
|
'view_path' => 'tools/schedule',
|
||||||
@ -1566,7 +1566,7 @@ return [
|
|||||||
'menu_key' => 'app_auth',
|
'menu_key' => 'app_auth',
|
||||||
'menu_short_name' => '授权信息',
|
'menu_short_name' => '授权信息',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconshouquanxinxi2',
|
'icon' => 'iconfont iconshouquanxinxi',
|
||||||
'api_url' => '',
|
'api_url' => '',
|
||||||
'router_path' => 'tools/authorize',
|
'router_path' => 'tools/authorize',
|
||||||
'view_path' => 'app/authorize',
|
'view_path' => 'app/authorize',
|
||||||
@ -1610,7 +1610,7 @@ return [
|
|||||||
'menu_key' => 'developer_token',
|
'menu_key' => 'developer_token',
|
||||||
'menu_short_name' => '开发者key',
|
'menu_short_name' => '开发者key',
|
||||||
'menu_type' => '1',
|
'menu_type' => '1',
|
||||||
'icon' => 'iconfont iconshouquanxinxi2',
|
'icon' => 'iconfont iconkaifazhekey',
|
||||||
'api_url' => 'sys/config/developer_token',
|
'api_url' => 'sys/config/developer_token',
|
||||||
'router_path' => 'tools/developer_token',
|
'router_path' => 'tools/developer_token',
|
||||||
'view_path' => 'setting/developer_token',
|
'view_path' => 'setting/developer_token',
|
||||||
|
|||||||
@ -289,6 +289,48 @@ return [
|
|||||||
'status' => '1',
|
'status' => '1',
|
||||||
'is_show' => '0',
|
'is_show' => '0',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '主题风格',
|
||||||
|
'menu_key' => 'diy_theme_style',
|
||||||
|
'menu_short_name' => '主题风格',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => 'element Files',
|
||||||
|
'api_url' => '',
|
||||||
|
'router_path' => 'diy/theme_style',
|
||||||
|
'view_path' => 'diy/theme_style',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '92',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '数据列表',
|
||||||
|
'menu_key' => 'diy_form_record_list',
|
||||||
|
'menu_short_name' => '数据列表',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'diy_form/records',
|
||||||
|
'router_path' => 'diy_form/records',
|
||||||
|
'view_path' => 'diy_form/records',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '保存',
|
||||||
|
'menu_key' => 'diy_form_update',
|
||||||
|
'menu_short_name' => '保存',
|
||||||
|
'menu_type' => '2',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'diy_form',
|
||||||
|
'router_path' => '',
|
||||||
|
'view_path' => '',
|
||||||
|
'methods' => 'post',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -2161,6 +2203,122 @@ return [
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '小票打印',
|
||||||
|
'menu_key' => 'printer_management',
|
||||||
|
'menu_short_name' => '小票打印',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => 'element FolderChecked',
|
||||||
|
'api_url' => 'printer',
|
||||||
|
'router_path' => 'printer/list',
|
||||||
|
'view_path' => 'printer/list',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '30',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'menu_name' => '删除打印机',
|
||||||
|
'menu_key' => 'delete_printer',
|
||||||
|
'menu_short_name' => '删除打印机',
|
||||||
|
'menu_type' => '2',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer/<id>',
|
||||||
|
'router_path' => '',
|
||||||
|
'view_path' => '',
|
||||||
|
'methods' => 'delete',
|
||||||
|
'sort' => '100',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '添加打印机',
|
||||||
|
'menu_key' => 'printer_add',
|
||||||
|
'menu_short_name' => '添加打印机',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer',
|
||||||
|
'router_path' => 'printer/add',
|
||||||
|
'view_path' => 'printer/edit',
|
||||||
|
'methods' => 'post',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '编辑打印机',
|
||||||
|
'menu_key' => 'printer_edit',
|
||||||
|
'menu_short_name' => '添加打印机',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer/<id>',
|
||||||
|
'router_path' => 'printer/edit',
|
||||||
|
'view_path' => 'printer/edit',
|
||||||
|
'methods' => 'put',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '小票打印模板',
|
||||||
|
'menu_key' => 'printer_template_management',
|
||||||
|
'menu_short_name' => '小票打印模板',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => 'element FolderChecked',
|
||||||
|
'api_url' => 'printer/template',
|
||||||
|
'router_path' => 'printer/template/list',
|
||||||
|
'view_path' => 'printer/template_list',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '96',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'menu_name' => '删除打印模板',
|
||||||
|
'menu_key' => 'delete_printer_template',
|
||||||
|
'menu_short_name' => '删除打印模板',
|
||||||
|
'menu_type' => '2',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer/template/<id>',
|
||||||
|
'router_path' => '',
|
||||||
|
'view_path' => '',
|
||||||
|
'methods' => 'delete',
|
||||||
|
'sort' => '100',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '添加打印模板',
|
||||||
|
'menu_key' => 'printer_template_add',
|
||||||
|
'menu_short_name' => '添加打印模板',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer/template',
|
||||||
|
'router_path' => 'printer/template/add',
|
||||||
|
'view_path' => 'printer/template_edit',
|
||||||
|
'methods' => 'post',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '编辑打印模板',
|
||||||
|
'menu_key' => 'printer_template_edit',
|
||||||
|
'menu_short_name' => '编辑打印模板',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'printer/template/<id>',
|
||||||
|
'router_path' => 'printer/template/edit',
|
||||||
|
'view_path' => 'printer/template_edit',
|
||||||
|
'methods' => 'put',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'menu_name' => '系统工具',
|
'menu_name' => '系统工具',
|
||||||
'menu_key' => 'setting_tool',
|
'menu_key' => 'setting_tool',
|
||||||
@ -2171,7 +2329,7 @@ return [
|
|||||||
'router_path' => '',
|
'router_path' => '',
|
||||||
'view_path' => '',
|
'view_path' => '',
|
||||||
'methods' => '',
|
'methods' => '',
|
||||||
'sort' => '30',
|
'sort' => '20',
|
||||||
'status' => '1',
|
'status' => '1',
|
||||||
'is_show' => '1',
|
'is_show' => '1',
|
||||||
'children' => [
|
'children' => [
|
||||||
@ -2337,122 +2495,6 @@ return [
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'menu_name' => '小票打印',
|
|
||||||
'menu_key' => 'printer_management',
|
|
||||||
'menu_short_name' => '小票打印',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => 'element FolderChecked',
|
|
||||||
'api_url' => 'printer',
|
|
||||||
'router_path' => 'printer/list',
|
|
||||||
'view_path' => 'printer/list',
|
|
||||||
'methods' => 'get',
|
|
||||||
'sort' => '97',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '1',
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'menu_name' => '删除打印机',
|
|
||||||
'menu_key' => 'delete_printer',
|
|
||||||
'menu_short_name' => '删除打印机',
|
|
||||||
'menu_type' => '2',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer/<id>',
|
|
||||||
'router_path' => '',
|
|
||||||
'view_path' => '',
|
|
||||||
'methods' => 'delete',
|
|
||||||
'sort' => '100',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '1',
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'menu_name' => '添加打印机',
|
|
||||||
'menu_key' => 'printer_add',
|
|
||||||
'menu_short_name' => '添加打印机',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer',
|
|
||||||
'router_path' => 'printer/add',
|
|
||||||
'view_path' => 'printer/edit',
|
|
||||||
'methods' => 'post',
|
|
||||||
'sort' => '0',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '0',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'menu_name' => '编辑打印机',
|
|
||||||
'menu_key' => 'printer_edit',
|
|
||||||
'menu_short_name' => '添加打印机',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer/<id>',
|
|
||||||
'router_path' => 'printer/edit',
|
|
||||||
'view_path' => 'printer/edit',
|
|
||||||
'methods' => 'put',
|
|
||||||
'sort' => '0',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '0',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'menu_name' => '小票打印模板',
|
|
||||||
'menu_key' => 'printer_template_management',
|
|
||||||
'menu_short_name' => '小票打印模板',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => 'element FolderChecked',
|
|
||||||
'api_url' => 'printer/template',
|
|
||||||
'router_path' => 'printer/template/list',
|
|
||||||
'view_path' => 'printer/template_list',
|
|
||||||
'methods' => 'get',
|
|
||||||
'sort' => '96',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '0',
|
|
||||||
'children' => [
|
|
||||||
[
|
|
||||||
'menu_name' => '删除打印模板',
|
|
||||||
'menu_key' => 'delete_printer_template',
|
|
||||||
'menu_short_name' => '删除打印模板',
|
|
||||||
'menu_type' => '2',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer/template/<id>',
|
|
||||||
'router_path' => '',
|
|
||||||
'view_path' => '',
|
|
||||||
'methods' => 'delete',
|
|
||||||
'sort' => '100',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '1',
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'menu_name' => '添加打印模板',
|
|
||||||
'menu_key' => 'printer_template_add',
|
|
||||||
'menu_short_name' => '添加打印模板',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer/template',
|
|
||||||
'router_path' => 'printer/template/add',
|
|
||||||
'view_path' => 'printer/template_edit',
|
|
||||||
'methods' => 'post',
|
|
||||||
'sort' => '0',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '0',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'menu_name' => '编辑打印模板',
|
|
||||||
'menu_key' => 'printer_template_edit',
|
|
||||||
'menu_short_name' => '编辑打印模板',
|
|
||||||
'menu_type' => '1',
|
|
||||||
'icon' => '',
|
|
||||||
'api_url' => 'printer/template/<id>',
|
|
||||||
'router_path' => 'printer/template/edit',
|
|
||||||
'view_path' => 'printer/template_edit',
|
|
||||||
'methods' => 'put',
|
|
||||||
'sort' => '0',
|
|
||||||
'status' => '1',
|
|
||||||
'is_show' => '0',
|
|
||||||
],
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -2487,6 +2529,20 @@ return [
|
|||||||
'status' => '1',
|
'status' => '1',
|
||||||
'is_show' => '0',
|
'is_show' => '0',
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '表单装修',
|
||||||
|
'menu_key' => 'form_page_decorate',
|
||||||
|
'menu_short_name' => '表单装修',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => '', // diy/diy/<id>
|
||||||
|
'router_path' => 'decorate/form/edit',
|
||||||
|
'view_path' => 'diy_form/edit',
|
||||||
|
'methods' => 'put',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '0',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -2519,5 +2575,54 @@ return [
|
|||||||
'is_show' => '0',
|
'is_show' => '0',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'menu_name' => '万能表单',
|
||||||
|
'menu_key' => 'diy_form',
|
||||||
|
'menu_short_name' => '万能表单',
|
||||||
|
'menu_type' => '0',
|
||||||
|
'icon' => 'element Files',
|
||||||
|
'api_url' => '',
|
||||||
|
'router_path' => '',
|
||||||
|
'view_path' => '',
|
||||||
|
'methods' => '',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
'menu_attr' => 'diy_form',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'menu_name' => '表单列表',
|
||||||
|
'menu_key' => 'diy_form_list',
|
||||||
|
'menu_short_name' => '表单列表',
|
||||||
|
'menu_type' => '1',
|
||||||
|
'icon' => 'element Files',
|
||||||
|
'api_url' => 'diy_form',
|
||||||
|
'router_path' => 'diy_form/list',
|
||||||
|
'view_path' => 'diy_form/list',
|
||||||
|
'methods' => 'get',
|
||||||
|
'sort' => '0',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
'menu_attr' => 'diy_form',
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'menu_name' => '分享设置',
|
||||||
|
'menu_key' => 'save_diy_form_share',
|
||||||
|
'menu_short_name' => '分享设置',
|
||||||
|
'menu_type' => '2',
|
||||||
|
'icon' => '',
|
||||||
|
'api_url' => 'diy_form/share',
|
||||||
|
'router_path' => '',
|
||||||
|
'view_path' => '',
|
||||||
|
'methods' => 'put',
|
||||||
|
'sort' => '100',
|
||||||
|
'status' => '1',
|
||||||
|
'is_show' => '1',
|
||||||
|
'menu_attr' => 'diy_form',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@ -33,11 +33,17 @@ class PayChannelDict
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
foreach ($channel as $k => $v) {
|
foreach ($channel as $k => $v) {
|
||||||
|
$temp_pay_type = $pay_type;
|
||||||
$list[ $k ] = [
|
$list[ $k ] = [
|
||||||
'name' => $v,
|
'name' => $v,
|
||||||
'key' => $k,
|
'key' => $k,
|
||||||
'pay_type' => $pay_type
|
'pay_type' => $pay_type
|
||||||
];
|
];
|
||||||
|
// PC端暂不支持 帮付
|
||||||
|
if ($k == ChannelDict::PC) {
|
||||||
|
unset($temp_pay_type[ PayDict::FRIENDSPAY ]);
|
||||||
|
$list[ $k ][ 'pay_type' ] = $temp_pay_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,14 +14,17 @@ namespace app\dict\pay;
|
|||||||
class TransferDict
|
class TransferDict
|
||||||
{
|
{
|
||||||
|
|
||||||
public const WECHAT = 'wechatpay';//微信支付
|
public const WECHAT = 'wechatpay';//微信零钱
|
||||||
|
|
||||||
public const ALIPAY = 'alipay';//支付宝支付
|
public const ALIPAY = 'alipay';//支付宝支付 (默认收款码)
|
||||||
|
|
||||||
public const OFFLINE = 'offline';//线下转账
|
public const OFFLINE = 'offline';//线下转账
|
||||||
|
|
||||||
public const BANK = 'bank';//银行卡转账
|
public const BANK = 'bank';//银行卡转账
|
||||||
|
|
||||||
|
|
||||||
|
public const WECHAT_CODE = 'wechat_code';//微信收款码(线下转账)
|
||||||
|
|
||||||
//转账状态
|
//转账状态
|
||||||
|
|
||||||
public const SUCCESS = 'success';//转账成功
|
public const SUCCESS = 'success';//转账成功
|
||||||
@ -43,7 +46,7 @@ class TransferDict
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付类型
|
* 转账类型
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function getTransferType(array $types = [], $is_all = true)
|
public static function getTransferType(array $types = [], $is_all = true)
|
||||||
@ -64,6 +67,11 @@ class TransferDict
|
|||||||
'key' => self::BANK,
|
'key' => self::BANK,
|
||||||
'is_online' => false
|
'is_online' => false
|
||||||
],//银行卡
|
],//银行卡
|
||||||
|
self::WECHAT_CODE => [
|
||||||
|
'name' => get_lang('dict_transfer.type_wechat_code'),
|
||||||
|
'key' => self::WECHAT_CODE,
|
||||||
|
'is_online' => false
|
||||||
|
],//微信收款码(线下转账)
|
||||||
];
|
];
|
||||||
if ($is_all) {
|
if ($is_all) {
|
||||||
$list[self::OFFLINE] = [
|
$list[self::OFFLINE] = [
|
||||||
|
|||||||
@ -25,6 +25,18 @@ return [
|
|||||||
'class' => 'app\job\schedule\SiteExpireClose',
|
'class' => 'app\job\schedule\SiteExpireClose',
|
||||||
'function' => ''
|
'function' => ''
|
||||||
],
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
'key' => 'transfer_check_finish',
|
||||||
|
'name' => '检验在线转账是否处理完毕',
|
||||||
|
'desc' => '',
|
||||||
|
'time' => [
|
||||||
|
'type' => 'min',
|
||||||
|
'min' => 5
|
||||||
|
],
|
||||||
|
'class' => 'app\job\transfer\schedule\CheckFinish',
|
||||||
|
'function' => ''
|
||||||
|
],
|
||||||
// [
|
// [
|
||||||
// 'key' => 'site_stat',
|
// 'key' => 'site_stat',
|
||||||
// 'name' => '站点统计',
|
// 'name' => '站点统计',
|
||||||
|
|||||||
@ -43,7 +43,6 @@ class WxOplatform
|
|||||||
25 => '开放平台账号管理',
|
25 => '开放平台账号管理',
|
||||||
30 => '小程序基本信息管理',
|
30 => '小程序基本信息管理',
|
||||||
31 => '小程序认证名称检测',
|
31 => '小程序认证名称检测',
|
||||||
36 => '微信卡路里管理',
|
|
||||||
37 => '附近的小程序管理',
|
37 => '附近的小程序管理',
|
||||||
40 => '小程序插件管理',
|
40 => '小程序插件管理',
|
||||||
45 => '微信物流服务',
|
45 => '微信物流服务',
|
||||||
|
|||||||
@ -92,11 +92,23 @@ $system_event = [
|
|||||||
'ExportDataType' => [
|
'ExportDataType' => [
|
||||||
//会员导出
|
//会员导出
|
||||||
'app\listener\member_export\MemberExportTypeListener',
|
'app\listener\member_export\MemberExportTypeListener',
|
||||||
|
//表单填写明细导出
|
||||||
|
'app\listener\diy_form_export\DiyFormRecordsExportTypeListener',
|
||||||
|
//表单填表人统计导出
|
||||||
|
'app\listener\diy_form_export\DiyFormRecordsMemberExportTypeListener',
|
||||||
|
//表单字段统计导出
|
||||||
|
// 'app\listener\diy_form_export\DiyFormRecordsFieldsExportTypeListener',
|
||||||
],
|
],
|
||||||
//导出数据源
|
//导出数据源
|
||||||
'ExportData' => [
|
'ExportData' => [
|
||||||
//会员导出
|
//会员导出
|
||||||
'app\listener\member_export\MemberExportDataListener',
|
'app\listener\member_export\MemberExportDataListener',
|
||||||
|
//表单填写明细导出
|
||||||
|
'app\listener\diy_form_export\DiyFormRecordsExportDataListener',
|
||||||
|
//表单填表人统计导出
|
||||||
|
'app\listener\diy_form_export\DiyFormRecordsMemberExportDataListener',
|
||||||
|
//表单字段统计导出
|
||||||
|
// 'app\listener\diy_form_export\DiyFormRecordsFieldsExportDataListener',
|
||||||
],
|
],
|
||||||
//统计执行
|
//统计执行
|
||||||
'StatExecute' => [],
|
'StatExecute' => [],
|
||||||
@ -108,7 +120,10 @@ $system_event = [
|
|||||||
'GetPosterData' => [ 'app\listener\system\Poster' ],
|
'GetPosterData' => [ 'app\listener\system\Poster' ],
|
||||||
|
|
||||||
// 小程序授权变更事件
|
// 小程序授权变更事件
|
||||||
'WeappAuthChangeAfter' => [ 'app\listener\system\WeappAuthChangeAfter' ]
|
'WeappAuthChangeAfter' => [ 'app\listener\system\WeappAuthChangeAfter' ],
|
||||||
|
'ShowApp' => [
|
||||||
|
'app\listener\system\ShowAppListener'
|
||||||
|
]
|
||||||
],
|
],
|
||||||
'subscribe' => [
|
'subscribe' => [
|
||||||
],
|
],
|
||||||
|
|||||||
@ -67,6 +67,124 @@ CREATE TABLE `applet_version` (
|
|||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小程序版本表' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '小程序版本表' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form`;
|
||||||
|
CREATE TABLE `diy_form` (
|
||||||
|
`form_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '表单id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`page_title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单名称(用于后台展示)',
|
||||||
|
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单名称(用于前台展示)',
|
||||||
|
`type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单类型',
|
||||||
|
`status` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '状态(0,关闭,1:开启)',
|
||||||
|
`template` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模板名称',
|
||||||
|
`value` LONGTEXT DEFAULT NULL COMMENT '表单数据,json格式,包含展示组件',
|
||||||
|
`addon` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '所属插件标识',
|
||||||
|
`share` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '分享内容',
|
||||||
|
`write_num` INT(11) NOT NULL DEFAULT 0 COMMENT '表单填写总数量',
|
||||||
|
`remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注说明',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`form_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_fields`;
|
||||||
|
CREATE TABLE `diy_form_fields` (
|
||||||
|
`field_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '字段id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`field_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段唯一标识',
|
||||||
|
`field_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段类型',
|
||||||
|
`field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段名称',
|
||||||
|
`field_remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段说明',
|
||||||
|
`field_default` TEXT DEFAULT NULL COMMENT '字段默认值',
|
||||||
|
`write_num` INT(11) NOT NULL DEFAULT 0 COMMENT '字段填写总数量',
|
||||||
|
`field_required` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否必填 0:否 1:是',
|
||||||
|
`field_hidden` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否隐藏 0:否 1:是',
|
||||||
|
`field_unique` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段内容防重复 0:否 1:是',
|
||||||
|
`privacy_protection` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '隐私保护 0:关闭 1:开启',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`field_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单字段表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_records`;
|
||||||
|
CREATE TABLE `diy_form_records` (
|
||||||
|
`record_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '表单填写记录id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`value` LONGTEXT DEFAULT NULL COMMENT '填写的表单数据',
|
||||||
|
`member_id` INT(11) NOT NULL DEFAULT 0 COMMENT '填写人会员id',
|
||||||
|
`relate_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联业务id',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`record_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写记录表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_records_fields`;
|
||||||
|
CREATE TABLE `diy_form_records_fields` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`form_field_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联表单字段id',
|
||||||
|
`record_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联表单填写记录id',
|
||||||
|
`member_id` INT(11) NOT NULL DEFAULT 0 COMMENT '填写会员id',
|
||||||
|
`field_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段唯一标识',
|
||||||
|
`field_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段类型',
|
||||||
|
`field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段名称',
|
||||||
|
`field_value` LONGTEXT NOT NULL COMMENT '字段值,根据类型展示对应效果',
|
||||||
|
`field_required` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否必填 0:否 1:是',
|
||||||
|
`field_hidden` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否隐藏 0:否 1:是',
|
||||||
|
`field_unique` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段内容防重复 0:否 1:是',
|
||||||
|
`privacy_protection` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '隐私保护 0:关闭 1:开启',
|
||||||
|
`update_num` INT(11) NOT NULL DEFAULT 0 COMMENT '字段修改次数',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写字段表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_submit_config`;
|
||||||
|
CREATE TABLE `diy_form_submit_config` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`submit_after_action` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '填表人提交后操作,text:文字信息,voucher:核销凭证',
|
||||||
|
`tips_type` VARCHAR(255) NOT NULL COMMENT '提示内容类型,default:默认提示,diy:自定义提示',
|
||||||
|
`tips_text` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '自定义提示内容',
|
||||||
|
`time_limit_type` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期',
|
||||||
|
`time_limit_rule` TEXT DEFAULT NULL COMMENT '核销凭证时间限制规则,json格式',
|
||||||
|
`voucher_content_rule` TEXT DEFAULT NULL COMMENT '核销凭证内容,json格式',
|
||||||
|
`success_after_action` TEXT DEFAULT NULL COMMENT '填写成功后续操作',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单提交页配置表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_write_config`;
|
||||||
|
CREATE TABLE `diy_form_write_config` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`write_way` VARCHAR(255) NOT NULL COMMENT '填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入',
|
||||||
|
`join_member_type` VARCHAR(255) NOT NULL DEFAULT 'all_member' COMMENT '参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签',
|
||||||
|
`level_ids` TEXT DEFAULT NULL COMMENT '会员等级id集合',
|
||||||
|
`label_ids` TEXT DEFAULT NULL COMMENT '会员标签id集合',
|
||||||
|
`member_write_type` VARCHAR(255) NOT NULL COMMENT '每人可填写次数,no_limit:不限制,diy:自定义',
|
||||||
|
`member_write_rule` TEXT NOT NULL COMMENT '每人可填写次数自定义规则',
|
||||||
|
`form_write_type` VARCHAR(255) NOT NULL COMMENT '表单可填写数量,no_limit:不限制,diy:自定义',
|
||||||
|
`form_write_rule` TEXT NOT NULL COMMENT '表单可填写总数自定义规则',
|
||||||
|
`time_limit_type` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间',
|
||||||
|
`time_limit_rule` TEXT NOT NULL COMMENT '填写时间限制规则',
|
||||||
|
`is_allow_update_content` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '是否允许修改自己填写的内容,0:否,1:是',
|
||||||
|
`write_instruction` TEXT DEFAULT NULL COMMENT '表单填写须知',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写配置表';
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `diy_page`;
|
DROP TABLE IF EXISTS `diy_page`;
|
||||||
CREATE TABLE `diy_page` (
|
CREATE TABLE `diy_page` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
@ -102,6 +220,24 @@ CREATE TABLE `diy_route` (
|
|||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义路由' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '自定义路由' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_theme`;
|
||||||
|
CREATE TABLE `diy_theme` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '标题',
|
||||||
|
`type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '插件类型app,addon',
|
||||||
|
`addon` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '所属应用,app:系统,shop:商城、o2o:上门服务',
|
||||||
|
`color_mark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '颜色标识',
|
||||||
|
`color_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '颜色名称',
|
||||||
|
`mode` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模式,default:默认【跟随系统】,diy:自定义配色',
|
||||||
|
`value` TEXT DEFAULT NULL COMMENT '配色',
|
||||||
|
`diy_value` TEXT DEFAULT NULL COMMENT '自定义配色',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='自定义主题配色表';
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `generate_column`;
|
DROP TABLE IF EXISTS `generate_column`;
|
||||||
CREATE TABLE `generate_column` (
|
CREATE TABLE `generate_column` (
|
||||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||||
@ -282,6 +418,8 @@ CREATE TABLE `member_cash_out` (
|
|||||||
`transfer_mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
|
`transfer_mobile` varchar(11) NOT NULL DEFAULT '' COMMENT '手机号',
|
||||||
`transfer_bank` varchar(255) NOT NULL DEFAULT '' COMMENT '银行名称',
|
`transfer_bank` varchar(255) NOT NULL DEFAULT '' COMMENT '银行名称',
|
||||||
`transfer_account` varchar(255) NOT NULL DEFAULT '' COMMENT '收款账号',
|
`transfer_account` varchar(255) NOT NULL DEFAULT '' COMMENT '收款账号',
|
||||||
|
`transfer_payee` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '转账收款方(json),主要用于对接在线的打款方式',
|
||||||
|
`transfer_payment_code` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '收款码图片',
|
||||||
`transfer_fail_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '失败原因',
|
`transfer_fail_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '失败原因',
|
||||||
`transfer_status` varchar(20) NOT NULL DEFAULT '' COMMENT '转账状态',
|
`transfer_status` varchar(20) NOT NULL DEFAULT '' COMMENT '转账状态',
|
||||||
`transfer_time` int(11) NOT NULL DEFAULT 0 COMMENT '转账时间',
|
`transfer_time` int(11) NOT NULL DEFAULT 0 COMMENT '转账时间',
|
||||||
@ -313,6 +451,7 @@ CREATE TABLE `member_cash_out_account` (
|
|||||||
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
`update_time` int(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
`account_no` varchar(255) NOT NULL DEFAULT '' COMMENT '提现账户',
|
`account_no` varchar(255) NOT NULL DEFAULT '' COMMENT '提现账户',
|
||||||
|
`transfer_payment_code` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '收款码',
|
||||||
PRIMARY KEY (`account_id`) USING BTREE
|
PRIMARY KEY (`account_id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员提现账户' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员提现账户' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
@ -446,15 +585,18 @@ CREATE TABLE `pay_transfer` (
|
|||||||
`transfer_account` varchar(255) NOT NULL DEFAULT '' COMMENT '收款账号',
|
`transfer_account` varchar(255) NOT NULL DEFAULT '' COMMENT '收款账号',
|
||||||
`transfer_voucher` varchar(255) NOT NULL DEFAULT '' COMMENT '凭证',
|
`transfer_voucher` varchar(255) NOT NULL DEFAULT '' COMMENT '凭证',
|
||||||
`transfer_remark` varchar(255) NOT NULL DEFAULT '' COMMENT '凭证说明',
|
`transfer_remark` varchar(255) NOT NULL DEFAULT '' COMMENT '凭证说明',
|
||||||
`transfer_fail_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '失败原因',
|
`transfer_payment_code` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '收款码图片',
|
||||||
|
`transfer_fail_reason` varchar(2000) NOT NULL DEFAULT '' COMMENT '失败原因',
|
||||||
`transfer_status` varchar(20) NOT NULL DEFAULT '' COMMENT '转账状态',
|
`transfer_status` varchar(20) NOT NULL DEFAULT '' COMMENT '转账状态',
|
||||||
`money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '转账金额',
|
`money` decimal(10, 2) NOT NULL DEFAULT 0.00 COMMENT '转账金额',
|
||||||
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '申请时间',
|
`create_time` int(11) NOT NULL DEFAULT 0 COMMENT '申请时间',
|
||||||
`transfer_time` int(11) NOT NULL DEFAULT 0 COMMENT '转账时间',
|
`transfer_time` int(11) NOT NULL DEFAULT 0 COMMENT '转账时间',
|
||||||
`update_time` int(11) NOT NULL DEFAULT 0,
|
`update_time` int(11) NOT NULL DEFAULT 0,
|
||||||
`openid` varchar(50) NOT NULL DEFAULT '',
|
`openid` varchar(50) NOT NULL DEFAULT '',
|
||||||
`remark` varchar(255) NOT NULL,
|
`remark` varchar(255) NOT NULL DEFAULT '',
|
||||||
`batch_id` varchar(500) NOT NULL DEFAULT '' COMMENT '转账批次id',
|
`batch_id` varchar(500) NOT NULL DEFAULT '' COMMENT '转账批次id',
|
||||||
|
`transfer_payee` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '在线转账数据(json)',
|
||||||
|
`out_batch_no` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '扩展数据,主要用于记录接收到线上打款的业务数据编号',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '转账表' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '转账表' ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
@ -1052,7 +1194,7 @@ INSERT INTO `site`(site_id, site_name, group_id, keywords, app_type, logo, `desc
|
|||||||
|
|
||||||
UPDATE `site` SET site_id = 0 WHERE site_id = 1;
|
UPDATE `site` SET site_id = 0 WHERE site_id = 1;
|
||||||
|
|
||||||
INSERT INTO `sys_user` VALUES ('1', '', '', '', '', '', '0', '0', '0', '1', '0', '0', '0');
|
-- INSERT INTO `sys_user` VALUES ('1', '', '', '', '', '', '0', '0', '0', '1', '0', '0', '0');
|
||||||
|
|
||||||
INSERT INTO `sys_user_role` VALUES ('1', '1', '0', '', '0', '1', '1', '0');
|
INSERT INTO `sys_user_role` VALUES ('1', '1', '0', '', '0', '1', '1', '0');
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ class ExportJob extends BaseJob
|
|||||||
public function doJob($site_id, $type, $where, $page)
|
public function doJob($site_id, $type, $where, $page)
|
||||||
{
|
{
|
||||||
//获取导出数据列
|
//获取导出数据列
|
||||||
$data_column = (new CoreExportService())->getExportDataColumn($type);
|
$data_column = (new CoreExportService())->getExportDataColumn($site_id, $type, $where);
|
||||||
//获取导出数据源
|
//获取导出数据源
|
||||||
$data = (new CoreExportService())->getExportData($site_id, $type, $where, $page);
|
$data = (new CoreExportService())->getExportData($site_id, $type, $where, $page);
|
||||||
(new CoreExportService())->export($site_id, $type, $data_column, $data);
|
(new CoreExportService())->export($site_id, $type, $data_column, $data);
|
||||||
|
|||||||
38
niucloud/app/job/transfer/schedule/CheckFinish.php
Normal file
38
niucloud/app/job/transfer/schedule/CheckFinish.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\job\transfer\schedule;
|
||||||
|
|
||||||
|
use app\dict\pay\TransferDict;
|
||||||
|
use app\model\pay\Transfer;
|
||||||
|
use app\service\core\pay\CoreTransferService;
|
||||||
|
use core\base\BaseJob;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定时校验转账是否完毕(每分钟一次)
|
||||||
|
*/
|
||||||
|
class CheckFinish extends BaseJob
|
||||||
|
{
|
||||||
|
public function doJob()
|
||||||
|
{
|
||||||
|
$condition = [
|
||||||
|
'transfer_status' => TransferDict::DEALING,
|
||||||
|
'transfer_type' => TransferDict::WECHAT
|
||||||
|
];
|
||||||
|
$list = (new Transfer())->where($condition)->select();
|
||||||
|
$core_transfer_service = new CoreTransferService();
|
||||||
|
foreach($list as $item){
|
||||||
|
$core_transfer_service->check($item['site_id'], $item->toArray());
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -57,6 +57,7 @@ return [
|
|||||||
'ADDON_KEY_IS_EXIST' => '已存在相同插件标识的应用',
|
'ADDON_KEY_IS_EXIST' => '已存在相同插件标识的应用',
|
||||||
'ADDON_IS_INSTALLED_NOT_ALLOW_DEL' => '已安装的插件不允许删除',
|
'ADDON_IS_INSTALLED_NOT_ALLOW_DEL' => '已安装的插件不允许删除',
|
||||||
'ADDON_ZIP_ERROR' => '插件压缩失败',
|
'ADDON_ZIP_ERROR' => '插件压缩失败',
|
||||||
|
'PHP_SCRIPT_RUNNING_OUT_OF_MEMORY' => 'PHP脚本运行内存不足, 具体操作方法<a style="text-decoration: underline;" href="https://www.kancloud.cn/niushop/niushop_v6/3248604" target="blank">点击查看相关手册</a>',
|
||||||
//登录注册重置账号....
|
//登录注册重置账号....
|
||||||
|
|
||||||
'LOGIN_SUCCESS' => '登录成功',
|
'LOGIN_SUCCESS' => '登录成功',
|
||||||
@ -180,12 +181,18 @@ return [
|
|||||||
'MEMBER_CASHOUT_TRANSFER' => '会员提现转账',
|
'MEMBER_CASHOUT_TRANSFER' => '会员提现转账',
|
||||||
'CASH_OUT_ACCOUNT_NOT_EXIST' => '提现账户不存在',
|
'CASH_OUT_ACCOUNT_NOT_EXIST' => '提现账户不存在',
|
||||||
|
|
||||||
|
'CASH_OUT_ACCOUNT_NOT_FOUND_VALUE' => '转账到微信零钱缺少参数',
|
||||||
|
|
||||||
//DIY
|
//DIY
|
||||||
'PAGE_NOT_EXIST' => '页面不存在',
|
'PAGE_NOT_EXIST' => '页面不存在',
|
||||||
|
'APP_COLOR_NOT_EXIST' => '系统配色不存在',
|
||||||
|
|
||||||
//系统表单
|
//万能表单
|
||||||
'DIY_FORM_NOT_EXIT' => '表单不存在',
|
'DIY_FORM_NOT_EXIST' => '表单不存在',
|
||||||
|
'DIY_FORM_NOT_OPEN' => '该表单已关闭',
|
||||||
'DIY_FORM_EXCEEDING_LIMIT' => '已达提交次数上限',
|
'DIY_FORM_EXCEEDING_LIMIT' => '已达提交次数上限',
|
||||||
|
'ON_STATUS_PROHIBIT_DELETE' => '启用状态下禁止删除',
|
||||||
|
'DIY_FORM_TYPE_NOT_EXIST' => '表单类型不存在',
|
||||||
|
|
||||||
//渠道相关 占用 4******
|
//渠道相关 占用 4******
|
||||||
//微信
|
//微信
|
||||||
@ -214,6 +221,7 @@ return [
|
|||||||
//支付相关(todo 注意:7段不共享)
|
//支付相关(todo 注意:7段不共享)
|
||||||
'ALIPAY_TRANSACTION_NO_NOT_EXIST' => '无效的支付交易号',
|
'ALIPAY_TRANSACTION_NO_NOT_EXIST' => '无效的支付交易号',
|
||||||
'PAYMENT_METHOD_NOT_SUPPORT' => '您选择到支付方式不受业务支持',
|
'PAYMENT_METHOD_NOT_SUPPORT' => '您选择到支付方式不受业务支持',
|
||||||
|
'WECHAT_TRANSFER_CONFIG_NOT_EXIST' => '微信零钱打款设置未配置完善',
|
||||||
'PAYMENT_LOCK' => '支付中,请稍后再试',
|
'PAYMENT_LOCK' => '支付中,请稍后再试',
|
||||||
'PAY_SUCCESS' => '当前支付已完成',
|
'PAY_SUCCESS' => '当前支付已完成',
|
||||||
'PAY_IS_REMOVE' => '当前支付已取消',
|
'PAY_IS_REMOVE' => '当前支付已取消',
|
||||||
@ -298,7 +306,10 @@ return [
|
|||||||
'SIGN_AWARD' => '签到奖励',
|
'SIGN_AWARD' => '签到奖励',
|
||||||
'GET_AWARD' => '恭喜您获得以下奖励',
|
'GET_AWARD' => '恭喜您获得以下奖励',
|
||||||
'WILL_GET_AWARD' => '您将获得以下奖励',
|
'WILL_GET_AWARD' => '您将获得以下奖励',
|
||||||
'SIGN_PERIOD_GREATER_THAN' => '签到周期必须大于0天',
|
'SIGN_PERIOD_CANNOT_EMPTY' => '签到周期不能为空',
|
||||||
|
'SIGN_PERIOD_BETWEEN_2_365_DAYS' => '签到周期为2-365天',
|
||||||
|
'CONTINUE_SIGN_BETWEEN_2_365_DAYS' => '连签天数为2-365天',
|
||||||
|
'CONTINUE_SIGN_CANNOT_GREATER_THAN_SIGN_PERIOD' => '连签天数不能大于签到周期',
|
||||||
|
|
||||||
//导出相关
|
//导出相关
|
||||||
'EXPORT_SUCCESS' => '导出成功',
|
'EXPORT_SUCCESS' => '导出成功',
|
||||||
|
|||||||
@ -198,10 +198,11 @@ return [
|
|||||||
],
|
],
|
||||||
//转账相关
|
//转账相关
|
||||||
'dict_transfer' => [
|
'dict_transfer' => [
|
||||||
'type_wechat' => '微信',
|
'type_wechat' => '微信零钱',
|
||||||
'type_ali' => '支付宝',
|
'type_ali' => '支付宝',
|
||||||
'type_bank' => '银行卡',
|
'type_bank' => '银行卡',
|
||||||
'type_offline' => '线下转账',
|
'type_offline' => '线下转账',
|
||||||
|
'type_wechat_code' => '微信',//微信线下打款
|
||||||
|
|
||||||
'status_wait' => '待转账',
|
'status_wait' => '待转账',
|
||||||
'status_dealing' => '处理中',
|
'status_dealing' => '处理中',
|
||||||
@ -261,6 +262,9 @@ return [
|
|||||||
'dict_diy_form' => [
|
'dict_diy_form' => [
|
||||||
'component_type_form' => '表单组件',
|
'component_type_form' => '表单组件',
|
||||||
'type_diy_form' => '自定义表单',
|
'type_diy_form' => '自定义表单',
|
||||||
|
'type_sign_registration' => '签到报名登记',
|
||||||
|
'type_leave_message_suggestion' => '留言建议',
|
||||||
|
'type_write_off_voucher' => '核销凭证',
|
||||||
],
|
],
|
||||||
//短信相关
|
//短信相关
|
||||||
'dict_sms' => [
|
'dict_sms' => [
|
||||||
@ -282,6 +286,7 @@ return [
|
|||||||
//状态
|
//状态
|
||||||
'status_wait_audit' => '待审核',
|
'status_wait_audit' => '待审核',
|
||||||
'status_wait_transfer' => '待转账',
|
'status_wait_transfer' => '待转账',
|
||||||
|
'status_transfer_ing' => '转账中',
|
||||||
'status_transfered' => '已转账',
|
'status_transfered' => '已转账',
|
||||||
'status_refuse' => '已拒绝',
|
'status_refuse' => '已拒绝',
|
||||||
'status_cancel' => '已取消'
|
'status_cancel' => '已取消'
|
||||||
|
|||||||
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\listener\diy_form_export;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyFormFields;
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单填写记录导出数据源查询
|
||||||
|
* Class DiyFormRecordsExportDataListener
|
||||||
|
* @package app\listener\diy_form_export
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsExportDataListener
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
if ($param['type'] == 'diy_form_records') {
|
||||||
|
$model = new DiyFormRecords();
|
||||||
|
$member_where = [];
|
||||||
|
if (!empty($param[ 'where' ][ 'keyword' ])) {
|
||||||
|
$member_where[] = [ 'member_no|nickname|username|mobile', 'like', '%' . $param[ 'where' ][ 'keyword' ] . '%' ];
|
||||||
|
}
|
||||||
|
$field = 'record_id, form_id, member_id, relate_id, create_time';
|
||||||
|
$order = "create_time desc";
|
||||||
|
$search_model = $model->where([
|
||||||
|
[ 'diy_form_records.site_id', '=', $param[ 'site_id' ] ],
|
||||||
|
[ 'form_id', '=', $param[ 'where' ] [ 'form_id' ] ]
|
||||||
|
])->field($field)->withSearch([ 'create_time' ], $param[ 'where' ])
|
||||||
|
->withJoin([
|
||||||
|
'member' => function($query) use ($member_where) {
|
||||||
|
$query->where($member_where);
|
||||||
|
}
|
||||||
|
])->with([
|
||||||
|
// 关联填写字段列表
|
||||||
|
'recordsFieldList' => function($query) {
|
||||||
|
$query->field('id, form_id, form_field_id, record_id, member_id, field_key, field_type, field_name, field_value, update_num, update_time')->append([ 'render_value' ]);
|
||||||
|
},
|
||||||
|
'form'
|
||||||
|
])
|
||||||
|
->order($order);
|
||||||
|
if ($param['page']['page'] > 0 && $param['page']['limit'] > 0) {
|
||||||
|
$data = $search_model->page($param['page']['page'], $param['page']['limit'])->select()->toArray();
|
||||||
|
} else {
|
||||||
|
$data = $search_model->select()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_key_list = ( new DiyFormFields() )->where([
|
||||||
|
[ 'form_id', '=', $param['where']['form_id'] ],
|
||||||
|
[ 'site_id', '=', $param['site_id'] ]
|
||||||
|
])->column('field_key');
|
||||||
|
|
||||||
|
foreach ($data as $key => $value) {
|
||||||
|
$data[$key]['page_title'] = $value[ 'form' ]['page_title'] ?? '';
|
||||||
|
$data[$key]['type_name'] = $value[ 'form' ]['type_name'] ?? '';
|
||||||
|
$data[$key]['nickname'] = $value[ 'member' ]['nickname'] ?? '';
|
||||||
|
$data[$key]['mobile'] = $value[ 'member' ]['mobile']."\t" ?? '';
|
||||||
|
$list_key = array_column($value[ 'recordsFieldList' ], null, 'field_key');
|
||||||
|
foreach ($field_key_list as $field_key) {
|
||||||
|
$data[$key][$field_key] = !empty($list_key[$field_key]) ? $list_key[$field_key]['render_value']."\t" : '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\listener\diy_form_export;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyFormFields;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单填写记录导出数据类型查询
|
||||||
|
* Class DiyFormRecordsExportTypeListener
|
||||||
|
* @package app\listener\diy_form_export
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsExportTypeListener
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
$column = [
|
||||||
|
'record_id' => [ 'name' => '记录编号' ],
|
||||||
|
'create_time' => [ 'name' => '填表时间' ],
|
||||||
|
'page_title' => [ 'name' => '表单名称' ],
|
||||||
|
'type_name' => [ 'name' => '表单类型' ],
|
||||||
|
'form_id' => [ 'name' => '表单编号' ],
|
||||||
|
'nickname' => [ 'name' => '填表人名称' ],
|
||||||
|
'mobile' => [ 'name' => '填表人手机号' ],
|
||||||
|
];
|
||||||
|
if (!empty($param['where']['form_id'])) {
|
||||||
|
$field_list = ( new DiyFormFields() )->where([
|
||||||
|
[ 'form_id', '=', $param['where']['form_id'] ],
|
||||||
|
[ 'site_id', '=', $param['site_id'] ]
|
||||||
|
])->field('field_key,field_name')->select()->toArray();
|
||||||
|
foreach ($field_list as $key => $value) {
|
||||||
|
$column[$value['field_key']] = [ 'name' => $value['field_name'] ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'diy_form_records' => [
|
||||||
|
'name' => '表单填写明细',
|
||||||
|
'column' => $column,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\listener\diy_form_export;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单填表人统计导出数据源查询
|
||||||
|
* Class DiyFormRecordsMemberExportDataListener
|
||||||
|
* @package app\listener\diy_form_export
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsMemberExportDataListener
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
if ($param['type'] == 'diy_form_records_member') {
|
||||||
|
$model = new DiyFormRecords();
|
||||||
|
$field = 'form_id, diy_form_records.member_id, count(*) as write_count';
|
||||||
|
$order = "create_time desc";
|
||||||
|
$search_model = $model->where([ [ 'diy_form_records.site_id', '=', $param[ 'site_id' ] ] ])->withSearch([ 'form_id' ], $param[ 'where' ])
|
||||||
|
->withJoin(['member' => function ($query) use ($param) {
|
||||||
|
$query->where([ [ 'nickname|mobile', 'like', "%" . $param[ 'where' ]['keyword'] . "%" ] ]);
|
||||||
|
}])->field($field)->group('diy_form_records.member_id')->order($order);
|
||||||
|
if ($param['page']['page'] > 0 && $param['page']['limit'] > 0) {
|
||||||
|
$data = $search_model->page($param['page']['page'], $param['page']['limit'])->select()->toArray();
|
||||||
|
} else {
|
||||||
|
$data = $search_model->select()->toArray();
|
||||||
|
}
|
||||||
|
foreach ($data as $key => $value) {
|
||||||
|
$data[$key]['nickname'] = $value[ 'member' ]['nickname'] ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\listener\diy_form_export;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单填表人统计导出数据类型查询
|
||||||
|
* Class DiyFormRecordsExportTypeListener
|
||||||
|
* @package app\listener\diy_form_export
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsMemberExportTypeListener
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle($param)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'diy_form_records_member' => [
|
||||||
|
'name' => '填表人统计列表',
|
||||||
|
'column' => [
|
||||||
|
'nickname' => [ 'name' => '填表人名称' ],
|
||||||
|
'write_count' => [ 'name' => '总计' ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -488,6 +488,19 @@ class AddSiteAfterListener
|
|||||||
'storage_type' => 'local', // 图片上传类型 local本地 aliyun 阿里云oss qiniu 七牛 ....
|
'storage_type' => 'local', // 图片上传类型 local本地 aliyun 阿里云oss qiniu 七牛 ....
|
||||||
'cate_id' => $category_id, // 素材分类id
|
'cate_id' => $category_id, // 素材分类id
|
||||||
'create_time' => time()
|
'create_time' => time()
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'site_id' => $site_id,
|
||||||
|
'name' => time() . $site_id . $category_id . 'nav_sow_community.png', // 附件名称
|
||||||
|
'real_name' => '种草社区', // 原始文件名
|
||||||
|
'path' => 'static/resource/images/attachment/nav_sow_community.png', // 完整地址
|
||||||
|
'url' => 'static/resource/images/attachment/nav_sow_community.png', // 网络地址
|
||||||
|
'dir' => 'static/resource/images/attachment', // 附件路径
|
||||||
|
'att_size' => '24576', // 附件大小
|
||||||
|
'att_type' => 'image', // 附件类型image,video
|
||||||
|
'storage_type' => 'local', // 图片上传类型 local本地 aliyun 阿里云oss qiniu 七牛 ....
|
||||||
|
'cate_id' => $category_id, // 素材分类id
|
||||||
|
'create_time' => time()
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
$exist_attachment_list = $attachment_model->where([
|
$exist_attachment_list = $attachment_model->where([
|
||||||
@ -509,14 +522,13 @@ class AddSiteAfterListener
|
|||||||
$attachment_model->insertAll($attachment_list);
|
$attachment_model->insertAll($attachment_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
$poster_model = new Poster();
|
$poster = new CorePosterService();
|
||||||
$poster_count = $poster_model->where([
|
// 存在则删除
|
||||||
|
$poster->del([
|
||||||
[ 'site_id', '=', $site_id ],
|
[ 'site_id', '=', $site_id ],
|
||||||
[ 'type', '=', 'friendspay' ]
|
[ 'type', '=', 'friendspay' ]
|
||||||
])->count();
|
]);
|
||||||
if ($poster_count == 0) {
|
|
||||||
// 创建默认找朋友帮忙付海报
|
// 创建默认找朋友帮忙付海报
|
||||||
$poster = new CorePosterService();
|
|
||||||
$template = $poster->getTemplateList('', 'friendspay')[ 0 ];
|
$template = $poster->getTemplateList('', 'friendspay')[ 0 ];
|
||||||
$poster->add($site_id, '', [
|
$poster->add($site_id, '', [
|
||||||
'name' => $template[ 'name' ],
|
'name' => $template[ 'name' ],
|
||||||
@ -525,7 +537,6 @@ class AddSiteAfterListener
|
|||||||
'status' => 1,
|
'status' => 1,
|
||||||
'is_default' => 1
|
'is_default' => 1
|
||||||
]);
|
]);
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
54
niucloud/app/listener/system/ShowAppListener.php
Normal file
54
niucloud/app/listener/system/ShowAppListener.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\listener\system;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询应用列表
|
||||||
|
* Class ShowAppListener
|
||||||
|
* @package app\listener\system
|
||||||
|
*/
|
||||||
|
class ShowAppListener
|
||||||
|
{
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
// 应用:app、addon 待定
|
||||||
|
// 营销:promotion
|
||||||
|
// 工具:tool
|
||||||
|
return [
|
||||||
|
// 应用
|
||||||
|
'app' => [
|
||||||
|
|
||||||
|
],
|
||||||
|
// 工具
|
||||||
|
'tool' => [
|
||||||
|
[
|
||||||
|
'title' => '万能表单',
|
||||||
|
'desc' => '适用于各种应用场景,满足多样化的业务需求',
|
||||||
|
'icon' => 'static/resource/images/diy_form/icon.png',
|
||||||
|
'key' => 'diy_form',
|
||||||
|
'url' => '/diy_form/list',
|
||||||
|
],
|
||||||
|
// [
|
||||||
|
// 'title' => '万能a表单',
|
||||||
|
// 'desc' => '万能a表单',
|
||||||
|
// 'icon' => 'static/resource/images/diy_form/icon.png',
|
||||||
|
// 'key' => 'diy_faorm',
|
||||||
|
// 'url' => '/diy_faorm/list',
|
||||||
|
// ]
|
||||||
|
],
|
||||||
|
// 营销
|
||||||
|
'promotion' => [
|
||||||
|
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
44
niucloud/app/model/diy/DiyTheme.php
Normal file
44
niucloud/app/model/diy/DiyTheme.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy;
|
||||||
|
|
||||||
|
use app\dict\diy\PagesDict;
|
||||||
|
use app\dict\diy\TemplateDict;
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义主题配色表
|
||||||
|
* Class DiyTheme
|
||||||
|
* @package app\model\diy
|
||||||
|
*/
|
||||||
|
class DiyTheme extends BaseModel
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_theme';
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'value', 'diy_value' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
|
}
|
||||||
196
niucloud/app/model/diy_form/DiyForm.php
Normal file
196
niucloud/app/model/diy_form/DiyForm.php
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use app\dict\diy_form\TypeDict;
|
||||||
|
use app\model\addon\Addon;
|
||||||
|
use core\base\BaseModel;
|
||||||
|
use think\model\relation\HasMany;
|
||||||
|
use think\model\relation\HasOne;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义万能表单模型
|
||||||
|
* Class DiyForm
|
||||||
|
* @package app\model\diy
|
||||||
|
*/
|
||||||
|
class DiyForm extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'form_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form';
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'value', 'share' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getTypeNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (!empty($data[ 'type' ])) {
|
||||||
|
return TypeDict::getType([ 'key' => [ $data[ 'type' ] ] ])[ $data[ 'type' ] ][ 'title' ] ?? '';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化:所属插件名称
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getAddonNameAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'addon' ])) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return ( new Addon() )->where([ [ 'key', '=', $data[ 'addon' ] ] ])->column('title');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getShareAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'share' ])) {
|
||||||
|
$data[ 'share' ] = [
|
||||||
|
'wechat' => [
|
||||||
|
'title' => $data[ 'title' ],
|
||||||
|
'desc' => '',
|
||||||
|
'url' => ''
|
||||||
|
],
|
||||||
|
'weapp' => [
|
||||||
|
'title' => $data[ 'title' ],
|
||||||
|
'url' => ''
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return $data[ 'share' ] ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单名称
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchTitleAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value != '') {
|
||||||
|
$query->where("title|page_title", 'like', '%' . $this->handelSpecialCharacter($value) . '%');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单类型
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchTypeAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("type", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:所属插件标识
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchAddonAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("addon", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:状态
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchStatusAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value !== '') {
|
||||||
|
$query->where("status", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return HasOne
|
||||||
|
*/
|
||||||
|
public function writeConfig()
|
||||||
|
{
|
||||||
|
return $this->hasOne(DiyFormWriteConfig::class, 'form_id', 'form_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return HasOne
|
||||||
|
*/
|
||||||
|
public function submitConfig()
|
||||||
|
{
|
||||||
|
return $this->hasOne(DiyFormSubmitConfig::class, 'form_id', 'form_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return hasMany
|
||||||
|
*/
|
||||||
|
public function formField()
|
||||||
|
{
|
||||||
|
return $this->hasMany(DiyFormFields::class, 'form_id', 'form_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
159
niucloud/app/model/diy_form/DiyFormFields.php
Normal file
159
niucloud/app/model/diy_form/DiyFormFields.php
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义万能表单字段模型
|
||||||
|
* Class DiyFormFields
|
||||||
|
* @package app\model\diy
|
||||||
|
*/
|
||||||
|
class DiyFormFields extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'field_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form_fields';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段唯一标识
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldKeyAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_key", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段类型
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldTypeAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_type", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段名称
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldNameAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_name", 'like', '%' . $value . '%');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段是否必填 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldRequiredAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_required", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段是否隐藏 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldHiddenAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_hidden", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段内容防重复 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldUniqueAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_unique", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:隐私保护 0:关闭 1:开启
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchPrivacyProtectionAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("privacy_protection", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
144
niucloud/app/model/diy_form/DiyFormRecords.php
Normal file
144
niucloud/app/model/diy_form/DiyFormRecords.php
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use app\model\member\Member;
|
||||||
|
use core\base\BaseModel;
|
||||||
|
use think\model\relation\HasOne;
|
||||||
|
use think\db\Query;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义万能表单填写记录模型
|
||||||
|
* Class DiyFormRecords
|
||||||
|
* @package app\model\diy
|
||||||
|
*/
|
||||||
|
class DiyFormRecords extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'record_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form_records';
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'value' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:记录id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchRecordIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("record_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:关联表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:创建时间
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchCreateTimeAttr(Query $query, $value, $data)
|
||||||
|
{
|
||||||
|
$start_time = empty($value[ 0 ]) ? 0 : strtotime($value[ 0 ]);
|
||||||
|
$end_time = empty($value[ 1 ]) ? 0 : strtotime($value[ 1 ]);
|
||||||
|
if ($start_time > 0 && $end_time > 0) {
|
||||||
|
$query->whereBetweenTime('diy_form_records.create_time', $start_time, $end_time);
|
||||||
|
} else if ($start_time > 0 && $end_time == 0) {
|
||||||
|
$query->where([ [ 'diy_form_records.create_time', '>=', $start_time ] ]);
|
||||||
|
} else if ($start_time == 0 && $end_time > 0) {
|
||||||
|
$query->where([ [ 'diy_form_records.create_time', '<=', $end_time ] ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员关联
|
||||||
|
* @return HasOne
|
||||||
|
*/
|
||||||
|
public function member()
|
||||||
|
{
|
||||||
|
return $this->hasOne(Member::class, 'member_id', 'member_id')->joinType('left')
|
||||||
|
->withField('member_id,member_no, username, mobile, nickname, headimg');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联表单字段列表
|
||||||
|
* @return \think\model\relation\HasMany
|
||||||
|
*/
|
||||||
|
public function formFieldList()
|
||||||
|
{
|
||||||
|
return $this->hasMany(DiyFormFields::class, 'form_id', 'form_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联填写字段列表
|
||||||
|
* @return \think\model\relation\HasMany
|
||||||
|
*/
|
||||||
|
public function recordsFieldList()
|
||||||
|
{
|
||||||
|
return $this->hasMany(DiyFormRecordsFields::class, 'record_id', 'record_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联表单提交页配置
|
||||||
|
* @return HasOne
|
||||||
|
*/
|
||||||
|
public function submitConfig()
|
||||||
|
{
|
||||||
|
return $this->hasOne(DiyFormSubmitConfig::class, 'form_id', 'form_id')->joinType('left')
|
||||||
|
->withField('id,form_id,submit_after_action,tips_type,tips_text,success_after_action');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单关联
|
||||||
|
* @return HasOne
|
||||||
|
*/
|
||||||
|
public function form()
|
||||||
|
{
|
||||||
|
return $this->hasOne(DiyForm::class, 'form_id', 'form_id')->joinType('left')
|
||||||
|
->withField('form_id,page_title,type')->append([ 'type_name' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
218
niucloud/app/model/diy_form/DiyFormRecordsFields.php
Normal file
218
niucloud/app/model/diy_form/DiyFormRecordsFields.php
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use app\dict\diy_form\ComponentDict;
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义万能表单填写字段模型
|
||||||
|
* Class DiyFormRecordsFields
|
||||||
|
* @package app\model\diy_form
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsFields extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form_records_fields';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getRenderValueAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (!empty($data[ 'field_value' ])) {
|
||||||
|
$component = ComponentDict::getComponent([
|
||||||
|
'component_name' => $data[ 'field_type' ]
|
||||||
|
]);
|
||||||
|
$render_value = $data[ 'field_value' ]; // 默认渲染值
|
||||||
|
if (isset($component[ 'render' ])) {
|
||||||
|
$render = $component[ 'render' ];
|
||||||
|
if ($render instanceof \Closure) {
|
||||||
|
$render_value = $render($data[ 'field_value' ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $render_value;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getHandleFieldValueAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (!empty($data[ 'field_value' ])) {
|
||||||
|
$component = ComponentDict::getComponent([
|
||||||
|
'component_name' => $data[ 'field_type' ]
|
||||||
|
]);
|
||||||
|
$render_value = $data[ 'field_value' ]; // 默认渲染值
|
||||||
|
if (isset($component[ 'convert' ])) {
|
||||||
|
$render = $component[ 'convert' ];
|
||||||
|
if ($render instanceof \Closure) {
|
||||||
|
$render_value = $render($data[ 'field_value' ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $render_value;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态字段转化
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getDetailComponentAttr($value, $data)
|
||||||
|
{
|
||||||
|
if (!empty($data[ 'field_key' ])) {
|
||||||
|
$detail_component = '';
|
||||||
|
$component = ComponentDict::getComponent([ 'component_name' => $data[ 'field_type' ] ]);
|
||||||
|
if (!empty($component)) {
|
||||||
|
$detail_component = $component[ 'value' ][ 'field' ][ 'detailComponent' ] ?? '';
|
||||||
|
}
|
||||||
|
if (empty($detail_component)) {
|
||||||
|
$detail_component = '/src/app/views/diy_form/components/detail-form-render.vue';
|
||||||
|
}
|
||||||
|
return $detail_component;
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段唯一标识
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldKeyAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_key", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段类型
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldTypeAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_type", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段名称
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldNameAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_name", 'like', '%' . $value . '%');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段是否必填 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldRequiredAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_required", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段是否隐藏 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldHiddenAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_hidden", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:字段内容防重复 0:否 1:是
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFieldUniqueAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("field_unique", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:隐私保护 0:关闭 1:开启
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchPrivacyProtectionAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("privacy_protection", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
61
niucloud/app/model/diy_form/DiyFormSubmitConfig.php
Normal file
61
niucloud/app/model/diy_form/DiyFormSubmitConfig.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单提交页配置模型
|
||||||
|
* Class DiyFormSubmitConfig
|
||||||
|
* @package app\model\diy_form
|
||||||
|
*/
|
||||||
|
class DiyFormSubmitConfig extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'time_limit_rule', 'voucher_content_rule', 'success_after_action' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form_submit_config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
61
niucloud/app/model/diy_form/DiyFormWriteConfig.php
Normal file
61
niucloud/app/model/diy_form/DiyFormWriteConfig.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\model\diy_form;
|
||||||
|
|
||||||
|
use core\base\BaseModel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单填写配置模型
|
||||||
|
* Class DiyFormWriteConfig
|
||||||
|
* @package app\model\diy_form
|
||||||
|
*/
|
||||||
|
class DiyFormWriteConfig extends BaseModel
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $type = [
|
||||||
|
'create_time' => 'timestamp',
|
||||||
|
'update_time' => 'timestamp',
|
||||||
|
];
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'level_ids', 'label_ids', 'member_write_rule', 'form_write_rule', 'time_limit_rule' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据表主键
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $pk = 'id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型名称
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $name = 'diy_form_write_config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 搜索器:表单id
|
||||||
|
* @param $query
|
||||||
|
* @param $value
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function searchFormIdAttr($query, $value, $data)
|
||||||
|
{
|
||||||
|
if ($value) {
|
||||||
|
$query->where("form_id", $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -268,4 +268,5 @@ class Member extends BaseModel
|
|||||||
{
|
{
|
||||||
return $this->hasOne(MemberLevel::class, 'level_id', 'member_level')->bind([ 'member_level_name' => 'level_name' ]);
|
return $this->hasOne(MemberLevel::class, 'level_id', 'member_level')->bind([ 'member_level_name' => 'level_name' ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,6 +40,12 @@ class MemberCashOut extends BaseModel
|
|||||||
'transfer_time' => 'timestamp',
|
'transfer_time' => 'timestamp',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'transfer_payee' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员信息
|
* 会员信息
|
||||||
* @return HasOne
|
* @return HasOne
|
||||||
|
|||||||
@ -41,6 +41,12 @@ class Transfer extends BaseModel
|
|||||||
'finish_time' => 'timestamp',
|
'finish_time' => 'timestamp',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// 设置json类型字段
|
||||||
|
protected $json = [ 'transfer_payee' ];
|
||||||
|
|
||||||
|
// 设置JSON数据返回数组
|
||||||
|
protected $jsonAssoc = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态字段转化
|
* 状态字段转化
|
||||||
* @param $value
|
* @param $value
|
||||||
|
|||||||
@ -16,9 +16,13 @@ use app\dict\diy\LinkDict;
|
|||||||
use app\dict\diy\PagesDict;
|
use app\dict\diy\PagesDict;
|
||||||
use app\dict\diy\TemplateDict;
|
use app\dict\diy\TemplateDict;
|
||||||
use app\dict\sys\FileDict;
|
use app\dict\sys\FileDict;
|
||||||
|
use app\model\addon\Addon;
|
||||||
use app\model\diy\Diy;
|
use app\model\diy\Diy;
|
||||||
|
use app\model\diy\DiyTheme;
|
||||||
use app\service\admin\sys\SystemService;
|
use app\service\admin\sys\SystemService;
|
||||||
use app\service\core\diy\CoreDiyConfigService;
|
use app\service\core\diy\CoreDiyConfigService;
|
||||||
|
use app\service\core\diy\CoreDiyService;
|
||||||
|
use app\service\core\site\CoreSiteService;
|
||||||
use core\base\BaseAdminService;
|
use core\base\BaseAdminService;
|
||||||
use core\exception\AdminException;
|
use core\exception\AdminException;
|
||||||
use Exception;
|
use Exception;
|
||||||
@ -26,6 +30,7 @@ use think\db\exception\DataNotFoundException;
|
|||||||
use think\db\exception\DbException;
|
use think\db\exception\DbException;
|
||||||
use think\db\exception\ModelNotFoundException;
|
use think\db\exception\ModelNotFoundException;
|
||||||
use think\facade\Db;
|
use think\facade\Db;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义页面服务层
|
* 自定义页面服务层
|
||||||
@ -809,4 +814,111 @@ class DiyService extends BaseAdminService
|
|||||||
return $res->id;
|
return $res->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取自定义主题配色
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDiyTheme()
|
||||||
|
{
|
||||||
|
$site_addon = ( new CoreSiteService() )->getSiteCache($this->site_id);
|
||||||
|
$theme_data = ( new DiyTheme() )->where([['site_id', '=', $this->site_id], ['type', '=', 'app']])->column('id,color_mark,color_name,diy_value,value,title,mode','addon');
|
||||||
|
$defaultColor = ( new CoreDiyService() )->getDefaultColor();
|
||||||
|
$app_theme['app'] = [
|
||||||
|
'id' => $theme_data['app']['id'] ?? '',
|
||||||
|
'icon' => '',
|
||||||
|
'addon_title' => '系统',
|
||||||
|
'mode' => 'diy',
|
||||||
|
'title' => $theme_data['app']['title'] ?? '系统主色调',
|
||||||
|
'color_mark' => $theme_data['app']['color_mark'] ?? $defaultColor['name'],
|
||||||
|
'color_name' => $theme_data['app']['color_name'] ?? $defaultColor['title'],
|
||||||
|
'value' => $theme_data['app']['value'] ?? $defaultColor['theme'],
|
||||||
|
'diy_value' => $theme_data['app']['diy_value'] ?? '',
|
||||||
|
];
|
||||||
|
$data = [];
|
||||||
|
foreach ($site_addon[ 'apps' ] as $value){
|
||||||
|
$default_theme_data = array_values(array_filter(event('ThemeColor', [ 'key' => $value['key']])))[0] ?? [];
|
||||||
|
$data[$value['key']]['id'] = $theme_data[$value['key']]['id'] ?? '';
|
||||||
|
$data[$value['key']]['icon'] = $value['icon'] ?? '';
|
||||||
|
$data[$value['key']]['mode'] = $theme_data[$value['key']]['mode'] ?? 'diy';
|
||||||
|
$data[$value['key']]['addon_title'] = $value['title'] ?? '';
|
||||||
|
$data[$value['key']]['title'] = $theme_data[$value['key']]['title'] ?? $value['title'].'主色调';
|
||||||
|
$data[$value['key']]['color_mark'] = $theme_data[$value['key']]['color_mark'] ?? ($default_theme_data ? $default_theme_data[ 'name' ] : $defaultColor['name']);
|
||||||
|
$data[$value['key']]['color_name'] = $theme_data[$value['key']]['color_name'] ?? ($default_theme_data ? $default_theme_data[ 'title' ] : $defaultColor['title']);
|
||||||
|
$data[$value['key']]['value'] = $theme_data[$value['key']]['value'] ?? ($default_theme_data ? $default_theme_data[ 'theme' ] : $defaultColor['theme']);
|
||||||
|
$data[$value['key']]['diy_value'] = $theme_data[$value['key']]['diy_value'] ?? '';
|
||||||
|
}
|
||||||
|
if (count($site_addon[ 'apps' ]) > 1) {
|
||||||
|
$data = array_merge($app_theme,$data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置主题配色
|
||||||
|
* @param array $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function setDiyTheme($data)
|
||||||
|
{
|
||||||
|
$diy_theme_model = new (new DiyTheme());
|
||||||
|
|
||||||
|
$addon_data = (new addon())->where([['support_app', '=', $data['key']]])->select()->toArray();
|
||||||
|
$addon_save_data = [];
|
||||||
|
if (!empty($addon_data)){
|
||||||
|
foreach ($addon_data as $value){
|
||||||
|
$addon_save_data[] = [
|
||||||
|
'site_id' => $this->site_id,
|
||||||
|
'type' => 'addon',
|
||||||
|
'addon' => $value['key'],
|
||||||
|
'color_mark' => $data['color_mark'],
|
||||||
|
'color_name' => $data['color_name'],
|
||||||
|
'mode' => $data['mode'],
|
||||||
|
'value' => $data['value'],
|
||||||
|
'diy_value' => $data['diy_value'],
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Db::startTrans();
|
||||||
|
if(!empty($data['id'])){
|
||||||
|
$data['update_time'] = time();
|
||||||
|
unset($data['key']);
|
||||||
|
$diy_theme_model->where([['id', '=', $data['id']], ['site_id', '=', $this->site_id]])->update($data);
|
||||||
|
if (!empty($addon_save_data)){
|
||||||
|
foreach ($addon_save_data as $value){
|
||||||
|
$diy_theme_model->where([['addon', '=', $value['addon']], ['site_id', '=', $this->site_id]])->update($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$data['site_id'] = $this->site_id;
|
||||||
|
$data['type'] = 'app';
|
||||||
|
$data['addon'] = $data['key'];
|
||||||
|
$data['crete_time'] = time();
|
||||||
|
unset($data['id'],$data['key']);
|
||||||
|
array_unshift($addon_save_data, $data);
|
||||||
|
foreach ($addon_save_data as $value){
|
||||||
|
unset($value['update_time']);
|
||||||
|
$diy_theme_model->create($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Db::commit();
|
||||||
|
return true;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new AdminException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认主题配色
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDefaultThemeColor()
|
||||||
|
{
|
||||||
|
return ( new CoreDiyService() )->getDefaultThemeColor();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
78
niucloud/app/service/admin/diy_form/DiyFormConfig.php
Normal file
78
niucloud/app/service/admin/diy_form/DiyFormConfig.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\admin\diy_form;
|
||||||
|
|
||||||
|
use app\service\core\diy_form\CoreDiyFormConfigService;
|
||||||
|
use core\base\BaseAdminService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单配置服务层
|
||||||
|
* Class DiyFormService
|
||||||
|
* @package app\service\admin\diy
|
||||||
|
*/
|
||||||
|
class DiyFormConfig extends BaseAdminService
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑填写配置
|
||||||
|
* @param $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function editWriteConfig($data)
|
||||||
|
{
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
return ( new CoreDiyFormConfigService() )->editWriteConfig($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写配置
|
||||||
|
* @param $form_id
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getWriteConfig($form_id)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'site_id' => $this->site_id,
|
||||||
|
'form_id' => $form_id
|
||||||
|
];
|
||||||
|
return ( new CoreDiyFormConfigService() )->getWriteConfig($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑提交配置
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function editSubmitConfig($data)
|
||||||
|
{
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
return ( new CoreDiyFormConfigService() )->editSubmitConfig($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单提交成功页配置
|
||||||
|
* @param $form_id
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getSubmitConfig($form_id)
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'site_id' => $this->site_id,
|
||||||
|
'form_id' => $form_id
|
||||||
|
];
|
||||||
|
return ( new CoreDiyFormConfigService() )->getSubmitConfig($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
139
niucloud/app/service/admin/diy_form/DiyFormRecordsService.php
Normal file
139
niucloud/app/service/admin/diy_form/DiyFormRecordsService.php
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\admin\diy_form;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
use app\model\diy_form\DiyFormRecordsFields;
|
||||||
|
use core\base\BaseAdminService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单填写记录服务层
|
||||||
|
* Class DiyFormRecordsService
|
||||||
|
* @package app\service\admin\diy
|
||||||
|
*/
|
||||||
|
class DiyFormRecordsService extends BaseAdminService
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->model = new DiyFormRecords();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单填表人统计列表
|
||||||
|
* @param array $where
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPage(array $where = [])
|
||||||
|
{
|
||||||
|
$field = 'form_id, diy_form_records.member_id, count(*) as write_count';
|
||||||
|
$search_model = $this->model->where([ [ 'diy_form_records.site_id', '=', $this->site_id ] ])->withSearch([ 'form_id' ], $where)
|
||||||
|
->withJoin([ 'member' => function($query) use ($where) {
|
||||||
|
$query->where([ [ 'nickname|mobile', 'like', "%" . $where[ 'keyword' ] . "%" ] ]);
|
||||||
|
} ])->field($field)->group('diy_form_records.member_id');
|
||||||
|
return $this->pageQuery($search_model);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单字段统计列表
|
||||||
|
* @param array $where
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getFieldStatList(array $where = [])
|
||||||
|
{
|
||||||
|
$field_list = ( new DiyFormService() )->getFieldsList($where, 'field_id, field_key, field_type, field_name');
|
||||||
|
$simple_field_list = array_filter($field_list, function($v) { return !in_array($v[ 'field_type' ], [ 'FormRadio', 'FormCheckbox', 'FormDateScope', 'FormTimeScope', 'FormImage' ]); });
|
||||||
|
$json_field_list = array_filter($field_list, function($v) { return in_array($v[ 'field_type' ], [ 'FormRadio', 'FormCheckbox', 'FormDateScope', 'FormTimeScope' ]); });
|
||||||
|
|
||||||
|
$records_field_model = new DiyFormRecordsFields();
|
||||||
|
foreach ($simple_field_list as $k => &$v) {
|
||||||
|
$value_list = $records_field_model->field('form_id, field_key, field_type, field_value, count(*) as write_count')->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'field_key', '=', $v[ 'field_key' ] ],
|
||||||
|
[ 'field_type', '=', $v[ 'field_type' ] ]
|
||||||
|
])->withSearch([ 'form_id' ], $where)->group('field_value')->append([ 'render_value' ])->select()->toArray();
|
||||||
|
$total_count = $records_field_model->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'field_key', '=', $v[ 'field_key' ] ],
|
||||||
|
[ 'field_type', '=', $v[ 'field_type' ] ]
|
||||||
|
])->withSearch([ 'form_id' ], $where)->count();
|
||||||
|
if ($total_count > 0) {
|
||||||
|
$total_percent = 100;
|
||||||
|
foreach ($value_list as $k1 => &$v1) {
|
||||||
|
if ($k1 == count($value_list) - 1) {
|
||||||
|
$item_percent = $total_percent;
|
||||||
|
} else {
|
||||||
|
$item_percent = round($v1['write_count'] / $total_count * 100, 2);
|
||||||
|
}
|
||||||
|
$v1['write_percent'] = floatval($item_percent);
|
||||||
|
$total_percent = bcsub($total_percent, $item_percent, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$v[ 'value_list' ] = $value_list;
|
||||||
|
}
|
||||||
|
foreach ($json_field_list as $k => &$v) {
|
||||||
|
$field_list = $records_field_model->field('form_id, field_key, field_type, field_value')->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'field_key', '=', $v[ 'field_key' ] ],
|
||||||
|
[ 'field_type', '=', $v[ 'field_type' ] ]
|
||||||
|
])->withSearch([ 'form_id' ], $where)->append([ 'render_value' ])->select()->toArray();
|
||||||
|
|
||||||
|
$total_count = 0;
|
||||||
|
$value_list = [];
|
||||||
|
foreach ($field_list as $k1 => &$v1) {
|
||||||
|
if ($v1[ 'field_type' ] != 'FormCheckbox') {
|
||||||
|
$key = $v1[ 'field_key' ] . '_' . $v1[ 'render_value' ];
|
||||||
|
if (isset($value_list[ $key ])) {
|
||||||
|
$value_list[ $key ][ 'write_count' ] = $value_list[ $key ][ 'write_count' ] + 1;
|
||||||
|
$total_count++;
|
||||||
|
} else {
|
||||||
|
// 如果不存在,则初始化为1
|
||||||
|
$value_list[ $key ] = $v1;
|
||||||
|
$value_list[ $key ][ 'write_count' ] = 1;
|
||||||
|
$total_count++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$value_arr = explode(',', $v1[ 'render_value' ]);
|
||||||
|
foreach ($value_arr as $k2 => $v2) {
|
||||||
|
$key = $v1[ 'field_key' ] . '_' . $v2;
|
||||||
|
if (isset($value_list[ $key ])) {
|
||||||
|
$value_list[ $key ][ 'write_count' ] = $value_list[ $key ][ 'write_count' ] + 1;
|
||||||
|
$total_count++;
|
||||||
|
} else {
|
||||||
|
$value_list[ $key ] = $v1;
|
||||||
|
$value_list[ $key ][ 'render_value' ] = $v2;
|
||||||
|
$value_list[ $key ][ 'write_count' ] = 1;
|
||||||
|
$total_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($total_count > 0) {
|
||||||
|
$value_list = array_values($value_list);
|
||||||
|
$total_percent = 100;
|
||||||
|
foreach ($value_list as $k1 => &$v1) {
|
||||||
|
if ($k1 == count($value_list) - 1) {
|
||||||
|
$item_percent = $total_percent;
|
||||||
|
} else {
|
||||||
|
$item_percent = round($v1['write_count'] / $total_count * 100, 2);
|
||||||
|
}
|
||||||
|
$v1['write_percent'] = floatval($item_percent);
|
||||||
|
$total_percent = bcsub($total_percent, $item_percent, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$v[ 'value_list' ] = $value_list;
|
||||||
|
}
|
||||||
|
return array_merge($simple_field_list, $json_field_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
636
niucloud/app/service/admin/diy_form/DiyFormService.php
Normal file
636
niucloud/app/service/admin/diy_form/DiyFormService.php
Normal file
@ -0,0 +1,636 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\admin\diy_form;
|
||||||
|
|
||||||
|
use app\dict\diy_form\ComponentDict as DiyFormComponentDict;
|
||||||
|
use app\dict\diy\PagesDict;
|
||||||
|
use app\dict\diy_form\TemplateDict;
|
||||||
|
use app\dict\diy_form\TypeDict;
|
||||||
|
use app\model\diy_form\DiyForm;
|
||||||
|
use app\model\diy_form\DiyFormFields;
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
use app\model\diy_form\DiyFormRecordsFields;
|
||||||
|
use app\model\diy_form\DiyFormSubmitConfig;
|
||||||
|
use app\model\diy_form\DiyFormWriteConfig;
|
||||||
|
use app\service\admin\diy\DiyService;
|
||||||
|
use app\service\admin\sys\SystemService;
|
||||||
|
use app\service\core\diy_form\CoreDiyFormConfigService;
|
||||||
|
use app\service\core\diy_form\CoreDiyFormRecordsService;
|
||||||
|
use core\base\BaseAdminService;
|
||||||
|
use core\exception\AdminException;
|
||||||
|
use core\exception\CommonException;
|
||||||
|
use think\db\exception\DataNotFoundException;
|
||||||
|
use think\db\exception\DbException;
|
||||||
|
use think\db\exception\ModelNotFoundException;
|
||||||
|
use think\facade\Db;
|
||||||
|
use think\facade\Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单服务层
|
||||||
|
* Class DiyFormService
|
||||||
|
* @package app\service\admin\diy
|
||||||
|
*/
|
||||||
|
class DiyFormService extends BaseAdminService
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->model = new DiyForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单分页列表
|
||||||
|
* @param array $where
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPage(array $where = [])
|
||||||
|
{
|
||||||
|
$where[] = [ 'site_id', '=', $this->site_id ];
|
||||||
|
$field = 'form_id, page_title, title, type, status, addon, share, write_num, remark, update_time';
|
||||||
|
$order = "form_id desc";
|
||||||
|
|
||||||
|
$search_model = $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ "title", "type", 'addon' ], $where)->field($field)->order($order)->append([ 'type_name', 'addon_name' ]);
|
||||||
|
return $this->pageQuery($search_model);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单列表
|
||||||
|
* @param array $where
|
||||||
|
* @param string $field
|
||||||
|
* @return array
|
||||||
|
* @throws DataNotFoundException
|
||||||
|
* @throws DbException
|
||||||
|
* @throws ModelNotFoundException
|
||||||
|
*/
|
||||||
|
public function getList(array $where = [], $field = 'form_id, page_title, title, type, status, addon, share, write_num, remark, update_time')
|
||||||
|
{
|
||||||
|
$order = "form_id desc";
|
||||||
|
return $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ "title", "type", 'addon', 'status' ], $where)->field($field)->order($order)->append([ 'type_name', 'addon_name' ])->select()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单信息
|
||||||
|
* @param int $form_id
|
||||||
|
* @param string $field
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getInfo(int $form_id, $field = 'form_id, page_title, title, type, status, value, addon, share, write_num,template')
|
||||||
|
{
|
||||||
|
return $this->model->field($field)->where([ [ 'form_id', '=', $form_id ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单数量
|
||||||
|
* @param array $where
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getCount(array $where = [])
|
||||||
|
{
|
||||||
|
return $this->model->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'type' ], $where)->count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加万能表单
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function add(array $data)
|
||||||
|
{
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
if (empty($data[ 'site_id' ])) {
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
}
|
||||||
|
$data[ 'status' ] = 1; // 默认为开启状态
|
||||||
|
$data[ 'create_time' ] = time();
|
||||||
|
$data[ 'update_time' ] = time();
|
||||||
|
$data[ 'addon' ] = TypeDict::getType([ 'type' => $data[ 'type' ] ])[ 'addon' ] ?? '';
|
||||||
|
$res = $this->model->create($data);
|
||||||
|
|
||||||
|
$diy_form_fields = [];
|
||||||
|
if (!empty($data[ 'value' ])) {
|
||||||
|
|
||||||
|
$value = json_decode($data[ 'value' ], true);
|
||||||
|
foreach ($value[ 'value' ] as $component) {
|
||||||
|
// 过滤非表单组件和表单提交按钮组件
|
||||||
|
if ($component[ 'componentType' ] != 'diy_form' || $component[ 'componentName' ] == 'FormSubmit') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($component[ 'field' ][ 'default' ]) && is_array($component[ 'field' ][ 'default' ])) {
|
||||||
|
$component[ 'field' ][ 'default' ] = json_encode($component[ 'field' ][ 'default' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$diy_form_fields[] = [
|
||||||
|
'site_id' => $this->site_id,
|
||||||
|
'form_id' => $res->form_id, // 所属万能表单id
|
||||||
|
'field_key' => $component[ 'id' ], // 字段唯一标识
|
||||||
|
'field_type' => $component[ 'componentName' ], // 字段类型
|
||||||
|
'field_name' => $component[ 'field' ][ 'name' ] ?? '', // 字段名称
|
||||||
|
'field_remark' => $component[ 'field' ][ 'remark' ][ 'text' ] ?? '', // 字段说明
|
||||||
|
'field_default' => $component[ 'field' ][ 'default' ] ?? '', // 字段默认值
|
||||||
|
'field_required' => $component[ 'field' ][ 'required' ], // 字段是否必填 0:否 1:是
|
||||||
|
'field_hidden' => $component[ 'isHidden' ], // 字段是否隐藏 0:否 1:是
|
||||||
|
'field_unique' => $component[ 'field' ][ 'unique' ], // 字段内容防重复 0:否 1:是
|
||||||
|
'privacy_protection' => $component[ 'field' ][ 'privacyProtection' ], // 隐私保护 0:关闭 1:开启
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$form_fields_model = new DiyFormFields();
|
||||||
|
$form_fields_model->insertAll($diy_form_fields);
|
||||||
|
|
||||||
|
// 初始化表单填写配置
|
||||||
|
( new CoreDiyFormConfigService() )->addWriteConfig([ 'site_id' => $this->site_id, 'form_id' => $res->form_id ]);
|
||||||
|
|
||||||
|
// 初始化表单提交成功页配置
|
||||||
|
( new CoreDiyFormConfigService() )->addSubmitConfig([ 'site_id' => $this->site_id, 'form_id' => $res->form_id ]);
|
||||||
|
Db::commit();
|
||||||
|
return $res->id;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑万能表单
|
||||||
|
* @param int $form_id
|
||||||
|
* @param array $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function edit(int $form_id, array $data)
|
||||||
|
{
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$data[ 'update_time' ] = time();
|
||||||
|
if (empty($data[ 'site_id' ])) {
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新万能表单
|
||||||
|
$this->model->where([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'form_id', '=', $form_id ] ])->update($data);
|
||||||
|
|
||||||
|
// 更新万能表单字段信息
|
||||||
|
$form_fields_model = new DiyFormFields();
|
||||||
|
|
||||||
|
if (!empty($data[ 'value' ])) {
|
||||||
|
$value = json_decode($data[ 'value' ], true);
|
||||||
|
|
||||||
|
if (!empty($value[ 'value' ])) {
|
||||||
|
$form_fields_add = $form_fields_update = $form_fields_delete_ids = [];
|
||||||
|
|
||||||
|
$form_component = []; // 存储表单组件集合
|
||||||
|
$form_fields_list = $form_fields_model->where([ [ 'site_id', '=', $this->site_id ], [ 'form_id', '=', $form_id ] ])->column('field_id', 'field_key');
|
||||||
|
|
||||||
|
foreach ($value[ 'value' ] as $component) {
|
||||||
|
// 过滤非表单组件和表单提交按钮组件
|
||||||
|
if ($component[ 'componentType' ] != 'diy_form' || $component[ 'componentName' ] == 'FormSubmit') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($component[ 'field' ][ 'default' ]) && is_array($component[ 'field' ][ 'default' ])) {
|
||||||
|
$component[ 'field' ][ 'default' ] = json_encode($component[ 'field' ][ 'default' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$form_component[] = $component;
|
||||||
|
if (isset($form_fields_list[ $component[ 'id' ] ])) {
|
||||||
|
$form_fields_update = [
|
||||||
|
'field_id' => $form_fields_list[ $component[ 'id' ] ],
|
||||||
|
'field_name' => $component[ 'field' ][ 'name' ] ?? '', // 字段名称
|
||||||
|
'field_remark' => $component[ 'field' ][ 'remark' ][ 'text' ] ?? '', // 字段说明
|
||||||
|
'field_default' => $component[ 'field' ][ 'default' ] ?? '', // 字段默认值
|
||||||
|
'field_required' => $component[ 'field' ][ 'required' ], // 字段是否必填 0:否 1:是
|
||||||
|
'field_hidden' => $component[ 'isHidden' ], // 字段是否隐藏 0:否 1:是
|
||||||
|
'field_unique' => $component[ 'field' ][ 'unique' ], // 字段内容防重复 0:否 1:是
|
||||||
|
'privacy_protection' => $component[ 'field' ][ 'privacyProtection' ], // 隐私保护 0:关闭 1:开启
|
||||||
|
'update_time' => time()
|
||||||
|
];
|
||||||
|
// 更新万能表单字段
|
||||||
|
$form_fields_model->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'field_id', '=', $form_fields_list[ $component[ 'id' ] ] ]
|
||||||
|
])->update($form_fields_update);
|
||||||
|
} else {
|
||||||
|
$form_fields_add[] = [
|
||||||
|
'site_id' => $this->site_id,
|
||||||
|
'form_id' => $form_id,
|
||||||
|
'field_key' => $component[ 'id' ], // 字段唯一标识
|
||||||
|
'field_type' => $component[ 'componentName' ], // 字段类型
|
||||||
|
'field_name' => $component[ 'field' ][ 'name' ] ?? '', // 字段名称
|
||||||
|
'field_remark' => $component[ 'field' ][ 'remark' ][ 'text' ] ?? '', // 字段说明
|
||||||
|
'field_default' => $component[ 'field' ][ 'default' ] ?? '', // 字段默认值
|
||||||
|
'field_required' => $component[ 'field' ][ 'required' ], // 字段是否必填 0:否 1:是
|
||||||
|
'field_hidden' => $component[ 'isHidden' ], // 字段是否隐藏 0:否 1:是
|
||||||
|
'field_unique' => $component[ 'field' ][ 'unique' ], // 字段内容防重复 0:否 1:是
|
||||||
|
'privacy_protection' => $component[ 'field' ][ 'privacyProtection' ], // 隐私保护 0:关闭 1:开启
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_key_list = array_column($form_component, 'id');
|
||||||
|
$form_fields_delete_ids = array_diff(array_keys($form_fields_list), $field_key_list);
|
||||||
|
|
||||||
|
// 添加万能表单字段
|
||||||
|
if (!empty($form_fields_add)) {
|
||||||
|
$form_fields_model->insertAll($form_fields_add);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除万能表单字段
|
||||||
|
if (!empty($form_fields_delete_ids)) {
|
||||||
|
$form_fields_model->where([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'form_id', '=', $form_id ], [ 'field_key', 'in', $form_fields_delete_ids ] ])->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 未找到表单组件,则全部清空
|
||||||
|
$form_fields_model->where([ [ 'site_id', '=', $data[ 'site_id' ] ], [ 'form_id', '=', $form_id ] ])->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Db::commit();
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除万能表单
|
||||||
|
* @param array $form_ids
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function del(array $form_ids)
|
||||||
|
{
|
||||||
|
$where = [
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'form_id', 'in', $form_ids ]
|
||||||
|
];
|
||||||
|
|
||||||
|
$status_count = $this->model->where($where)->where([ [ 'status', '=', 1 ] ])->count();
|
||||||
|
|
||||||
|
if ($status_count > 0) throw new AdminException('ON_STATUS_PROHIBIT_DELETE');
|
||||||
|
|
||||||
|
$form_fields_model = new DiyFormFields();
|
||||||
|
$form_records_model = new DiyFormRecords();
|
||||||
|
$form_records_fields_model = new DiyFormRecordsFields();
|
||||||
|
$form_submit_config_model = new DiyFormSubmitConfig();
|
||||||
|
$form_write_config_model = new DiyFormWriteConfig();
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
//删除万能表单表
|
||||||
|
$this->model->where($where)->delete();
|
||||||
|
|
||||||
|
//删除万能表单字段表
|
||||||
|
$form_fields_model->where($where)->delete();
|
||||||
|
|
||||||
|
//删除万能表单填写记录
|
||||||
|
$form_records_model->where($where)->delete();
|
||||||
|
|
||||||
|
//删除万能表单填写字段
|
||||||
|
$form_records_fields_model->where($where)->delete();
|
||||||
|
|
||||||
|
//删除万能表单提交页配置
|
||||||
|
$form_submit_config_model->where($where)->delete();
|
||||||
|
|
||||||
|
//删除万能表单填写配置
|
||||||
|
$form_write_config_model->where($where)->delete();
|
||||||
|
|
||||||
|
Db::commit();
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 页面加载初始化
|
||||||
|
* @param array $params
|
||||||
|
* @return array
|
||||||
|
* @throws DbException
|
||||||
|
*/
|
||||||
|
public function getInit(array $params = [])
|
||||||
|
{
|
||||||
|
$time = time();
|
||||||
|
$data = [];
|
||||||
|
if (!empty($params[ 'form_id' ])) {
|
||||||
|
$data = $this->getInfo($params[ 'form_id' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($data)) {
|
||||||
|
$current_type = TypeDict::getType([ 'type' => $data[ 'type' ] ]);
|
||||||
|
$type_name = $current_type[ 'title' ];
|
||||||
|
$data[ 'type_name' ] = $type_name;
|
||||||
|
} else {
|
||||||
|
if (!isset($params[ 'type' ]) || empty($params[ 'type' ])) throw new AdminException('DIY_FORM_TYPE_NOT_EXIST');
|
||||||
|
$type = $params[ 'type' ];
|
||||||
|
|
||||||
|
// 新页面赋值
|
||||||
|
$page_title = $params[ 'title' ] ? : '表单页面' . $time; // 页面标题(用于前台展示)
|
||||||
|
|
||||||
|
$current_type = TypeDict::getType([ 'type' => $params[ 'type' ] ]);
|
||||||
|
$type_name = $current_type[ 'title' ];
|
||||||
|
$title = $type_name;
|
||||||
|
$value = '';
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'page_title' => $page_title, // 页面名称(用于后台展示)
|
||||||
|
'title' => $title, // 页面标题(用于前台展示)
|
||||||
|
'type' => $type,
|
||||||
|
'type_name' => $type_name,
|
||||||
|
'value' => $value,
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$data[ 'component' ] = $this->getComponentList($data[ 'type' ]);
|
||||||
|
$data[ 'domain_url' ] = ( new SystemService() )->getUrl();
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改分享内容
|
||||||
|
* @param $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function modifyShare($data)
|
||||||
|
{
|
||||||
|
$this->model->where([ [ 'site_id', '=', $this->site_id ], [ 'form_id', '=', $data[ 'form_id' ] ] ])->update([ 'share' => $data[ 'share' ] ]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取组件列表(表单组件+自定义装修的组件)
|
||||||
|
* @param string $type 支持表单类型
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getComponentList(string $type = '')
|
||||||
|
{
|
||||||
|
$componentType = function(&$component_list, $type) {
|
||||||
|
if (!empty($component_list)) {
|
||||||
|
foreach ($component_list as $k => &$value) {
|
||||||
|
if (!empty($value[ 'list' ])) {
|
||||||
|
foreach ($value[ 'list' ] as $ck => &$v) {
|
||||||
|
$v[ 'componentType' ] = $type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$form_component_list = DiyFormComponentDict::getComponent();
|
||||||
|
foreach ($form_component_list as $k => $v) {
|
||||||
|
// 查询组件支持的表单类型
|
||||||
|
$sort_arr = [];
|
||||||
|
foreach ($v[ 'list' ] as $ck => $cv) {
|
||||||
|
$support = $cv[ 'support' ] ?? [];
|
||||||
|
if (!( count($support) == 0 || in_array($type, $support) )) {
|
||||||
|
unset($form_component_list[ $k ][ 'list' ][ $ck ]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sort_arr [] = $cv[ 'sort' ];
|
||||||
|
unset($form_component_list[ $k ][ 'list' ][ $ck ][ 'sort' ], $form_component_list[ $k ][ 'list' ][ $ck ][ 'support' ]);
|
||||||
|
}
|
||||||
|
array_multisort($sort_arr, SORT_ASC, $form_component_list[ $k ][ 'list' ]); //排序,根据 sort 排序
|
||||||
|
}
|
||||||
|
$componentType($form_component_list, 'diy_form');
|
||||||
|
|
||||||
|
$diy_service = new DiyService();
|
||||||
|
$diy_component_list = $diy_service->getComponentList();
|
||||||
|
$componentType($diy_component_list, 'diy');
|
||||||
|
|
||||||
|
$data = array_merge($form_component_list, $diy_component_list);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单模板数据
|
||||||
|
* @param $type
|
||||||
|
* @param $name
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPageData($type, $name)
|
||||||
|
{
|
||||||
|
$pages = PagesDict::getPages([ 'type' => $type ]);
|
||||||
|
return $pages[ $name ] ?? [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 复制万能表单
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function copy($param)
|
||||||
|
{
|
||||||
|
$info = $this->model
|
||||||
|
->withoutfield('create_time,update_time')
|
||||||
|
->with([
|
||||||
|
'writeConfig' => function($query) {
|
||||||
|
$query->withoutfield('id,create_time,update_time');
|
||||||
|
},
|
||||||
|
'submitConfig' => function($query) {
|
||||||
|
$query->withoutfield('id,create_time,update_time');
|
||||||
|
},
|
||||||
|
'formField' => function($query) {
|
||||||
|
$query->withoutfield('field_id,create_time,update_time');
|
||||||
|
} ])
|
||||||
|
->where([ [ 'form_id', '=', $param[ 'form_id' ] ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray();
|
||||||
|
if (empty($info)) throw new AdminException('DIY_FORM_NOT_EXIST');
|
||||||
|
unset($info[ 'form_id' ]);
|
||||||
|
$info[ 'page_title' ] = $info[ 'page_title' ] . '_副本';
|
||||||
|
$info[ 'status' ] = 0;
|
||||||
|
$info[ 'share' ] = '';
|
||||||
|
$info[ 'write_num' ] = 0;
|
||||||
|
$info[ 'create_time' ] = time();
|
||||||
|
$info[ 'update_time' ] = time();
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$res = $this->model->create($info);
|
||||||
|
$form_id = $res->form_id;
|
||||||
|
if (!empty($info[ 'formField' ])) {
|
||||||
|
$form_field_list = array_map(function($item) use ($form_id) {
|
||||||
|
$item[ 'form_id' ] = $form_id;
|
||||||
|
$item[ 'write_num' ] = 0;
|
||||||
|
$item[ 'create_time' ] = time();
|
||||||
|
$item[ 'update_time' ] = time();
|
||||||
|
return $item;
|
||||||
|
}, $info[ 'formField' ]);
|
||||||
|
|
||||||
|
( new DiyFormFields() )->saveALl($form_field_list);
|
||||||
|
unset($info[ 'formField' ]);
|
||||||
|
}
|
||||||
|
if (!empty($info[ 'writeConfig' ])) {
|
||||||
|
$info[ 'writeConfig' ][ 'form_id' ] = $form_id;
|
||||||
|
( new CoreDiyFormConfigService() )->addWriteConfig($info[ 'writeConfig' ]);
|
||||||
|
}
|
||||||
|
if (!empty($info[ 'submitConfig' ])) {
|
||||||
|
$info[ 'submitConfig' ][ 'form_id' ] = $form_id;
|
||||||
|
( new CoreDiyFormConfigService() )->addSubmitConfig($info[ 'submitConfig' ]);
|
||||||
|
}
|
||||||
|
Db::commit();
|
||||||
|
return $form_id;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取页面模板
|
||||||
|
* @param array $params
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTemplate($params = [])
|
||||||
|
{
|
||||||
|
$page_template = TemplateDict::getTemplate($params);
|
||||||
|
return $page_template;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单类型
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getFormType()
|
||||||
|
{
|
||||||
|
$type_list = TypeDict::getType();
|
||||||
|
return $type_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改状态
|
||||||
|
* @param $data
|
||||||
|
* @return Bool
|
||||||
|
*/
|
||||||
|
public function modifyStatus($data)
|
||||||
|
{
|
||||||
|
return $this->model->where([
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
[ 'site_id', '=', $this->site_id ]
|
||||||
|
])->update([ 'status' => $data[ 'status' ] ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录
|
||||||
|
* @param array $data
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getRecordPages($data)
|
||||||
|
{
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
return ( new CoreDiyFormRecordsService() )->getPage($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录
|
||||||
|
* @param int $record_id
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getRecordInfo(int $record_id)
|
||||||
|
{
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
$data[ 'record_id' ] = $record_id;
|
||||||
|
return ( new CoreDiyFormRecordsService() )->getInfo($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除填写记录
|
||||||
|
* @param $params
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function delRecord($params)
|
||||||
|
{
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 减少填写数量
|
||||||
|
$this->model->where([ [ 'form_id', '=', $params[ 'form_id' ] ] ])->dec('write_num', 1)->update();
|
||||||
|
|
||||||
|
$form_records_model = new DiyFormRecords();
|
||||||
|
$form_records_model->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'record_id', '=', $params[ 'record_id' ] ]
|
||||||
|
])->delete();
|
||||||
|
|
||||||
|
$form_records_fields_model = new DiyFormRecordsFields();
|
||||||
|
// 删除万能表单填写字段
|
||||||
|
$form_records_fields_model->where([
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'record_id', '=', $params[ 'record_id' ] ]
|
||||||
|
])->delete();
|
||||||
|
Db::commit();
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单字段列表
|
||||||
|
* @param array $where
|
||||||
|
* @param string $field
|
||||||
|
* @param string $order
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getFieldsList($where = [], $field = 'field_id, form_id, field_key, field_type, field_name, field_remark, write_num, field_required, field_hidden, field_unique, privacy_protection, create_time, update_time')
|
||||||
|
{
|
||||||
|
$order = "update_time desc";
|
||||||
|
if (!empty($where[ 'order' ])) {
|
||||||
|
$order = $where[ 'order' ] . ' ' . $where[ 'sort' ];
|
||||||
|
}
|
||||||
|
return ( new DiyFormFields() )->where([ [ 'site_id', '=', $this->site_id ] ])->withSearch([ 'form_id' ], $where)->field($field)->order($order)->select()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单微信小程序二维码
|
||||||
|
* @param $form_id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getQrcode($form_id)
|
||||||
|
{
|
||||||
|
if (empty($form_id)) {
|
||||||
|
throw new AdminException('缺少参考form_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$page = 'app/pages/index/diy_form';
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
[
|
||||||
|
'key' => 'form_id',
|
||||||
|
'value' => $form_id
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$dir = 'upload/' . $this->site_id . '/diy_form_qrcode';
|
||||||
|
|
||||||
|
$path = '';
|
||||||
|
try {
|
||||||
|
$path = qrcode('', $page, $data, $this->site_id, $dir, 'weapp');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::write('万能表单微信小程序二维码生成error' . $e->getMessage() . $e->getFile() . $e->getLine());
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'path' => $path
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -97,7 +97,8 @@ class InstallSystemService extends BaseAdminService
|
|||||||
'methods' => $value[ 'methods' ] ?? '',
|
'methods' => $value[ 'methods' ] ?? '',
|
||||||
'sort' => $value[ 'sort' ] ?? '',
|
'sort' => $value[ 'sort' ] ?? '',
|
||||||
'status' => 1,
|
'status' => 1,
|
||||||
'is_show' => $value[ 'is_show' ] ?? 1
|
'is_show' => $value[ 'is_show' ] ?? 1,
|
||||||
|
'menu_attr' => $value['menu_attr'] ?? ''
|
||||||
];
|
];
|
||||||
$refer = $value;
|
$refer = $value;
|
||||||
if (isset($refer[ 'children' ])) {
|
if (isset($refer[ 'children' ])) {
|
||||||
|
|||||||
@ -35,11 +35,11 @@ class MemberCashOutService extends BaseAdminService
|
|||||||
public function getPage(array $where = [])
|
public function getPage(array $where = [])
|
||||||
{
|
{
|
||||||
|
|
||||||
$field = 'id,member_cash_out.site_id,cash_out_no,member_cash_out.member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,member_cash_out.money,audit_time,member_cash_out.status,remark,member_cash_out.create_time,refuse_reason,transfer_no';
|
$field = 'id,member_cash_out.site_id,cash_out_no,member_cash_out.member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,member_cash_out.money,audit_time,member_cash_out.status,remark,member_cash_out.create_time,refuse_reason,transfer_no, transfer_payment_code';
|
||||||
$member_where = [];
|
$member_where = [];
|
||||||
if(!empty($where['keywords']))
|
if(!empty($where['keywords']))
|
||||||
{
|
{
|
||||||
$member_where = [['member.member_no|member.nickname|member.mobile', '=', $where['keywords']]];
|
$member_where = [['member.member_no|member.nickname|member.mobile|member.username', '=', $where['keywords']]];
|
||||||
}
|
}
|
||||||
$search_model = $this->model->where([['member_cash_out.site_id', '=', $this->site_id]])
|
$search_model = $this->model->where([['member_cash_out.site_id', '=', $this->site_id]])
|
||||||
->withSearch(['member_id','status', 'join_create_time' => 'create_time', 'audit_time', 'transfer_time', 'transfer_type', 'cash_out_no'],$where)->with(['transfer'])
|
->withSearch(['member_id','status', 'join_create_time' => 'create_time', 'audit_time', 'transfer_time', 'transfer_type', 'cash_out_no'],$where)->with(['transfer'])
|
||||||
@ -55,7 +55,7 @@ class MemberCashOutService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function getInfo(int $id)
|
public function getInfo(int $id)
|
||||||
{
|
{
|
||||||
$field = 'id,site_id,cash_out_no,member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,money,audit_time,status,remark,create_time,refuse_reason,transfer_no';
|
$field = 'id,site_id,cash_out_no,member_id,account_type,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_status,transfer_time,apply_money,rate,service_money,money,audit_time,status,remark,create_time,refuse_reason,transfer_no, transfer_payment_code';
|
||||||
return $this->model->where([['id', '=', $id], ['site_id', '=', $this->site_id]])->with(['memberInfo', 'transfer'])->field($field)->append(['status_name', 'transfer_status_name', 'transfer_type_name', 'account_type_name'])->findOrEmpty()->toArray();
|
return $this->model->where([['id', '=', $id], ['site_id', '=', $this->site_id]])->with(['memberInfo', 'transfer'])->field($field)->append(['status_name', 'transfer_status_name', 'transfer_type_name', 'account_type_name'])->findOrEmpty()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +82,16 @@ class MemberCashOutService extends BaseAdminService
|
|||||||
return $core_member_cash_out_service->transfer($this->site_id, $id, $data);
|
return $core_member_cash_out_service->transfer($this->site_id, $id, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
* @param int $id
|
||||||
|
* @param array $data
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function remark(int $id, array $data){
|
||||||
|
$core_member_cash_out_service = new CoreMemberCashOutService();
|
||||||
|
return $core_member_cash_out_service->remark($this->site_id, $id, $data);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 统计数据
|
* 统计数据
|
||||||
* @return array
|
* @return array
|
||||||
@ -98,4 +108,14 @@ class MemberCashOutService extends BaseAdminService
|
|||||||
return $stat;
|
return $stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测实际的转账状态
|
||||||
|
* @param int $id
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function checkTransferStatus(int $id){
|
||||||
|
$core_member_cash_out_service = new CoreMemberCashOutService();
|
||||||
|
return $core_member_cash_out_service->checkTransferStatus($this->site_id, $id);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -15,7 +15,7 @@ use app\model\member\MemberSign;
|
|||||||
use app\service\core\member\CoreMemberService;
|
use app\service\core\member\CoreMemberService;
|
||||||
use app\service\core\sys\CoreConfigService;
|
use app\service\core\sys\CoreConfigService;
|
||||||
use core\base\BaseAdminService;
|
use core\base\BaseAdminService;
|
||||||
use core\exception\CommonException;
|
use core\exception\AdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员签到服务层
|
* 会员签到服务层
|
||||||
@ -84,7 +84,14 @@ class MemberSignService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function setSign(array $value)
|
public function setSign(array $value)
|
||||||
{
|
{
|
||||||
if ($value[ 'sign_period' ] <= 0) throw new CommonException('SIGN_PERIOD_GREATER_THAN');
|
if (empty($value[ 'sign_period' ])) throw new AdminException('SIGN_PERIOD_CANNOT_EMPTY');
|
||||||
|
if ($value[ 'sign_period' ] < 2 || $value[ 'sign_period' ] > 365) throw new AdminException('SIGN_PERIOD_BETWEEN_2_365_DAYS');
|
||||||
|
if (!empty($value[ 'continue_award' ])) {
|
||||||
|
foreach ($value[ 'continue_award' ] as $v) {
|
||||||
|
if ($v[ 'continue_sign' ] < 2 || $v[ 'continue_sign' ] > 365) throw new AdminException('CONTINUE_SIGN_BETWEEN_2_365_DAYS');
|
||||||
|
if ($v[ 'continue_sign' ] > $value[ 'sign_period' ]) throw new AdminException('CONTINUE_SIGN_CANNOT_GREATER_THAN_SIGN_PERIOD');
|
||||||
|
}
|
||||||
|
}
|
||||||
$data = [
|
$data = [
|
||||||
'is_use' => $value[ 'is_use' ], //是否开启
|
'is_use' => $value[ 'is_use' ], //是否开启
|
||||||
'sign_period' => $value[ 'sign_period' ], // 签到周期
|
'sign_period' => $value[ 'sign_period' ], // 签到周期
|
||||||
|
|||||||
@ -199,7 +199,9 @@ class PayChannelService extends BaseAdminService
|
|||||||
'pay_explain_switch' => $data[ 'pay_explain_switch' ] ?? 1,// 帮付说明开关, 1开启,0关闭
|
'pay_explain_switch' => $data[ 'pay_explain_switch' ] ?? 1,// 帮付说明开关, 1开启,0关闭
|
||||||
'pay_explain_title' => $data[ 'pay_explain_title' ] ?? get_lang('dict_pay_config.pay_explain_title'),// 帮付说明标题
|
'pay_explain_title' => $data[ 'pay_explain_title' ] ?? get_lang('dict_pay_config.pay_explain_title'),// 帮付说明标题
|
||||||
'pay_explain_content' => $data[ 'pay_explain_content' ] ?? get_lang('dict_pay_config.pay_explain_content'),// 帮付说明内容
|
'pay_explain_content' => $data[ 'pay_explain_content' ] ?? get_lang('dict_pay_config.pay_explain_content'),// 帮付说明内容
|
||||||
'pay_info_switch' => $data[ 'pay_info_switch' ] ?? 1// 订单信息, 1开启,0关闭
|
'pay_info_switch' => $data[ 'pay_info_switch' ] ?? 1,// 订单信息, 1开启,0关闭
|
||||||
|
'pay_wechat_share_image' => $data[ 'pay_wechat_share_image' ] ?? '/static/resource/images/pay/pay_wechat_share_image.png',// 默认分享图片(公众号)
|
||||||
|
'pay_weapp_share_image' => $data[ 'pay_weapp_share_image' ] ?? '/static/resource/images/pay/pay_weapp_share_image.png'// 默认分享图片(小程序)
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -392,4 +392,61 @@ class SiteService extends BaseAdminService
|
|||||||
$site_addon = ( new CoreSiteService() )->getAddonKeysBySiteId($this->site_id);
|
$site_addon = ( new CoreSiteService() )->getAddonKeysBySiteId($this->site_id);
|
||||||
return $site_addon;
|
return $site_addon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询应用列表,todo 完善
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getShowAppTools()
|
||||||
|
{
|
||||||
|
$list = [
|
||||||
|
'addon' => [
|
||||||
|
'title' => '运营工具',
|
||||||
|
'list' => []
|
||||||
|
],
|
||||||
|
'tool' => [
|
||||||
|
'title' => '系统工具',
|
||||||
|
'list' => []
|
||||||
|
],
|
||||||
|
// 'promotion' => [
|
||||||
|
// 'title' => '营销活动',
|
||||||
|
// 'list' => []
|
||||||
|
// ]
|
||||||
|
];
|
||||||
|
|
||||||
|
$apps = event('ShowApp');
|
||||||
|
|
||||||
|
$keys = [];
|
||||||
|
foreach ($apps as $v) {
|
||||||
|
foreach ($v as $ck => $cv) {
|
||||||
|
if (!empty($cv)) {
|
||||||
|
foreach ($cv as $addon_k => $addon_v) {
|
||||||
|
if (in_array($addon_v[ 'key' ], $keys)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$list[ $ck ][ 'list' ][] = $addon_v;
|
||||||
|
$keys[] = $addon_v[ 'key' ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$site_addons = $this->getSiteAddons([]);
|
||||||
|
if (!empty($site_addons)) {
|
||||||
|
foreach ($site_addons as $k => $v) {
|
||||||
|
if (!in_array($v[ 'key' ], $keys)) {
|
||||||
|
$list[ 'addon' ][ 'list' ][] = [
|
||||||
|
'title' => $v[ 'title' ],
|
||||||
|
'desc' => $v[ 'desc' ],
|
||||||
|
'icon' => $v[ 'icon' ],
|
||||||
|
'key' => $v[ 'key' ]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,9 +87,11 @@ class AreaService extends BaseAdminService
|
|||||||
|
|
||||||
while ($area['level'] > 1) {
|
while ($area['level'] > 1) {
|
||||||
$area = $this->model->where([ ['id', '=', $area['pid'] ] ])->field('id,level,pid,name')->findOrEmpty();
|
$area = $this->model->where([ ['id', '=', $area['pid'] ] ])->field('id,level,pid,name')->findOrEmpty();
|
||||||
|
if (!$area->isEmpty()) {
|
||||||
$tree[ $level[ $area[ 'level' ] ] ] = $area->toArray();
|
$tree[ $level[ $area[ 'level' ] ] ] = $area->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return $tree;
|
return $tree;
|
||||||
},
|
},
|
||||||
[self::$cache_tag_name]
|
[self::$cache_tag_name]
|
||||||
|
|||||||
@ -269,7 +269,9 @@ class UpgradeService extends BaseAdminService
|
|||||||
|
|
||||||
// 覆盖文件
|
// 覆盖文件
|
||||||
if (is_dir($code_dir . $version_no)) {
|
if (is_dir($code_dir . $version_no)) {
|
||||||
dir_copy($code_dir . $version_no, $to_dir);
|
// 忽略环境变量文件
|
||||||
|
$exclude_files = ['.env.development', '.env.production', '.env', '.env.dev', '.env.product'];
|
||||||
|
dir_copy($code_dir . $version_no, $to_dir, exclude_files:$exclude_files);
|
||||||
if ($addon != AddonDict::FRAMEWORK_KEY) {
|
if ($addon != AddonDict::FRAMEWORK_KEY) {
|
||||||
(new CoreAddonInstallService($addon))->installDir();
|
(new CoreAddonInstallService($addon))->installDir();
|
||||||
}
|
}
|
||||||
@ -367,7 +369,8 @@ class UpgradeService extends BaseAdminService
|
|||||||
*/
|
*/
|
||||||
public function handleUniapp() {
|
public function handleUniapp() {
|
||||||
$code_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
$code_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'download' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
|
||||||
dir_copy($code_dir . 'uni-app', $this->root_path . 'uni-app');
|
$exclude_files = ['.env.development', '.env.production', 'manifest.json'];
|
||||||
|
dir_copy($code_dir . 'uni-app', $this->root_path . 'uni-app', exclude_files:$exclude_files);
|
||||||
|
|
||||||
$addon_list = (new CoreAddonService())->getInstallAddonList();
|
$addon_list = (new CoreAddonService())->getInstallAddonList();
|
||||||
$depend_service = new CoreDependService();
|
$depend_service = new CoreDependService();
|
||||||
@ -380,9 +383,6 @@ class UpgradeService extends BaseAdminService
|
|||||||
// 编译 diy-group 自定义组件代码文件
|
// 编译 diy-group 自定义组件代码文件
|
||||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
||||||
|
|
||||||
// 编译 fixed-group 固定模板组件代码文件
|
|
||||||
$this->compileFixedComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
|
||||||
|
|
||||||
// 编译 pages.json 页面路由代码文件
|
// 编译 pages.json 页面路由代码文件
|
||||||
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,9 @@ use app\dict\diy\PagesDict;
|
|||||||
use app\dict\diy\TemplateDict;
|
use app\dict\diy\TemplateDict;
|
||||||
use app\dict\sys\FileDict;
|
use app\dict\sys\FileDict;
|
||||||
use app\model\diy\Diy;
|
use app\model\diy\Diy;
|
||||||
|
use app\model\diy\DiyTheme;
|
||||||
|
use app\service\core\diy\CoreDiyService;
|
||||||
|
use app\service\core\site\CoreSiteService;
|
||||||
use core\base\BaseApiService;
|
use core\base\BaseApiService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -149,4 +152,37 @@ class DiyService extends BaseApiService
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取自定义主题配色
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDiyTheme()
|
||||||
|
{
|
||||||
|
$site_addon = ( new CoreSiteService() )->getSiteCache($this->site_id);
|
||||||
|
$addon_list = array_merge($site_addon['apps'],$site_addon['site_addons']);
|
||||||
|
$theme_data = (new DiyTheme())->where([['site_id', '=', $this->site_id]])->column('id,color_name,color_mark,value,diy_value,title','addon');
|
||||||
|
$defaultColor = ( new CoreDiyService() )->getDefaultColor();
|
||||||
|
$app_theme['app'] = [
|
||||||
|
'color_name' => $theme_data['app']['color_name'] ?? $defaultColor['name'],
|
||||||
|
'color_mark' => $theme_data['app']['color_mark'] ?? $defaultColor['title'],
|
||||||
|
'value' => $theme_data['app']['value'] ?? $defaultColor['theme'],
|
||||||
|
'diy_value' => $theme_data['app']['diy_value'] ?? '',
|
||||||
|
];
|
||||||
|
$data = [];
|
||||||
|
foreach ($addon_list as $key=>$value){
|
||||||
|
if (isset($value['support_app']) && empty($value['support_app']) && $value['type'] == 'addon'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$default_theme_data = array_values(array_filter(event('ThemeColor', [ 'key' => $value['key']])))[0] ?? [];
|
||||||
|
$data[$value['key']]['color_mark'] = $theme_data[$value['key']]['color_mark'] ?? ($default_theme_data ? $default_theme_data[ 'name' ] : $defaultColor['name']);
|
||||||
|
$data[$value['key']]['color_name'] = $theme_data[$value['key']]['color_name'] ?? ($default_theme_data ? $default_theme_data[ 'title' ] : $defaultColor['title']);
|
||||||
|
$data[$value['key']]['value'] = $theme_data[$value['key']]['value'] ?? ($default_theme_data ? $default_theme_data[ 'theme' ] : $defaultColor['theme']);
|
||||||
|
$data[$value['key']]['diy_value'] = $theme_data[$value['key']]['diy_value'] ?? '';
|
||||||
|
}
|
||||||
|
if (count($site_addon[ 'apps' ]) > 1) {
|
||||||
|
$data = array_merge($app_theme,$data);
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
320
niucloud/app/service/api/diy_form/DiyFormService.php
Normal file
320
niucloud/app/service/api/diy_form/DiyFormService.php
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\api\diy_form;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyForm;
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
use app\model\diy_form\DiyFormWriteConfig;
|
||||||
|
use app\model\member\Member;
|
||||||
|
use app\model\member\MemberLabel;
|
||||||
|
use app\model\member\MemberLevel;
|
||||||
|
use app\service\core\diy_form\CoreDiyFormRecordsService;
|
||||||
|
use core\base\BaseApiService;
|
||||||
|
use core\exception\ApiException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单服务层
|
||||||
|
* Class DiyFormService
|
||||||
|
* @package app\service\api\diy
|
||||||
|
*/
|
||||||
|
class DiyFormService extends BaseApiService
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->model = new DiyForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取万能表单信息
|
||||||
|
* @param int $form_id
|
||||||
|
* @param string $field
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getInfo(int $form_id, $field = 'form_id, page_title, title, type, status, value, share, remark')
|
||||||
|
{
|
||||||
|
$write_config = ( new DiyFormWriteConfig() )->where([
|
||||||
|
[ 'form_id', '=', $form_id ],
|
||||||
|
[ 'site_id', '=', $this->site_id ]
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
$error = [];
|
||||||
|
$info = $this->model->field($field)->where([ [ 'form_id', '=', $form_id ], [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray();
|
||||||
|
if (!empty($info)) {
|
||||||
|
if (!empty($info[ 'value' ][ 'value' ])) {
|
||||||
|
foreach ($info[ 'value' ][ 'value' ] as $k => $v) {
|
||||||
|
if ($v[ 'isHidden' ]) {
|
||||||
|
unset($info[ 'value' ][ 'value' ][ $k ]); // 过滤隐藏的组件
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$info[ 'value' ][ 'value' ] = array_values($info[ 'value' ][ 'value' ]);
|
||||||
|
}
|
||||||
|
if (!empty($write_config) && !empty($this->member_id)) {
|
||||||
|
if ($error_msg = $this->checkMemberCanJoinOrNot($this->member_id, $write_config)) {
|
||||||
|
$error[] = $error_msg;
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkFormWriteTime($write_config)) {
|
||||||
|
$error[] = $error_msg;
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkFormWriteLimitNum($form_id, $write_config)) {
|
||||||
|
$error[] = $error_msg;
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkMemberWriteLimitNum($this->member_id, $form_id, $write_config)) {
|
||||||
|
$error[] = $error_msg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$error[] = [
|
||||||
|
'title' => '当前表单无法查看',
|
||||||
|
'type' => '表单状态',
|
||||||
|
'desc' => '该表单已关闭'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$info[ 'error' ] = $error;
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断当前会员是否可以填写表单
|
||||||
|
* @param int $member_id
|
||||||
|
* @param array $config
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function checkMemberCanJoinOrNot($member_id, $config)
|
||||||
|
{
|
||||||
|
$member_info = ( new Member() )->where([ [ 'member_id', '=', $member_id ], [ 'site_id', '=', $this->site_id ] ])->field('member_level,member_label')->findOrEmpty()->toArray();
|
||||||
|
if (empty($member_info)) throw new ApiException('MEMBER_NOT_EXIST');
|
||||||
|
$error = [];
|
||||||
|
switch ($config[ 'join_member_type' ]) {
|
||||||
|
case 'all_member':
|
||||||
|
break;
|
||||||
|
case 'selected_member_level':
|
||||||
|
if (!in_array($member_info[ 'member_level' ], $config[ 'level_ids' ])) {
|
||||||
|
$level_names = ( new MemberLevel() )->where([ [ 'level_id', 'in', $config[ 'level_ids' ] ], [ 'site_id', '=', $this->site_id ] ])->column('level_name');
|
||||||
|
$error = [
|
||||||
|
'title' => '当前表单无法查看',
|
||||||
|
'type' => '允许填写用户',
|
||||||
|
'desc' => '该表单已设置仅限“' . implode('、', $level_names) . '等级”的用户填写'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'selected_member_label':
|
||||||
|
if (empty($member_info[ 'member_label' ])) $member_info[ 'member_label' ] = [];
|
||||||
|
if (empty(array_intersect($member_info[ 'member_label' ], $config[ 'label_ids' ]))) {
|
||||||
|
$label_names = ( new MemberLabel() )->where([ [ 'label_id', 'in', $config[ 'label_ids' ] ], [ 'site_id', '=', $this->site_id ] ])->column('label_name');
|
||||||
|
$error = [
|
||||||
|
'title' => '当前表单无法查看',
|
||||||
|
'type' => '允许填写用户',
|
||||||
|
'desc' => '该表单已设置仅限“' . implode('、', $label_names) . '标签”的用户填写'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查会员填写表单次数限制
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function checkMemberWriteLimitNum($member_id, $form_id, $config)
|
||||||
|
{
|
||||||
|
$form_records_model = new DiyFormRecords();
|
||||||
|
$error = [];
|
||||||
|
switch ($config[ 'member_write_type' ]) {
|
||||||
|
case 'no_limit':
|
||||||
|
break;
|
||||||
|
case 'diy':
|
||||||
|
$member_write_rule = $config[ 'member_write_rule' ];
|
||||||
|
switch ($member_write_rule[ 'time_unit' ]) {
|
||||||
|
case 'day':
|
||||||
|
$time_text = '天';
|
||||||
|
break;
|
||||||
|
case 'week':
|
||||||
|
$time_text = '周';
|
||||||
|
break;
|
||||||
|
case 'month':
|
||||||
|
$time_text = '月';
|
||||||
|
break;
|
||||||
|
case 'year':
|
||||||
|
$time_text = '年';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$count = $form_records_model->where([
|
||||||
|
[ 'form_id', '=', $form_id ],
|
||||||
|
[ 'site_id', '=', $this->site_id ],
|
||||||
|
[ 'member_id', '=', $member_id ]
|
||||||
|
])->whereTime('create_time', '-' . $member_write_rule[ 'time_value' ] . ' ' . $member_write_rule[ 'time_unit' ])->count();
|
||||||
|
if ($count >= $member_write_rule[ 'num' ]) {
|
||||||
|
$error = [
|
||||||
|
'title' => '您的填写次数已达上限',
|
||||||
|
'type' => '允许填写次数(每人)',
|
||||||
|
'desc' => '该表单已设置“每人每' . $member_write_rule[ 'time_value' ] . $time_text . '可填写' . $member_write_rule[ 'num' ] . '次”'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查表单填写次数限制
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function checkFormWriteLimitNum($form_id, $config)
|
||||||
|
{
|
||||||
|
$form_records_model = new DiyFormRecords();
|
||||||
|
$error = [];
|
||||||
|
switch ($config[ 'form_write_type' ]) {
|
||||||
|
case 'no_limit':
|
||||||
|
break;
|
||||||
|
case 'diy':
|
||||||
|
$form_write_rule = $config[ 'form_write_rule' ];
|
||||||
|
switch ($form_write_rule[ 'time_unit' ]) {
|
||||||
|
case 'day':
|
||||||
|
$time_text = '天';
|
||||||
|
break;
|
||||||
|
case 'week':
|
||||||
|
$time_text = '周';
|
||||||
|
break;
|
||||||
|
case 'month':
|
||||||
|
$time_text = '月';
|
||||||
|
break;
|
||||||
|
case 'year':
|
||||||
|
$time_text = '年';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$count = $form_records_model->where([
|
||||||
|
[ 'form_id', '=', $form_id ],
|
||||||
|
[ 'site_id', '=', $this->site_id ]
|
||||||
|
])->whereTime('create_time', '-' . $form_write_rule[ 'time_value' ] . ' ' . $form_write_rule[ 'time_unit' ])->count();
|
||||||
|
if ($count >= $form_write_rule[ 'num' ]) {
|
||||||
|
$error = [
|
||||||
|
'title' => '表单总填写次数已达上限',
|
||||||
|
'type' => '允许填写次数(总)',
|
||||||
|
'desc' => '该表单已设置“每' . $form_write_rule[ 'time_value' ] . $time_text . '可填写' . $form_write_rule[ 'num' ] . '次”'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查表单填写时间限制
|
||||||
|
* @param array $config
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function checkFormWriteTime($config)
|
||||||
|
{
|
||||||
|
$error = [];
|
||||||
|
switch ($config[ 'time_limit_type' ]) {
|
||||||
|
case 'no_limit':
|
||||||
|
break;
|
||||||
|
case 'specify_time':
|
||||||
|
$specify_time = $config[ 'time_limit_rule' ][ 'specify_time' ] ?? [];
|
||||||
|
if (!empty($specify_time)) {
|
||||||
|
if (time() < $specify_time[ 0 ] || time() > $specify_time[ 1 ]) {
|
||||||
|
$error = [
|
||||||
|
'title' => '当前时间无法查看',
|
||||||
|
'type' => '允许查看时间',
|
||||||
|
'desc' => '该表单已设置“' . date('Y-m-d H:i:s', $specify_time[ 0 ]) . '-' . date('Y-m-d H:i:s', $specify_time[ 1 ]) . '”可查看'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'open_day_time':
|
||||||
|
$open_day_time = $config[ 'time_limit_rule' ][ 'open_day_time' ] ?? [];
|
||||||
|
if (!empty($open_day_time)) {
|
||||||
|
$start_time = strtotime(date('Y-m-d', time())) + $open_day_time[ 0 ];
|
||||||
|
$end_time = strtotime(date('Y-m-d', time())) + $open_day_time[ 1 ];
|
||||||
|
if (time() < $start_time || time() > $end_time) {
|
||||||
|
$error = [
|
||||||
|
'title' => '当前时间无法查看',
|
||||||
|
'type' => '允许查看时间',
|
||||||
|
'desc' => '该表单已设置“每天' . date('H:i', $start_time) . '-' . date('H:i', $end_time) . '”可查看'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return $error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交填表记录
|
||||||
|
* @param array $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function addRecord(array $data = [])
|
||||||
|
{
|
||||||
|
$data[ 'site_id' ] = $this->site_id;
|
||||||
|
$data[ 'member_id' ] = $this->member_id;
|
||||||
|
|
||||||
|
$info = $this->model->field('status')->where([ [ 'form_id', '=', $data[ 'form_id' ] ], [ 'site_id', '=', $this->site_id ] ])->findOrEmpty()->toArray();
|
||||||
|
if (empty($info)) throw new ApiException('DIY_FORM_NOT_EXIST');
|
||||||
|
if ($info[ 'status' ] == 0) throw new ApiException('DIY_FORM_NOT_OPEN');
|
||||||
|
|
||||||
|
$write_config = ( new DiyFormWriteConfig() )->where([
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
[ 'site_id', '=', $this->site_id ]
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
if (!empty($write_config)) {
|
||||||
|
if ($error_msg = $this->checkMemberCanJoinOrNot($this->member_id, $write_config)) {
|
||||||
|
throw new ApiException($error_msg[ 'desc' ]);
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkFormWriteTime($write_config)) {
|
||||||
|
throw new ApiException($error_msg[ 'desc' ]);
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkFormWriteLimitNum($data[ 'form_id' ], $write_config)) {
|
||||||
|
throw new ApiException($error_msg[ 'desc' ]);
|
||||||
|
}
|
||||||
|
if ($error_msg = $this->checkMemberWriteLimitNum($this->member_id, $data[ 'form_id' ], $write_config)) {
|
||||||
|
throw new ApiException($error_msg[ 'desc' ]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ( new CoreDiyFormRecordsService() )->add($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写结果信息
|
||||||
|
* @param array $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getResult($params = [])
|
||||||
|
{
|
||||||
|
$diy_form_records_model = new DiyFormRecords();
|
||||||
|
$field = 'record_id,form_id,create_time';
|
||||||
|
return $diy_form_records_model->field($field)->where([ [ 'site_id', '=', $this->site_id ], [ 'record_id', '=', $params[ 'record_id' ] ], [ 'member_id', '=', $this->member_id ] ])->with([ 'submitConfig' ])->findOrEmpty()->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写记录,循环diy-group,每个表单组件实现各自的渲染处理
|
||||||
|
* @param array $params
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getFormRecordInfo($params = [])
|
||||||
|
{
|
||||||
|
$diy_form_records_model = new DiyFormRecords();
|
||||||
|
$field = 'record_id,form_id,create_time';
|
||||||
|
$info = $diy_form_records_model->field($field)->where([ [ 'site_id', '=', $this->site_id ], [ 'record_id', '=', $params[ 'record_id' ] ], [ 'member_id', '=', $this->member_id ] ])
|
||||||
|
->with([
|
||||||
|
// 关联填写字段列表
|
||||||
|
'recordsFieldList' => function($query) {
|
||||||
|
$query->field('id, form_id, form_field_id, record_id, field_key, field_type, field_name, field_value, field_required, field_unique, privacy_protection, update_num, update_time')->append([ 'handle_field_value', 'render_value' ]);
|
||||||
|
}
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -130,4 +130,29 @@ class AuthService extends BaseApiService
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取手机号
|
||||||
|
* @param string $mobile_code
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMobile(string $mobile_code)
|
||||||
|
{
|
||||||
|
|
||||||
|
$result = ( new CoreWeappAuthService() )->getUserPhoneNumber($this->site_id, $mobile_code);
|
||||||
|
if (empty($result)) throw new ApiException('WECHAT_EMPOWER_NOT_EXIST');
|
||||||
|
if ($result[ 'errcode' ] != 0) throw new ApiException($result[ 'errmsg' ]);
|
||||||
|
$phone_info = $result[ 'phone_info' ];
|
||||||
|
$mobile = $phone_info[ 'purePhoneNumber' ];
|
||||||
|
if (empty($mobile)) throw new ApiException('WECHAT_EMPOWER_NOT_EXIST');
|
||||||
|
|
||||||
|
$member_service = new MemberService();
|
||||||
|
|
||||||
|
$mobile_member = $member_service->findMemberInfo([ 'mobile' => $mobile, 'site_id' => $this->site_id ]);
|
||||||
|
if (!$mobile_member->isEmpty()) throw new AuthException('MOBILE_IS_EXIST');
|
||||||
|
|
||||||
|
return [
|
||||||
|
'mobile' => $mobile
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,26 +98,29 @@ class LoginService extends BaseApiService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 手机号登录
|
* 手机号登录
|
||||||
* @param string $mobile
|
* @param array $params
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function mobile(string $mobile){
|
public function mobile($params)
|
||||||
|
{
|
||||||
//校验手机验证码
|
//校验手机验证码
|
||||||
$this->checkMobileCode($mobile);
|
$this->checkMobileCode($params[ 'mobile' ]);
|
||||||
//登录注册配置
|
//登录注册配置
|
||||||
$config = ( new MemberConfigService() )->getLoginConfig();
|
$config = ( new MemberConfigService() )->getLoginConfig();
|
||||||
$is_mobile = $config[ 'is_mobile' ];
|
$is_mobile = $config[ 'is_mobile' ];
|
||||||
$is_bind_mobile = $config[ 'is_bind_mobile' ];
|
$is_bind_mobile = $config[ 'is_bind_mobile' ];
|
||||||
if ($is_mobile != 1 && $is_bind_mobile != 1) throw new AuthException('MOBILE_LOGIN_UNOPENED');
|
if ($is_mobile != 1 && $is_bind_mobile != 1) throw new AuthException('MOBILE_LOGIN_UNOPENED');
|
||||||
$member_service = new MemberService();
|
$member_service = new MemberService();
|
||||||
$member_info = $member_service->findMemberInfo(['mobile' => $mobile, 'site_id' => $this->site_id]);
|
$member_info = $member_service->findMemberInfo([ 'mobile' => $params[ 'mobile' ], 'site_id' => $this->site_id ]);
|
||||||
if ($member_info->isEmpty()) {
|
if ($member_info->isEmpty()) {
|
||||||
//开启强制绑定手机号,登录会自动注册并绑定手机号
|
//开启强制绑定手机号,登录会自动注册并绑定手机号
|
||||||
if ($is_bind_mobile == 1) {
|
if ($is_bind_mobile == 1) {
|
||||||
$data = array(
|
$data = array(
|
||||||
'mobile' => $mobile,
|
'mobile' => $params[ 'mobile' ],
|
||||||
|
'nickname' => $params[ 'nickname' ],
|
||||||
|
'headimg' => $params[ 'headimg' ]
|
||||||
);
|
);
|
||||||
return (new RegisterService())->register($mobile, $data, MemberRegisterTypeDict::MOBILE, false);
|
return ( new RegisterService() )->register($params[ 'mobile' ], $data, MemberRegisterTypeDict::MOBILE, false);
|
||||||
} else {
|
} else {
|
||||||
throw new AuthException('MEMBER_NOT_EXIST');//账号不存在
|
throw new AuthException('MEMBER_NOT_EXIST');//账号不存在
|
||||||
}
|
}
|
||||||
@ -162,9 +165,9 @@ class LoginService extends BaseApiService
|
|||||||
* @param string|null $token
|
* @param string|null $token
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function parseToken(?string $token){
|
public function parseToken(?string $token)
|
||||||
if(empty($token))
|
|
||||||
{
|
{
|
||||||
|
if (empty($token)) {
|
||||||
//定义专属于授权认证机制的错误响应, 定义专属语言包
|
//定义专属于授权认证机制的错误响应, 定义专属语言包
|
||||||
throw new AuthException('MUST_LOGIN', 401);
|
throw new AuthException('MUST_LOGIN', 401);
|
||||||
}
|
}
|
||||||
@ -178,8 +181,7 @@ class LoginService extends BaseApiService
|
|||||||
throw new AuthException('LOGIN_EXPIRE', 401);
|
throw new AuthException('LOGIN_EXPIRE', 401);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
if(!$token_info)
|
if (!$token_info) {
|
||||||
{
|
|
||||||
throw new AuthException('MUST_LOGIN', 401);
|
throw new AuthException('MUST_LOGIN', 401);
|
||||||
}
|
}
|
||||||
//验证有效次数或过期时间
|
//验证有效次数或过期时间
|
||||||
@ -193,13 +195,14 @@ class LoginService extends BaseApiService
|
|||||||
* @return array
|
* @return array
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function sendMobileCode($mobile, string $type = ''){
|
public function sendMobileCode($mobile, string $type = '')
|
||||||
|
{
|
||||||
( new CaptchaService() )->check();
|
( new CaptchaService() )->check();
|
||||||
if (empty($mobile)) throw new AuthException('MOBILE_NEEDED');
|
if (empty($mobile)) throw new AuthException('MOBILE_NEEDED');
|
||||||
//发送
|
//发送
|
||||||
if (!in_array($type, SmsDict::SCENE_TYPE)) throw new AuthException('MEMBER_MOBILE_CAPTCHA_ERROR');
|
if (!in_array($type, SmsDict::SCENE_TYPE)) throw new AuthException('MEMBER_MOBILE_CAPTCHA_ERROR');
|
||||||
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
|
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);// 生成4位随机数,左侧补0
|
||||||
(new NoticeService())->send('member_verify_code', ['code' => $code, 'mobile' => $mobile]);
|
// ( new NoticeService() )->send('member_verify_code', [ 'code' => $code, 'mobile' => $mobile ]);
|
||||||
//将验证码存入缓存
|
//将验证码存入缓存
|
||||||
$key = md5(uniqid('', true));
|
$key = md5(uniqid('', true));
|
||||||
$cache_tag_name = "mobile_key" . $mobile . $type;
|
$cache_tag_name = "mobile_key" . $mobile . $type;
|
||||||
@ -208,11 +211,13 @@ class LoginService extends BaseApiService
|
|||||||
return [ 'key' => $key ];
|
return [ 'key' => $key ];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMobileCodeCacheName(){
|
public function getMobileCodeCacheName()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function clearMobileCode($mobile, $type){
|
public function clearMobileCode($mobile, $type)
|
||||||
|
{
|
||||||
$cache_tag_name = "mobile_key" . $mobile . $type;
|
$cache_tag_name = "mobile_key" . $mobile . $type;
|
||||||
Cache::tag($cache_tag_name)->clear();
|
Cache::tag($cache_tag_name)->clear();
|
||||||
}
|
}
|
||||||
@ -222,7 +227,8 @@ class LoginService extends BaseApiService
|
|||||||
* @param string $mobile
|
* @param string $mobile
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function checkMobileCode(string $mobile){
|
public function checkMobileCode(string $mobile)
|
||||||
|
{
|
||||||
if (empty($mobile)) throw new AuthException('MOBILE_NEEDED');
|
if (empty($mobile)) throw new AuthException('MOBILE_NEEDED');
|
||||||
$mobile_key = request()->param('mobile_key', '');
|
$mobile_key = request()->param('mobile_key', '');
|
||||||
$mobile_code = request()->param('mobile_code', '');
|
$mobile_code = request()->param('mobile_code', '');
|
||||||
@ -243,7 +249,8 @@ class LoginService extends BaseApiService
|
|||||||
* @param $member
|
* @param $member
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function bingOpenid($member){
|
public function bingOpenid($member)
|
||||||
|
{
|
||||||
$open_id = $this->request->param('openid');
|
$open_id = $this->request->param('openid');
|
||||||
if (!empty($open_id)) {
|
if (!empty($open_id)) {
|
||||||
Log::write('channel_1' . $this->channel);
|
Log::write('channel_1' . $this->channel);
|
||||||
@ -279,7 +286,8 @@ class LoginService extends BaseApiService
|
|||||||
* @param string $mobile
|
* @param string $mobile
|
||||||
* @param string $password
|
* @param string $password
|
||||||
*/
|
*/
|
||||||
public function resetPassword(string $mobile, string $password){
|
public function resetPassword(string $mobile, string $password)
|
||||||
|
{
|
||||||
$member_service = new MemberService();
|
$member_service = new MemberService();
|
||||||
//校验手机验证码
|
//校验手机验证码
|
||||||
$this->checkMobileCode($mobile);
|
$this->checkMobileCode($mobile);
|
||||||
@ -295,15 +303,18 @@ class LoginService extends BaseApiService
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loginScanCode(){
|
public function loginScanCode()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loginByScanCode(){
|
public function loginByScanCode()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function checkScanCode(){
|
public function checkScanCode()
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace app\service\api\login;
|
namespace app\service\api\login;
|
||||||
|
|
||||||
|
use app\dict\common\ChannelDict;
|
||||||
use app\dict\member\MemberLoginTypeDict;
|
use app\dict\member\MemberLoginTypeDict;
|
||||||
use app\dict\member\MemberRegisterTypeDict;
|
use app\dict\member\MemberRegisterTypeDict;
|
||||||
use app\job\member\SetMemberNoJob;
|
use app\job\member\SetMemberNoJob;
|
||||||
|
|||||||
@ -47,7 +47,7 @@ class MemberCashOutAccountService extends BaseApiService
|
|||||||
*/
|
*/
|
||||||
public function getInfo(int $account_id)
|
public function getInfo(int $account_id)
|
||||||
{
|
{
|
||||||
$field = 'account_id,site_id,member_id,account_type,bank_name,realname,account_no';
|
$field = 'account_id,site_id,member_id,account_type,bank_name,realname,account_no, transfer_payment_code';
|
||||||
return $this->model->where([['account_id', '=', $account_id], ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id]])->field($field)->findOrEmpty()->toArray();
|
return $this->model->where([['account_id', '=', $account_id], ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id]])->field($field)->findOrEmpty()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class MemberCashOutService extends BaseApiService
|
|||||||
*/
|
*/
|
||||||
public function getInfo(int $id)
|
public function getInfo(int $id)
|
||||||
{
|
{
|
||||||
$field = 'id,site_id,cash_out_no,member_id,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_time,apply_money,rate,service_money,money,audit_time,status,remark,create_time,refuse_reason';
|
$field = 'id,site_id,cash_out_no,member_id,transfer_type,transfer_realname,transfer_mobile,transfer_bank,transfer_account,transfer_fail_reason,transfer_time,apply_money,rate,service_money,money,audit_time,status,remark,create_time,refuse_reason, transfer_no, transfer_payee, transfer_payment_code';
|
||||||
return $this->model->where([['id', '=', $id], ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id]])->with(['memberInfo', 'transfer'])->field($field)->append(['account_type_name', 'transfer_type_name', 'status_name', 'transfer_status_name'])->findOrEmpty()->toArray();
|
return $this->model->where([['id', '=', $id], ['site_id', '=', $this->site_id], ['member_id', '=', $this->member_id]])->with(['memberInfo', 'transfer'])->field($field)->append(['account_type_name', 'transfer_type_name', 'status_name', 'transfer_status_name'])->findOrEmpty()->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ class MemberConfigService extends BaseApiService
|
|||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$res[ 'is_auth_register' ] = 0;
|
$res[ 'is_auth_register' ] = 0;
|
||||||
$res[ 'is_force_access_user_info' ] = 0;
|
$res[ 'is_force_access_user_info' ] = 0;
|
||||||
|
$res[ 'is_bind_mobile' ] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
|
|||||||
@ -22,11 +22,9 @@ use core\base\BaseApiService;
|
|||||||
use core\exception\ApiException;
|
use core\exception\ApiException;
|
||||||
use core\exception\AuthException;
|
use core\exception\AuthException;
|
||||||
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
|
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
|
||||||
use GuzzleHttp\Exception\GuzzleException;
|
|
||||||
use think\db\exception\DataNotFoundException;
|
use think\db\exception\DataNotFoundException;
|
||||||
use think\db\exception\DbException;
|
use think\db\exception\DbException;
|
||||||
use think\db\exception\ModelNotFoundException;
|
use think\db\exception\ModelNotFoundException;
|
||||||
use think\Model;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,10 +74,16 @@ class WeappAuthService extends BaseApiService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录
|
* 登录
|
||||||
* @param string $code
|
* @param $data
|
||||||
* @return array
|
* @return array
|
||||||
|
* @throws DataNotFoundException
|
||||||
|
* @throws DbException
|
||||||
|
* @throws InvalidConfigException
|
||||||
|
* @throws ModelNotFoundException
|
||||||
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
||||||
|
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function login(string $code)
|
public function login($data)
|
||||||
{
|
{
|
||||||
|
|
||||||
[
|
[
|
||||||
@ -88,7 +92,7 @@ class WeappAuthService extends BaseApiService
|
|||||||
// $avatar,
|
// $avatar,
|
||||||
// $nickname,
|
// $nickname,
|
||||||
// $sex
|
// $sex
|
||||||
] = $this->getUserInfoByCode($code);
|
] = $this->getUserInfoByCode($data[ 'code' ]);
|
||||||
|
|
||||||
$member_service = new MemberService();
|
$member_service = new MemberService();
|
||||||
$member_info = $member_service->findMemberInfo([ 'weapp_openid' => $openid, 'site_id' => $this->site_id ]);
|
$member_info = $member_service->findMemberInfo([ 'weapp_openid' => $openid, 'site_id' => $this->site_id ]);
|
||||||
@ -98,23 +102,74 @@ class WeappAuthService extends BaseApiService
|
|||||||
$member_info->weapp_openid = $openid;
|
$member_info->weapp_openid = $openid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$config = ( new MemberConfigService() )->getLoginConfig();
|
||||||
|
$is_auth_register = $config[ 'is_auth_register' ];
|
||||||
|
$is_force_access_user_info = $config[ 'is_force_access_user_info' ];
|
||||||
|
$is_bind_mobile = $config[ 'is_bind_mobile' ];
|
||||||
|
|
||||||
if ($member_info->isEmpty()) {
|
if ($member_info->isEmpty()) {
|
||||||
// $config = ( new MemberConfigService() )->getLoginConfig();
|
|
||||||
// $is_auth_register = $config[ 'is_auth_register' ];
|
// 开启自动注册会员
|
||||||
// 去掉强制绑定手机号判断,否则开启强制绑定的情况下小程序第三方注册无法注册
|
if ($is_auth_register) {
|
||||||
// 现在不需要控制自动注册,分为两种情况,一种自动注册,另一种手动点击授权登录注册
|
|
||||||
return $this->register($openid, wx_unionid: $unionid);
|
// 开启强制获取会员信息并且开启强制绑定手机号,必须获取全部信息才能进行注册
|
||||||
// if ($is_auth_register == 1) {
|
if ($is_force_access_user_info && $is_bind_mobile) {
|
||||||
// } else {
|
if (!empty($data[ 'nickname' ]) && !empty($data[ 'headimg' ]) && !empty($data[ 'mobile' ])) {
|
||||||
// return [ 'openid' => $openid, 'unionid' => $unionid ];
|
return $this->register($openid, $data[ 'mobile' ], $data[ 'mobile_code' ], $unionid, $data[ 'nickname' ], $data[ 'headimg' ]);
|
||||||
// }
|
} else {
|
||||||
|
return [ 'openid' => $openid, 'unionid' => $unionid ]; // 将重要信息返回给前端保存
|
||||||
|
}
|
||||||
|
} else if ($is_force_access_user_info) {
|
||||||
|
// 开启强制获取会员信息时,必须获取到昵称和头像才能进行注册
|
||||||
|
if (!empty($data[ 'nickname' ]) && !empty($data[ 'headimg' ])) {
|
||||||
|
return $this->register($openid, '', '', $unionid, $data[ 'nickname' ], $data[ 'headimg' ]);
|
||||||
|
} else {
|
||||||
|
return [ 'openid' => $openid, 'unionid' => $unionid ]; // 将重要信息返回给前端保存
|
||||||
|
}
|
||||||
|
} else if ($is_bind_mobile) {
|
||||||
|
// 开启强制绑定手机号,必须获取手机号才能进行注册
|
||||||
|
if (!empty($data[ 'mobile' ]) || !empty($data[ 'mobile_code' ])) {
|
||||||
|
return $this->register($openid, $data[ 'mobile' ], $data[ 'mobile_code' ], $unionid);
|
||||||
|
} else {
|
||||||
|
return [ 'openid' => $openid, 'unionid' => $unionid ]; // 将重要信息返回给前端保存
|
||||||
|
}
|
||||||
|
} else if (!$is_force_access_user_info && !$is_bind_mobile) {
|
||||||
|
// 关闭强制获取用户信息、并且关闭强制绑定手机号的情况下允许注册
|
||||||
|
return $this->register($openid, '', '', $unionid);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// 关闭自动注册,但是开启了强制绑定手机号,必须获取手机号才能进行注册
|
||||||
|
if ($is_bind_mobile) {
|
||||||
|
if (!empty($data[ 'mobile' ]) || !empty($data[ 'mobile_code' ])) {
|
||||||
|
return $this->register($openid, $data[ 'mobile' ], $data[ 'mobile_code' ], $unionid);
|
||||||
|
} else {
|
||||||
|
return [ 'openid' => $openid, 'unionid' => $unionid ]; // 将重要信息返回给前端保存
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 可能会更新用户和粉丝表
|
// 可能会更新用户和粉丝表
|
||||||
$login_service = new LoginService();
|
$login_service = new LoginService();
|
||||||
|
// 开启自动注册会员,获取到昵称和头像进行修改
|
||||||
|
if ($is_auth_register) {
|
||||||
|
if ($is_force_access_user_info) {
|
||||||
|
if (!empty($data[ 'nickname' ])) {
|
||||||
|
$member_info[ 'nickname' ] = $data[ 'nickname' ];
|
||||||
|
}
|
||||||
|
if (!empty($data[ 'headimg' ])) {
|
||||||
|
$member_info[ 'headimg' ] = $data[ 'headimg' ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($is_bind_mobile) {
|
||||||
|
// if (!empty($data[ 'mobile' ])) {
|
||||||
|
// $member_info[ 'mobile' ] = $data[ 'mobile' ];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
return $login_service->login($member_info, MemberLoginTypeDict::WEAPP);
|
return $login_service->login($member_info, MemberLoginTypeDict::WEAPP);
|
||||||
}
|
}
|
||||||
//todo 业务落地
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,14 +177,17 @@ class WeappAuthService extends BaseApiService
|
|||||||
* @param string $openid
|
* @param string $openid
|
||||||
* @param string $mobile
|
* @param string $mobile
|
||||||
* @param string $mobile_code
|
* @param string $mobile_code
|
||||||
|
* @param string $wx_unionid
|
||||||
|
* @param string $nickname
|
||||||
|
* @param string $headimg
|
||||||
* @return array
|
* @return array
|
||||||
* @throws DataNotFoundException
|
* @throws DataNotFoundException
|
||||||
* @throws DbException
|
* @throws DbException
|
||||||
* @throws GuzzleException
|
|
||||||
* @throws InvalidConfigException
|
|
||||||
* @throws ModelNotFoundException
|
* @throws ModelNotFoundException
|
||||||
|
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
|
||||||
|
* @throws \Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface
|
||||||
*/
|
*/
|
||||||
public function register(string $openid, string $mobile = '', string $mobile_code = '', string $wx_unionid = '')
|
public function register(string $openid, string $mobile = '', string $mobile_code = '', string $wx_unionid = '', $nickname = '', $headimg = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
if (empty($openid)) throw new AuthException('AUTH_LOGIN_TAG_NOT_EXIST');
|
if (empty($openid)) throw new AuthException('AUTH_LOGIN_TAG_NOT_EXIST');
|
||||||
@ -158,7 +216,9 @@ class WeappAuthService extends BaseApiService
|
|||||||
return $register_service->register($mobile ?? '',
|
return $register_service->register($mobile ?? '',
|
||||||
[
|
[
|
||||||
'weapp_openid' => $openid,
|
'weapp_openid' => $openid,
|
||||||
'wx_unionid' => $wx_unionid
|
'wx_unionid' => $wx_unionid,
|
||||||
|
'nickname' => $nickname,
|
||||||
|
'headimg' => $headimg,
|
||||||
],
|
],
|
||||||
MemberRegisterTypeDict::WEAPP,
|
MemberRegisterTypeDict::WEAPP,
|
||||||
$is_verify_mobile ?? false
|
$is_verify_mobile ?? false
|
||||||
|
|||||||
@ -122,15 +122,33 @@ class WechatAuthService extends BaseApiService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($member_info->isEmpty()) {
|
if ($member_info->isEmpty()) {
|
||||||
// $config = ( new MemberConfigService() )->getLoginConfig();
|
$config = ( new MemberConfigService() )->getLoginConfig();
|
||||||
// $is_auth_register = $config[ 'is_auth_register' ];
|
$is_auth_register = $config[ 'is_auth_register' ];
|
||||||
// 去掉强制绑定手机号判断,否则开启强制绑定的情况下公众号第三方注册无法注册
|
$is_force_access_user_info = $config[ 'is_force_access_user_info' ];
|
||||||
// 现在不需要控制自动注册,分为两种情况,一种自动注册,另一种手动点击授权登录注册
|
$is_bind_mobile = $config[ 'is_bind_mobile' ];
|
||||||
|
|
||||||
|
// 开启自动注册会员
|
||||||
|
if ($is_auth_register) {
|
||||||
|
|
||||||
|
// 开启强制获取会员信息并且开启强制绑定手机号,必须获取手机号才能进行注册,由于公众号无法主动获取,所以不能注册
|
||||||
|
if ($is_force_access_user_info && $is_bind_mobile) {
|
||||||
|
return [ 'avatar' => $avatar, 'nickname' => $nickname, 'openid' => $openid, 'unionid' => $unionid ];
|
||||||
|
} else if ($is_force_access_user_info) {
|
||||||
|
// 开启强制获取会员信息时,必须获取到昵称和头像才能进行注册
|
||||||
|
if (!empty($nickname) && !empty($avatar)) {
|
||||||
|
return $this->register($openid, '', $nickname, $avatar, $unionid); // 获取到昵称和头像,然后进行注册
|
||||||
|
} else {
|
||||||
|
return [ 'avatar' => $avatar, 'nickname' => $nickname, 'openid' => $openid, 'unionid' => $unionid ];
|
||||||
|
}
|
||||||
|
} else if ($is_bind_mobile) {
|
||||||
|
// 开启强制绑定手机号,必须获取手机号才能进行注册,由于公众号无法主动获取,所以不能注册
|
||||||
|
return [ 'openid' => $openid, 'unionid' => $unionid ];
|
||||||
|
} else if (!$is_force_access_user_info && !$is_bind_mobile) {
|
||||||
|
// 关闭强制获取用户信息、并且关闭强制绑定手机号的情况下允许注册
|
||||||
return $this->register($openid, '', $nickname, $avatar, $unionid);
|
return $this->register($openid, '', $nickname, $avatar, $unionid);
|
||||||
// if ($is_auth_register == 1) {
|
}
|
||||||
// } else {
|
|
||||||
// return [ 'avatar' => $avatar, 'nickname' => $nickname, 'openid' => $openid, 'unionid' => $unionid ];
|
}
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
// 可能会更新用户和粉丝表
|
// 可能会更新用户和粉丝表
|
||||||
$login_service = new LoginService();
|
$login_service = new LoginService();
|
||||||
|
|||||||
@ -653,9 +653,6 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
|||||||
// 编译 diy-group 自定义组件代码文件
|
// 编译 diy-group 自定义组件代码文件
|
||||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||||
|
|
||||||
// 编译 fixed-group 固定模板组件代码文件
|
|
||||||
$this->compileFixedComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
|
||||||
|
|
||||||
// 编译 pages.json 页面路由代码文件
|
// 编译 pages.json 页面路由代码文件
|
||||||
$this->uninstallPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
$this->uninstallPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
@ -685,9 +682,6 @@ class CoreAddonInstallService extends CoreAddonBaseService
|
|||||||
// 编译 diy-group 自定义组件代码文件
|
// 编译 diy-group 自定义组件代码文件
|
||||||
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
$this->compileDiyComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
||||||
|
|
||||||
// 编译 fixed-group 固定模板组件代码文件
|
|
||||||
$this->compileFixedComponentsCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $this->addon);
|
|
||||||
|
|
||||||
// 编译 pages.json 页面路由代码文件
|
// 编译 pages.json 页面路由代码文件
|
||||||
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
$this->installPageCode($this->root_path . 'uni-app' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
|||||||
@ -63,7 +63,7 @@ trait WapTrait
|
|||||||
$file_name = 'diy-' . $path;
|
$file_name = 'diy-' . $path;
|
||||||
|
|
||||||
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
||||||
$content .= " <$file_name :component=\"component\" :global=\"data.global\" :index=\"index\" :pullDownRefreshCount=\"props.pullDownRefreshCount\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" />\n";
|
$content .= " <$file_name ref=\"diy{$name}Ref\" :component=\"component\" :global=\"data.global\" :index=\"index\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" />\n";
|
||||||
$content .= " </template>\n";
|
$content .= " </template>\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,7 +101,7 @@ trait WapTrait
|
|||||||
$file_name = 'diy-' . $path;
|
$file_name = 'diy-' . $path;
|
||||||
|
|
||||||
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
$content .= " <template v-if=\"component.componentName == '{$name}'\">\n";
|
||||||
$content .= " <$file_name :component=\"component\" :global=\"data.global\" :index=\"index\" :pullDownRefreshCount=\"props.pullDownRefreshCount\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" />\n";
|
$content .= " <$file_name ref=\"diy{$name}Ref\" :component=\"component\" :global=\"data.global\" :index=\"index\" :scrollBool=\"diyGroup.componentsScrollBool.{$name}\" />\n";
|
||||||
$content .= " </template>\n";
|
$content .= " </template>\n";
|
||||||
|
|
||||||
$addon_import_content .= " import diy{$name} from '@/addon/" . $v . "/components/diy/{$path}/index.vue';\n";
|
$addon_import_content .= " import diy{$name} from '@/addon/" . $v . "/components/diy/{$path}/index.vue';\n";
|
||||||
@ -113,7 +113,7 @@ trait WapTrait
|
|||||||
$content .= " </view>\n";
|
$content .= " </view>\n";
|
||||||
|
|
||||||
$content .= " </view>\n";
|
$content .= " </view>\n";
|
||||||
$content .= " <template v-if=\"diyStore.mode == '' && data.global.bottomTabBarSwitch\">\n";
|
$content .= " <template v-if=\"diyStore.mode == '' && data.global && data.global.bottomTabBarSwitch\">\n";
|
||||||
$content .= " <view class=\"pt-[20rpx]\"></view>\n";
|
$content .= " <view class=\"pt-[20rpx]\"></view>\n";
|
||||||
$content .= " <tabbar />\n";
|
$content .= " <tabbar />\n";
|
||||||
$content .= " </template>\n";
|
$content .= " </template>\n";
|
||||||
@ -129,19 +129,22 @@ trait WapTrait
|
|||||||
$content .= " import topTabbar from '@/components/top-tabbar/top-tabbar.vue'\n";
|
$content .= " import topTabbar from '@/components/top-tabbar/top-tabbar.vue'\n";
|
||||||
$content .= " import useDiyStore from '@/app/stores/diy';\n";
|
$content .= " import useDiyStore from '@/app/stores/diy';\n";
|
||||||
$content .= " import { useDiyGroup } from './useDiyGroup';\n";
|
$content .= " import { useDiyGroup } from './useDiyGroup';\n";
|
||||||
$content .= " import { ref } from 'vue';\n\n";
|
$content .= " import { ref,getCurrentInstance } from 'vue';\n\n";
|
||||||
|
|
||||||
|
$content .= " const props = defineProps(['data']);\n";
|
||||||
|
$content .= " const instance: any = getCurrentInstance();\n";
|
||||||
|
$content .= " const getFormRef = () => {\n";
|
||||||
|
$content .= " return {\n";
|
||||||
|
$content .= " componentRefs: instance.refs\n";
|
||||||
|
$content .= " }\n";
|
||||||
|
$content .= " }\n";
|
||||||
|
|
||||||
$content .= " const props = defineProps(['data','pullDownRefreshCount']);\n";
|
|
||||||
$content .= " const topTabbarRef = ref(null);\n";
|
|
||||||
$content .= " const diyStore = useDiyStore();\n";
|
$content .= " const diyStore = useDiyStore();\n";
|
||||||
$content .= " const diyGroup = useDiyGroup({\n";
|
$content .= " const diyGroup = useDiyGroup({\n";
|
||||||
$content .= " ...props,\n";
|
$content .= " ...props,\n";
|
||||||
$content .= " getFormRef() {\n";
|
$content .= " getFormRef\n";
|
||||||
$content .= " return {\n";
|
|
||||||
$content .= " topTabbarRef: topTabbarRef.value\n";
|
|
||||||
$content .= " }\n";
|
|
||||||
$content .= " }\n";
|
|
||||||
$content .= " });\n";
|
$content .= " });\n";
|
||||||
|
|
||||||
$content .= " const data = ref(diyGroup.data);\n\n";
|
$content .= " const data = ref(diyGroup.data);\n\n";
|
||||||
|
|
||||||
$content .= " // 监听页面加载完成\n";
|
$content .= " // 监听页面加载完成\n";
|
||||||
@ -151,7 +154,8 @@ trait WapTrait
|
|||||||
$content .= " diyGroup.onPageScroll();\n";
|
$content .= " diyGroup.onPageScroll();\n";
|
||||||
|
|
||||||
$content .= " defineExpose({\n";
|
$content .= " defineExpose({\n";
|
||||||
$content .= " refresh: diyGroup.refresh\n";
|
$content .= " refresh: diyGroup.refresh,\n";
|
||||||
|
$content .= " getFormRef\n";
|
||||||
$content .= " })\n";
|
$content .= " })\n";
|
||||||
|
|
||||||
$content .= "</script>\n";
|
$content .= "</script>\n";
|
||||||
@ -163,98 +167,6 @@ trait WapTrait
|
|||||||
return file_put_contents($compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/components/diy/group/index.vue'), $content);
|
return file_put_contents($compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/components/diy/group/index.vue'), $content);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 编译 fixed-group 固定模板组件代码文件
|
|
||||||
* @param $compile_path
|
|
||||||
* @param $addon
|
|
||||||
* @return false|int
|
|
||||||
*/
|
|
||||||
public function compileFixedComponentsCode($compile_path, $addon)
|
|
||||||
{
|
|
||||||
$content = "<template>\n";
|
|
||||||
$content .= " <view class=\"fixed-group\">\n";
|
|
||||||
|
|
||||||
$root_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'app/components/fixed'); // 系统固定模板组件根目录
|
|
||||||
$file_arr = getFileMap($root_path);
|
|
||||||
|
|
||||||
if (!empty($file_arr)) {
|
|
||||||
foreach ($file_arr as $ck => $cv) {
|
|
||||||
if (str_contains($cv, 'index.vue')) {
|
|
||||||
|
|
||||||
$path = str_replace($root_path . '/', '', $ck);
|
|
||||||
$path = str_replace('/index.vue', '', $path);
|
|
||||||
if ($path == 'group') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$file_name = 'fixed-' . $path;
|
|
||||||
|
|
||||||
$content .= " <template v-if=\"props.data.global.component == '{$path}'\">\n";
|
|
||||||
$content .= " <$file_name :data=\"props.data\" :pullDownRefreshCount=\"props.pullDownRefreshCount\"></$file_name>\n";
|
|
||||||
$content .= " </template>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查询已安装的插件
|
|
||||||
$addon_import_content = "";
|
|
||||||
$addon_service = new CoreAddonService();
|
|
||||||
$addon_list = $addon_service->getInstallAddonList();
|
|
||||||
$addon_arr = [];
|
|
||||||
if (!empty($addon_list)) {
|
|
||||||
foreach ($addon_list as $k => $v) {
|
|
||||||
$addon_arr[] = $v[ 'key' ];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$addon_arr[] = $addon; // 追加新装插件
|
|
||||||
$addon_arr = array_unique($addon_arr);
|
|
||||||
foreach ($addon_arr as $k => $v) {
|
|
||||||
$addon_path = $compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/' . $v . '/components/fixed'); // 插件固定模板组件根目录
|
|
||||||
$addon_file_arr = getFileMap($addon_path);
|
|
||||||
|
|
||||||
if (!empty($addon_file_arr)) {
|
|
||||||
foreach ($addon_file_arr as $ck => $cv) {
|
|
||||||
if (str_contains($cv, 'index.vue')) {
|
|
||||||
|
|
||||||
$path = str_replace($addon_path . '/', '', $ck);
|
|
||||||
$path = str_replace('/index.vue', '', $path);
|
|
||||||
|
|
||||||
// 获取自定义组件 key 关键词
|
|
||||||
$name_arr = explode('-', $path);
|
|
||||||
foreach ($name_arr as $nk => $nv) {
|
|
||||||
// 首字母大写
|
|
||||||
$name_arr[ $nk ] = strtoupper($nv[ 0 ] ?? '') . substr($nv, 1);
|
|
||||||
}
|
|
||||||
$name = implode('', $name_arr);
|
|
||||||
$file_name = 'fixed-' . $path;
|
|
||||||
|
|
||||||
$content .= " <template v-if=\"props.data.global.component == '{$path}'\">\n";
|
|
||||||
$content .= " <$file_name :data=\"props.data\" :pullDownRefreshCount=\"props.pullDownRefreshCount\"></$file_name>\n";
|
|
||||||
$content .= " </template>\n";
|
|
||||||
|
|
||||||
$addon_import_content .= " import fixed{$name} from '@/addon/" . $v . "/components/fixed/{$path}/index.vue';\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$content .= " </view>\n";
|
|
||||||
$content .= "</template>\n";
|
|
||||||
|
|
||||||
$content .= "<script lang=\"ts\" setup>\n";
|
|
||||||
if (!empty($addon_import_content)) {
|
|
||||||
$content .= $addon_import_content;
|
|
||||||
}
|
|
||||||
$content .= " const props = defineProps(['data','pullDownRefreshCount']);\n";
|
|
||||||
$content .= "</script>\n";
|
|
||||||
|
|
||||||
$content .= "<style lang=\"scss\" scoped>\n";
|
|
||||||
$content .= " @import './index.scss';\n";
|
|
||||||
$content .= "</style>\n";
|
|
||||||
|
|
||||||
return file_put_contents($compile_path . str_replace('/', DIRECTORY_SEPARATOR, 'addon/components/fixed/group/index.vue'), $content);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编译 pages.json 页面路由代码文件,// {{PAGE}}
|
* 编译 pages.json 页面路由代码文件,// {{PAGE}}
|
||||||
* @param $compile_path
|
* @param $compile_path
|
||||||
|
|||||||
100
niucloud/app/service/core/diy/CoreDiyService.php
Normal file
100
niucloud/app/service/core/diy/CoreDiyService.php
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\core\diy;
|
||||||
|
|
||||||
|
use app\dict\sys\ConfigKeyDict;
|
||||||
|
use app\model\sys\SysConfig;
|
||||||
|
use app\service\core\sys\CoreConfigService;
|
||||||
|
use core\base\BaseCoreService;
|
||||||
|
use think\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自定义页面服务层
|
||||||
|
* Class CoreDiyService
|
||||||
|
* @package app\service\core\diy
|
||||||
|
*/
|
||||||
|
class CoreDiyService extends BaseCoreService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 获取系统默认主题配色
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDefaultColor()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => '商务蓝',
|
||||||
|
'name' => 'blue',
|
||||||
|
'theme' => [
|
||||||
|
'--primary-color' => '#007aff', // 主色
|
||||||
|
'--primary-help-color' => '#007aff', // 辅色
|
||||||
|
'--price-text-color' => '#FF4142',// 价格颜色
|
||||||
|
'--primary-color-dark' => '#398ade', // 灰色
|
||||||
|
'--primary-color-disabled' => '#9acafc', // 禁用色
|
||||||
|
'--primary-color-light' => '#ecf5ff', // 边框色(深)
|
||||||
|
'--primary-color-light2' => '#fff7f7', // 边框色(淡)
|
||||||
|
'--page-bg-color' => '#f6f6f6', // 页面背景色
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认主题配色
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getDefaultThemeColor()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'title' => '商务蓝',
|
||||||
|
'name' => 'blue',
|
||||||
|
'theme' => [
|
||||||
|
'--primary-color' => '#007aff', // 主色
|
||||||
|
'--primary-help-color' => '#007aff', // 辅色
|
||||||
|
'--price-text-color' => '#FF4142',// 价格颜色
|
||||||
|
'--primary-color-dark' => '#398ade', // 灰色
|
||||||
|
'--primary-color-disabled' => '#9acafc', // 禁用色
|
||||||
|
'--primary-color-light' => '#ecf5ff', // 边框色(深)
|
||||||
|
'--primary-color-light2' => '#fff7f7', // 边框色(淡)
|
||||||
|
'--page-bg-color' => '#f6f6f6', // 页面背景色
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => '热情红',
|
||||||
|
'name' => 'red',
|
||||||
|
'theme' => [
|
||||||
|
'--primary-color' => '#FF4142', // 主色
|
||||||
|
'--primary-help-color' => '#FB7939', // 辅色
|
||||||
|
'--price-text-color' => '#FF4142',// 价格颜色
|
||||||
|
'--primary-color-dark' => '#F26F3E', // 灰色
|
||||||
|
'--primary-color-disabled' => '#FFB397', // 禁用色
|
||||||
|
'--primary-color-light' => '#FFEAEA', // 边框色(深)
|
||||||
|
'--primary-color-light2' => '#fff7f7', // 边框色(淡)
|
||||||
|
'--page-bg-color' => '#f6f6f6', // 页面背景色
|
||||||
|
],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => '活力橙',
|
||||||
|
'name' => 'orange',
|
||||||
|
'theme' => [
|
||||||
|
'--primary-color' => '#FA6400', // 主色
|
||||||
|
'--primary-help-color' => '#FA6400', // 辅色
|
||||||
|
'--price-text-color' => '#FF2525',// 价格颜色
|
||||||
|
'--primary-color-dark' => '#F48032', // 灰色
|
||||||
|
'--primary-color-disabled' => '#FFC29A', // 禁用色
|
||||||
|
'--primary-color-light' => '#FFF4ED', // 边框色(深)
|
||||||
|
'--primary-color-light2' => '#FFF4ED', // 边框色(淡)
|
||||||
|
'--page-bg-color' => '#f6f6f6', // 页面背景色
|
||||||
|
],
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
315
niucloud/app/service/core/diy_form/CoreDiyFormConfigService.php
Normal file
315
niucloud/app/service/core/diy_form/CoreDiyFormConfigService.php
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\core\diy_form;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyFormSubmitConfig;
|
||||||
|
use app\model\diy_form\DiyFormWriteConfig;
|
||||||
|
use core\base\BaseCoreService;
|
||||||
|
use core\exception\CommonException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单配置
|
||||||
|
* Class CoreDiyFormConfigService
|
||||||
|
* @package app\service\core\diy_form
|
||||||
|
*/
|
||||||
|
class CoreDiyFormConfigService extends BaseCoreService
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加表单填写配置
|
||||||
|
* @param $data
|
||||||
|
*/
|
||||||
|
public function addWriteConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
$save_data = [
|
||||||
|
'site_id' => $data[ 'site_id' ],
|
||||||
|
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
||||||
|
'write_way' => $data[ 'write_way' ] ?? 'no_limit', // 填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入
|
||||||
|
'join_member_type' => $data[ 'join_member_type' ] ?? 'all_member', // 参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签
|
||||||
|
'level_ids' => array_map(function($item) { return (string) $item; }, $data[ 'level_ids' ] ?? []), // 会员等级id集合
|
||||||
|
'label_ids' => array_map(function($item) { return (string) $item; }, $data[ 'label_ids' ] ?? []), // 会员标签id集合
|
||||||
|
'member_write_type' => $data[ 'member_write_type' ] ?? 'no_limit', // 每人可填写次数,no_limit:不限制,diy:自定义
|
||||||
|
// 每人可填写次数自定义规则
|
||||||
|
'member_write_rule' => $data[ 'member_write_rule' ] ?? [
|
||||||
|
'time_value' => 1, // 时间
|
||||||
|
'time_unit' => 'day', // 时间单位
|
||||||
|
'num' => 1 // 可填写次数
|
||||||
|
],
|
||||||
|
'form_write_type' => $data[ 'form_write_type' ] ?? 'no_limit', // 表单可填写数量,no_limit:不限制,diy:自定义
|
||||||
|
// 表单可填写总数自定义规则
|
||||||
|
'form_write_rule' => $data[ 'form_write_rule' ] ?? [
|
||||||
|
'time_value' => 1, // 时间
|
||||||
|
'time_unit' => 'day', // 时间单位
|
||||||
|
'num' => 1 // 可填写次数
|
||||||
|
],
|
||||||
|
'time_limit_type' => $data[ 'time_limit_type' ] ?? 'no_limit', // 填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间
|
||||||
|
// 填写时间限制规则
|
||||||
|
'time_limit_rule' => $data[ 'time_limit_rule' ] ?? [
|
||||||
|
'specify_time' => [], // 指定开始结束时间
|
||||||
|
'open_day_time' => [], // 设置每日开启时间
|
||||||
|
],
|
||||||
|
'is_allow_update_content' => $data[ 'is_allow_update_content' ] ?? 0, // 是否允许修改自己填写的内容,0:否,1:是
|
||||||
|
'write_instruction' => $data[ 'write_instruction' ] ?? '', // 表单填写须知
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$res = ( new DiyFormWriteConfig() )->create($save_data);
|
||||||
|
return $res->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑表单填写配置
|
||||||
|
* @param $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function editWriteConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($data[ 'id' ])) {
|
||||||
|
throw new CommonException('缺少表单配置id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = ( new DiyFormWriteConfig() )->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'id', '=', $data[ 'id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ]
|
||||||
|
])->count();
|
||||||
|
|
||||||
|
if (empty($count)) {
|
||||||
|
throw new CommonException('表单填写配置不存在');
|
||||||
|
}
|
||||||
|
|
||||||
|
$save_data = [
|
||||||
|
'write_way' => $data[ 'write_way' ] ?? 'no_limit', // 填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入
|
||||||
|
'join_member_type' => $data[ 'join_member_type' ] ?? 'all_member', // 参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签
|
||||||
|
'level_ids' => array_map(function($item) { return (string) $item; }, $data[ 'level_ids' ] ?? []), // 会员等级id集合
|
||||||
|
'label_ids' => array_map(function($item) { return (string) $item; }, $data[ 'label_ids' ] ?? []), // 会员标签id集合
|
||||||
|
'member_write_type' => $data[ 'member_write_type' ] ?? 'no_limit', // 每人可填写次数,no_limit:不限制,diy:自定义
|
||||||
|
// 每人可填写次数自定义规则
|
||||||
|
'member_write_rule' => $data[ 'member_write_rule' ] ?? [
|
||||||
|
'time_value' => 1, // 时间
|
||||||
|
'time_unit' => 'day', // 时间单位
|
||||||
|
'num' => 1 // 可填写次数
|
||||||
|
],
|
||||||
|
'form_write_type' => $data[ 'form_write_type' ] ?? 'no_limit', // 表单可填写数量,no_limit:不限制,diy:自定义// 表单可填写总数自定义规则
|
||||||
|
'form_write_rule' => $data[ 'form_write_rule' ] ?? [
|
||||||
|
'time_value' => 1, // 时间
|
||||||
|
'time_unit' => 'day', // 时间单位
|
||||||
|
'num' => 1 // 可填写次数
|
||||||
|
],
|
||||||
|
'time_limit_type' => $data[ 'time_limit_type' ] ?? 'no_limit', // 填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间
|
||||||
|
// 填写时间限制规则
|
||||||
|
'time_limit_rule' => $data[ 'time_limit_rule' ] ?? [
|
||||||
|
'specify_time' => [], // 指定开始结束时间
|
||||||
|
'open_day_time' => [], // 设置每日开启时间
|
||||||
|
],
|
||||||
|
'is_allow_update_content' => $data[ 'is_allow_update_content' ] ?? 0, // 是否允许修改自己填写的内容,0:否,1:是
|
||||||
|
'write_instruction' => $data[ 'write_instruction' ] ?? '', // 表单填写须知
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!empty($save_data[ 'time_limit_rule' ][ 'specify_time' ])) {
|
||||||
|
$start_time = strtotime($save_data[ 'time_limit_rule' ][ 'specify_time' ][ 0 ]);
|
||||||
|
$end_time = strtotime($save_data[ 'time_limit_rule' ][ 'specify_time' ][ 1 ]);
|
||||||
|
$save_data[ 'time_limit_rule' ][ 'specify_time' ] = [ $start_time, $end_time ];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($save_data[ 'time_limit_rule' ][ 'open_day_time' ])) {
|
||||||
|
|
||||||
|
$current_timestamp = strtotime(date('Y-m-d'));
|
||||||
|
|
||||||
|
$start_time_arr = explode(':', $save_data[ 'time_limit_rule' ][ 'open_day_time' ][ 0 ]);
|
||||||
|
$start_time = strtotime("{$start_time_arr[ 0 ]}:{$start_time_arr[ 1 ]}") - $current_timestamp;
|
||||||
|
|
||||||
|
$end_time_arr = explode(':', $save_data[ 'time_limit_rule' ][ 'open_day_time' ][ 1 ]);
|
||||||
|
$end_time = strtotime("{$end_time_arr[ 0 ]}:{$end_time_arr[ 1 ]}") - $current_timestamp;
|
||||||
|
|
||||||
|
$save_data[ 'time_limit_rule' ][ 'open_day_time' ] = [ $start_time, $end_time ];
|
||||||
|
}
|
||||||
|
|
||||||
|
( new DiyFormWriteConfig() )->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'id', '=', $data[ 'id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ]
|
||||||
|
])->update($save_data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单填写配置
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getWriteConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = 'id, form_id, write_way, join_member_type, level_ids, label_ids, member_write_type, member_write_rule, form_write_type, form_write_rule, time_limit_type, time_limit_rule, is_allow_update_content, write_instruction';
|
||||||
|
$info = ( new DiyFormWriteConfig() )->field($field)->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ]
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
if (!empty($info)) {
|
||||||
|
|
||||||
|
if (isset($info[ 'label_ids' ]) && !empty($info[ 'label_ids' ])) {
|
||||||
|
$info[ 'label_ids' ] = array_map('intval', $info[ 'label_ids' ]);
|
||||||
|
}
|
||||||
|
if (isset($info[ 'level_ids' ]) && !empty($info[ 'level_ids' ])) {
|
||||||
|
$info[ 'level_ids' ] = array_map('intval', $info[ 'level_ids' ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($info[ 'time_limit_rule' ][ 'specify_time' ])) {
|
||||||
|
$start_time = date('Y-m-d H:i:s', $info[ 'time_limit_rule' ][ 'specify_time' ][ 0 ]);
|
||||||
|
$end_time = date('Y-m-d H:i:s', $info[ 'time_limit_rule' ][ 'specify_time' ][ 1 ]);
|
||||||
|
$info[ 'time_limit_rule' ][ 'specify_time' ] = [ $start_time, $end_time ];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($info[ 'time_limit_rule' ][ 'open_day_time' ])) {
|
||||||
|
|
||||||
|
$start_timestamp = strtotime(date('Y-m-d', time())) + $info[ 'time_limit_rule' ][ 'open_day_time' ][ 0 ];
|
||||||
|
$start_time = date('H:i', $start_timestamp);
|
||||||
|
|
||||||
|
$end_timestamp = strtotime(date('Y-m-d', time())) + $info[ 'time_limit_rule' ][ 'open_day_time' ][ 1 ];
|
||||||
|
$end_time = date('H:i', $end_timestamp);
|
||||||
|
|
||||||
|
$info[ 'time_limit_rule' ][ 'open_day_time' ] = [ $start_time, $end_time ];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加表单提交成功页配置
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function addSubmitConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
$save_data = [
|
||||||
|
'site_id' => $data[ 'site_id' ],
|
||||||
|
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
||||||
|
'submit_after_action' => $data[ 'submit_after_action' ] ?? 'text', // 填表人提交后操作,text:文字信息,voucher:核销凭证
|
||||||
|
'tips_type' => $data[ 'tips_type' ] ?? 'default', // 提示内容类型,default:默认提示,diy:自定义提示
|
||||||
|
'tips_text' => $data[ 'tips_text' ] ?? '', // 自定义提示内容
|
||||||
|
'time_limit_type' => $data[ 'time_limit_type' ] ?? 'no_limit', // 核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期
|
||||||
|
// 核销凭证时间限制规则,json格式 todo 结构待定
|
||||||
|
'time_limit_rule' => $data[ 'time_limit_rule' ] ?? [],
|
||||||
|
// 核销凭证内容,json格式 todo 结构待定
|
||||||
|
'voucher_content_rule' => $data[ 'voucher_content_rule' ] ?? [],
|
||||||
|
// 填写成功后续操作
|
||||||
|
'success_after_action' => $data[ 'success_after_action' ] ?? [
|
||||||
|
'share' => false, // 转发填写内容
|
||||||
|
'finish' => true, // 完成
|
||||||
|
'goback' => true // 返回
|
||||||
|
],
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
|
||||||
|
$res = ( new DiyFormSubmitConfig() )->create($save_data);
|
||||||
|
return $res->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑表单提交成功页配置
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function editSubmitConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($data[ 'id' ])) {
|
||||||
|
throw new CommonException('缺少表单配置id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = ( new DiyFormSubmitConfig() )->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'id', '=', $data[ 'id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ]
|
||||||
|
])->count();
|
||||||
|
|
||||||
|
if (empty($count)) {
|
||||||
|
throw new CommonException('表单提交成功页配置不存在');
|
||||||
|
}
|
||||||
|
|
||||||
|
$save_data = [
|
||||||
|
'site_id' => $data[ 'site_id' ],
|
||||||
|
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
||||||
|
'submit_after_action' => $data[ 'submit_after_action' ] ?? 'text', // 填表人提交后操作,text:文字信息,voucher:核销凭证
|
||||||
|
'tips_type' => $data[ 'tips_type' ] ?? 'default', // 提示内容类型,default:默认提示,diy:自定义提示
|
||||||
|
'tips_text' => $data[ 'tips_text' ] ?? '', // 自定义提示内容
|
||||||
|
'time_limit_type' => $data[ 'time_limit_type' ] ?? 'no_limit', // 核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期
|
||||||
|
// 核销凭证时间限制规则,json格式 todo 结构待定
|
||||||
|
'time_limit_rule' => $data[ 'time_limit_rule' ] ?? [],
|
||||||
|
// 核销凭证内容,json格式 todo 结构待定
|
||||||
|
'voucher_content_rule' => $data[ 'voucher_content_rule' ] ?? [],
|
||||||
|
// 填写成功后续操作
|
||||||
|
'success_after_action' => $data[ 'success_after_action' ] ?? [
|
||||||
|
'share' => false, // 转发填写内容
|
||||||
|
'finish' => true, // 完成
|
||||||
|
'goback' => true // 返回
|
||||||
|
],
|
||||||
|
'update_time' => time(),
|
||||||
|
];
|
||||||
|
|
||||||
|
( new DiyFormSubmitConfig() )->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'id', '=', $data[ 'id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
])->update($save_data);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表单提交成功页配置
|
||||||
|
* @param $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getSubmitConfig($data)
|
||||||
|
{
|
||||||
|
if (empty($data[ 'form_id' ])) {
|
||||||
|
throw new CommonException('缺少表单id');
|
||||||
|
}
|
||||||
|
|
||||||
|
$field = 'id, form_id, submit_after_action, tips_type, tips_text, time_limit_type, time_limit_rule, voucher_content_rule, success_after_action';
|
||||||
|
|
||||||
|
$info = ( new DiyFormSubmitConfig() )->field($field)->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ]
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
if (!empty($info)) {
|
||||||
|
// todo 靠后完善,处理核销凭证数据结构
|
||||||
|
}
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
}
|
||||||
238
niucloud/app/service/core/diy_form/CoreDiyFormRecordsService.php
Normal file
238
niucloud/app/service/core/diy_form/CoreDiyFormRecordsService.php
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace app\service\core\diy_form;
|
||||||
|
|
||||||
|
use app\model\diy_form\DiyForm;
|
||||||
|
use app\model\diy_form\DiyFormFields;
|
||||||
|
use app\model\diy_form\DiyFormRecords;
|
||||||
|
use app\model\diy_form\DiyFormRecordsFields;
|
||||||
|
use core\base\BaseCoreService;
|
||||||
|
use core\exception\CommonException;
|
||||||
|
use think\facade\Db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 万能表单使用记录
|
||||||
|
* Class CoreDiyFormRecordsService
|
||||||
|
* @package app\service\core\diy
|
||||||
|
*/
|
||||||
|
class CoreDiyFormRecordsService extends BaseCoreService
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->model = new DiyFormRecords();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录分页列表
|
||||||
|
* @param array $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getPage(array $data = [])
|
||||||
|
{
|
||||||
|
$where[ 'create_time' ] = $data[ 'create_time' ];
|
||||||
|
$member_where = [];
|
||||||
|
if (!empty($data[ 'keyword' ])) {
|
||||||
|
$member_where[] = [ 'member_no|nickname|username|mobile', 'like', '%' . $data[ 'keyword' ] . '%' ];
|
||||||
|
}
|
||||||
|
$field = 'record_id, form_id, member_id, relate_id, create_time';
|
||||||
|
$order = "create_time desc";
|
||||||
|
$search_model = $this->model->where([
|
||||||
|
[ 'diy_form_records.site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'form_id', '=', $data [ 'form_id' ] ]
|
||||||
|
])->field($field)->withSearch([ 'create_time' ], $where)
|
||||||
|
->withJoin([
|
||||||
|
'member' => function($query) use ($member_where) {
|
||||||
|
$query->where($member_where);
|
||||||
|
}
|
||||||
|
])->with([
|
||||||
|
// 关联表单字段列表 todo 靠后完善
|
||||||
|
// 'formFieldList' => function($query) {
|
||||||
|
// $query->field('id, form_id, form_field_id, record_id, member_id, field_key, field_type, field_name, field_value, update_num, update_time');
|
||||||
|
// },
|
||||||
|
// 关联填写字段列表
|
||||||
|
'recordsFieldList' => function($query) {
|
||||||
|
$query->field('id, form_id, form_field_id, record_id, member_id, field_key, field_type, field_name, field_value, update_num, update_time')->append([ 'handle_field_value', 'render_value', 'detailComponent' ]);
|
||||||
|
}
|
||||||
|
])
|
||||||
|
->order($order);
|
||||||
|
|
||||||
|
return $this->pageQuery($search_model, function($item) {
|
||||||
|
$list_key = array_column($item[ 'recordsFieldList' ]->toArray(), 'field_key');
|
||||||
|
$recordsFieldList = array_combine($list_key, $item[ 'recordsFieldList' ]->toArray());
|
||||||
|
$item[ 'recordsFieldList' ] = $recordsFieldList;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录详情
|
||||||
|
* @param array $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getInfo(array $data = [])
|
||||||
|
{
|
||||||
|
$field = 'record_id,value';
|
||||||
|
$info = $this->model->field($field)->where([ [ 'record_id', '=', $data[ 'record_id' ] ], [ 'site_id', '=', $data[ 'site_id' ] ] ])
|
||||||
|
->with([
|
||||||
|
// 关联填写字段列表
|
||||||
|
'recordsFieldList' => function($query) {
|
||||||
|
$query->field('id, form_id, form_field_id, record_id, member_id, field_key, field_type, field_name, field_value, update_num, update_time')->append([ 'handle_field_value', 'render_value', 'detailComponent' ]);
|
||||||
|
}
|
||||||
|
])->findOrEmpty()->toArray();
|
||||||
|
if (!empty($info)) {
|
||||||
|
$list_key = array_column($info[ 'recordsFieldList' ], 'field_key');
|
||||||
|
$recordsFieldList = array_combine($list_key, $info[ 'recordsFieldList' ]);
|
||||||
|
$info[ 'recordsFieldList' ] = $recordsFieldList;
|
||||||
|
}
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取使用记录详情
|
||||||
|
* @param array $data
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function del($data)
|
||||||
|
{
|
||||||
|
return $this->model->where([ [ 'record_id', '=', $data[ 'record_id' ] ], [ 'site_id', '=', $data[ 'site_id' ] ] ])->delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交填表记录
|
||||||
|
* @param $data
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function add($data)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$form_info = ( new DiyForm() )->where([
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
])->field('form_id,status')->findOrEmpty()->toArray();
|
||||||
|
|
||||||
|
// 无效表单id
|
||||||
|
if (empty($form_info)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 过滤未启用的表单
|
||||||
|
if (!empty($form_info) && $form_info[ 'status' ] == 0) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
Db::startTrans();
|
||||||
|
|
||||||
|
$data[ 'create_time' ] = time();
|
||||||
|
// todo $data[ 'value' ] 考虑过滤存储数据,靠后完善,修改表单可能会用到
|
||||||
|
$res = $this->model->create($data);
|
||||||
|
|
||||||
|
$diy_form_records_fields_model = new DiyFormRecordsFields();
|
||||||
|
|
||||||
|
$form_field_list = ( new DiyFormFields() )->field('field_key,field_required,field_unique')->where([
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
])->select()->toArray();
|
||||||
|
if ($form_field_list) {
|
||||||
|
$list_key = array_column($form_field_list, 'field_key');
|
||||||
|
$form_field_list = array_combine($list_key, $form_field_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
$diy_form_records_fields = [];
|
||||||
|
if (!empty($data[ 'value' ])) {
|
||||||
|
// $value = json_decode($data[ 'value' ], true);
|
||||||
|
foreach ($data[ 'value' ] as $component) {
|
||||||
|
|
||||||
|
// 过滤非表单组件和表单提交按钮组件
|
||||||
|
if ($component[ 'componentType' ] != 'diy_form' || $component[ 'componentName' ] == 'FormSubmit' || $component[ 'isHidden' ]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$field_value = $component[ 'field' ][ 'value' ];
|
||||||
|
$check_field_value = $field_value;
|
||||||
|
if (is_array($field_value)) {
|
||||||
|
$check_field_value = $diy_form_records_fields_model->getRenderValueAttr('', [ 'field_value' => json_encode($field_value, JSON_UNESCAPED_UNICODE) , 'field_type' => $component[ 'componentName' ]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$form_field_info = $form_field_list[ $component[ 'id' ] ] ?? [];
|
||||||
|
|
||||||
|
if (!empty($form_field_info)) {
|
||||||
|
if ($form_field_info[ 'field_required' ] == 1 && empty($field_value)) {
|
||||||
|
throw new CommonException($component[ 'componentTitle' ] . '不能为空');
|
||||||
|
} else if (empty($check_field_value)) {
|
||||||
|
// 过滤空数据
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检测字段是否重复
|
||||||
|
$field_values = ( new DiyFormRecordsFields() )->where([
|
||||||
|
[ 'site_id', '=', $data[ 'site_id' ] ],
|
||||||
|
[ 'form_id', '=', $data[ 'form_id' ] ],
|
||||||
|
[ 'field_key', '=', $component[ 'id' ] ],
|
||||||
|
[ 'field_type', '=', $component[ 'componentName' ] ]
|
||||||
|
])->column('field_value');
|
||||||
|
if ($form_field_info[ 'field_unique' ] == 1 && in_array($field_value, $field_values)) {
|
||||||
|
throw new CommonException($component[ 'componentTitle' ] . '不能重复');
|
||||||
|
}
|
||||||
|
} else if (empty($check_field_value)) {
|
||||||
|
// 过滤空数据
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($field_value)) {
|
||||||
|
$field_value = json_encode($field_value, JSON_UNESCAPED_UNICODE);
|
||||||
|
}
|
||||||
|
|
||||||
|
$diy_form_records_fields[] = [
|
||||||
|
'site_id' => $data[ 'site_id' ],
|
||||||
|
'form_id' => $data[ 'form_id' ], // 所属万能表单id
|
||||||
|
// 'form_field_id'=>'', // todo 暂无,靠后完善
|
||||||
|
'record_id' => $res->record_id, // 关联表单填写记录id
|
||||||
|
'member_id' => $data[ 'member_id' ], // 填写会员id
|
||||||
|
'field_key' => $component[ 'id' ], // 字段唯一标识
|
||||||
|
'field_type' => $component[ 'componentName' ], // 字段类型
|
||||||
|
'field_name' => $component[ 'field' ][ 'name' ] ?? '', // 字段名称
|
||||||
|
// 'field_remark' => $component[ 'field' ][ 'remark' ][ 'text' ] ?? '', // 字段说明
|
||||||
|
'field_value' => $field_value, // 字段值
|
||||||
|
'field_required' => $component[ 'field' ][ 'required' ], // 字段是否必填 0:否 1:是
|
||||||
|
'field_hidden' => $component[ 'isHidden' ], // 字段是否隐藏 0:否 1:是
|
||||||
|
'field_unique' => $component[ 'field' ][ 'unique' ], // 字段内容防重复 0:否 1:是
|
||||||
|
'privacy_protection' => $component[ 'field' ][ 'privacyProtection' ], // 隐私保护 0:关闭 1:开启
|
||||||
|
'create_time' => time(),
|
||||||
|
'update_time' => time()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($diy_form_records_fields)) {
|
||||||
|
$diy_form_records_fields_model->insertAll($diy_form_records_fields);
|
||||||
|
|
||||||
|
$diy_form = new DiyForm();
|
||||||
|
// 累计填写数量
|
||||||
|
$diy_form->where([ [ 'form_id', '=', $data[ 'form_id' ] ] ])->inc('write_num', 1)->update();
|
||||||
|
|
||||||
|
$diy_form_fields_model = new DiyFormFields();
|
||||||
|
foreach ($diy_form_records_fields as $field) {
|
||||||
|
// 字段累计填写数量
|
||||||
|
$diy_form_fields_model->where([ [ 'form_id', '=', $data[ 'form_id' ] ], [ 'field_key', '=', $field[ 'field_key' ] ], [ 'site_id', '=', $field[ 'site_id' ] ] ])->inc('write_num', 1)->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Db::commit();
|
||||||
|
return $res->record_id;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -44,7 +44,7 @@ class CoreMemberAccountService extends BaseCoreService
|
|||||||
throw new CommonException('ACCOUNT_INSUFFICIENT');
|
throw new CommonException('ACCOUNT_INSUFFICIENT');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = array(
|
$data = [
|
||||||
'site_id' => $site_id,
|
'site_id' => $site_id,
|
||||||
'member_id' => $member_id,
|
'member_id' => $member_id,
|
||||||
'account_type' => $account_type,
|
'account_type' => $account_type,
|
||||||
@ -56,7 +56,7 @@ class CoreMemberAccountService extends BaseCoreService
|
|||||||
'mobile' => $member_info[ 'mobile' ],
|
'mobile' => $member_info[ 'mobile' ],
|
||||||
'memo' => $memo,
|
'memo' => $memo,
|
||||||
'related_id' => $related_id,
|
'related_id' => $related_id,
|
||||||
);
|
];
|
||||||
|
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class CoreMemberCashOutAccountService extends BaseCoreService
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getInfo(int $account_id, int $site_id, int $member_id){
|
public function getInfo(int $account_id, int $site_id, int $member_id){
|
||||||
$field = 'account_id,site_id,member_id,account_type,bank_name,realname,account_no';
|
$field = 'account_id,site_id,member_id,account_type,bank_name,realname,account_no, transfer_payment_code';
|
||||||
return $this->model->where([['account_id', '=', $account_id], ['site_id', '=', $site_id], ['member_id', '=', $member_id]])->field($field)->findOrEmpty()->toArray();
|
return $this->model->where([['account_id', '=', $account_id], ['site_id', '=', $site_id], ['member_id', '=', $member_id]])->field($field)->findOrEmpty()->toArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,141 +40,14 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
$this->model = new MemberCashOut();
|
$this->model = new MemberCashOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取对象
|
|
||||||
* @param int $site_id
|
|
||||||
* @param int $id
|
|
||||||
* @return MemberCashOut|array|mixed|Model
|
|
||||||
*/
|
|
||||||
public function find(int $site_id, int $id){
|
|
||||||
return $this->model->where([
|
|
||||||
['site_id', '=', $site_id],
|
|
||||||
['id', '=', $id],
|
|
||||||
])->findOrEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $site_id
|
|
||||||
* @param int $id
|
|
||||||
* @param string $action
|
|
||||||
* @param array $data
|
|
||||||
* @return true
|
|
||||||
*/
|
|
||||||
public function audit(int $site_id, int $id, string $action, $data = []){
|
|
||||||
|
|
||||||
$cash_out = $this->find($site_id, $id);
|
|
||||||
if($cash_out->isEmpty()) throw new CommonException('CASHOUT_LOG_NOT_EXIST');
|
|
||||||
if($cash_out['status'] != MemberCashOutDict::WAIT_AUDIT) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_AUDIT');
|
|
||||||
switch($action){
|
|
||||||
case 'agree'://同意
|
|
||||||
$this->agree($site_id, $cash_out, $data);
|
|
||||||
break;
|
|
||||||
case 'refuse'://拒绝
|
|
||||||
$this->refuse($site_id, $cash_out, $data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 审核通过
|
|
||||||
* @param int $site_id
|
|
||||||
* @param MemberCashOut $cash_out
|
|
||||||
* @param array $data
|
|
||||||
* @return true
|
|
||||||
*/
|
|
||||||
public function agree(int $site_id, MemberCashOut $cash_out, array $data = []){
|
|
||||||
$cash_out->save([
|
|
||||||
'audit_time' => time(),
|
|
||||||
'status' => MemberCashOutDict::WAIT_TRANSFER
|
|
||||||
]);
|
|
||||||
$config = (new CoreMemberConfigService())->getCashOutConfig($site_id);
|
|
||||||
if($config['is_auto_transfer']){
|
|
||||||
try {
|
|
||||||
$this->transfer($site_id, $cash_out['id']);
|
|
||||||
} catch ( Throwable $e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 拒绝
|
|
||||||
* @param int $site_id
|
|
||||||
* @param MemberCashOut $cash_out
|
|
||||||
* @param array $data
|
|
||||||
* @return true
|
|
||||||
*/
|
|
||||||
public function refuse(int $site_id, MemberCashOut $cash_out, array $data){
|
|
||||||
$cash_out->save([
|
|
||||||
'audit_time' => time(),
|
|
||||||
'status' => MemberCashOutDict::REFUSE,
|
|
||||||
'refuse_reason' => $data['refuse_reason']
|
|
||||||
]);
|
|
||||||
$this->giveback($site_id, $cash_out);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 转账
|
|
||||||
* @param int $site_id
|
|
||||||
* @param int $id
|
|
||||||
* @param array $data
|
|
||||||
* @return true
|
|
||||||
*/
|
|
||||||
public function transfer(int $site_id, int $id, array $data = []){
|
|
||||||
$transfer_type = $data['transfer_type'] ?? '';
|
|
||||||
|
|
||||||
$cash_out = $this->find($site_id, $id);
|
|
||||||
if($cash_out->isEmpty()) throw new CommonException('RECHARGE_LOG_NOT_EXIST');
|
|
||||||
if($cash_out['status'] != MemberCashOutDict::WAIT_TRANSFER) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_TRANSFER');
|
|
||||||
$transfer_no = $cash_out['transfer_no'];
|
|
||||||
if(!$transfer_no){
|
|
||||||
$transfer_no = (new CoreTransferService())->create($site_id, PayDict::MEMBER, $cash_out['member_id'], $cash_out['money'], CashOutTypeDict::MEMBER_CASH_OUT, get_lang('MEMBER_CASHOUT_TRANSFER'));
|
|
||||||
$cash_out->save(
|
|
||||||
[
|
|
||||||
'transfer_no' => $transfer_no
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($transfer_type != TransferDict::OFFLINE){
|
|
||||||
$data['transfer_type'] = $cash_out['transfer_type'];
|
|
||||||
$data['transfer_realname'] = $cash_out['transfer_realname'];
|
|
||||||
$data['transfer_mobile'] = $cash_out['transfer_mobile'];
|
|
||||||
$data['transfer_bank'] = $cash_out['transfer_bank'];
|
|
||||||
$data['transfer_account'] = $cash_out['transfer_account'];
|
|
||||||
$transfer_type = $cash_out['transfer_type'];
|
|
||||||
if($transfer_type == TransferDict::WECHAT){
|
|
||||||
//根据转账方式和会员的授权信息来判断可以使用的转账方式
|
|
||||||
$member = (new CoreMemberService())->find($site_id, $cash_out['member_id']);
|
|
||||||
if(!empty($member['wx_openid'])){
|
|
||||||
$data['openid'] = $member['wx_openid'];
|
|
||||||
} else if(!empty($member['weapp_openid'])){
|
|
||||||
$data['openid'] = $member['wweapp_openid'];
|
|
||||||
}else{
|
|
||||||
$data['openid'] = '';
|
|
||||||
}
|
|
||||||
$data['openid'] = $member['wx_openid'];
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
$transfer_type = $cash_out['transfer_type'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = (new CoreTransferService())->transfer($site_id, $transfer_no, $transfer_type, $data);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提现转账完成
|
* 提现转账完成
|
||||||
* @param $site_id
|
* @param $site_id
|
||||||
* @param $transfer_no
|
* @param $transfer_no
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function transferFinish($site_id, $transfer_no){
|
public function transferFinish($site_id, $transfer_no)
|
||||||
|
{
|
||||||
$cash_out = $this->model->where(
|
$cash_out = $this->model->where(
|
||||||
[
|
[
|
||||||
['site_id', '=', $site_id],
|
['site_id', '=', $site_id],
|
||||||
@ -183,7 +56,7 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
)->findOrEmpty();
|
)->findOrEmpty();
|
||||||
|
|
||||||
if ($cash_out->isEmpty()) throw new CommonException('RECHARGE_LOG_NOT_EXIST');
|
if ($cash_out->isEmpty()) throw new CommonException('RECHARGE_LOG_NOT_EXIST');
|
||||||
if($cash_out['status'] != MemberCashOutDict::WAIT_TRANSFER) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_TRANSFER');
|
if ($cash_out['status'] != MemberCashOutDict::WAIT_TRANSFER && $cash_out['status'] != MemberCashOutDict::TRANSFER_ING) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_TRANSFER');
|
||||||
//减去提现中金额
|
//减去提现中金额
|
||||||
$this->give($site_id, $cash_out);
|
$this->give($site_id, $cash_out);
|
||||||
$cash_out->save([
|
$cash_out->save([
|
||||||
@ -194,6 +67,39 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 累加提现金额,累减提现中金额
|
||||||
|
* @param int $site_id
|
||||||
|
* @param MemberCashOut $cash_out
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function give(int $site_id, MemberCashOut $cash_out)
|
||||||
|
{
|
||||||
|
$core_member_service = new CoreMemberService();
|
||||||
|
$member = $core_member_service->find($site_id, $cash_out->member_id);
|
||||||
|
if ($member->isEmpty()) throw new CommonException('MEMBER_NOT_EXIST');
|
||||||
|
$member->save(
|
||||||
|
[
|
||||||
|
$cash_out->account_type . '_cash_outing' => $member[$cash_out->account_type . '_cash_outing'] - $cash_out->apply_money
|
||||||
|
]
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取对象
|
||||||
|
* @param int $site_id
|
||||||
|
* @param int $id
|
||||||
|
* @return MemberCashOut|array|mixed|Model
|
||||||
|
*/
|
||||||
|
public function find(int $site_id, int $id)
|
||||||
|
{
|
||||||
|
return $this->model->where([
|
||||||
|
['site_id', '=', $site_id],
|
||||||
|
['id', '=', $id],
|
||||||
|
])->findOrEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 申请提现
|
* 申请提现
|
||||||
* @param int $site_id
|
* @param int $site_id
|
||||||
@ -201,7 +107,8 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
* @param array $data
|
* @param array $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function apply(int $site_id, int $member_id, array $data){
|
public function apply(int $site_id, int $member_id, array $data)
|
||||||
|
{
|
||||||
$core_member_service = new CoreMemberService();
|
$core_member_service = new CoreMemberService();
|
||||||
$member = $core_member_service->find($site_id, $member_id);
|
$member = $core_member_service->find($site_id, $member_id);
|
||||||
|
|
||||||
@ -224,11 +131,18 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
if ($transfer_type != TransferDict::WECHAT) {
|
if ($transfer_type != TransferDict::WECHAT) {
|
||||||
$cash_out_account = (new CoreMemberCashOutAccountService())->getInfo($data['account_id'], $site_id, $member_id);
|
$cash_out_account = (new CoreMemberCashOutAccountService())->getInfo($data['account_id'], $site_id, $member_id);
|
||||||
if (empty($cash_out_account)) throw new CommonException('CASH_OUT_ACCOUNT_NOT_EXIST');
|
if (empty($cash_out_account)) throw new CommonException('CASH_OUT_ACCOUNT_NOT_EXIST');
|
||||||
|
} else {
|
||||||
|
$data_transfer_payee = $data['transfer_payee'] ?? [];
|
||||||
|
if (empty($data_transfer_payee)) throw new CommonException('CASH_OUT_ACCOUNT_NOT_FOUND_VALUE');//转账到微信零钱缺少参数
|
||||||
|
$transfer_payee = [
|
||||||
|
'open_id' => $data_transfer_payee['open_id'] ?? '',
|
||||||
|
'channel' => $data_transfer_payee['channel'] ?? '',
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
try {
|
try {
|
||||||
$data = array(
|
$data = [
|
||||||
'member_id' => $member_id,
|
'member_id' => $member_id,
|
||||||
'site_id' => $site_id,
|
'site_id' => $site_id,
|
||||||
'cash_out_no' => $this->createCashOutNo($site_id),
|
'cash_out_no' => $this->createCashOutNo($site_id),
|
||||||
@ -242,8 +156,10 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
'transfer_mobile' => $member['mobile'] ?? '',
|
'transfer_mobile' => $member['mobile'] ?? '',
|
||||||
'transfer_bank' => $cash_out_account['bank_name'] ?? '',
|
'transfer_bank' => $cash_out_account['bank_name'] ?? '',
|
||||||
'transfer_account' => $cash_out_account['account_no'] ?? '',
|
'transfer_account' => $cash_out_account['account_no'] ?? '',
|
||||||
|
'transfer_payment_code' => $cash_out_account['transfer_payment_code'] ?? '',//收款码
|
||||||
|
'transfer_payee' => $transfer_payee ?? [],//对接线上转账数据
|
||||||
'rate' => $config['rate'],
|
'rate' => $config['rate'],
|
||||||
);
|
];
|
||||||
$cash_out = $this->model->create($data);
|
$cash_out = $this->model->create($data);
|
||||||
//扣除对应账户金额
|
//扣除对应账户金额
|
||||||
$member_account_service = new CoreMemberAccountService();
|
$member_account_service = new CoreMemberAccountService();
|
||||||
@ -259,6 +175,7 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
$core_member_cash_out_service->audit($site_id, $cash_out->id, 'agree');
|
$core_member_cash_out_service->audit($site_id, $cash_out->id, 'agree');
|
||||||
}
|
}
|
||||||
Db::commit();
|
Db::commit();
|
||||||
|
return $cash_out['id'];
|
||||||
} catch ( Exception $e ) {
|
} catch ( Exception $e ) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
throw new CommonException($e->getMessage());
|
throw new CommonException($e->getMessage());
|
||||||
@ -267,16 +184,156 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前可用的转账方式
|
* 创建订单编号
|
||||||
* @param $site_id
|
* @param int $site_id
|
||||||
* @return array|array[]
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getTransferType($site_id){
|
public function createCashOutNo(int $site_id)
|
||||||
|
{
|
||||||
|
$time_str = date('YmdHi');
|
||||||
|
$max_no = Cache::get('cash_out_no_' . $site_id . '_' . $time_str);
|
||||||
|
|
||||||
|
if (!isset($max_no) || empty($max_no)) {
|
||||||
|
$max_no = 1;
|
||||||
|
} else {
|
||||||
|
++$max_no;
|
||||||
|
}
|
||||||
|
$cash_out_no = $time_str . $site_id . sprintf('%03d', $max_no);
|
||||||
|
Cache::set('cash_out_no_' . $site_id . '_' . $time_str, $max_no);
|
||||||
|
return $cash_out_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $site_id
|
||||||
|
* @param int $id
|
||||||
|
* @param string $action
|
||||||
|
* @param array $data
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function audit(int $site_id, int $id, string $action, $data = [])
|
||||||
|
{
|
||||||
|
|
||||||
|
$cash_out = $this->find($site_id, $id);
|
||||||
|
if ($cash_out->isEmpty()) throw new CommonException('CASHOUT_LOG_NOT_EXIST');
|
||||||
|
if ($cash_out['status'] != MemberCashOutDict::WAIT_AUDIT) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_AUDIT');
|
||||||
|
switch ($action) {
|
||||||
|
case 'agree'://同意
|
||||||
|
$this->agree($site_id, $cash_out, $data);
|
||||||
|
break;
|
||||||
|
case 'refuse'://拒绝
|
||||||
|
$this->refuse($site_id, $cash_out, $data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 审核通过
|
||||||
|
* @param int $site_id
|
||||||
|
* @param MemberCashOut $cash_out
|
||||||
|
* @param array $data
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function agree(int $site_id, MemberCashOut $cash_out, array $data = [])
|
||||||
|
{
|
||||||
|
$cash_out->save([
|
||||||
|
'audit_time' => time(),
|
||||||
|
'status' => MemberCashOutDict::WAIT_TRANSFER
|
||||||
|
]);
|
||||||
$config = (new CoreMemberConfigService())->getCashOutConfig($site_id);
|
$config = (new CoreMemberConfigService())->getCashOutConfig($site_id);
|
||||||
return TransferDict::getTransferType($config['transfer_type'], false);
|
if ($config['is_auto_transfer']) {
|
||||||
|
try {
|
||||||
|
$this->transfer($site_id, $cash_out['id']);
|
||||||
|
} catch ( Throwable $e ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 转账
|
||||||
|
* @param int $site_id
|
||||||
|
* @param int $id
|
||||||
|
* @param array $data
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function transfer(int $site_id, int $id, array $data = [])
|
||||||
|
{
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$transfer_type = $data['transfer_type'] ?? '';
|
||||||
|
|
||||||
|
$cash_out = $this->find($site_id, $id);
|
||||||
|
if ($cash_out->isEmpty()) throw new CommonException('RECHARGE_LOG_NOT_EXIST');
|
||||||
|
if ($cash_out['status'] != MemberCashOutDict::WAIT_TRANSFER && $cash_out['status'] != MemberCashOutDict::TRANSFER_ING) throw new CommonException('CASHOUT_STATUS_NOT_IN_WAIT_TRANSFER');
|
||||||
|
$transfer_no = $cash_out['transfer_no'];
|
||||||
|
if (!$transfer_no) {
|
||||||
|
$transfer_no = (new CoreTransferService())->create($site_id, PayDict::MEMBER, $cash_out['member_id'], $cash_out['money'], CashOutTypeDict::MEMBER_CASH_OUT, get_lang('MEMBER_CASHOUT_TRANSFER'));
|
||||||
|
$cash_out->save(
|
||||||
|
[
|
||||||
|
'transfer_no' => $transfer_no,
|
||||||
|
'status' => MemberCashOutDict::TRANSFER_ING
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($transfer_type != TransferDict::OFFLINE) {
|
||||||
|
$data['transfer_type'] = $cash_out['transfer_type'];
|
||||||
|
$data['transfer_realname'] = $cash_out['transfer_realname'];
|
||||||
|
$data['transfer_mobile'] = $cash_out['transfer_mobile'];
|
||||||
|
$data['transfer_bank'] = $cash_out['transfer_bank'];
|
||||||
|
$data['transfer_account'] = $cash_out['transfer_account'];
|
||||||
|
$data['transfer_payment_code'] = $cash_out['transfer_payment_code'];
|
||||||
|
$transfer_type = $cash_out['transfer_type'];
|
||||||
|
if ($transfer_type == TransferDict::WECHAT) {//如果是转账到微信钱包,则需要获取openid
|
||||||
|
//根据转账方式和会员的授权信息来判断可以使用的转账方式
|
||||||
|
// $member = (new CoreMemberService())->find($site_id, $cash_out['member_id']);
|
||||||
|
// if(!empty($member['wx_openid'])){
|
||||||
|
// $data['openid'] = $member['wx_openid'];
|
||||||
|
// } else if(!empty($member['weapp_openid'])){
|
||||||
|
// $data['openid'] = $member['wweapp_openid'];
|
||||||
|
// }else{
|
||||||
|
// $data['openid'] = '';
|
||||||
|
// }
|
||||||
|
// $data['openid'] = $member['wx_openid'];
|
||||||
|
$data['transfer_payee'] = $cash_out['transfer_payee'] ?? [];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$transfer_type = $cash_out['transfer_type'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = (new CoreTransferService())->transfer($site_id, $transfer_no, $transfer_type, $data);
|
||||||
|
Db::commit();
|
||||||
|
return true;
|
||||||
|
// 提交事务
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
// 回滚事务
|
||||||
|
throw new CommonException($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拒绝
|
||||||
|
* @param int $site_id
|
||||||
|
* @param MemberCashOut $cash_out
|
||||||
|
* @param array $data
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
public function refuse(int $site_id, MemberCashOut $cash_out, array $data)
|
||||||
|
{
|
||||||
|
$cash_out->save([
|
||||||
|
'audit_time' => time(),
|
||||||
|
'status' => MemberCashOutDict::REFUSE,
|
||||||
|
'refuse_reason' => $data['refuse_reason']
|
||||||
|
]);
|
||||||
|
$this->giveback($site_id, $cash_out);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返还用户的对应账户
|
* 返还用户的对应账户
|
||||||
@ -284,7 +341,8 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
* @param MemberCashOut $cash_out
|
* @param MemberCashOut $cash_out
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function giveback(int $site_id, MemberCashOut $cash_out){
|
public function giveback(int $site_id, MemberCashOut $cash_out)
|
||||||
|
{
|
||||||
$core_member_account_service = new CoreMemberAccountService();
|
$core_member_account_service = new CoreMemberAccountService();
|
||||||
|
|
||||||
$core_member_account_service->addLog($site_id, $cash_out->member_id, $cash_out->account_type, $cash_out->apply_money, 'cash_out', get_lang('CASHOUT_IS_REFUSE'), $cash_out->id);
|
$core_member_account_service->addLog($site_id, $cash_out->member_id, $cash_out->account_type, $cash_out->apply_money, 'cash_out', get_lang('CASHOUT_IS_REFUSE'), $cash_out->id);
|
||||||
@ -300,39 +358,39 @@ class CoreMemberCashOutService extends BaseCoreService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 累加提现金额,累减提现中金额
|
* 当前可用的转账方式
|
||||||
|
* @param $site_id
|
||||||
|
* @return array|array[]
|
||||||
|
*/
|
||||||
|
public function getTransferType($site_id)
|
||||||
|
{
|
||||||
|
$config = (new CoreMemberConfigService())->getCashOutConfig($site_id);
|
||||||
|
return TransferDict::getTransferType($config['transfer_type'], false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
* @param int $site_id
|
* @param int $site_id
|
||||||
* @param MemberCashOut $cash_out
|
* @param int $id
|
||||||
|
* @param array $data
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
public function give(int $site_id, MemberCashOut $cash_out){
|
public function remark(int $site_id, int $id, array $data)
|
||||||
$core_member_service = new CoreMemberService();
|
{
|
||||||
$member = $core_member_service->find($site_id, $cash_out->member_id);
|
$cash_out = $this->find($site_id, $id);
|
||||||
if($member->isEmpty()) throw new CommonException('MEMBER_NOT_EXIST');
|
$cash_out->save([
|
||||||
$member->save(
|
'remark' => $data['remark']
|
||||||
[
|
]);
|
||||||
$cash_out->account_type.'_cash_outing' => $member[$cash_out->account_type.'_cash_outing'] - $cash_out->apply_money
|
|
||||||
]
|
|
||||||
);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 创建订单编号
|
|
||||||
* @param int $site_id
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function createCashOutNo(int $site_id)
|
|
||||||
{
|
|
||||||
$time_str = date('YmdHi');
|
|
||||||
$max_no = Cache::get("cash_out_no_" . $site_id . "_" . $time_str);
|
|
||||||
|
|
||||||
if (!isset($max_no) || empty($max_no)) {
|
|
||||||
$max_no = 1;
|
public function checkTransferStatus(int $site_id, int $id){
|
||||||
} else {
|
$cash_out = $this->find($site_id, $id);
|
||||||
++$max_no;
|
$core_transfer_service = new CoreTransferService();
|
||||||
}
|
$status = $core_transfer_service->check($site_id, [
|
||||||
$cash_out_no = $time_str . $site_id . sprintf('%03d', $max_no);
|
'transfer_no' => $cash_out['transfer_no']
|
||||||
Cache::set("cash_out_no_" . $site_id . "_" . $time_str, $max_no);
|
]);
|
||||||
return $cash_out_no;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,14 +166,14 @@ class CorePayEventService extends BaseCoreService
|
|||||||
* @return array
|
* @return array
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function transfer(float $money, string $transfer_no, string $to_no, string $to_name, string $remark, array $transfer_list = [], string $to_type = '', string $product_code = '', string $scene = '')
|
public function transfer(float $money, string $transfer_no, string|array $to_no, string $to_name, string $remark, array $transfer_list = [], string $to_type = '', string $product_code = '', string $scene = '')
|
||||||
{
|
{
|
||||||
$transfer_type = TransferDict::getPayTypeByTransfer($this->type);
|
$transfer_type = TransferDict::getPayTypeByTransfer($this->type);
|
||||||
switch ($transfer_type) {
|
switch ($transfer_type) {
|
||||||
case PayDict::WECHATPAY:
|
case TransferDict::WECHAT:
|
||||||
$money = (int) bcmul($money, 100);
|
$money = (int) bcmul($money, 100);
|
||||||
break;
|
break;
|
||||||
case PayDict::ALIPAY:
|
case TransferDict::ALIPAY:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return $this->app('transfer')->transfer([
|
return $this->app('transfer')->transfer([
|
||||||
|
|||||||
@ -89,11 +89,15 @@ class CoreTransferService extends BaseCoreService
|
|||||||
'openid' => $data['openid'] ?? '',
|
'openid' => $data['openid'] ?? '',
|
||||||
'transfer_voucher' => $data['transfer_voucher'] ?? '',
|
'transfer_voucher' => $data['transfer_voucher'] ?? '',
|
||||||
'transfer_remark' => $data['transfer_remark'] ?? '',
|
'transfer_remark' => $data['transfer_remark'] ?? '',
|
||||||
|
'transfer_payee' => $data['transfer_payee'] ?? [],
|
||||||
|
'transfer_payment_code' => $data['transfer_payment_code'] ?? ''
|
||||||
);
|
);
|
||||||
$transfer->save($transfer_data);
|
$transfer->save($transfer_data);
|
||||||
switch($transfer_type){
|
switch($transfer_type){
|
||||||
case TransferDict::WECHAT:
|
case TransferDict::WECHAT:
|
||||||
$transfer_account = $data['openid'];
|
$out_batch_no = create_no();
|
||||||
|
$transfer_account = $data['transfer_payee'] ?? [];
|
||||||
|
$transfer_account['out_batch_no'] = $out_batch_no;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$params = [];
|
$params = [];
|
||||||
@ -103,6 +107,13 @@ class CoreTransferService extends BaseCoreService
|
|||||||
// $params['batch_id'] = $result['batch_id'];
|
// $params['batch_id'] = $result['batch_id'];
|
||||||
// $params['out_batch_no'] = $result['out_batch_no'];
|
// $params['out_batch_no'] = $result['out_batch_no'];
|
||||||
//将返回的数据交给转账通知
|
//将返回的数据交给转账通知
|
||||||
|
$update_data = [
|
||||||
|
'batch_id' => $result['batch_id'] ?? ''
|
||||||
|
];
|
||||||
|
if(!empty($out_batch_no)){
|
||||||
|
$update_data['out_batch_no'] = $out_batch_no;
|
||||||
|
}
|
||||||
|
$transfer->save($update_data);
|
||||||
$this->transferNotify($site_id, $transfer_no, $result);
|
$this->transferNotify($site_id, $transfer_no, $result);
|
||||||
return true;
|
return true;
|
||||||
}catch( Throwable $e){
|
}catch( Throwable $e){
|
||||||
@ -131,7 +142,7 @@ class CoreTransferService extends BaseCoreService
|
|||||||
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
||||||
|
|
||||||
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
||||||
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING, TransferDict::FAIL])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
||||||
$status = $params['status'] ?? TransferDict::DEALING;
|
$status = $params['status'] ?? TransferDict::DEALING;
|
||||||
switch($status){
|
switch($status){
|
||||||
case TransferDict::SUCCESS:
|
case TransferDict::SUCCESS:
|
||||||
@ -158,7 +169,7 @@ class CoreTransferService extends BaseCoreService
|
|||||||
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
||||||
|
|
||||||
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
||||||
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING, TransferDict::FAIL])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
||||||
|
|
||||||
$trade_type = $transfer->trade_type;
|
$trade_type = $transfer->trade_type;
|
||||||
$data = [
|
$data = [
|
||||||
@ -200,7 +211,7 @@ class CoreTransferService extends BaseCoreService
|
|||||||
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
||||||
|
|
||||||
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
||||||
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
if(!in_array($transfer['transfer_status'], [TransferDict::WAIT, TransferDict::DEALING, TransferDict::FAIL])) throw new PayException('TRANFER_STATUS_NOT_IN_WAIT_TANSFER');
|
||||||
$data = array(
|
$data = array(
|
||||||
'transfer_time' => time(),
|
'transfer_time' => time(),
|
||||||
'transfer_status' => TransferDict::FAIL,
|
'transfer_status' => TransferDict::FAIL,
|
||||||
@ -217,10 +228,10 @@ class CoreTransferService extends BaseCoreService
|
|||||||
$transfer_no = $data['transfer_no'];
|
$transfer_no = $data['transfer_no'];
|
||||||
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
$transfer = $this->findTransferByTransferNo($site_id, $transfer_no);
|
||||||
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
if($transfer->isEmpty()) throw new PayException('TRANSFER_ORDER_INVALID');
|
||||||
if(!in_array($transfer['transfer_status'], [TransferDict::DEALING, TransferDict::WAIT]) ) throw new PayException('TRANFER_IS_CHANGE');//只有待转账和转账中的订单可以校验
|
if(!in_array($transfer['transfer_status'], [TransferDict::DEALING, TransferDict::WAIT, TransferDict::FAIL]) ) throw new PayException('TRANFER_IS_CHANGE');//只有待转账和转账中的订单可以校验
|
||||||
|
|
||||||
//查询第三方支付单据
|
//查询第三方支付单据
|
||||||
$transfer_info = $this->pay_event->init($site_id, $transfer->channel, $transfer->type)->getTransfer($transfer_no, $transfer['batch_id'] ?? '');
|
$transfer_info = $this->pay_event->init($site_id, 'transfer', $transfer->transfer_type)->getTransfer($transfer_no, $transfer['out_batch_no'] ?? '');
|
||||||
if(empty($transfer_info)) throw new PayException('TRANSFER_ORDER_INVALID');//查询不到转账信息
|
if(empty($transfer_info)) throw new PayException('TRANSFER_ORDER_INVALID');//查询不到转账信息
|
||||||
$status = $transfer_info['status'];
|
$status = $transfer_info['status'];
|
||||||
switch($status){
|
switch($status){
|
||||||
@ -234,7 +245,7 @@ class CoreTransferService extends BaseCoreService
|
|||||||
$this->fail($site_id, $transfer_no);
|
$this->fail($site_id, $transfer_no);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return $status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -49,7 +49,7 @@ class CorePosterService extends BaseCoreService
|
|||||||
*/
|
*/
|
||||||
public function del($condition)
|
public function del($condition)
|
||||||
{
|
{
|
||||||
( new Poster() )->delete($condition);
|
( new Poster() )->where($condition)->delete();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -54,10 +54,11 @@ class CoreSiteService extends BaseCoreService
|
|||||||
[ 'site_id', '=', $site_id ],
|
[ 'site_id', '=', $site_id ],
|
||||||
];
|
];
|
||||||
$info = $this->model->where($where)->field('site_id, site_name, front_end_name, front_end_logo,front_end_icon, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id, district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id, app, addons, site_domain')->append([ 'status_name' ])->findOrEmpty()->toArray();
|
$info = $this->model->where($where)->field('site_id, site_name, front_end_name, front_end_logo,front_end_icon, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id, district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id, app, addons, site_domain')->append([ 'status_name' ])->findOrEmpty()->toArray();
|
||||||
|
// dump($info);die;
|
||||||
if (!empty($info)) {
|
if (!empty($info)) {
|
||||||
$site_addons = ( new CoreSiteService() )->getAddonKeysBySiteId((int) $site_id);
|
$site_addons = ( new CoreSiteService() )->getAddonKeysBySiteId((int) $site_id);
|
||||||
$info[ 'apps' ] = ( new Addon() )->where([ [ 'key', 'in', $site_addons ], [ 'type', '=', AddonDict::APP ] ])->field('key,title,desc,icon,type')->select()->toArray();
|
$info[ 'apps' ] = ( new Addon() )->where([ [ 'key', 'in', $site_addons ], [ 'type', '=', AddonDict::APP ] ])->field('key,title,desc,icon,type,support_app')->select()->toArray();
|
||||||
$info[ 'site_addons' ] = ( new Addon() )->where([ [ 'key', 'in', $site_addons ], [ 'type', '=', AddonDict::ADDON ] ])->field('key,title,desc,icon,type')->select()->toArray();
|
$info[ 'site_addons' ] = ( new Addon() )->where([ [ 'key', 'in', $site_addons ], [ 'type', '=', AddonDict::ADDON ] ])->field('key,title,desc,icon,type,support_app')->select()->toArray();
|
||||||
}
|
}
|
||||||
return $info;
|
return $info;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -13,6 +13,7 @@ namespace app\service\core\sys;
|
|||||||
|
|
||||||
use app\model\sys\SysConfig;
|
use app\model\sys\SysConfig;
|
||||||
use core\base\BaseCoreService;
|
use core\base\BaseCoreService;
|
||||||
|
use think\facade\Cache;
|
||||||
use think\Model;
|
use think\Model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,6 +23,8 @@ use think\Model;
|
|||||||
*/
|
*/
|
||||||
class CoreConfigService extends BaseCoreService
|
class CoreConfigService extends BaseCoreService
|
||||||
{
|
{
|
||||||
|
public static $cache_tag_name = 'sys_config';
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
@ -36,11 +39,29 @@ class CoreConfigService extends BaseCoreService
|
|||||||
*/
|
*/
|
||||||
public function getConfig(int $site_id, string $key)
|
public function getConfig(int $site_id, string $key)
|
||||||
{
|
{
|
||||||
|
$cache_name = 'site_config_cache';
|
||||||
$where = array(
|
$where = array(
|
||||||
[ 'config_key', '=', $key ],
|
[ 'config_key', '=', $key ],
|
||||||
[ 'site_id', '=', $site_id ]
|
[ 'site_id', '=', $site_id ]
|
||||||
);
|
);
|
||||||
return $this->model->where($where)->field('id,site_id,config_key,value,status,create_time,update_time')->findOrEmpty()->toArray();
|
// 缓存清理
|
||||||
|
$info = cache_remember(
|
||||||
|
$cache_name . $key . "_" . $site_id,
|
||||||
|
function() use ($where) {
|
||||||
|
$data = $this->model->where($where)->field('id,site_id,config_key,value,status,create_time,update_time')->findOrEmpty()->toArray();
|
||||||
|
//数据库中无数据返回-1
|
||||||
|
if (empty($data)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
},
|
||||||
|
self::$cache_tag_name . $site_id
|
||||||
|
);
|
||||||
|
// 检测缓存-1 返回空数据
|
||||||
|
if ($info == -1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return $info;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,6 +91,7 @@ class CoreConfigService extends BaseCoreService
|
|||||||
$res = $this->model->where($where)->save($data);
|
$res = $this->model->where($where)->save($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Cache::tag(self::$cache_tag_name . $site_id)->clear();
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -78,12 +78,16 @@ class CoreExportService extends BaseCoreService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取导出数据列
|
* 获取导出数据列
|
||||||
|
* @param int $site_id
|
||||||
* @param string $type
|
* @param string $type
|
||||||
|
* @param array $where
|
||||||
* @return array|mixed
|
* @return array|mixed
|
||||||
*/
|
*/
|
||||||
public function getExportDataColumn($type = '')
|
public function getExportDataColumn($site_id = 0, $type = '', $where = [])
|
||||||
{
|
{
|
||||||
$type_array = event("ExportDataType");
|
$param['site_id'] = $site_id;
|
||||||
|
$param['where'] = $where;
|
||||||
|
$type_array = event("ExportDataType", $param);
|
||||||
$type_list = [];
|
$type_list = [];
|
||||||
foreach ($type_array as $v)
|
foreach ($type_array as $v)
|
||||||
{
|
{
|
||||||
@ -94,7 +98,10 @@ class CoreExportService extends BaseCoreService
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取导出数据源
|
* 获取导出数据源
|
||||||
|
* @param int $site_id
|
||||||
* @param string $type
|
* @param string $type
|
||||||
|
* @param array $where
|
||||||
|
* @param array $page
|
||||||
* @return array|mixed
|
* @return array|mixed
|
||||||
*/
|
*/
|
||||||
public function getExportData($site_id = 0, $type = '', $where = [], $page = [])
|
public function getExportData($site_id = 0, $type = '', $where = [], $page = [])
|
||||||
|
|||||||
@ -154,8 +154,7 @@ class CoreWeappCloudService extends CoreCloudBaseService
|
|||||||
|
|
||||||
// 编译 diy-group 自定义组件代码文件
|
// 编译 diy-group 自定义组件代码文件
|
||||||
$this->compileDiyComponentsCode($dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
$this->compileDiyComponentsCode($dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
||||||
// 编译 fixed-group 固定模板组件代码文件
|
|
||||||
$this->compileFixedComponentsCode($dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
|
||||||
// 编译 加载插件标题语言包
|
// 编译 加载插件标题语言包
|
||||||
$this->compileLocale($dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
$this->compileLocale($dir . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR, $addon);
|
||||||
|
|
||||||
|
|||||||
103
niucloud/app/upgrade/v100/Upgrade.php
Normal file
103
niucloud/app/upgrade/v100/Upgrade.php
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\upgrade\v100;
|
||||||
|
|
||||||
|
use app\model\site\Site;
|
||||||
|
use app\model\sys\SysAttachment;
|
||||||
|
use app\model\sys\SysAttachmentCategory;
|
||||||
|
|
||||||
|
class Upgrade
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$addon_dir = root_path() . 'addon';
|
||||||
|
if (is_dir($addon_dir)) {
|
||||||
|
$addons = array_diff(scandir($addon_dir), [ '.', '..' ]);
|
||||||
|
foreach ($addons as $addon) {
|
||||||
|
$this->handleAddonUniappPages($addon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->addDefaultData();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function handleAddonUniappPages($addon)
|
||||||
|
{
|
||||||
|
$addon_uniapp_pages = str_replace('/', DIRECTORY_SEPARATOR, project_path() . "niucloud/addon/{$addon}/package/uni-app-pages.php");
|
||||||
|
if (file_exists($addon_uniapp_pages)) {
|
||||||
|
$content = file_get_contents($addon_uniapp_pages);
|
||||||
|
|
||||||
|
// 正则表达式用于捕获每个页面配置项
|
||||||
|
$pagePattern = '/\{(?:[^{}]|(?R))*\}/';
|
||||||
|
|
||||||
|
// 提取所有页面配置
|
||||||
|
preg_match_all($pagePattern, $content, $matches);
|
||||||
|
|
||||||
|
$addon_pages = [];
|
||||||
|
|
||||||
|
foreach ($matches[ 0 ] as $match) {
|
||||||
|
$addon_pages[] = " " . str_replace("$addon/pages/", "pages/", $match);
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = '<?php' . PHP_EOL;
|
||||||
|
$content .= 'return [' . PHP_EOL . " 'pages' => <<<EOT" . PHP_EOL . ' // PAGE_BEGIN' . PHP_EOL;
|
||||||
|
$content .= ' {' . PHP_EOL . ' "root": "addon/' . $addon . '", ' . PHP_EOL . ' "pages": [' . PHP_EOL;
|
||||||
|
$content .= implode("," . PHP_EOL, $addon_pages);
|
||||||
|
$content .= PHP_EOL . ' ]' . PHP_EOL . ' },' . PHP_EOL . '// PAGE_END' . PHP_EOL . 'EOT' . PHP_EOL . '];';
|
||||||
|
|
||||||
|
file_put_contents($addon_uniapp_pages, $content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addDefaultData()
|
||||||
|
{
|
||||||
|
$site_model = new Site();
|
||||||
|
$category_model = new SysAttachmentCategory();
|
||||||
|
$attachment_model = new SysAttachment();
|
||||||
|
$site_ids = $site_model->column('site_id');
|
||||||
|
|
||||||
|
foreach ($site_ids as $site_id) {
|
||||||
|
// 创建素材
|
||||||
|
$category_info = $category_model->where([
|
||||||
|
[ 'site_id', '=', $site_id ],
|
||||||
|
[ 'name', '=', '默认素材' ]
|
||||||
|
])->field('id')->findOrEmpty()->toArray();
|
||||||
|
|
||||||
|
if (!empty($category_info)) {
|
||||||
|
$category_id = $category_info[ 'id' ];
|
||||||
|
} else {
|
||||||
|
$attachment_category = $category_model->create([
|
||||||
|
'site_id' => $site_id,
|
||||||
|
'pid' => 0,
|
||||||
|
'type' => 'image',
|
||||||
|
'name' => '默认素材',
|
||||||
|
'sort' => 0
|
||||||
|
]);
|
||||||
|
$category_id = $attachment_category->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$attachment_list = [
|
||||||
|
'site_id' => $site_id,
|
||||||
|
'name' => time() . $site_id . $category_id . 'nav_sow_community.png', // 附件名称
|
||||||
|
'real_name' => '种草社区', // 原始文件名
|
||||||
|
'path' => 'static/resource/images/attachment/nav_sow_community.png', // 完整地址
|
||||||
|
'url' => 'static/resource/images/attachment/nav_sow_community.png', // 网络地址
|
||||||
|
'dir' => 'static/resource/images/attachment', // 附件路径
|
||||||
|
'att_size' => '24576', // 附件大小
|
||||||
|
'att_type' => 'image', // 附件类型image,video
|
||||||
|
'storage_type' => 'local', // 图片上传类型 local本地 aliyun 阿里云oss qiniu 七牛 ....
|
||||||
|
'cate_id' => $category_id, // 素材分类id
|
||||||
|
'create_time' => time()
|
||||||
|
];
|
||||||
|
$exist_attachment_list = $attachment_model->where([
|
||||||
|
[ 'site_id', '=', $site_id ],
|
||||||
|
[ 'path', '=', 'static/resource/images/attachment/nav_sow_community.png' ]
|
||||||
|
])->field('path')->findOrEmpty()->toArray();
|
||||||
|
|
||||||
|
if (empty($exist_attachment_list)) {
|
||||||
|
$attachment_model->create($attachment_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
158
niucloud/app/upgrade/v100/upgrade.sql
Normal file
158
niucloud/app/upgrade/v100/upgrade.sql
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` CHANGE COLUMN `transfer_fail_reason` `transfer_fail_reason` VARCHAR(2000) NOT NULL DEFAULT '' COMMENT '失败原因';
|
||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` ADD COLUMN `transfer_payment_code` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '收款码图片';
|
||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` ADD COLUMN `transfer_payee` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '在线转账数据(json)';
|
||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` ADD COLUMN `out_batch_no` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '扩展数据,主要用于记录接收到线上打款的业务数据编号';
|
||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` MODIFY COLUMN `remark` VARCHAR(255) NOT NULL DEFAULT '';
|
||||||
|
|
||||||
|
ALTER TABLE `pay_transfer` MODIFY `transfer_payment_code` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '收款码图片' AFTER `transfer_remark`;
|
||||||
|
|
||||||
|
ALTER TABLE `member_cash_out_account` ADD COLUMN `transfer_payment_code` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '收款码';
|
||||||
|
|
||||||
|
ALTER TABLE `member_cash_out` ADD COLUMN `transfer_payee` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '转账收款方(json),主要用于对接在线的打款方式';
|
||||||
|
|
||||||
|
ALTER TABLE `member_cash_out` ADD COLUMN `transfer_payment_code` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '收款码图片';
|
||||||
|
|
||||||
|
ALTER TABLE `member_cash_out` MODIFY `transfer_payee` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '转账收款方(json),主要用于对接在线的打款方式' AFTER `transfer_account`;
|
||||||
|
|
||||||
|
ALTER TABLE `member_cash_out` MODIFY `transfer_payment_code` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '收款码图片' AFTER `transfer_payee`;
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_theme`;
|
||||||
|
CREATE TABLE `diy_theme` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '标题',
|
||||||
|
`type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '插件类型app,addon',
|
||||||
|
`addon` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '所属应用,app:系统,shop:商城、o2o:上门服务',
|
||||||
|
`color_mark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '颜色标识',
|
||||||
|
`color_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '颜色名称',
|
||||||
|
`mode` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模式,default:默认【跟随系统】,diy:自定义配色',
|
||||||
|
`value` TEXT DEFAULT NULL COMMENT '配色',
|
||||||
|
`diy_value` TEXT DEFAULT NULL COMMENT '自定义配色',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='自定义主题配色表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_write_config`;
|
||||||
|
CREATE TABLE `diy_form_write_config` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`write_way` VARCHAR(255) NOT NULL COMMENT '填写方式,no_limit:不限制,scan:仅限微信扫一扫,url:仅限链接进入',
|
||||||
|
`join_member_type` VARCHAR(255) NOT NULL DEFAULT 'all_member' COMMENT '参与会员,all_member:所有会员参与,selected_member_level:指定会员等级,selected_member_label:指定会员标签',
|
||||||
|
`level_ids` TEXT DEFAULT NULL COMMENT '会员等级id集合',
|
||||||
|
`label_ids` TEXT DEFAULT NULL COMMENT '会员标签id集合',
|
||||||
|
`member_write_type` VARCHAR(255) NOT NULL COMMENT '每人可填写次数,no_limit:不限制,diy:自定义',
|
||||||
|
`member_write_rule` TEXT NOT NULL COMMENT '每人可填写次数自定义规则',
|
||||||
|
`form_write_type` VARCHAR(255) NOT NULL COMMENT '表单可填写数量,no_limit:不限制,diy:自定义',
|
||||||
|
`form_write_rule` TEXT NOT NULL COMMENT '表单可填写总数自定义规则',
|
||||||
|
`time_limit_type` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '填写时间限制类型,no_limit:不限制, specify_time:指定开始结束时间,open_day_time:设置每日开启时间',
|
||||||
|
`time_limit_rule` TEXT NOT NULL COMMENT '填写时间限制规则',
|
||||||
|
`is_allow_update_content` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '是否允许修改自己填写的内容,0:否,1:是',
|
||||||
|
`write_instruction` TEXT DEFAULT NULL COMMENT '表单填写须知',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写配置表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_submit_config`;
|
||||||
|
CREATE TABLE `diy_form_submit_config` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`submit_after_action` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '填表人提交后操作,text:文字信息,voucher:核销凭证',
|
||||||
|
`tips_type` VARCHAR(255) NOT NULL COMMENT '提示内容类型,default:默认提示,diy:自定义提示',
|
||||||
|
`tips_text` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '自定义提示内容',
|
||||||
|
`time_limit_type` VARCHAR(255) NOT NULL DEFAULT '0' COMMENT '核销凭证有效期限制类型,no_limit:不限制,specify_time:指定固定开始结束时间,submission_time:按提交时间设置有效期',
|
||||||
|
`time_limit_rule` TEXT DEFAULT NULL COMMENT '核销凭证时间限制规则,json格式',
|
||||||
|
`voucher_content_rule` TEXT DEFAULT NULL COMMENT '核销凭证内容,json格式',
|
||||||
|
`success_after_action` TEXT DEFAULT NULL COMMENT '填写成功后续操作',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单提交页配置表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_records_fields`;
|
||||||
|
CREATE TABLE `diy_form_records_fields` (
|
||||||
|
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`form_field_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联表单字段id',
|
||||||
|
`record_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联表单填写记录id',
|
||||||
|
`member_id` INT(11) NOT NULL DEFAULT 0 COMMENT '填写会员id',
|
||||||
|
`field_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段唯一标识',
|
||||||
|
`field_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段类型',
|
||||||
|
`field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段名称',
|
||||||
|
`field_value` LONGTEXT NOT NULL COMMENT '字段值,根据类型展示对应效果',
|
||||||
|
`field_required` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否必填 0:否 1:是',
|
||||||
|
`field_hidden` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否隐藏 0:否 1:是',
|
||||||
|
`field_unique` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段内容防重复 0:否 1:是',
|
||||||
|
`privacy_protection` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '隐私保护 0:关闭 1:开启',
|
||||||
|
`update_num` INT(11) NOT NULL DEFAULT 0 COMMENT '字段修改次数',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '修改时间',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写字段表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_records`;
|
||||||
|
CREATE TABLE `diy_form_records` (
|
||||||
|
`record_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '表单填写记录id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`value` LONGTEXT DEFAULT NULL COMMENT '填写的表单数据',
|
||||||
|
`member_id` INT(11) NOT NULL DEFAULT 0 COMMENT '填写人会员id',
|
||||||
|
`relate_id` INT(11) NOT NULL DEFAULT 0 COMMENT '关联业务id',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
PRIMARY KEY (`record_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单填写记录表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form_fields`;
|
||||||
|
CREATE TABLE `diy_form_fields` (
|
||||||
|
`field_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '字段id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`form_id` INT(11) NOT NULL DEFAULT 0 COMMENT '所属万能表单id',
|
||||||
|
`field_key` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段唯一标识',
|
||||||
|
`field_type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段类型',
|
||||||
|
`field_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段名称',
|
||||||
|
`field_remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段说明',
|
||||||
|
`field_default` TEXT DEFAULT NULL COMMENT '字段默认值',
|
||||||
|
`write_num` INT(11) NOT NULL DEFAULT 0 COMMENT '字段填写总数量',
|
||||||
|
`field_required` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否必填 0:否 1:是',
|
||||||
|
`field_hidden` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段是否隐藏 0:否 1:是',
|
||||||
|
`field_unique` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '字段内容防重复 0:否 1:是',
|
||||||
|
`privacy_protection` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '隐私保护 0:关闭 1:开启',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`field_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单字段表';
|
||||||
|
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `diy_form`;
|
||||||
|
CREATE TABLE `diy_form` (
|
||||||
|
`form_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '表单id',
|
||||||
|
`site_id` INT(11) NOT NULL DEFAULT 0 COMMENT '站点id',
|
||||||
|
`page_title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单名称(用于后台展示)',
|
||||||
|
`title` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单名称(用于前台展示)',
|
||||||
|
`type` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单类型',
|
||||||
|
`status` TINYINT(4) NOT NULL DEFAULT 0 COMMENT '状态(0,关闭,1:开启)',
|
||||||
|
`template` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '模板名称',
|
||||||
|
`value` LONGTEXT DEFAULT NULL COMMENT '表单数据,json格式,包含展示组件',
|
||||||
|
`addon` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '所属插件标识',
|
||||||
|
`share` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '分享内容',
|
||||||
|
`write_num` INT(11) NOT NULL DEFAULT 0 COMMENT '表单填写总数量',
|
||||||
|
`remark` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '备注说明',
|
||||||
|
`create_time` INT(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
|
||||||
|
`update_time` INT(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`form_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='万能表单表';
|
||||||
@ -14,7 +14,7 @@ namespace app\validate\diy;
|
|||||||
use think\Validate;
|
use think\Validate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统表单验证器
|
* 万能表单验证器
|
||||||
* Class DiyForm
|
* Class DiyForm
|
||||||
* @package app\validate\diy
|
* @package app\validate\diy
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'version' => '0.5.6',
|
'version' => '1.0.0',
|
||||||
'code' => '202412210001'
|
'code' => '202501170001'
|
||||||
];
|
];
|
||||||
|
|||||||
41
niucloud/core/dict/DiyFormComponent.php
Normal file
41
niucloud/core/dict/DiyFormComponent.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
namespace core\dict;
|
||||||
|
|
||||||
|
|
||||||
|
use app\service\admin\site\SiteService;
|
||||||
|
|
||||||
|
class DiyFormComponent extends BaseDict
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 万能表单组件配置
|
||||||
|
* @param array $data
|
||||||
|
* @return array|mixed
|
||||||
|
*/
|
||||||
|
public function load(array $data)
|
||||||
|
{
|
||||||
|
$addons = ( new SiteService() )->getAddonKeysBySiteId();
|
||||||
|
$components_files = [];
|
||||||
|
|
||||||
|
foreach ($addons as $v) {
|
||||||
|
$components_path = $this->getAddonDictPath($v) . "diy_form" . DIRECTORY_SEPARATOR . "components.php";
|
||||||
|
if (is_file($components_path)) {
|
||||||
|
$components_files[] = $components_path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$components_files_data = $this->loadFiles($components_files);
|
||||||
|
$components = $data;
|
||||||
|
foreach ($components_files_data as $file_data) {
|
||||||
|
$components = empty($components) ? $file_data : array_merge2($components, $file_data);
|
||||||
|
}
|
||||||
|
return $components;
|
||||||
|
}
|
||||||
|
}
|
||||||
41
niucloud/core/dict/DiyFormTemplate.php
Normal file
41
niucloud/core/dict/DiyFormTemplate.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
namespace core\dict;
|
||||||
|
|
||||||
|
|
||||||
|
use app\service\admin\site\SiteService;
|
||||||
|
|
||||||
|
class DiyFormTemplate extends BaseDict
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 万能表单模版
|
||||||
|
* @param array $data
|
||||||
|
* @return array|mixed
|
||||||
|
*/
|
||||||
|
public function load(array $data)
|
||||||
|
{
|
||||||
|
$addons = ( new SiteService() )->getAddonKeysBySiteId();
|
||||||
|
$components_files = [];
|
||||||
|
|
||||||
|
foreach ($addons as $v) {
|
||||||
|
$components_path = $this->getAddonDictPath($v) . "diy_form" . DIRECTORY_SEPARATOR . "template.php";
|
||||||
|
if (is_file($components_path)) {
|
||||||
|
$components_files[] = $components_path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$components_files_data = $this->loadFiles($components_files);
|
||||||
|
$components = $data;
|
||||||
|
foreach ($components_files_data as $file_data) {
|
||||||
|
$components = empty($components) ? $file_data : array_merge2($components, $file_data);
|
||||||
|
}
|
||||||
|
return $components;
|
||||||
|
}
|
||||||
|
}
|
||||||
41
niucloud/core/dict/DiyFormType.php
Normal file
41
niucloud/core/dict/DiyFormType.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Niucloud-admin 企业快速开发的saas管理平台
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | 官方网址:https://www.niucloud.com
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | niucloud团队 版权所有 开源版本可自由商用
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
// | Author: Niucloud Team
|
||||||
|
// +----------------------------------------------------------------------
|
||||||
|
namespace core\dict;
|
||||||
|
|
||||||
|
|
||||||
|
use app\service\admin\site\SiteService;
|
||||||
|
|
||||||
|
class DiyFormType extends BaseDict
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 万能表单组件配置
|
||||||
|
* @param array $data
|
||||||
|
* @return array|mixed
|
||||||
|
*/
|
||||||
|
public function load(array $data)
|
||||||
|
{
|
||||||
|
$addons = ( new SiteService() )->getAddonKeysBySiteId();
|
||||||
|
$components_files = [];
|
||||||
|
|
||||||
|
foreach ($addons as $v) {
|
||||||
|
$components_path = $this->getAddonDictPath($v) . "diy_form" . DIRECTORY_SEPARATOR . "type.php";
|
||||||
|
if (is_file($components_path)) {
|
||||||
|
$components_files[] = $components_path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$components_files_data = $this->loadFiles($components_files);
|
||||||
|
$components = $data;
|
||||||
|
foreach ($components_files_data as $file_data) {
|
||||||
|
$components = empty($components) ? $file_data : array_merge2($components, $file_data);
|
||||||
|
}
|
||||||
|
return $components;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -43,6 +43,7 @@ class UniappLink extends BaseDict
|
|||||||
|
|
||||||
$addon_service = new AddonService();
|
$addon_service = new AddonService();
|
||||||
$addon_info_list = $addon_service->getAddonListByKeys(array_keys($link_files));
|
$addon_info_list = $addon_service->getAddonListByKeys(array_keys($link_files));
|
||||||
|
if (empty($addon_info_list)) return [];
|
||||||
|
|
||||||
if (!empty($params[ 'params' ][ 'query' ]) && $params[ 'params' ][ 'query' ] == 'addon') {
|
if (!empty($params[ 'params' ][ 'query' ]) && $params[ 'params' ][ 'query' ] == 'addon') {
|
||||||
$list_key = array_column($addon_info_list, 'key');
|
$list_key = array_column($addon_info_list, 'key');
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace core\pay;
|
namespace core\pay;
|
||||||
|
|
||||||
|
use app\dict\common\ChannelDict;
|
||||||
use app\dict\pay\OnlinePayDict;
|
use app\dict\pay\OnlinePayDict;
|
||||||
use app\dict\pay\RefundDict;
|
use app\dict\pay\RefundDict;
|
||||||
use app\dict\pay\TransferDict;
|
use app\dict\pay\TransferDict;
|
||||||
@ -224,21 +225,32 @@ class Wechatpay extends BasePay
|
|||||||
*/
|
*/
|
||||||
public function transfer(array $params)
|
public function transfer(array $params)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$to_data = $params['to_no'];//收款人数据
|
||||||
|
$channel = $to_data['channel'] ?? '';//渠道
|
||||||
|
$open_id = $to_data['open_id'] ?? '';//openid
|
||||||
|
|
||||||
|
if(empty($this->config['mch_id']) || empty($this->config['mch_secret_key']) || empty($this->config['mch_secret_cert']) || empty($this->config['mch_public_cert_path'])){
|
||||||
|
throw new PayException('WECHAT_TRANSFER_CONFIG_NOT_EXIST');
|
||||||
|
}
|
||||||
//这儿的批次信息可能是这儿生成的,但依然需要记录
|
//这儿的批次信息可能是这儿生成的,但依然需要记录
|
||||||
$order = [
|
$order = [
|
||||||
'out_batch_no' => $params['transfer_no'] . '',//
|
'out_batch_no' => ($to_data['out_batch_no'] ?? '') . '',//
|
||||||
'batch_name' => $params['remark'],
|
'batch_name' => $params['remark'] ?? '',
|
||||||
'batch_remark' => $params['remark'],
|
'batch_remark' => $params['remark'] ?? '',
|
||||||
];
|
];
|
||||||
|
if($channel == ChannelDict::WEAPP){
|
||||||
|
$order['_type'] = 'mini';
|
||||||
|
}
|
||||||
$transfer_list = $params['transfer_list'];
|
$transfer_list = $params['transfer_list'];
|
||||||
//单笔转账
|
//单笔转账
|
||||||
if (empty($transfer_list)) {
|
if (empty($transfer_list)) {
|
||||||
$transfer_list = [
|
$transfer_list = [
|
||||||
[
|
[
|
||||||
'transfer_no' => $params['transfer_no'] . '1',
|
'transfer_no' => $params['transfer_no'],
|
||||||
'money' => (int)$params['money'],
|
'money' => (int)$params['money'],
|
||||||
'remark' => $params['remark'],
|
'remark' => $params['remark'],
|
||||||
'openid' => $params['to_no']
|
'openid' => $open_id
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -247,7 +259,7 @@ class Wechatpay extends BasePay
|
|||||||
|
|
||||||
foreach ($transfer_list as $k => $v) {
|
foreach ($transfer_list as $k => $v) {
|
||||||
$item_transfer = [
|
$item_transfer = [
|
||||||
'out_detail_no' => $params['transfer_no'] . $k,
|
'out_detail_no' => $params['transfer_no'],
|
||||||
'transfer_amount' => (int)$v['money'],
|
'transfer_amount' => (int)$v['money'],
|
||||||
'transfer_remark' => $v['remark'],
|
'transfer_remark' => $v['remark'],
|
||||||
'openid' => $v['openid'],
|
'openid' => $v['openid'],
|
||||||
@ -261,8 +273,9 @@ class Wechatpay extends BasePay
|
|||||||
}
|
}
|
||||||
$order['total_amount'] = $total_amount;
|
$order['total_amount'] = $total_amount;
|
||||||
$order['total_num'] = $total_num;
|
$order['total_num'] = $total_num;
|
||||||
$result = $this->returnFormat(Pay::wechat()->transfer($order));
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
$result = $this->returnFormat(Pay::wechat()->transfer($order));
|
||||||
if (!empty($result['code'])) {
|
if (!empty($result['code'])) {
|
||||||
// if($result['code'] == 'PARAM_ERROR'){
|
// if($result['code'] == 'PARAM_ERROR'){
|
||||||
// throw new PayException();
|
// throw new PayException();
|
||||||
@ -274,7 +287,21 @@ class Wechatpay extends BasePay
|
|||||||
}
|
}
|
||||||
throw new PayException($result['message']);
|
throw new PayException($result['message']);
|
||||||
}
|
}
|
||||||
return ['batch_id' => $result['batch_id'], 'out_batch_no' => $result['out_batch_no'], 'status' => TransferDict::SUCCESS];
|
|
||||||
|
$tran_status_list = [
|
||||||
|
'PROCESSING' => TransferDict::DEALING,
|
||||||
|
'ACCEPTED' => TransferDict::DEALING,
|
||||||
|
'CLOSED' => TransferDict::FAIL,
|
||||||
|
'FINISHED' => TransferDict::SUCCESS,
|
||||||
|
];
|
||||||
|
return ['batch_id' => $result['batch_id'], 'out_batch_no' => $result['out_batch_no'], 'status' => $tran_status_list[$result['batch_status']]];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
if ($e instanceof InvalidResponseException) {
|
||||||
|
throw new PayException($e->response->all()['message'] ?? '');
|
||||||
|
}
|
||||||
|
throw new PayException($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -465,14 +492,15 @@ class Wechatpay extends BasePay
|
|||||||
* @throws ContainerException
|
* @throws ContainerException
|
||||||
* @throws InvalidParamsException
|
* @throws InvalidParamsException
|
||||||
*/
|
*/
|
||||||
public function getTransfer(string $transfer_no, $out_transfer_no = '')
|
public function getTransfer(string $transfer_no, $out_batch_no = '')
|
||||||
{
|
{
|
||||||
$order = [
|
$order = [
|
||||||
'out_batch_no' => $out_transfer_no,
|
'out_batch_no' => $out_batch_no,
|
||||||
'out_detail_no' => $transfer_no,
|
'out_detail_no' => $transfer_no,
|
||||||
'_action' => 'transfer',
|
'_action' => 'transfer',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
$result = Pay::wechat()->query($order);
|
$result = Pay::wechat()->query($order);
|
||||||
$result = $this->returnFormat($result);
|
$result = $this->returnFormat($result);
|
||||||
//微信转账状态
|
//微信转账状态
|
||||||
@ -484,9 +512,15 @@ class Wechatpay extends BasePay
|
|||||||
'SUCCESS' => TransferDict::SUCCESS,
|
'SUCCESS' => TransferDict::SUCCESS,
|
||||||
];
|
];
|
||||||
return [
|
return [
|
||||||
'status' => $transfer_status_array[$result['status']],
|
'status' => $transfer_status_array[$result['detail_status']],
|
||||||
'transfer_no' => $transfer_no
|
'transfer_no' => $transfer_no
|
||||||
];
|
];
|
||||||
|
}catch(Throwable $e){
|
||||||
|
return [
|
||||||
|
'status' => TransferDict::DEALING,
|
||||||
|
'transfer_no' => $transfer_no
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user