安装插件后的基础文件
This commit is contained in:
363
plugin/easyflow/app/admin/controller/easyflow/FlowBase.php
Normal file
363
plugin/easyflow/app/admin/controller/easyflow/FlowBase.php
Normal file
@@ -0,0 +1,363 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
namespace app\admin\controller\easyflow;
|
||||
|
||||
use app\AdminController;
|
||||
use Exception;
|
||||
use think\facade\Db;
|
||||
use Throwable;
|
||||
/**
|
||||
* flow_group
|
||||
* 分组
|
||||
*/
|
||||
class FlowBase extends AdminController
|
||||
{
|
||||
/**
|
||||
* FlowGroup模型对象
|
||||
* @var \app\admin\model\FlowGroup
|
||||
*/
|
||||
|
||||
public $tplsharing = 'add';
|
||||
public $user = null;
|
||||
|
||||
public $noNeedAuth = ['*'];
|
||||
public function __construct()
|
||||
{
|
||||
$this->user = get_admin_info();
|
||||
parent::__construct();
|
||||
//$this->user = Session::get('AdminLogin');
|
||||
//debugger
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认生成的方法为index/add/edit/del/status 五个方法
|
||||
* 当创建CURD的时候,DIY的函数体和模板为空,请自行编写代码
|
||||
*/
|
||||
|
||||
|
||||
/***
|
||||
* 获取组织架构
|
||||
*/
|
||||
public function getOrgTree(){
|
||||
$deptId = request()->input('deptId');
|
||||
if(!$deptId){
|
||||
$deptId = 1;
|
||||
}
|
||||
$list = Db::name('department')->where(['pid'=>$deptId,'status'=>1])->select();
|
||||
$data = [];
|
||||
foreach($list as $row =>$key){
|
||||
$data[] = ['id'=>$key['id'],'name'=>$key['title'],"select"=>false,"type"=>"dept",'sex'=>null,'avatar'=>null];
|
||||
$userlist = Db::name('admin')->where(['department_id'=>$key['id']])->select();
|
||||
foreach($userlist as $row =>$user){
|
||||
$data[] = ['id'=>$user['id'],'name'=>$user['nickname'],"select"=>false,"type"=>"user",'sex'=>null,'avatar'=>null];
|
||||
}
|
||||
}
|
||||
$result =['code' =>200,'data' =>$data] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* 获取组织架构
|
||||
*/
|
||||
public function search($userName){
|
||||
$data = [];
|
||||
$list = Db::name('admin')->field('id,nickname as name')->where(['status'=>1])->where('nickname','like',"%$userName%")->select();
|
||||
foreach($list as $row =>$key){
|
||||
$data[] = ['id'=>$key['id'],'name'=>$key['title'],"select"=>false,"type"=>"role",'sex'=>null,'avatar'=>null];
|
||||
}
|
||||
$result =['code' =>200,'data' =>$data] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function getRole(){
|
||||
$data = [];
|
||||
$list = Db::name('jobs')->field('id,title')->where(['status'=>1])->select();
|
||||
foreach($list as $row =>$key){
|
||||
$data[] = ['id'=>$key['id'],'name'=>$key['title'],"select"=>false,"type"=>"role",'sex'=>null,'avatar'=>null];
|
||||
}
|
||||
$result =['code' =>200,'data' =>$data] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function getFlowGroup()
|
||||
{
|
||||
$groupList = Db::name('flow_group')->field('id,name')->select();
|
||||
$data = [];
|
||||
|
||||
foreach($groupList as $row =>$group){
|
||||
$data1 = ['id'=>$group['id'],'label'=>$group['name'],'type'=>'group'];
|
||||
$flowList = Db::name('flow_scheme')->where(['group'=>$group['id']])->select();
|
||||
$dataFlow=[];
|
||||
foreach($flowList as $row =>$flow){
|
||||
$dataFlow[]=['id'=>$flow['id'],'icon'=>$flow['icon'],'isstop'=>$flow['isstop']==1?true:false,'type'=>'scheme',
|
||||
'label'=>$flow['name'],'remark'=>$flow['remark'],'tgId'=>$flow['tgId'],'updated'=>$flow['updatetime'],
|
||||
'background'=>$flow['background'],'group'=>$flow['group']];
|
||||
}
|
||||
$data1['children'] = $dataFlow;
|
||||
$data[] = $data1;
|
||||
}
|
||||
//停用的流程
|
||||
/*$data2 = ['id'=>0,'label'=>'已停用','type'=>'group'];
|
||||
$flowList = Db::name('flow_scheme')->where(['isstop'=>0])->select();
|
||||
$dataFlowDisable=[];
|
||||
foreach($flowList as $row =>$flow){
|
||||
$dataFlowDisable[]=['id'=>$flow['id'],'icon'=>$flow['icon'],'isstop'=>true,'type'=>'scheme',
|
||||
'label'=>$flow['name'],'remark'=>$flow['remark'],'tgId'=>$flow['tgId'],'updated'=>$flow['updatetime'],
|
||||
'background'=>$flow['background'],'group'=>$flow['group']];
|
||||
}
|
||||
$data2['children'] = $dataFlowDisable;
|
||||
$data[] = $data2;*/
|
||||
|
||||
$isAdmin = $this->user['group_id'] == 1?true:false;
|
||||
$result =['code' =>200,'data' =>$data,'isAdmin'=>$isAdmin] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function updateFlowGroup()
|
||||
{
|
||||
$method = request()->method();
|
||||
$params = \request()->all();
|
||||
$result =null;
|
||||
$msg = null;
|
||||
try{
|
||||
switch ($method)
|
||||
{
|
||||
case 'POST':
|
||||
$name = $params['name'];
|
||||
$data = ['name'=>$name];
|
||||
|
||||
Db::name('flow_group')->insertGetId($data);
|
||||
$result = "添加$name 分组成功";
|
||||
break;
|
||||
case 'DELETE':
|
||||
$id = $params['id'];
|
||||
$isexist = Db::name('flow_scheme')->where('group',$id)->find();
|
||||
if($isexist){
|
||||
throw new Exception('分组有流程无法删除');
|
||||
}
|
||||
Db::name('flow_group')->delete($id);
|
||||
$msg = "删除成功";
|
||||
break;
|
||||
case 'PUT':
|
||||
Db::name('flow_group')->save($params);
|
||||
$msg='修改成功';
|
||||
break;
|
||||
}
|
||||
$result =['code' =>200,'data' =>$result,'msg'=>$msg ] ;
|
||||
}
|
||||
catch(Throwable $th){
|
||||
$result =['code' =>500,'msg' =>$th->getMessage() ] ;
|
||||
}
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function updateFlowForm()
|
||||
{
|
||||
$method = request()->method();
|
||||
$params = \request()->all();
|
||||
$result =null;
|
||||
$msg = null;
|
||||
switch ($method)
|
||||
{
|
||||
case 'GET':
|
||||
$id = $params['formId'];
|
||||
$result = Db::name('flow_scheme')->where('id', $id)->find();
|
||||
break;
|
||||
case 'DELETE':
|
||||
$id = $params['id'];
|
||||
$msg = "删除成功";
|
||||
break;
|
||||
case 'PUT':
|
||||
$params['id']= $params['formId'];
|
||||
$params['isstop'] = isset($params['isstop'])?$params['isstop']: 0;
|
||||
Db::name('flow_scheme')->strict(false)->save($params);
|
||||
$msg='修改成功';
|
||||
break;
|
||||
}
|
||||
$result =['code' =>200,'data' =>$result,'msg'=>$msg] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function getSysTable()
|
||||
{
|
||||
$database = function_exists('get_env') ? get_env('DATABASE_DATABASE') : getenv('DATABASE_DATABASE');
|
||||
$sql = "SELECT
|
||||
table_name as tablebame ,table_name as name
|
||||
FROM
|
||||
information_schema.tables
|
||||
WHERE table_schema = '$database' AND table_type = 'BASE TABLE'";
|
||||
$result = Db::query($sql);
|
||||
$result =['code' =>200,'data' =>$result] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function updateTemplate()
|
||||
{
|
||||
|
||||
$result =['code' =>200,'data' =>'保存成功'] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function getWorkItemList()
|
||||
{
|
||||
$params = request()->post();
|
||||
$currentPage = $params['currentPage'];
|
||||
$pageSize = $params['pageSize'];
|
||||
$group=$params['group'];
|
||||
$where = ['status'=>'0','receiveid'=>$this->user['id']];
|
||||
$whereIn = '';
|
||||
$totalResult = 0;
|
||||
|
||||
if($group){
|
||||
|
||||
if($group['type'] == 'scheme'){
|
||||
$where['scheme'] = $group['id'];
|
||||
$data = Db::name('flow_workitem_view')->order('createtime', 'desc')->where($where)->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}else{
|
||||
$groupId = $group['id'];
|
||||
$shemes = Db::name('flow_scheme')->where('group',$groupId)->select();
|
||||
$wherescheme = [];
|
||||
foreach($shemes as $sheme){
|
||||
array_unshift($wherescheme,$sheme['id']);
|
||||
}
|
||||
|
||||
$data = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
}
|
||||
else{
|
||||
$data = Db::name('flow_workitem_view')->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
|
||||
$result =['code' =>200,'data' =>$data,'input'=>$group,'total'=>$totalResult] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
public function getInstanceList()
|
||||
{
|
||||
$params = request()->post();
|
||||
$currentPage = $params['currentPage'];
|
||||
$pageSize = $params['pageSize'];
|
||||
$group=$params['group'];
|
||||
$where = [];
|
||||
$whereIn = '';
|
||||
$totalResult = 0;
|
||||
|
||||
if($group){
|
||||
|
||||
if($group['type'] == 'scheme'){
|
||||
$where['scheme'] = $group['id'];
|
||||
$data = Db::name('flow_workitem_view')->order('createtime', 'desc')->where($where)->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}else{
|
||||
$groupId = $group['id'];
|
||||
$shemes = Db::name('flow_scheme')->where('group',$groupId)->select();
|
||||
$wherescheme = [];
|
||||
foreach($shemes as $sheme){
|
||||
array_unshift($wherescheme,$sheme['id']);
|
||||
}
|
||||
|
||||
$data = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
}
|
||||
else{
|
||||
$data = Db::name('flow_workitem_view')->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
|
||||
$result =['code' =>200,'data' =>$data,'input'=>$group,'total'=>$totalResult] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
public function getFinishList()
|
||||
{
|
||||
$params = request()->post();
|
||||
$currentPage = $params['currentPage'];
|
||||
$pageSize = $params['pageSize'];
|
||||
$group=$params['group'];
|
||||
$where = ['status'=>'2','receiveid'=>$this->user['id']];
|
||||
$whereIn = '';
|
||||
$totalResult = 0;
|
||||
if($group){
|
||||
if($group['type'] == 'scheme'){
|
||||
$where['scheme'] = $group['id'];
|
||||
$data = Db::name('flow_workitem_view')->where($where)->order('completedtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}else{
|
||||
$groupId = $group['id'];
|
||||
$shemes = Db::name('flow_scheme')->where('group',$groupId)->select();
|
||||
$wherescheme = [];
|
||||
foreach($shemes as $sheme){
|
||||
array_unshift($wherescheme,$sheme['id']);
|
||||
}
|
||||
|
||||
$data = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->order('completedtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
}
|
||||
else{
|
||||
$data = Db::name('flow_workitem_view')->where($where)->order('completedtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_workitem_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
|
||||
$result =['code' =>200,'data' =>$data,'input'=>$group,'total'=>$totalResult] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
public function getMyList()
|
||||
{
|
||||
$params = request()->post();
|
||||
$currentPage = $params['currentPage'];
|
||||
$pageSize = $params['pageSize'];
|
||||
$group=$params['group'];
|
||||
$where = ['originator'=>$this->user['id']];
|
||||
$whereIn = '';
|
||||
$totalResult = 0;
|
||||
if($group){
|
||||
if($group['type'] == 'scheme'){
|
||||
$where['scheme'] = $group['id'];
|
||||
$data = Db::name('flow_instace_view')
|
||||
->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_instace_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}else{
|
||||
$groupId = $group['id'];
|
||||
$shemes = Db::name('flow_scheme')->where('group',$groupId)->select();
|
||||
$wherescheme = [];
|
||||
foreach($shemes as $sheme){
|
||||
array_unshift($wherescheme,$sheme['id']);
|
||||
}
|
||||
|
||||
$data = Db::name('flow_instace_view')
|
||||
->whereIn('scheme',implode(',',$wherescheme))->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_instace_view')->whereIn('scheme',implode(',',$wherescheme))->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
}
|
||||
else{
|
||||
$data = Db::name('flow_instace_view')
|
||||
->where($where)->order('createtime', 'desc')->page($currentPage,$pageSize)->select();
|
||||
$totalResult = Db::name('flow_instace_view')->where($where)->page($currentPage,$pageSize)->count();
|
||||
}
|
||||
|
||||
$result =['code' =>200,'data' =>$data,'input'=>$group,'total'=>$totalResult] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function getFieldList()
|
||||
{
|
||||
$formId = request()->input('formId');
|
||||
//$result = Db::name('flow_scheme')->where('id', $formId)->find();
|
||||
$database = function_exists('get_env') ? get_env('DATABASE_DATABASE') : getenv('DATABASE_DATABASE');
|
||||
$fieldListAll = Db::name('flow_field_view')->where(['table_name'=>$formId,'TABLE_SCHEMA'=>$database])->select();
|
||||
//$result =['code' =>200,'data' =>$fieldListAll] ;
|
||||
return json($fieldListAll);
|
||||
}
|
||||
}
|
||||
616
plugin/easyflow/app/admin/controller/easyflow/FlowEngine.php
Normal file
616
plugin/easyflow/app/admin/controller/easyflow/FlowEngine.php
Normal file
@@ -0,0 +1,616 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
namespace app\admin\controller\easyflow;
|
||||
|
||||
use app;
|
||||
use app\AdminController;
|
||||
use app\admin\model\FlowGroup as FlowGroupModel;
|
||||
use Exception;
|
||||
use think\facade\Db;
|
||||
/**
|
||||
* flow_group
|
||||
* 分组
|
||||
*/
|
||||
class FlowEngine extends AdminController
|
||||
{
|
||||
/**
|
||||
* FlowGroup模型对象
|
||||
* @var \app\admin\model\FlowGroup
|
||||
*/
|
||||
|
||||
public $admin = [];
|
||||
public $tplsharing = 'add';
|
||||
public $noNeedAuth = ['*'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
|
||||
public function start(){
|
||||
Db::startTrans();
|
||||
try{
|
||||
$data = request()->post();
|
||||
$data = $data['data'];
|
||||
$formdata = $data['data'];
|
||||
$this->admin = get_admin_info();
|
||||
$originator = $this->admin['id'];//发起人
|
||||
$flowid = $data['flowid'];
|
||||
$flow = Db::name('flow_scheme')->where('id',$flowid)->find();
|
||||
$vformJson = json_decode($flow['formitems'],true);
|
||||
$widgetList = $vformJson['widgetList'];
|
||||
$controleList = [];
|
||||
//判断 如果值为数组的话需要转为字符串
|
||||
foreach($widgetList as $k){
|
||||
$controleList[$k['options']['name']]=$k;
|
||||
}
|
||||
//判断回传的字段类型处理,有一些多选 是数组需要转字符串
|
||||
$mControlList = array("picture-upload","select","cascader",'file-upload');
|
||||
foreach($formdata as $d => $v){
|
||||
$sc = $controleList[$d];
|
||||
if(($sc['type'] == 'picture-upload' || $sc['type'] == 'file-upload') && isset($formdata[$d])){
|
||||
$fileData = $formdata[$d];
|
||||
foreach($fileData as $f){
|
||||
if(isset($f['response'])){
|
||||
$f['url'] = $f['response']['url'];
|
||||
}
|
||||
}
|
||||
$formdata[$d] = json_encode($fileData);
|
||||
}
|
||||
else if($sc && (in_array($sc['type'],$mControlList))){
|
||||
$formdata[$d] = json_encode($formdata[$d]);
|
||||
}
|
||||
}
|
||||
$table = $flow['bizscheme'];
|
||||
$insertId = Db::table($table)->strict(false)->insertGetId($formdata);
|
||||
$today = str_replace('-','',date("Y-m-d"));
|
||||
//新建流程实例
|
||||
$instanceId= Db::name('flow_instance')->insertGetId(array(
|
||||
'originator' => $originator,
|
||||
'scheme' => $flowid,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'instancecode' => time(),
|
||||
'bizobjectid' => $insertId,
|
||||
'instancestatus' => 1,
|
||||
'title'=>$flow['name'].'-'.$today.str_pad($insertId,5,'0',STR_PAD_LEFT),
|
||||
'completedtime' => '1990-01-01 00:00:00',
|
||||
));
|
||||
//获取发起流程节点
|
||||
$process = json_decode($flow['process'],true);
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $process['name'],
|
||||
'type'=>'root',
|
||||
'stepid' => $process['id'],
|
||||
'receiveid' => $originator,
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 2,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
//寻找下一个节点
|
||||
if(isset($process['children'])){
|
||||
$currentNode = $process['children'];
|
||||
$nodeType = $currentNode['type'];
|
||||
$normal = 0;
|
||||
switch($nodeType){
|
||||
//指定人员
|
||||
case 'CONDITIONS':
|
||||
//获取所有条件分支
|
||||
$branchsList = $currentNode['branchs'];
|
||||
//判断符合条件的分支
|
||||
foreach($branchsList as $branch){
|
||||
try {
|
||||
$express = $branch['props']['expression'];
|
||||
$sql = "select * from (select * from " . $table . " where id = '" . $insertId . "') a where " . $express;
|
||||
$tableRes = Db::query($sql);
|
||||
if (count((array)$tableRes) >= 1) {
|
||||
$normal++;
|
||||
//下一个节点逻辑
|
||||
$currentNode = $branch['children'];
|
||||
$spType = $currentNode['props']['assignedType'];
|
||||
switch($spType){
|
||||
case 'ASSIGN_USER':
|
||||
$userIdList = $currentNode['props']['assignedUser'];
|
||||
foreach($userIdList as $user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'type'=>'node',
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
break;
|
||||
case 'ROLE':
|
||||
$roleList = $currentNode['props']['role'];
|
||||
foreach($roleList as $jobid){
|
||||
//$userList = Db::name('admin')->where(['jobs_id'=>$jobid['id']])->select();
|
||||
$userList = Db::name('admin')->where("FIND_IN_SET('".$jobid['id']."',jobs_id)")->select();
|
||||
foreach($userList as $row =>$user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'type'=>'node',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
} catch (\think\Exception $e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if($normal == 0){
|
||||
throw new Exception('找不到下一个流程节点,请联系管理员');
|
||||
}
|
||||
break;
|
||||
case 'APPROVAL':
|
||||
$spType = $currentNode['props']['assignedType'];
|
||||
switch($spType){
|
||||
case 'ASSIGN_USER':
|
||||
$userIdList = $currentNode['props']['assignedUser'];
|
||||
foreach($userIdList as $user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'type'=>'node',
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
break;
|
||||
case 'ROLE':
|
||||
$roleList = $currentNode['props']['role'];
|
||||
foreach($roleList as $jobid){
|
||||
//$userList = Db::name('admin')->where(['jobs_id'=>$jobid['id']])->select();
|
||||
$userList = Db::name('admin')->where("FIND_IN_SET('".$jobid['id']."',jobs_id)")->select();
|
||||
foreach($userList as $row =>$user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'type'=>'node',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'CONDITION':
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
//流程结束
|
||||
Db::name('flow_instance')->where('id', $instanceId)->update(['instancestatus' => '2']);
|
||||
}
|
||||
Db::commit();
|
||||
$result =['code' =>200,'msg' =>'提交成功'.$instanceId] ;
|
||||
}
|
||||
catch(Exception $ex){
|
||||
$result =['code' =>500,'msg' => $ex->getMessage()] ;
|
||||
Db::rollback();
|
||||
}
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
/**拒绝流程
|
||||
* @param $taskid
|
||||
* @param string $comment
|
||||
* @return bool
|
||||
* @throws Exception
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
* @throws \think\exception\PDOException
|
||||
*/
|
||||
public function refuse()
|
||||
{
|
||||
$params = \request()->all();
|
||||
$taskid = $params['taskid'];
|
||||
$comment = $params['comment'];
|
||||
$task = Db::name('flow_task')->where(['id' => $taskid, 'status' => 0])->find();
|
||||
if (!$task)
|
||||
throw new Exception('找不到当前任务,或已处理,请联系管理员');
|
||||
//更改当前流程为拒绝状态
|
||||
$comment = $comment == '' ? '[同意]' : $comment;
|
||||
Db::name('flow_task')->where('id', $taskid)
|
||||
->update(['status' => 2, 'completedtime' => date("Y-m-d H:i:s"), 'comment' => $comment]);
|
||||
//取消其他流程
|
||||
Db::name('flow_task')->where(['instanceid' => $task['instanceid'], 'status' => 0])
|
||||
->update(['status' => 3, 'completedtime' => date("Y-m-d H:i:s")]);
|
||||
//更改流程实例为草稿状态
|
||||
Db::name('flow_instance')->where(['id' => $task['instanceid']])
|
||||
->update(['instancestatus' => 0]);
|
||||
//寻找下一个待办任务
|
||||
$startNode = Db::name('flow_task')->where(['instanceid' => $task['instanceid'], 'type' => 'root'])->find();
|
||||
//$startNode->status = 0;
|
||||
Db::name('flow_task')->insert([
|
||||
'flowid' => $startNode['flowid'],
|
||||
'stepname' => $startNode['stepname'],
|
||||
'type'=>'root',
|
||||
'stepid' => $startNode['stepid'],
|
||||
'receiveid' => $startNode['receiveid'],
|
||||
'instanceid' => $startNode['instanceid'],
|
||||
'senderid' => $startNode['senderid'],
|
||||
'status' => '0',
|
||||
'createtime' => date("Y-m-d H:i:s")
|
||||
]);
|
||||
$result =['code' =>200,'msg'=>'提交成功'] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
/**取消流程
|
||||
* @param $taskid
|
||||
* @param string $comment
|
||||
* @return bool
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
$params = \request()->all();
|
||||
$taskid = $params['taskid'];
|
||||
$comment = $params['comment'];
|
||||
$res = true;
|
||||
$task = $this->task->get($taskid);
|
||||
$comment = $comment == '' ? '[取消]' : $comment;
|
||||
//更改当前流程为取消状态
|
||||
$this->task->where(['instanceid' => $task['instanceid']])->where('status', 'in', [0, 1])->update(['status' => 3, 'completedtime' => date("Y-m-d H:i:s"), 'comment' => $comment]);
|
||||
$this->instance->where(['id' => $task['instanceid']])->update(['instancestatus' => 3]);
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
/**同意流程
|
||||
* @param $taskid
|
||||
* @param string $comment
|
||||
* @return bool
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function agree()
|
||||
{
|
||||
Db::startTrans();
|
||||
try{
|
||||
$params = \request()->all();
|
||||
$taskid = $params['taskid'];
|
||||
$comment = $params['comment'];
|
||||
$comment = $comment==''?'[同意]':$comment;
|
||||
$this->admin = get_admin_info();
|
||||
$task = Db::name('flow_task')->where(['id' => $taskid, 'status' => 0])->find();
|
||||
if (!$task){
|
||||
throw new Exception('找不到当前任务,或已处理,请联系管理员');
|
||||
}
|
||||
else{
|
||||
Db::name('flow_task')->where('id', $taskid)->update(['comment'=>$comment,'status' => '2','completedtime'=>date("Y-m-d H:i:s")]);
|
||||
}
|
||||
$originator = $this->admin['id'];//发起人
|
||||
$flowid = $task['flowid'];
|
||||
$instanceId = $task['instanceid'];
|
||||
$flow = Db::name('flow_scheme')->where('id',$task['flowid'])->find();
|
||||
$instance = Db::name('flow_instance')->where('id',$task['instanceid'])->find();
|
||||
$insertId = $instance['bizobjectid'];
|
||||
$table = $flow['bizscheme'];
|
||||
$process = json_decode($flow['process'],true);
|
||||
$currentNode = $this->getNode($task['stepid'],$process);
|
||||
//寻找下一个节点
|
||||
if($currentNode){
|
||||
$nodeType = $currentNode['type'];
|
||||
switch($nodeType){
|
||||
case 'APPROVAL':
|
||||
$spType = $currentNode['props']['assignedType'];
|
||||
switch($spType){
|
||||
case 'ASSIGN_USER':
|
||||
$userIdList = $spType = $currentNode['props']['assignedUser'];
|
||||
foreach($userIdList as $user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'type'=>'node',
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => $task['stepid'],
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => ''
|
||||
));
|
||||
}
|
||||
break;
|
||||
case 'ROLE':
|
||||
$roleList = $currentNode['props']['role'];
|
||||
foreach($roleList as $jobid){
|
||||
$userList = Db::name('admin')->where(['jobs_id'=>$jobid])->select();
|
||||
foreach($userList as $row =>$user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'type'=>'node',
|
||||
'prevstepid' => $task['stepid'],
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => ''
|
||||
));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'CONDITIONS':
|
||||
//获取所有条件分支
|
||||
$branchsList = $currentNode['branchs'];
|
||||
$normal = 0;
|
||||
//判断符合条件的分支
|
||||
foreach($branchsList as $branch){
|
||||
try {
|
||||
$express = $branch['props']['expression'];
|
||||
$sql = "select * from (select * from " . $table . " where id = '" . $insertId . "') a where " . $express;
|
||||
$tableRes = Db::query($sql);
|
||||
if (count((array)$tableRes) >= 1) {
|
||||
$normal++;
|
||||
//下一个节点逻辑
|
||||
$currentNode = $branch['children'];
|
||||
$spType = $currentNode['props']['assignedType'];
|
||||
switch($spType){
|
||||
case 'ASSIGN_USER':
|
||||
$userIdList = $currentNode['props']['assignedUser'];
|
||||
foreach($userIdList as $user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'type'=>'node',
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
break;
|
||||
case 'ROLE':
|
||||
$roleList = $currentNode['props']['role'];
|
||||
foreach($roleList as $jobid){
|
||||
//$userList = Db::name('admin')->where(['jobs_id'=>$jobid['id']])->select();
|
||||
$userList = Db::name('admin')->where("FIND_IN_SET('".$jobid['id']."',jobs_id)")->select();
|
||||
foreach($userList as $row =>$user){
|
||||
Db::name('flow_task')->save(array(
|
||||
'flowid' => $flowid,
|
||||
'stepname' => $currentNode['name'],
|
||||
'stepid' => $currentNode['id'],
|
||||
'receiveid' => $user['id'],
|
||||
'prevstepid' => '10000',
|
||||
'type'=>'node',
|
||||
'instanceid' => $instanceId,
|
||||
'senderid' => $originator,
|
||||
'status' => 0,
|
||||
'createtime' => date("Y-m-d H:i:s"),
|
||||
'completedtime' => date("Y-m-d H:i:s"),
|
||||
'comment' => '提交'
|
||||
));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
} catch (\think\Exception $e) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if($normal == 0){
|
||||
throw new Exception('找不到下一个流程节点,请联系管理员');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
//流程结束
|
||||
Db::name('flow_instance')->where('id', $instanceId)->update(['instancestatus' => '2']);
|
||||
}
|
||||
Db::commit();
|
||||
$result =['code' =>200,'msg' =>'提交成功'.$instanceId] ;
|
||||
}
|
||||
catch(Exception $ex){
|
||||
$result =['code' =>500,'msg' => $ex->getMessage()] ;
|
||||
Db::rollback();
|
||||
}
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
||||
|
||||
public function getFlowForm($id)
|
||||
{
|
||||
$msg='';
|
||||
$instanceId = '';
|
||||
|
||||
$params = \request()->all();
|
||||
$id = request()->input('id');
|
||||
if(isset($params['instanceId']))
|
||||
{
|
||||
$instanceId = $params['instanceId'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$task = Db::name('flow_task')->where('id',$id)->find();
|
||||
$instanceId = $task['instanceid'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$instance = Db::name('flow_instance')->where('id',$instanceId)->find();
|
||||
$scheme = Db::name('flow_scheme')->where('id', $instance['scheme'])->find();
|
||||
$formData = Db::table($scheme['bizscheme'])->where('id',$instance['bizobjectid'])->find();
|
||||
$vformJson = json_decode($scheme['formitems'],true);
|
||||
$widgetList = $vformJson['widgetList'];
|
||||
$controleList = [];
|
||||
|
||||
//判断 如果值为数组的话需要转为字符串
|
||||
foreach($widgetList as $k){
|
||||
$controleList[$k['options']['name']]=$k;
|
||||
}
|
||||
//判断回传的字段类型处理,有一些多选 是数组需要转字符串
|
||||
$mControlList = array("picture-upload","file-upload","select","cascader");
|
||||
foreach($formData as $d => $v){
|
||||
if( $d == 'id'){
|
||||
continue;
|
||||
}
|
||||
//$sc = $controleList[$d];
|
||||
if(isset($controleList[$d]) && (in_array($controleList[$d]['type'],$mControlList))){
|
||||
$formData[$d] =$formData[$d]? json_decode($formData[$d],true):[];
|
||||
}
|
||||
}
|
||||
|
||||
$history = Db::name('flow_workitem_view')
|
||||
->where(['instanceid'=>$instanceId,'status'=>2])
|
||||
->order('taskcreatetime', 'desc')->select();
|
||||
$data = ['process'=>$scheme['process'],'formitems'=>$scheme['formitems'],'formdata'=>$formData,'history'=>$history];
|
||||
$result =['code' =>200,'data' =>$data,'msg'=>$msg] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* id 要寻找的父节点id
|
||||
* node 当前遍历的节点用来判断类型
|
||||
* json 当前遍历的节点
|
||||
*/
|
||||
public function getNode($id,$node)
|
||||
{
|
||||
if(!isset($node['children']) || empty($node['children'])){
|
||||
return [];
|
||||
}
|
||||
//处理当前节点为开始节点 驳回重新提交
|
||||
else if($id =='root'){
|
||||
return $node['children'];
|
||||
}
|
||||
//处理非开始节点
|
||||
else if($this->isPrimaryNode($node)){
|
||||
if(isset($node['children']['children']) && $node['children']['id'] == $id){
|
||||
return $node['children']['children'];
|
||||
}
|
||||
return $this->getNode($id,$node['children']);
|
||||
}
|
||||
//循环每个分支节点
|
||||
else if($this->isBranchNode($node)){
|
||||
$branchs = $node['branchs'];
|
||||
foreach($branchs as $branch){
|
||||
$nodeFind = $this->getNode($id,$branchs['children']);
|
||||
if($nodeFind){
|
||||
return $nodeFind;
|
||||
}
|
||||
}
|
||||
return $this->getNode($id,$node['children']);
|
||||
}
|
||||
else if($node['type'] === 'EMPTY'){
|
||||
return [];
|
||||
}
|
||||
else{
|
||||
return $this->getNode($id,$node['children']);
|
||||
}
|
||||
}
|
||||
|
||||
public function isPrimaryNode($node)
|
||||
{
|
||||
return $node &&
|
||||
($node['type'] === 'ROOT' || $node['type'] === 'APPROVAL'
|
||||
|| $node['type'] === 'CC' || $node['type'] === 'DELAY'
|
||||
|| $node['type'] === 'TRIGGER');
|
||||
}
|
||||
|
||||
|
||||
public function isBranchNode($node)
|
||||
{
|
||||
return $node && ($node['type'] === 'CONDITIONS' || $node['type'] === 'CONCURRENTS');
|
||||
}
|
||||
|
||||
|
||||
public function isEmptyNode($node)
|
||||
{
|
||||
return $node && ($node['type'] === 'EMPTY');
|
||||
}
|
||||
|
||||
public function deletetask($id)
|
||||
{
|
||||
$id = request()->input('id');
|
||||
Db::name('flow_task')->where('id',$id)->delete();
|
||||
$result =['code' =>200,'data' =>'','msg'=>'删除成功'] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function canceltask($id)
|
||||
{
|
||||
$id = request()->input('id');
|
||||
Db::name('flow_task')->where('id',$id)->update(['status'=>3]);
|
||||
$task = Db::name('flow_task')->where('id',$id)->find();
|
||||
$instancid = $task['instanceid'];
|
||||
$isalltask = Db::name('flow_task')
|
||||
->where('instanceid',$instancid)
|
||||
->where([['id', '<>', $id]])
|
||||
->where([['status', '=', 0]])
|
||||
->find();
|
||||
if(!$isalltask){
|
||||
Db::name('flow_instance')->where('id',$instancid)->update(['instancestatus'=>3]);
|
||||
}
|
||||
$result =['code' =>200,'data' =>'','msg'=>'取消成功'] ;
|
||||
return json($result);
|
||||
}
|
||||
|
||||
public function forwardtask()
|
||||
{
|
||||
$id = request()->input('id');
|
||||
$taskid = request()->input('taskid');
|
||||
Db::name('flow_task')->where('id',$taskid)->update(['receiveid'=>$id]);
|
||||
$result =['code' =>200,'data' =>'','msg'=>'转发成功'] ;
|
||||
return json($result);
|
||||
}
|
||||
}
|
||||
32
plugin/easyflow/app/admin/controller/easyflow/Index.php
Normal file
32
plugin/easyflow/app/admin/controller/easyflow/Index.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace app\admin\controller\easyflow;
|
||||
use app\AdminController;
|
||||
use support\Response;
|
||||
|
||||
/**
|
||||
* 简单工作流后台控制器
|
||||
* <!--Easyflow-->
|
||||
*/
|
||||
class Index extends AdminController {
|
||||
|
||||
// 初始化函数
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
/**
|
||||
* TODO...
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化后台首页
|
||||
* @return Response
|
||||
*/
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->view();
|
||||
}
|
||||
|
||||
}
|
||||
35
plugin/easyflow/app/admin/model/easyflow/Easyflow.php
Normal file
35
plugin/easyflow/app/admin/model/easyflow/Easyflow.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
|
||||
namespace app\admin\model\easyflow;
|
||||
|
||||
use think\Model;
|
||||
/**
|
||||
* 简单工作流模型类
|
||||
* <!--Easyflow-->
|
||||
* @mixin Model
|
||||
*/
|
||||
class Easyflow extends Model
|
||||
{
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'int';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'create_time';
|
||||
protected $updatetime = 'update_time';
|
||||
|
||||
/**
|
||||
* 字段修改器
|
||||
* @param $value
|
||||
* @return int|mixed
|
||||
*/
|
||||
public function setSortAttr($value)
|
||||
{
|
||||
if (is_empty($value)) {
|
||||
return self::max('id') + 1;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
34
plugin/easyflow/app/admin/validate/easyflow/Easyflow.php
Normal file
34
plugin/easyflow/app/admin/validate/easyflow/Easyflow.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\validate\easyflow;
|
||||
|
||||
use think\Validate;
|
||||
/**
|
||||
* 简单工作流 验证器
|
||||
* <!--Easyflow-->
|
||||
*/
|
||||
class Easyflow extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
||||
27
plugin/easyflow/app/admin/view/easyflow/index/index.html
Normal file
27
plugin/easyflow/app/admin/view/easyflow/index/index.html
Normal file
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>我是后台首页控制器模板</title>
|
||||
</head>
|
||||
<!--Easyflow-->
|
||||
<body>
|
||||
<iframe id="external-frame" src="/static/plugin/easyflow/dist/index.html?v={:release()}" width="100%" style="border: 0px"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
function reinitIframe(){
|
||||
var iframe = document.getElementById("external-frame");
|
||||
try{
|
||||
var bHeight = iframe.contentWindow.document.body.scrollHeight;
|
||||
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
|
||||
var height = Math.max(bHeight, dHeight);
|
||||
iframe.height = window.innerHeight-50;
|
||||
console.log(height);
|
||||
}catch (ex){}
|
||||
}
|
||||
window.onload = reinitIframe()
|
||||
//window.setInterval("reinitIframe()", 200);
|
||||
</script>
|
||||
55
plugin/easyflow/app/index/controller/Easyflow.php
Normal file
55
plugin/easyflow/app/index/controller/Easyflow.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
declare (strict_types = 1);
|
||||
// +----------------------------------------------------------------------
|
||||
// | swiftAdmin 极速开发框架 [基于 WebMan 开发]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2020-2099 http://www.swiftadmin.net
|
||||
// +----------------------------------------------------------------------
|
||||
// | swiftAdmin.net High Speed Development Framework
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: meystack <coolsec@foxmail.com> Apache2
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace app\index\controller;
|
||||
|
||||
use app\HomeController;
|
||||
use support\Response;
|
||||
|
||||
/**
|
||||
* 首页控制器
|
||||
* <!--Easyflow-->
|
||||
* Class Index
|
||||
* @package app\index\controller
|
||||
*/
|
||||
class Easyflow extends HomeController
|
||||
{
|
||||
|
||||
/**
|
||||
* 鉴权控制器
|
||||
*/
|
||||
public $needLogin = false;
|
||||
|
||||
|
||||
/**
|
||||
* 非鉴权方法
|
||||
* @var array
|
||||
*/
|
||||
public $noNeedAuth = ['index', 'home'];
|
||||
|
||||
// 初始化函数
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Easyflow 首页
|
||||
* @return Response
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function index(): Response
|
||||
{
|
||||
return response('Easyflow 前台首页模板');
|
||||
}
|
||||
|
||||
}
|
||||
22
plugin/easyflow/app/index/view/easyflow/index.html
Normal file
22
plugin/easyflow/app/index/view/easyflow/index.html
Normal file
@@ -0,0 +1,22 @@
|
||||
<!--Easyflow-->
|
||||
<layout name="layout:layout"/>
|
||||
<!-- 内容主体区域 -->
|
||||
<div id="content">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body"> 示例页面 TODO...</div>
|
||||
<!-- // 创建数据实例 -->
|
||||
<table id="lay-tableList" lay-filter="lay-tableList"></table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- // 列表工具栏 -->
|
||||
<script type="text/html" id="tableBar">
|
||||
<!-- // TODO-->
|
||||
</script>
|
||||
|
||||
<script>
|
||||
layui.use(['table','jquery'], function () {
|
||||
let $ = layui.jquery;
|
||||
let table = layui.table;
|
||||
})
|
||||
</script>
|
||||
Reference in New Issue
Block a user