first commit

This commit is contained in:
2026-07-23 09:40:36 +08:00
commit 090abf48fa
989 changed files with 145728 additions and 0 deletions
+373
View File
@@ -0,0 +1,373 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.layui-form-pane .layui-form-label{color:#999; width:80px; padding:8px 3px;}
.layui-form-item .layui-inline{margin-right:1px; margin-bottom:10px;}
.layui-form-item{margin-bottom:5px;}
.layui-form-item .layui-btn-danger{display:none; margin-top:-8px}
.layui-form-item:hover .layui-btn-danger{display:inline-block;}
.select-1,.select-2{display:none;}
.check-type-1 .flow-tr-2,.check-type-1 .flow-tr-3{display:none;}
.check-type-2 .flow-tr-1,.check-type-2 .flow-tr-3{display:none;}
.check-type-3 .flow-tr-1,.check-type-3 .flow-tr-2{display:none;}
.role-1 .select-3,.role-1 .select-4{display:none;}
.role-2 .select-3,.role-2 .select-4{display:none;}
.role-3 .select-4{display:none;}
.role-4 .select-3{display:none;}
.role-5 .select-3{display:none;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-1">审批流程</h3>
<table id="flowTable" class="layui-table check-type-{$check_type}">
<tr>
<td class="layui-td-gray">流程名称<font>*</font></td>
<td><input type="text" name="title" value="{$detail.title|default=''}" autocomplete="off" placeholder="请输入审批流程名称" lay-verify="required" lay-reqText="请输入审批流程名称" class="layui-input"></td>
<td class="layui-td-gray">审批类型<font>*</font></td>
<td>
{eq name="$id" value="0"}
<select name="cate_id" lay-filter="cate" lay-verify="required" lay-reqText="请选择审批类型">
<option value="">--请选择审批类型--</option>
{volist name=":get_base_data('FlowCate')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
{else/}
<select name="cate_id" lay-filter="cate" lay-verify="required" lay-reqText="请选择审批类型">
<option value="">--请选择审批类型--</option>
{volist name=":get_base_data('FlowCate')" id="vo"}
<option value="{$vo.id}" {eq name="$detail.cate_id" value="$vo.id"}selected=""{/eq}>{$vo.title}</option>
{/volist}
</select>
{/eq}
</td>
</tr>
<tr>
<td class="layui-td-gray">应用部门</td>
<td colspan="3">
<div class="layui-input-inline" style="width:80%;">
<select id="department_ids" name="department_ids" xm-selected="{$detail.department_ids|default=''}" xm-select="select1" xm-select-skin="default"></select>
</div>
<span class="red" style="font-size:12px;">(如果不选,默认是全公司)</span>
</td>
</tr>
<tr>
<td class="layui-td-gray">流程说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入流程说明" class="layui-textarea">{$detail.remark|default=''}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批流类型<font>*</font></td>
<td colspan="3">
<input type="radio" name="check_type" lay-filter="checktype" value="1" title="自由审批流" {eq name="$check_type" value="1"}checked{/eq}>
<input type="radio" name="check_type" lay-filter="checktype" value="2" title="固定审批流" {eq name="$check_type" value="2"}checked{/eq}>
<input type="radio" name="check_type" lay-filter="checktype" value="3" title="可回退的审批流" {eq name="$check_type" value="3"}checked{/eq}>
</td>
</tr>
<tr id="flowTr1" class="flow-tr-1">
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div style="padding:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>无需配置审批人,审批时操作人员根据实际情况选择审批人即可,自由度最高。</p>
</div>
</td>
</tr>
<tr id="flowTr2" class="flow-tr-2">
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div id="flowList2">
{eq name="$check_type" value="2"}
{volist name="detail.flow_list" id="vo"}
<div class="layui-form-item layui-form-pane role-{$vo.check_role}">
<div class="layui-inline">
<label class="layui-form-label">第{$key+1}级</label>
<div class="layui-input-inline" style="width:150px;">
<select name="check_role[]" lay-filter="role">
<option value="1" {eq name="$vo.check_role" value="1"}selected=""{/eq}>当前部门负责人</option>
<option value="2" {eq name="$vo.check_role" value="2"}selected=""{/eq}>上一级部门负责人</option>
<option value="3" {eq name="$vo.check_role" value="3"}selected=""{/eq}>指定岗位职称人</option>
<option value="4" {eq name="$vo.check_role" value="4"}selected=""{/eq}>指定成员</option>
</select>
</div>
</div>
<div class="layui-inline select-3">
<label class="layui-form-label">岗位职称</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="check_position_title[]" value="{$vo.check_position_title}" autocomplete="off" readonly class="layui-input picker-oa" data-types="position">
<input type="hidden" name="check_position_id[]" value="{$vo.check_position_id}">
</div>
</div>
<div class="layui-inline select-4">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:320px;">
<input type="text" name="check_unames_a[]" value="{$vo.check_unames}" autocomplete="off" readonly class="layui-input picker-admin" data-type="2">
<input type="hidden" name="check_uids_a[]" value="{$vo.check_uids}">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width:100px;">同时有多人时</label>
<div class="layui-input-inline" style="width:80px;">
<select name="check_types[]">
<option value="1" {eq name="$vo.check_types" value="1"}selected=""{/eq}>会签</option>
<option value="2" {eq name="$vo.check_types" value="2"}selected=""{/eq}>或签</option>
</select>
</div>
</div>
{gt name="$key" value="0"}
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>
{/gt}
</div>
{/volist}
{else/}
<div class="layui-form-item layui-form-pane role-1">
<div class="layui-inline">
<label class="layui-form-label">第1级</label>
<div class="layui-input-inline" style="width:150px;">
<select name="check_role[]" lay-filter="role">
<option value="1">当前部门负责人</option>
<option value="2">上一级部门负责人</option>
<option value="3">指定岗位职称人</option>
<option value="4">指定成员</option>
</select>
</div>
</div>
<div class="layui-inline select-3">
<label class="layui-form-label">岗位职称</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="check_position_title[]" value="" autocomplete="off" readonly class="layui-input picker-oa" data-types="position">
<input type="hidden" name="check_position_id[]" value="">
</div>
</div>
<div class="layui-inline select-4">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:320px;">
<input type="text" name="check_unames_a[]" value="" autocomplete="off" readonly class="layui-input picker-admin" data-type="2">
<input type="hidden" name="check_uids_a[]" value="">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width:100px;">同时有多人时</label>
<div class="layui-input-inline" style="width:80px;">
<select name="check_types[]">
<option value="1">会签</option>
<option value="2" selected="">或签</option>
</select>
</div>
</div>
</div>
{/eq}
</div>
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加审批层级</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、当选择<strong> “当前部门负责人” </strong>审批时,有多个当前部门负责人时支持会签、或签模式。</p>
<p>2、当选择<strong> “上一级部门负责人” </strong>审批时,有多个上一级部门负责人时支持会签、或签模式</p>
<p>3、当选择<strong> “指定岗位职称” </strong>审批时,该岗位职称同时有多个人时支持会签、或签模式</p>
<p>4、当选择<strong> “指定成员” </strong>时,有多个人时支持会签、或签模式。</p>
<p>5、如果指定用户没有分配查看审批模块的功能权限,系统会通知其审批,但是他无法查看此审批数据信息。</p>
</div>
</td>
</tr>
<tr id="flowTr3" class="flow-tr-3">
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div id="flowList3">
{eq name="$check_type" value="3"}
{volist name="detail.flow_list" id="vo"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第{$key+1}级</label>
<div class="layui-input-inline" style="width:240px;">
<input type="text" name="flow_name[]" value="{$vo.flow_name}" autocomplete="off" placeholder="请输入流程名称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="check_unames_b[]" value="{$vo.check_unames}" autocomplete="off" readonly class="layui-input picker-admin" data-type="1">
<input type="hidden" name="check_uids_b[]" value="{$vo.check_uids}">
</div>
</div>
{gt name="$key" value="0"}
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>
{/gt}
</div>
{/volist}
{else/}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第1级</label>
<div class="layui-input-inline" style="width:240px;">
<input type="text" name="flow_name[]" value="" autocomplete="off" placeholder="请输入流程名称" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:120px;">
<input type="text" name="check_unames_b[]" value="" readonly class="layui-input picker-admin" data-type="1">
<input type="hidden" name="check_uids_b[]" value="">
</div>
</div>
</div>
{/eq}
</div>
<span id="addFlow3" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加审批层级</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、<strong>指定人员</strong>单选。后期审批的时候,审批人只能该指定人员。</p>
<p>2、该审批流程可<strong>回退</strong>,当拒绝审核时,会自动回退到上一位审批人节点。</p>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">默认抄送人</td>
<td colspan="3">
<input type="text" name="copy_unames" value="{$detail.copy_unames|default=''}" placeholder="请选择" readonly class="layui-input picker-admin" data-type="2">
<input type="hidden" name="copy_uids" value="{$detail.copy_uids|default=''}">
</td>
</tr>
</table>
<div class="pt-2">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects = layui.formSelects;
//选择应用部门
var selcted = $('#department_ids').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selcted,
});
form.on('radio(checktype)', function(data){
$('#flowTable').attr('class','layui-table check-type-'+data.value);
});
form.on('select(role)', function(data){
$(data.elem).parents('.layui-form-item').attr('class','layui-form-item layui-form-pane role-'+data.value);
});
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/adm/flow/add", data.field, callback);
return false;
});
$('#addFlow2').on('click',function(){
var len = $('#flowList2').find('.layui-form-item').length;
var index = len+1;
var timestamp=new Date().getTime();
var tem='<div class="layui-form-item layui-form-pane role-1">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'级</label>\
<div class="layui-input-inline" style="width:150px;">\
<select name="check_role[]" lay-filter="role">\
<option value="1">当前部门负责人</option>\
<option value="2">上一级部门负责人</option>\
<option value="3">指定岗位职称人</option>\
<option value="4">指定成员</option>\
</select>\
</div>\
</div>\
<div class="layui-inline select-3">\
<label class="layui-form-label">岗位职称</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="check_position_title[]" value="" autocomplete="off" readonly class="layui-input picker-oa" data-types="position">\
<input type="hidden" name="check_position_id[]" value="">\
</div>\
</div>\
<div class="layui-inline select-4">\
<label class="layui-form-label">指定人员</label>\
<div class="layui-input-inline" style="width:320px;">\
<input type="text" name="check_unames_a[]" value="" autocomplete="off" readonly class="layui-input picker-admin" data-type="2">\
<input type="hidden" name="check_uids_a[]" value="">\
</div>\
</div>\
<div class="layui-inline">\
<label class="layui-form-label" style="width:100px;">同时有多人时</label>\
<div class="layui-input-inline" style="width:80px;">\
<select name="check_types[]">\
<option value="1">会签</option>\
<option value="2" selected="">或签</option>\
</select>\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>';
$('#flowList2').append(tem);
form.render();
});
$('#flowList2').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'级');
})
}
});
//================================
$('#addFlow3').on('click',function(){
var len = $('#flowList3').find('.layui-form-item').length;
var index = len+1;
var timestamp=new Date().getTime();
var tem='<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'级</label>\
<div class="layui-input-inline" style="width:240px;">\
<input type="text" name="flow_name[]" value="" autocomplete="off" placeholder="请输入流程名称" class="layui-input">\
</div>\
</div>\
<div class="layui-inline select-3">\
<label class="layui-form-label">指定人员</label>\
<div class="layui-input-inline" style="width:120px;">\
<input type="text" name="check_unames_b[]" value="" autocomplete="off" readonly class="layui-input picker-admin" data-type="1">\
<input type="hidden" name="check_uids_b[]" value="">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>';
$('#flowList3').append(tem);
form.render();
});
$('#flowList3').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'级');
})
}
});
}
</script>
{/block}
<!-- /脚本 -->
+265
View File
@@ -0,0 +1,265 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-2">审批类型</h3>
{eq name="$id" value="0"}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">类型名称<font>*</font></td>
<td><input type="text" name="title" value="" lay-verify="required" autocomplete="off" placeholder="请输入审批类型名称" lay-reqText="请输入类型名称" class="layui-input"></td>
<td class="layui-td-gray-2">关联审批模块<font>*</font></td>
<td>
<select name="module_id" lay-verify="required" lay-reqText="请选择要关联的审批模块">
<option value="">请选择</option>
{volist name=":get_base_data('flow_module')" id="vo"}
<option value="{$vo.id}">{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">类型标识<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="name" value="" lay-verify="required" autocomplete="off" placeholder="请输入类型标识,如:official" lay-reqText="请输入类型标识,只能是小写字母" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:请输入类型标识注意只能是小写字母,唯一)</span></td>
</tr>
<tr>
<td class="layui-td-gray">数据表名<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="check_table" value="" lay-verify="required" autocomplete="off" placeholder="请输入关联的数据库表名称,如:official_docs" lay-reqText="请输入关联的数据库表名称" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入要关联的数据库表名称,注意不需要表前缀,输错无效)</span></td>
</tr>
<tr>
<td class="layui-td-gray">新建审批链接<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="add_url" value="" lay-verify="required" autocomplete="off" placeholder="请输入新建审批链接,如:adm/official/add" lay-reqText="请输入新建审批链接" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入新建审批链接,可在【系统管理】的【功能节点】查找,输错无效)</span></td>
</td>
</tr>
<tr>
<td class="layui-td-gray">查看审批链接<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="view_url" value="" lay-verify="required" autocomplete="off" placeholder="请输入查看审批链接,如:adm/official/view" lay-reqText="请输入查看审批链接" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入查看审批链接,可在【系统管理】的【功能节点】查找,输错无效)</span></td>
</td>
</tr>
<tr>
<td class="layui-td-gray">应用部门</td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<select id="department_ids" name="department_ids" xm-selected="" xm-select="select1" xm-select-skin="default"></select>
</div>
<span class="red" style="font-size:12px;">(如果不选,默认是全公司)</span>
</td>
</tr>
<tr>
<td class="layui-td-gray">消息模板</td>
<td>
<input type="text" name="template_title" value="" readonly autocomplete="off" class="layui-input picker-oa" data-types='template' placeholder="请选择">
<input type="hidden" name="template_id" value="0">
</td>
<td class="layui-td-gray">展示图标<font>*</font></td>
<td>
<div class="layui-input-inline" style="width:50%;">
<input class="layui-input" type="text" name="icon" value="" placeholder="请输入图标" lay-verify="required" lay-reqText="请输入图标" >
</div>
<a href="/static/assets/icon/index.html" target="_blank" style="margin-left:10px; color:#007AFF">[查看图标]</a>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">在工作台快捷显示</td>
<td>
<input type="radio" name="is_list" value="1" title="显示" checked>
<input type="radio" name="is_list" value="0" title="不显示">
</td>
<td class="layui-td-gray-2">审批通过后支持通知抄送人</td>
<td>
<input type="radio" name="is_copy" value="1" title="支持" checked>
<input type="radio" name="is_copy" value="0" title="不支持">
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批过程中支持撤回</td>
<td>
<input type="radio" name="is_back" value="1" title="支持" checked>
<input type="radio" name="is_back" value="0" title="不支持">
</td>
<td class="layui-td-gray-2">审批时支持上传附件</td>
<td>
<input type="radio" name="is_file" value="1" title="支持">
<input type="radio" name="is_file" value="0" title="不支持" checked>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批通过后支持反确认</td>
<td>
<input type="radio" name="is_reversed" value="1" title="支持">
<input type="radio" name="is_reversed" value="0" title="不支持" checked>
</td>
<td class="layui-td-gray-2">审批通过后支持导出PDF打印</td>
<td>
<input type="radio" name="is_export" value="1" title="支持">
<input type="radio" name="is_export" value="0" title="不支持" checked>
</td>
</tr>
</table>
{else/}
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray">类型名称<font>*</font></td>
<td><input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入审批类型名称" lay-reqText="请输入类型名称" class="layui-input"></td>
<td class="layui-td-gray-2">关联审批模块<font>*</font></td>
<td>
<select name="module_id" lay-verify="required" lay-reqText="请选择要关联的审批模块">
<option value="">请选择</option>
{volist name=":get_base_data('flow_module')" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.module_id"}selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">类型标识<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="name" value="{$detail.name}" lay-verify="required" autocomplete="off" placeholder="请输入类型标识,如:official" lay-reqText="请输入类型标识,只能是小写字母" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:请输入类型标识注意只能是小写字母,唯一)</span></td>
</tr>
<tr>
<td class="layui-td-gray">数据表名<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="check_table" value="{$detail.check_table}" lay-verify="required" autocomplete="off" placeholder="请输入关联的数据库表名称,如:official_docs" lay-reqText="请输入关联的数据库表名称" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入要关联的数据库表名称,注意不需要表前缀,输错无效)</span></td>
</tr>
<tr>
<td class="layui-td-gray">新建审批链接<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="add_url" value="{$detail.add_url}" lay-verify="required" autocomplete="off" placeholder="请输入新建审批链接,如:adm/official/add" lay-reqText="请输入新建审批链接" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入新建审批链接,可在【系统管理】的【功能节点】查找,输错无效)</span></td>
</td>
</tr>
<tr>
<td class="layui-td-gray">查看审批链接<font>*</font></td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<input type="text" name="view_url" value="{$detail.view_url}" lay-verify="required" autocomplete="off" placeholder="请输入查看审批链接,如:adm/official/view" lay-reqText="请输入查看审批链接" class="layui-input">
</div>
<span class="red" style="font-size:12px;">(重要:输入查看审批链接,可在【系统管理】的【功能节点】查找,输错无效)</span></td>
</td>
</tr>
<tr>
<td class="layui-td-gray">应用部门</td>
<td colspan="3">
<div class="layui-input-inline" style="width:50%;">
<select id="department_ids" name="department_ids" xm-selected="{$detail.department_ids}" xm-select="select1" xm-select-skin="default"></select>
</div>
<span class="red" style="font-size:12px;">(如果不选,默认是全公司)</span>
</td>
</tr>
<tr>
<td class="layui-td-gray">消息通知模板</td>
<td>
<input type="text" name="template_title" value="{$detail.template_title|default=''}" readonly autocomplete="off" class="layui-input picker-oa" data-types='template' placeholder="请选择">
<input type="hidden" name="template_id" value="{$detail.template_id}">
</td>
<td class="layui-td-gray">展示图标<font>*</font></td>
<td>
<div class="layui-input-inline" style="width:50%;">
<input class="layui-input" type="text" name="icon" value="{$detail.icon}" placeholder="请输入图标" lay-verify="required" lay-reqText="请输入图标" >
</div>
<a href="/static/assets/icon/index.html" target="_blank" style="margin-left:10px; color:#007AFF">[查看图标]</a>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">在工作台快捷显示</td>
<td>
<input type="radio" name="is_list" value="1" title="显示" {eq name="$detail.is_list" value="1"}checked{/eq}>
<input type="radio" name="is_list" value="0" title="不显示" {eq name="$detail.is_list" value="0"}checked{/eq}>
</td>
<td class="layui-td-gray-2">审批通过后支持通知抄送人</td>
<td>
<input type="radio" name="is_copy" value="1" title="支持" {eq name="$detail.is_copy" value="1"}checked{/eq}>
<input type="radio" name="is_copy" value="0" title="不支持" {eq name="$detail.is_copy" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批过程中支持撤回</td>
<td>
<input type="radio" name="is_back" value="1" title="支持" {eq name="$detail.is_back" value="1"}checked{/eq}>
<input type="radio" name="is_back" value="0" title="不支持" {eq name="$detail.is_back" value="0"}checked{/eq}>
</td>
<td class="layui-td-gray-2">审批时支持上传附件</td>
<td>
<input type="radio" name="is_file" value="1" title="支持" {eq name="$detail.is_file" value="1"}checked{/eq}>
<input type="radio" name="is_file" value="0" title="不支持" {eq name="$detail.is_file" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批通过后支持反确认</td>
<td>
<input type="radio" name="is_reversed" value="1" title="支持" {eq name="$detail.is_reversed" value="1"}checked{/eq}>
<input type="radio" name="is_reversed" value="0" title="不支持" {eq name="$detail.is_reversed" value="0"}checked{/eq}>
</td>
<td class="layui-td-gray-2">审批通过后支持导出PDF打印</td>
<td>
<input type="radio" name="is_export" value="1" title="支持" {eq name="$detail.is_export" value="1"}checked{/eq}>
<input type="radio" name="is_export" value="0" title="不支持" {eq name="$detail.is_export" value="0"}checked{/eq}>
</td>
</tr>
<tr>
<td colspan="4">
<span class="red" style="font-size:12px;">温馨提示:审批类型的配置,如果有不明白的<a class="blue" href="https://blog.gougucms.com/home/book/detail/bid/3/id/242.html" target="_blank">可以点击这里查看</a></span></td>
</td>
</tr>
</table>
{/eq}
<div class="pt-4">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects=layui.formSelects;
//选择应用部门
var selcted = $('#department_ids').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selcted,
});
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/adm/flow/cate_add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+111
View File
@@ -0,0 +1,111 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm side-a" type="button" data-href="/adm/flow/cate_add">+ 添加审批类型</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool, form = layui.form;
layui.pageTable = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,defaultToolbar: false
,title:'审批类型'
,url: "/adm/flow/catelist"
,limit: 20
,page: true
,cellMinWidth: 60
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'icon',title: '审批类型名称',width: 150,templet: function(d){
var html='<strong class="iconfont '+d.icon+'"></strong> ' +d.title;
return html;
}}
,{field:'module',title: '审批模块',width:80, align:'center'}
,{field:'check_table',title: '数据表',width:150}
,{field:'name',title: '类型标识',width:150}
,{field:'departments',title: '应用部门',minWidth:180}
,{field:'add_url',title: '审批新增链接',minWidth:180}
,{field:'view_url',title: '审批查看链接',minWidth:180}
,{field:'is_list',title: '列表显示',width:80,align:'center',templet: function(d){
var html1='<span class="green">显示</span>';
var html2='<span class="yellow">不显示</span>';
if(d.is_list==1){
return html1;
}
else{
return html2;
}
}}
,{field:'sort',title: '排序',width:60, align:'center'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:90,fixed:'right',title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
tool.side('/adm/flow/cate_add?id='+obj.data.id);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该审批类型吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/cate_check", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该审批类型吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/cate_check", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+113
View File
@@ -0,0 +1,113 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-3">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm addNew" type="button">+ 添加审批流程</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool, form = layui.form;
layui.pageTable = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,defaultToolbar: false
,title:'审批流程列表'
,url: "/adm/flow/datalist"
,page: true //开启分页
,limit: 20
,cellMinWidth: 80
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '流程名称',width:150}
,{field:'check_type',title: '审批流类型', align:'center',width:110,templet:function(d){
var html = '<span class="green">自由审批流</span>';
if(d.check_type==2){
html = '<span class="blue">固定审批流</span>';
}
if(d.check_type==3){
html = '<span class="yellow">可回退审批流</span>';
}
if(d.check_type==4){
html = '<span class="red">条件审批流</span>';
}
return html;
}}
,{field:'cate',title: '关联审批类型',width:110, align:'center'}
,{field:'module',title: '关联审批模块',width:110, align:'center'}
,{field:'departments',title: '应用部门',minWidth:160}
,{field:'copy_unames',title: '默认抄送人',minWidth:160}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:90,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
tool.side('/adm/flow/add?id='+obj.data.id);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该流程吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/check", { id: obj.data.id,status: 0 }, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该流程吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/check", { id: obj.data.id,status: 1 }, callback);
layer.close(index);
});
}
});
$('body').on('click','.addNew',function(){
tool.side("/adm/flow/add");
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+54
View File
@@ -0,0 +1,54 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-4">
<h3 class="pb-1">审批模块</h3>
{eq name="$id" value="0"}
<table class="layui-table">
<tr>
<td class="layui-td-gray">模块名称<font>*</font></td>
<td><input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入模块名称" lay-reqText="请输入审批模块名称" class="layui-input"></td>
<td class="layui-td-gray">排序</td>
<td><input type="text" name="sort" autocomplete="off" class="layui-input"></td>
</tr>
</table>
{else/}
<table class="layui-table">
<tr>
<td class="layui-td-gray">模块名称<font>*</font></td>
<td><input type="text" name="title" value="{$detail.title}" lay-verify="required" autocomplete="off" placeholder="请输入审批模块名称" lay-reqText="请输入模块名称" class="layui-input"></td>
<td class="layui-td-gray">排序</td>
<td><input type="text" name="sort" value="{$detail.sort}" autocomplete="off" class="layui-input"></td>
</tr>
</table>
{/eq}
<div class="pt-2">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects=layui.formSelects;
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/adm/flow/module_add", data.field, callback);
return false;
});
}
</script>
{/block}
<!-- /脚本 -->
+92
View File
@@ -0,0 +1,92 @@
{extend name="../../base/view/common/base" /}
<!-- 主体 -->
{block name="body"}
<div class="p-page">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm side-a" type="button" data-href="/adm/flow/module_add">+ 添加模块</button>
</div>
</script>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool'];
function gouguInit() {
var table = layui.table, tool = layui.tool, form = layui.form;
layui.pageTable = table.render({
elem: '#test'
,toolbar: '#toolbarDemo'
,defaultToolbar: false
,title:'审批模块'
,url: "/adm/flow/modulelist"
,limit: 100
,page: false
,cellMinWidth: 60
,cols: [[
{field:'id',width:80, title: 'ID号', align:'center'}
,{field:'title',title: '模块名称'}
,{field:'sort',title: '排序',width:60, align:'center'}
,{field:'status', title: '状态',width:80,align:'center',templet: function(d){
var html1='<span class="green">正常</span>';
var html2='<span class="yellow">禁用</span>';
if(d.status==1){
return html1;
}
else{
return html2;
}
}}
,{width:90,title: '操作', align:'center',templet: function(d){
var html='';
var btn='<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>';
var btn1='<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="disable">禁用</a>';
var btn2='<a class="layui-btn layui-btn-xs" lay-event="open">启用</a>';
if(d.status==1){
html = '<div class="layui-btn-group">'+btn+btn1+'</div>';
}
else{
html = '<div class="layui-btn-group">'+btn+btn2+'</div>';
}
return html;
}}
]]
});
table.on('tool(test)',function (obj) {
if(obj.event === 'edit'){
tool.side('/adm/flow/module_add?id='+obj.data.id);
}
if(obj.event === 'disable'){
layer.confirm('确定要禁用该模块吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/module_check", { id: obj.data.id,status: 0,title: obj.data.title}, callback);
layer.close(index);
});
}
if(obj.event === 'open'){
layer.confirm('确定要启用该模块吗?', {icon: 3, title:'提示'}, function(index){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
layui.pageTable.reload();
}
}
tool.post("/adm/flow/module_check", { id: obj.data.id,status: 1,title: obj.data.title}, callback);
layer.close(index);
});
}
});
}
</script>
{/block}
<!-- /脚本 -->
+513
View File
@@ -0,0 +1,513 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.layui-form-item{margin-bottom:0}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<form class="layui-form p-page">
<h3 class="pb-1">审批条件 <span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加审批层级</span></h3>
{eq name="$id" value="0"}
<table class="layui-table">
<tr>
<td class="layui-td-gray-2">
第1级
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件分支</span>
</td>
<td>
条件分支(优先级1)
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件组</span>
<div>
条件组1<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件字段</span>
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label" style="width:40px"></label>
<div class="layui-input-inline" style="width:132px">
<select name="columns[]" lay-filter="columns" lay-verify="required" lay-reqText="请选择字段">
<option value="">选择条件字段</option>
{volist name="$columns" id="vo"}
<option value="{$vo.Field}">{$vo.Comment|default=$vo.Field}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="flow_cate" lay-filter="flowcate" lay-verify="required" lay-reqText="请选择审批模块">
<option value="1">等于</option>
<option value="2">小于</option>
<option value="3">小于等于</option>
<option value="4">大于</option>
<option value="5">大于等于</option>
</select>
</div>
<label class="layui-form-label" style="width:80px">审批人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="unames[]" value="" autocomplete="off" placeholder="请选择审批人" readonly class="layui-input picker-admin">
<input type="hidden" name="uids[]" value="">
</div>
</div>
</div>
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label" style="width:40px"></label>
<div class="layui-input-inline" style="width:132px">
<select name="columns[]" lay-filter="columns" lay-verify="required" lay-reqText="请选择字段">
<option value="">选择条件字段</option>
{volist name="$columns" id="vo"}
<option value="{$vo.Field}">{$vo.Comment|default=$vo.Field}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="flow_cate" lay-filter="flowcate" lay-verify="required" lay-reqText="请选择审批模块">
<option value="1">等于</option>
<option value="2">小于</option>
<option value="3">小于等于</option>
<option value="4">大于</option>
<option value="5">大于等于</option>
</select>
</div>
<label class="layui-form-label" style="width:80px">审批人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="unames[]" value="" autocomplete="off" placeholder="请选择审批人" readonly class="layui-input picker-admin">
<input type="hidden" name="uids[]" value="">
</div>
</div>
</div>
</div>
条件分支(优先级2)
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件组</span>
<div>
条件组1<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件字段</span>
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label" style="width:40px"></label>
<div class="layui-input-inline" style="width:132px">
<select name="columns[]" lay-filter="columns" lay-verify="required" lay-reqText="请选择字段">
<option value="">选择条件字段</option>
{volist name="$columns" id="vo"}
<option value="{$vo.Field}">{$vo.Comment|default=$vo.Field}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="flow_cate" lay-filter="flowcate" lay-verify="required" lay-reqText="请选择审批模块">
<option value="1">等于</option>
<option value="2">小于</option>
<option value="3">小于等于</option>
<option value="4">大于</option>
<option value="5">大于等于</option>
</select>
</div>
<label class="layui-form-label" style="width:80px">审批人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="unames[]" value="" autocomplete="off" placeholder="请选择审批人" readonly class="layui-input picker-admin">
<input type="hidden" name="uids[]" value="">
</div>
</div>
</div>
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label" style="width:40px"></label>
<div class="layui-input-inline" style="width:132px">
<select name="columns[]" lay-filter="columns" lay-verify="required" lay-reqText="请选择字段">
<option value="">选择条件字段</option>
{volist name="$columns" id="vo"}
<option value="{$vo.Field}">{$vo.Comment|default=$vo.Field}</option>
{/volist}
</select>
</div>
<div class="layui-input-inline" style="width:100px">
<select name="flow_cate" lay-filter="flowcate" lay-verify="required" lay-reqText="请选择审批模块">
<option value="1">等于</option>
<option value="2">小于</option>
<option value="3">小于等于</option>
<option value="4">大于</option>
<option value="5">大于等于</option>
</select>
</div>
<label class="layui-form-label" style="width:80px">审批人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="unames[]" value="" autocomplete="off" placeholder="请选择审批人" readonly class="layui-input picker-admin">
<input type="hidden" name="uids[]" value="">
</div>
</div>
</div>
</div>
默认情况分支(优先级3)
<div class="layui-form-item layui-form-pane" style="margin-bottom:0">
<div class="layui-input-inline" style="width:160px;">
<select name="types[]" lay-filter="flowtype">
<option value="1">当前部门负责人</option>
<option value="2">上一级部门负责人</option>
<option value="3">指定人员(多人或签)</option>
<option value="4">指定人员(多人会签)</option>
</select>
</div>
<label class="layui-form-label" style="width:80px">审批人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="unames[]" value="" autocomplete="off" placeholder="请选择审批人" readonly class="layui-input picker-admin">
<input type="hidden" name="uids[]" value="">
</div>
<span class="layui-label-inline">
如存在未满足其他分支条件的情况,则进入此分支
</span>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">
第2级
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加条件分支</span>
</td>
<td>
</td>
</tr>
</table>
{else/}
<table class="layui-table">
<tr>
<td class="layui-td-gray">流程名称<font>*</font></td>
<td>
<input type="text" name="title" value="{$detail.title}" autocomplete="off" placeholder="请输入审批流程名称" lay-verify="required" lay-reqText="请输入审批流程名称" class="layui-input">
</td>
<td class="layui-td-gray">流程标识<font>*</font></td>
<td><input type="text" name="name" value="{$detail.name}" autocomplete="off" placeholder="请输入审批流程标识" lay-verify="required" lay-reqText="请输入审批流程标识" class="layui-input">
</td>
</tr>
<tr>
<td class="layui-td-gray">审批模块<font>*</font></td>
<td>
<select name="flow_cate" lay-filter="flowcate" lay-verify="required" lay-reqText="请选择审批模块">
<option value="">请选择审批模块</option>
{volist name=":get_base_data('flow_cate')" id="vo"}
<option value="{$vo.id}" {eq name="$vo.id" value="$detail.flow_cate"}selected{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
<td class="layui-td-gray">审批类型<font>*</font></td>
<td>
<select name="flow_item" lay-filter="flowitem" lay-verify="required" lay-reqText="请选择审批类型">
<option value="">--请选择--</option>
{volist name="$detail.flow_item_list" id="vo"}
<option value="{$vo.id}" {eq name="$detail.flow_item" value="$vo.id"}selected=""{/eq}>{$vo.title}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray">应用部门</td>
<td colspan="3">
<div class="layui-input-inline" style="width:80%;">
<select id="department_ids" name="department_ids" xm-selected="{$detail.department_ids}" xm-select="select1" xm-select-skin="default"></select>
</div>
<span class="red" style="font-size:12px;">(如果不选,默认是全公司)</span>
</td>
</tr>
<tr>
<td class="layui-td-gray">流程说明</td>
<td colspan="3">
<textarea name="remark" placeholder="请输入流程说明" class="layui-textarea">{$detail.remark}</textarea>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">审批流类型<font>*</font></td>
<td colspan="3">
<input type="radio" name="check_type" lay-filter="checktype" value="1" title="自由审批流" {eq name="$detail.check_type" value="1"}checked{/eq}>
<input type="radio" name="check_type" lay-filter="checktype" value="2" title="固定审批流" {eq name="$detail.check_type" value="2"}checked{/eq}>
<input type="radio" name="check_type" lay-filter="checktype" value="3" title="可回退的审批流" {eq name="$detail.check_type" value="3"}checked{/eq}>
<input type="radio" name="check_type" lay-filter="checktype" value="4" title="条件审批流" {eq name="$detail.check_type" value="4"}checked{/eq}>
</td>
</tr>
<tr id="flowTr1" {neq name="$detail.check_type" value="1"}style="display:none"{/neq}>
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div style="padding:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>无需配置审批人,审批时,根据实际情况选择审批人即可,自由度最高。</p>
</div>
</td>
</tr>
<tr id="flowTr2" {neq name="$detail.check_type" value="2"}style="display:none"{/neq}>
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div id="flowList2">
{eq name="$detail.check_type" value="2"}
{volist name="detail.flow_list" id="vo"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第{$key+1}级</label>
<div class="layui-input-inline">
<select name="flowType[]" lay-filter="flowtype">
<option value="1" {eq name="$vo.flow_type" value="1"}selected=""{/eq}>当前部门负责人</option>
<option value="2" {eq name="$vo.flow_type" value="2"}selected=""{/eq}>上一级部门负责人</option>
<option value="3" {eq name="$vo.flow_type" value="3"}selected=""{/eq}>指定人员(多人或签)</option>
<option value="4" {eq name="$vo.flow_type" value="4"}selected=""{/eq}>指定人员(多人会签)</option>
</select>
</div>
</div>
<div class="layui-inline select-{$vo.flow_type}">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="flowNamesA[]" value="{$vo.flow_unames}" autocomplete="off" readonly class="layui-input picker-more">
<input type="hidden" name="flowUidsA[]" value="{$vo.flow_uids}">
</div>
</div>
{gt name="$key" value="0"}
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>
{/gt}
</div>
{/volist}
{else/}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第1级</label>
<div class="layui-input-inline">
<select name="flowType[]" lay-filter="flowtype">
<option value="1">当前部门负责人</option>
<option value="2">上一级部门负责人</option>
<option value="3">指定人员(多人或签)</option>
<option value="4">指定人员(多人会签)</option>
</select>
</div>
</div>
<div class="layui-inline select-1">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="flowNamesA[]" value="" autocomplete="off" readonly class="layui-input picker-more">
<input type="hidden" name="flowUidsA[]" value="">
</div>
</div>
</div>
{/eq}
</div>
<span id="addFlow2" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加审批层级</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、当选择<strong> “当前部门负责人” </strong>审批时。系统仅会通知当前部门的负责人。</p>
<p>2、当选择<strong> “上一级部门负责人” </strong>审批时。系统仅会通知当前部门的上一级部门的负责人。</p>
<p>3、当选择<strong> “指定人员(多人或签)” </strong>时,表示指定用户中任意一人审批即可,可单选或多选。</p>
<p>4、当选择<strong> “指定人员(多人会签)” </strong>时,表示指定人员中所有人都需要审批,可单选或多选。</p>
<p>5、如果指定用户没有分配查看审批模块的功能权限,系统会通知其审批,但是他无法查看此审批数据信息。</p>
</div>
</td>
</tr>
<tr id="flowTr3" {neq name="$detail.check_type" value="3"}style="display:none"{/neq}>
<td class="layui-td-gray">审批流程<font>*</font></td>
<td colspan="3">
<div id="flowList3">
{eq name="$detail.check_type" value="3"}
{volist name="detail.flow_list" id="vo"}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第{$key+1}级</label>
<div class="layui-input-inline">
<input type="text" name="flowName[]" value="{$vo.flow_name}" autocomplete="off" placeholder="请输入流程名称" class="layui-input">
</div>
</div>
<div class="layui-inline select-3">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="flowNamesB[]" value="{$vo.flow_unames}" autocomplete="off" readonly class="layui-input picker-one">
<input type="hidden" name="flowUidsB[]" value="{$vo.flow_uids}">
</div>
</div>
{gt name="$key" value="0"}
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>
{/gt}
</div>
{/volist}
{else/}
<div class="layui-form-item layui-form-pane">
<div class="layui-inline">
<label class="layui-form-label">第1级</label>
<div class="layui-input-inline">
<input type="text" name="flowName[]" value="" autocomplete="off" placeholder="请输入流程名称" class="layui-input">
</div>
</div>
<div class="layui-inline select-3">
<label class="layui-form-label">指定人员</label>
<div class="layui-input-inline" style="width:360px;">
<input type="text" name="flowNamesB[]" value="" autocomplete="off" readonly class="layui-input picker-one">
<input type="hidden" name="flowUidsB[]" value="">
</div>
</div>
</div>
{/eq}
</div>
<span id="addFlow3" class="layui-btn layui-btn-xs layui-btn-normal">+ 添加审批层级</span>
<div style="padding:10px; margin-top:10px; font-size:12px; background-color:#fffcf0">
<p><strong>温馨提示</strong></p>
<p>1、<strong>指定人员</strong>单选。后期审批的时候,审批人只能该指定人员。</p>
<p>2、该审批流程可<strong>回退</strong>,当拒绝审核时,会自动回退到上一位审批人节点。</p>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray">抄送人</td>
<td colspan="3">
<input type="text" name="copy_unames" value="{$detail.copy_unames}" autocomplete="off" readonly class="layui-input picker-admin" data-type="2">
<input type="hidden" name="copy_uids" value="{$detail.copy_uids}">
</td>
</tr>
</table>
{/eq}
<div class="py-3">
<input type="hidden" name="id" value="{$id}">
<button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="webform">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</form>
{/block}
<!-- /主体 -->
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','formSelects','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,formSelects = layui.formSelects;
//选择应用模块
form.on('select(flowcate)', function(data){
let callback = function (e) {
if (e.code == 0) {
if(e.data.length>0){
let ops='<option value="">--请选择--</option>';
for(var i=0;i<e.data.length;i++){
ops+='<option value="'+e.data[i].id+'">'+e.data[i].title+'</option>';
}
$('[name="flow_item"]').html(ops);
form.render();
}
else{
$('[name="flow_item"]').html('');
form.render();
}
}
}
tool.get("/adm/api/get_flow_item", {cate:data.value}, callback);
})
//选择应用部门
var selcted = $('#department_ids').attr('xm-selected');
formSelects.data('select1', 'server', {
url: '/api/index/get_department_select',
keyword: selcted,
});
form.on('radio(checktype)', function(data){
if(data.value==1){
$('#flowTr1').show();
$('#flowTr2').hide();
$('#flowTr3').hide();
}
else if(data.value==2){
$('#flowTr1').hide();
$('#flowTr2').show();
$('#flowTr3').hide();
}
else{
$('#flowTr1').hide();
$('#flowTr2').hide();
$('#flowTr3').show();
}
});
form.on('select(flowtype)', function(data){
$(data.elem).parents('.layui-form-item').find('.layui-inline').eq(1).attr('class','layui-inline select-'+data.value);
});
//监听提交
form.on('submit(webform)', function(data){
let callback = function (e) {
layer.msg(e.msg);
if (e.code == 0) {
tool.sideClose(1000);
}
}
tool.post("/adm/flow/add", data.field, callback);
return false;
});
$('#addFlow2').on('click',function(){
var len = $('#flowList2').find('.layui-form-item').length;
var index = len+1;
var timestamp=new Date().getTime();
var tem='<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'级</label>\
<div class="layui-input-inline">\
<select name="flowType[]" lay-filter="flowtype">\
<option value="1">当前部门负责人</option>\
<option value="2">上一级部门负责人</option>\
<option value="3">指定人员(多人或签)</option>\
<option value="4">指定人员(多人会签)</option>\
</select>\
</div>\
</div>\
<div class="layui-inline select-1">\
<label class="layui-form-label">指定人员</label>\
<div class="layui-input-inline" style="width:360px;">\
<input type="text" name="flowNamesA[]" value="" autocomplete="off" readonly class="layui-input picker-admin" data-type="2">\
<input type="hidden" name="flowUidsA[]" value="">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>';
$('#flowList2').append(tem);
form.render();
});
$('#flowList2').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'级');
})
}
});
//================================
$('#addFlow3').on('click',function(){
var len = $('#flowList3').find('.layui-form-item').length;
var index = len+1;
var timestamp=new Date().getTime();
var tem='<div class="layui-form-item layui-form-pane">\
<div class="layui-inline">\
<label class="layui-form-label label-index">第'+index+'级</label>\
<div class="layui-input-inline">\
<input type="text" name="flowName[]" value="" autocomplete="off" placeholder="请输入流程名称" class="layui-input">\
</div>\
</div>\
<div class="layui-inline select-3">\
<label class="layui-form-label">指定人员</label>\
<div class="layui-input-inline" style="width:360px;">\
<input type="text" name="flowNamesB[]" value="" autocomplete="off" readonly class="layui-input picker-one">\
<input type="hidden" name="flowUidsB[]" value="">\
</div>\
</div>\
<span class="layui-btn layui-btn-danger layui-btn-sm">删除</span>\
</div>';
$('#flowList3').append(tem);
form.render();
});
$('#flowList3').on('click','.layui-btn-danger',function(){
$(this).parents('.layui-form-item').remove();
var items = $('.label-index').length;
if(items>0){
$('.label-index').each(function(index,item){
$(this).html('第'+(index+2)+'级');
})
}
});
}
</script>
{/block}
<!-- /脚本 -->
+141
View File
@@ -0,0 +1,141 @@
{extend name="../../base/view/common/base" /}
{block name="style"}
<style>
.flow-content{position: fixed;top: 0;left: 0;right: 0;bottom: 0;z-index: 1;overflow-x: scroll;overflow-y: auto;padding:30px 0;background: #F5F5F7;user-select: none;}
.flow-box *{margin: 0;padding: 0;box-sizing: border-box;}
.remove-node{position: absolute; top: 6px; right: 8px; display: none; font-style:normal}
.condition-priority{position: absolute; top: 6px; right: 8px;}
.select-icon{position: absolute; top: 42px; right: 3px;}
.top-left-cover-line{position: absolute;height: 3px;width: 50%;background-color: #f5f5f7;top: -2px;left: -1px;}
.bottom-left-cover-line{position: absolute;height: 3px;width: 50%;background-color: #f5f5f7;bottom: -2px;left: -1px;}
.top-right-cover-line{position: absolute;height: 3px;width: 50%;background-color: #f5f5f7;top: -2px;right: -1px;}
.bottom-right-cover-line{position: absolute;height: 3px;width: 50%;background-color: #f5f5f7;bottom: -2px;right: -1px;}
.flow-zoom{position: fixed; padding:10px; height: 32px;right: 36px;top: 36px; z-index: 10;font-size: 16px; box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .3);background: #FFFFFF;border-radius: 5px;}
.flow-zoom span.zoom-num{padding:0 12px; display: inline-block; height: 30px; line-height:28px;}
.flow-zoom span.zoom-ctrl{display: inline-block;width: 30px; height: 30px; line-height:30px; border-radius:50%; border:1px solid #666; font-size: 20px; text-align: center;color: #666;cursor: pointer;}
.flow-zoom span.zoom-ctrl:hover{color:#1e9fff;border-color:#1e9fff}
.flow-zoom .layui-btn-group{display: inline-block;vertical-align:top; margin-left:12px;}
.node-wrap{display: inline-flex;flex-direction: column;align-items: center;width: 100%;padding: 0 50px;position: relative;}
.node-wrap-box{width: 220px;display: inline-flex;align-items: center;flex-direction: column;background-color: #FFFFFF;border-radius: 5px;box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1);cursor: pointer;border: 1px solid #F5F5F5;position: relative;}
.node-wrap-box:hover{box-shadow: 0 3px 6px 0 rgba(0, 0, 0, .3);transition: all .3s;}
.node-wrap-box::before{content: "";position: absolute;top: -8px;left: 50%;-webkit-transform: translateX(-50%);transform: translateX(-50%);width: 0;height: 4px;border-style: solid;border-width: 8px 6px 4px;border-color: #cacaca transparent transparent;background: #f5f5f7;}
.node-start::before{display:none;}
.node-wrap-box:hover .remove-node{display: block;}
.node-wrap-box .user-edit{display: inline-block;}
.node-wrap-box:hover .user-edit{}
.node-wrap-box .node-title{border-radius: 4px 5px 0 0 }
.node-wrap-box>div{width: 100%;}
.node-wrap-box>div:nth-of-type(1){padding: 6px 10px;color: white;font-size: 12px;position: relative;}
.node-wrap-box>div:nth-of-type(2){padding: 15px 10px;display: flex;justify-content: space-between;}
.node-add-btn-box{position: relative;}
.node-add-btn-box::before{content: "";position: absolute;top: 0;left: 0;right: 0;bottom: 0;z-index: -1;margin: auto;width: 2px;height: 100%;background-color: #cacaca;}
.add-node-btn{padding: 20px 0 24px;}
.add-node-btn button.add-node{border-radius: 50%;background: #1e9fff;font-size: 25px;border-color: #1e9fff;width: 32px;line-height: 30px;padding: 0;margin: 0;color: #fff;display: inline-block;font-weight: 400;text-align: center;white-space: nowrap;vertical-align: middle;touch-action: manipulation;cursor: pointer;border: 1px solid transparent;}
.add-node-btn button.add-node:hover{transform: scale(1.2);transition:all .2s }
.branch-box{display: flex;border-bottom: 2px solid #cccccc;border-top: 2px solid #cccccc;position: relative;}
.branch-box-wrap{display: inline-flex;flex-direction: column;align-items: center;width: 100%;}
.add-branch{position: absolute;display: inline-block;left: 50%;top: -15px;z-index: 1;border-radius: 15px;color: rgb(50, 150, 250);border: none;box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1);background: #FFFFFF;padding: 5px 10px;font-size: 12px;cursor: pointer;line-height: 20px;transform: translateX(-50%);}
.col-box{display: inline-flex;background: #f5f5f7;;flex-direction: column;align-items: center;position: relative;}
.col-box::before{content: "";position: absolute;top: 0;left: 0;right: 0;bottom: 0;z-index: 0;margin: auto;width: 2px;height: 100%;background-color: #cacaca;}
.condition-judge{background-color: #FFFFFF;border-radius: 5px;width: 220px;position: relative;box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .1);cursor: pointer;border: 1px solid #FFFFFF;}
.condition-judge:hover{border: 1px solid #16b777;transition:all .3s}
.condition-judge:hover .remove-node{display: block;}
.condition-judge:hover .condition-priority{display:none;}
.condition-judge>div:nth-of-type(2){padding: 15px 10px;}
.condition-node-box{display: inline-flex;flex-direction: column;align-items: center;position: relative;padding: 30px 30px 0 30px;}
.condition-node-box::before{content: "";position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;width: 2px;height: 100%;background-color: #cacaca;}
.condition-input{line-height: 19px;height: 18px;display: inline-block;width:150 px;padding: 0;padding-left: 5px;font-size: 12px;border: none;}
.condition-title{padding: 5px 0;background-color: #ffffff;border-radius: 5px 5px 0 0;color: #15bc83;font-size: 12px;position: relative;}
.end-node{border-radius: 50%;font-size: 14px;color: rgba(25, 31, 37, .4);text-align: left;}
.end-node-circle{width: 10px;height: 10px;margin: auto;border-radius: 50%;background: #dbdcdc;}.end-node-text{margin-top: 5px;text-align: center;}
</style>
{/block}
<!-- 主体 -->
{block name="body"}
<div class="flow-content">
<div id="flowBar" class="flow-zoom" data-zoom="10">
<span class="zoom-ctrl" data-type="1"><strong></strong></span>
<span class="zoom-num">100%</span>
<span class="zoom-ctrl" data-type="2">+</span>
<div class="layui-btn-group">
<button type="button" class="layui-btn layui-btn-sm">预览</button>
<button type="button" class="layui-btn layui-btn-sm layui-bg-blue">发布</button>
</div>
</div>
<div id="flowBox" class="flow-box" style="transform: scale(1); transform-origin: 50% 0px 0px;">
<!-- 发起人 -->
<div>
<div class="node-wrap">
<div class="node-wrap-box node-start">
<div class="node-title" style="background: #2f363c;">
<span>发起人</span>
</div>
<div>
<span>请设置发起人</span>
<i class="select-icon"><?xml version="1.0" encoding="UTF-8"?><svg width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 12L31 24L19 36" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></i>
</div>
</div>
<!-- 箭头 -->
<div class="node-add-btn-box">
<div class="add-node-btn">
<button class="add-node">+</button>
</div>
</div>
</div>
</div>
<!-- 审核人 -->
<div>
<div class="node-wrap">
<div class="node-wrap-box">
<div class="node-title" style="background:#ffb800">
<span class="user-edit">审核人</span>
<i class="remove-node"></i>
</div>
<div>
<span>请设置审核人</span>
<i class="select-icon"><?xml version="1.0" encoding="UTF-8"?><svg width="24" height="24" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19 12L31 24L19 36" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></i>
</div>
</div>
<!-- 箭头 -->
<div class="node-add-btn-box">
<div class="add-node-btn">
<button class="add-node">+</button>
</div>
</div>
</div>
</div>
<!-- 流程结束 -->
<div class="end-node">
<div class="end-node-circle"></div>
<div class="end-node-text">
结束流程
</div>
</div>
</div>
</div>
{/block}
<!-- /主体 -->
{block name="copyright"}{/block}
<!-- 脚本 -->
{block name="script"}
<script>
const moduleInit = ['tool','oaFlow','oaPicker'];
function gouguInit() {
var form = layui.form,tool=layui.tool,oaFlow = layui.oaFlow;
oaFlow.init();
}
</script>
{/block}
<!-- /脚本 -->