添加项目文件。

This commit is contained in:
dell
2023-03-03 16:07:50 +08:00
parent 2c462551b6
commit 011039960e
585 changed files with 362460 additions and 0 deletions

View File

@ -0,0 +1,162 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using HT.Cloud.Code;
using HT.Cloud.Domain.FlowManage;
using HT.Cloud.Service.FlowManage;
namespace HT.Cloud.Web.Areas.FlowManage.Controllers
{
/// <summary>
/// 创 建:超级管理员
/// 日 期2020-07-14 09:18
/// 描 述:我的流程控制器类
/// </summary>
[Area("FlowManage")]
public class FlowinstanceController : BaseController
{
public FlowinstanceService _service { get; set; }
/// <summary>
/// 待处理的流程
/// </summary>
public ActionResult ToDoFlow()
{
return View();
}
/// <summary>
/// 已完成的流程
/// </summary>
public ActionResult DoneFlow()
{
return View();
}
/// <summary>
/// 处理界面
/// </summary>
/// <returns></returns>
public ActionResult Verification()
{
return View();
}
#region
/// <summary>
/// 获取一个流程实例的操作历史记录
/// </summary>
[HttpGet]
public async Task<ActionResult> QueryHistories(string keyValue)
{
var data = await _service.QueryHistories(keyValue);
return Success(data.Count, data);
}
[HandlerAjaxOnly]
[IgnoreAntiforgeryToken]
public async Task<ActionResult> GetGridJson(SoulPage<FlowinstanceEntity> pagination, string type, string keyword)
{
if (string.IsNullOrEmpty(pagination.field))
{
pagination.field = "F_Id";
pagination.order = "desc";
}
var data = await _service.GetLookList(pagination, type, keyword);
return Content(pagination.setData(data).ToJson());
}
[HttpGet]
[HandlerAjaxOnly]
public async Task<ActionResult> GetListJson(string keyword)
{
var data = await _service.GetList(keyword);
return Content(data.ToJson());
}
[HttpGet]
[HandlerAjaxOnly]
public async Task<ActionResult> GetFormJson(string keyValue)
{
var data = await _service.GetForVerification(keyValue);
return Content(data.ToJson());
}
#endregion
#region
[HttpPost]
[HandlerAjaxOnly]
public async Task<ActionResult> SubmitForm(FlowinstanceEntity entity, string keyValue)
{
try
{
if (string.IsNullOrEmpty(keyValue))
{
await _service.CreateInstance(entity);
}
else
{
entity.F_Id = keyValue;
await _service.UpdateInstance(entity);
}
return await Success("操作成功。", "", keyValue);
}
catch (Exception ex)
{
return await Error(ex.Message, "", keyValue);
}
}
[HttpPost]
[HandlerAjaxOnly]
public async Task<ActionResult> Verification(VerificationExtend entity)
{
try
{
await _service.Verification(entity);
return await Success("操作成功。", "", entity.F_FlowInstanceId, DbLogType.Submit);
}
catch (Exception ex)
{
return await Error(ex.Message, "", entity.F_FlowInstanceId, DbLogType.Submit);
}
}
[HttpPost]
[HandlerAjaxOnly]
[HandlerAuthorize]
public async Task<ActionResult> DeleteForm(string keyValue)
{
try
{
await _service.DeleteForm(keyValue);
return await Success("操作成功。", "", keyValue, DbLogType.Delete);
}
catch (Exception ex)
{
return await Error(ex.Message, "", keyValue, DbLogType.Delete);
}
}
[HttpPost]
[HandlerAjaxOnly]
[HandlerAuthorize]
public async Task<ActionResult> CancleForm(string keyValue)
{
try
{
await _service.CancleForm(keyValue);
return await Success("操作成功。", "", keyValue, DbLogType.Other);
}
catch (Exception ex)
{
return await Error(ex.Message, "", keyValue, DbLogType.Other);
}
}
#endregion
}
}

View File

@ -0,0 +1,146 @@
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Form.cshtml";
}
<link href="~/js/lay-module/flow/WaterFlow.css" rel="stylesheet" />
<link href="~/js/lay-module/formDesigner/formPreview.css" rel="stylesheet" />
<style type="text/css">
div.layui-table-cell {
color: rgb(102, 102, 102) !important;
}
</style>
<script>
//参数传递到表单页
//表单数据
var formtext;
//只读参数
var readonly = true;
layui.use(['form', 'table', 'layer', 'element', 'jquery', 'waterflow', 'flowlayout', 'common', 'formPreview'], function () {
var form = layui.form, element = layui.element,
table = layui.table,
layer = layui.layer,
common = layui.common,
formPreview = layui.formPreview,
$ = layui.jquery;
var keyValue = $.request("keyValue");
var flowDesignPanel;
table.render({
elem: '#mainList',
page: false,
url: '/FlowManage/Flowinstance/QueryHistories',
where: { time: new Date().Format("yyyy-MM-dd hh:mm:ss") },
cols: [[ //标题栏
{ field: 'F_Content', title: '流转记录', minWidth: 150 }
, { field: 'F_CreatorUserName', title: '操作人', width: 150 }
, {
field: 'F_CreatorTime', title: '创建时间', width: 180,
templet: function (d) {
if (d.F_CreatorTime) {
var time = new Date(d.F_CreatorTime);
return time.Format("yyyy-MM-dd hh:mm:ss");
}
return '';
}
},
]]
, where: {
keyValue: keyValue
}
, parseData: function (res) { //res 即为原始返回的数据
return {
"code": res.state, //解析接口状态
"msg": res.message, //解析提示文本
"count": res.count, //解析数据长度
"data": res.data //解析数据列表
};
}
});
$(function () {
common.ajax({
url: '/FlowManage/Flowinstance/GetFormJson',
dataType: 'json',
data: { keyValue: keyValue },
async: false,
success: function (data) {
var schemeContent = JSON.parse(data.F_SchemeContent);
if (!!data.CurrentMakerName) {
$('#CurrentMakerName').val(data.CurrentMakerName);
}
else {
$('#CurrentMakerName').parent().parent().remove();
}
flowDesignPanel = $('#flowPanel').flowdesign({
haveTool: false
, isprocessing: true
, activityId: data.F_ActivityId
, nodeData: schemeContent.nodes
, flowcontent: schemeContent
});
formtext = data.F_FrmData;
if (data.F_FrmType == 0) {
var dataJson = JSON.parse(data.F_FrmContent);
//表单设计器
var renderForm= formPreview.render({
data: dataJson,
elem: '#frmPreview',
readonly:true
});
renderForm.setFormData(JSON.parse(formtext));
}
else {
$("#frmPreview").load(document.location.origin + '/form/' + data.F_DbName + '.html');
form.render();
}
flowDesignPanel.reinitSize($(window).width() - 50, $(window).height() - 100);
}
});
});
$(window).resize(function () {
flowDesignPanel.reinitSize($(window).width() - 50, $(window).height() - 100);
});
wcLoading.close();
//让层自适应iframe
//layer.iframeAuto(index);
});
</script>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-form layuimini-form" lay-filter="adminform">
<div class="layui-tab layui-tab-brief" lay-filter="tab" style="margin: 0px">
<ul class="layui-tab-title">
<li class="layui-this">流程信息</li>
<li>表单信息</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-form-item">
<label class="layui-form-label">当前审核人</label>
<div class="layui-input-block">
<input id="CurrentMakerName" name="CurrentMakerName" class="layui-input" disabled>
</div>
</div>
<table class="layui-table" id="mainList">
</table>
<div id="flowPanel"></div>
</div>
<div class="layui-tab-item">
<form class="layui-form layuimini-form">
<div class="layui-form-item">
<fieldset class="layui-elem-field" style="padding-top:15px;">
<div id="frmPreview"></div>
</fieldset>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,137 @@
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset layui-hide" id="searchField">
<div>
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">关键字:</label>
<div class="layui-input-inline">
<input type="text" id="txt_keyword" name="txt_keyword" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container" id="toolbar">
<button id="NF-details" name="NF-details" authorize class="layui-btn layui-btn-sm layui-btn-normal layui-hide" lay-event="details"> <i class="layui-icon">&#xe60b;</i>进度</button>
</div>
</script>
<script type="text/html" id="currentTableBar">
<a id="NF-details" authorize class="layui-btn layui-btn-xs layui-btn-normal" lay-event="details">进度</a>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
</div>
</div>
<script>
layui.use(['jquery', 'form', 'table', 'common', 'commonTable', 'optimizeSelectOption'], function () {
var form = layui.form,
table = layui.table,
commonTable = layui.commonTable,
common = layui.common;
//权限控制(js是值传递)
currentTableBar.innerHTML = common.authorizeButtonNew(currentTableBar.innerHTML);
toolbarDemo.innerHTML = common.authorizeButtonNew(toolbarDemo.innerHTML);
commonTable.rendertable({
elem: '#currentTableId',
id: 'currentTableId',
url: '/FlowManage/Flowinstance/GetGridJson',
where: { type: 'done' },
cols: [[
{ type: "radio", width: 50, fixed: 'left'},
{
field: 'F_IsFinish', title: '流程状态', width: 120, sort: true, filter: true,
templet: function (d) {
if (d.F_IsFinish == 0) {
return "<span class='layui-badge layui-bg-blue'>正在运行</span>";
}
else if (d.F_IsFinish == 2) {
return "<span class= 'layui-badge layui-bg-gray'>被撤回</span >";
}
else if (d.F_IsFinish == 3) {
return "<span class= 'layui-badge'>不同意</span >";
}
else if (d.F_IsFinish == 4) {
return "<span class= 'layui-badge layui-bg-gray'>被驳回</span >";
}
else {
return "<span class='layui-badge layui-bg-green'>审批通过</span>";
}
}
},
{ field: 'F_Code', title: '实例编号', width: 150, sort: true, filter: true },
{ field: 'F_CustomName', title: '实例名称', minWidth: 150, sort: true, filter: true },
{ field: 'F_ActivityName', title: '当前节点名称', width: 140, filter: true },
{ field: 'F_Description', title: '实例备注', minWidth: 150, filter: true },
{
field: 'F_CreatorTime', title: '创建时间', width: 160, sort: true, filter: { type: 'date[yyyy/MM/dd HH:mm:ss]' }
},
{ field: 'F_CreatorUserName', title: '创建人', width: 120, sort: true, filter: true },
{ title: '操作', width: 80, toolbar: '#currentTableBar', align: "center", fixed: 'right'}
]]
});
// 监听搜索操作
form.on('submit(data-search-btn)', function (data) {
//执行搜索重载
commonTable.reloadtable({
elem: 'currentTableId',
curr: 1,
where: { keyword: data.field.txt_keyword, type: 'done' }
});
return false;
});
wcLoading.close();
//行点击事件监听,控制按钮显示
var oneList = ["NF-details"];//选择1条显示
commonTable.tableRowClick("radio", "currentTableFilter", "currentTableId", oneList);
//toolbar监听事件
table.on('toolbar(currentTableFilter)', function (obj) {
var data = table.checkStatus('currentTableId').data;
if (obj.event === 'details') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + data[0].F_Id,
width: "700px",
height: "600px",
btn: []
});
}
else if (obj.event === 'TABLE_SEARCH') {
var _that = $("#searchField");
if (_that.hasClass("layui-hide")) {
_that.removeClass('layui-hide');
} else {
_that.addClass('layui-hide');
}
table.resize();
}
return false;
});
//toolrow监听事件
table.on('tool(currentTableFilter)', function (obj) {
if (obj.event === 'details') {
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + obj.data.F_Id,
width: "700px",
height: "600px",
btn: []
});
}
return false;
});
});
</script>

View File

@ -0,0 +1,385 @@
@{
ViewBag.Title = "Form";
Layout = "~/Views/Shared/_Form.cshtml";
}
<link href="~/js/lay-module/flow/WaterFlow.css" rel="stylesheet" media="all"/>
<link href="~/css/stepcss.css" rel="stylesheet" media="all"/>
<link href="~/js/lay-module/formDesigner/formPreview.css" rel="stylesheet" media="all"/>
<style type="text/css">
div.layui-table-cell {
color: rgb(102, 102, 102) !important;
}
</style>
<script>
//参数传递到表单页
//表单数据
var formtext;
var NextNodeDesignateType;
var readonly=false;
var dataJson={};
layui.use(['form', 'layer', 'element', 'jquery', 'table', 'waterflow', 'flowlayout', 'common', 'step', 'dtree', 'formPreview', 'optimizeSelectOption'], function () {
var form = layui.form,
element = layui.element,
layer = layui.layer,
$ = layui.jquery,
step = layui.step,
dtree = layui.dtree,
common = layui.common,
formPreview = layui.formPreview,
table = layui.table;
var keyValue = $.request("keyValue");
var postData = {};
step.render({
elem: '#stepForm',
filter: 'stepForm',
width: '100%', //设置容器宽度
stepWidth: '750px',
height: '650px',
stepItems: [{
title: '表单信息'
},{
title: '基础信息'
}]
});
//权限字段
common.authorizeFields('adminform');
/*=========流程设计begin======================*/
var flowDesignPanel = $('#flowPanel').flowdesign({
height: 300,
widht: $(window).width() - 250,
preview: 1,
haveTool: false,
OpenNode: function (object) {
FlowDesignObject = object; //为NodeInfo窗口提供调用
valueList = $("#valueList").val().split(',');
if (object.type == 'start round mix' || object.type == 'end round') {
layer.msg("开始节点与结束节点不能设置");
return false;
}
top.layer.open({
type: 2,
area: ['550px', '450px'], //宽高
maxmin: true, //开启最大化最小化按钮
title: '节点设置【' + object.name + '】',
content: '/SystemManage/Flowscheme/NodeInfo',
btn: ['关闭'],
success: function (layero, index) {
//子界面定义一个窗口方法initForm里面调用common.val给参数赋值
if (layero.find('iframe')[0].contentWindow.initForm) {
var data = {};
data.FlowDesignObject = FlowDesignObject;
data.valueList = valueList;
layero.find('iframe')[0].contentWindow.initForm(data);
}
},
cancel: function (index) {
top.layer.close(index);
}
});
},
OpenLine: function (object) {
FlowDesignObject = object; //为NodeInfo窗口提供调用
valueList = $("#valueList").val().split(',');
top.layer.open({
type: 2,
area: ['550px', '450px'], //宽高
maxmin: true, //开启最大化最小化按钮
title: '连线设置【' + object.name + '】',
content: '/SystemManage/Flowscheme/LineInfo',
btn: ['关闭'],
success: function (layero, index) {
//子界面定义一个窗口方法initForm里面调用common.val给参数赋值
if (layero.find('iframe')[0].contentWindow.initForm) {
var data = {};
data.FlowDesignObject = FlowDesignObject;
data.valueList = valueList;
layero.find('iframe')[0].contentWindow.initForm(data);
}
},
cancel: function (index) {
top.layer.close(index);
}
});
return;
}
});
/*=========流程设计end=====================*/
$('#NextMakerName').parent().parent().addClass('layui-hide');
//流程模板选择列表
var changeScheme = function (id) { //切换表单
common.ajax({
url: '/SystemManage/Flowscheme/GetFormJson',
dataType: 'json',
data: { keyValue: id },
async: false,
success: function (data) {
if (data.F_FrmType == 0) {
var dataJson = JSON.parse(data.F_FrmContent);
//表单设计器
renderForm = formPreview.render({
data: dataJson,
elem: '#frmPreview',
readonly: false,
});
}
else {
$("#frmPreview").load(document.location.origin + '/form/' + data.F_WebId + '.html');
}
NextNodeDesignateType = data.NextNodeDesignateType;
$('#NextMakerName').parent().parent().removeClass('layui-hide');
if (!data.NextNodeDesignateType) {
$('#NextNodeDesignates').val('');
$('#NextMakerName').val('无人审核');
$('#NextMakerName').attr('disabled', 'disabled');
$('#NextMakerName').removeAttr('placeholder');
}
else if (data.NextNodeDesignateType == "RUNTIME_SPECIAL_ROLE") {
$('#NextNodeDesignates').val('');
$('#NextMakerName').val('');
$('#NextMakerName').removeAttr('disabled');
$('#NextMakerName').attr('placeholder', '请点击选择角色');
}
else if (data.NextNodeDesignateType == "RUNTIME_SPECIAL_USER") {
$('#NextNodeDesignates').val('');
$('#NextMakerName').val('');
$('#NextMakerName').removeAttr('disabled');
$('#NextMakerName').attr('placeholder', '请点击选择用户');
}
else if (data.NextNodeDesignateType == "ALL_USER") {
$('#NextNodeDesignates').val('');
$('#NextMakerName').val('所有人');
$('#NextMakerName').attr('disabled', 'disabled');
$('#NextMakerName').removeAttr('placeholder');
}
else {
$('#NextNodeDesignates').val('');
$('#NextMakerName').val('');
$('#NextMakerName').attr('disabled', 'disabled');
$('#NextMakerName').removeAttr('placeholder');
$('#NextMakerName').val(data.NextMakerName);
if (!data.NextMakerName) {
$('#NextMakerName').val("无人审核");
}
}
$("#valueList").val(data.F_FrmContentData);
//预览流程
flowDesignPanel.loadData(JSON.parse(data.F_SchemeContent));
postData.F_CustomName = data.F_SchemeName + " " + new Date().Format("yyyy-MM-dd hh:mm:ss");
}
});
form.render();
}
var renderForm;
form.on('select(schemeChangeFilter)', function (obj) {
if (!!obj.value) {
change = true;
$('#F_SchemeId').val(obj.value);
}
else {
$('#F_SchemeId').val('');
}
$("#frmPreview").html('');
$("#valueList").val('');
if (!!obj.value) {
changeScheme(obj.value);
}
form.render();
});
$(function () {
$('#F_Code').val(new Date().getTime());
initControl();
if (!!keyValue) {
common.ajax({
url: '/FlowManage/Flowinstance/GetFormJson',
dataType: 'json',
data: { keyValue: keyValue },
async: false,
success: function (data) {
common.val('adminform', data);
flowDesignPanel.loadData(JSON.parse(data.F_SchemeContent));
changeScheme(data.F_SchemeId);
formtext = data.F_FrmData;
if (data.F_FrmType == 0) {
var dataJson = JSON.parse(data.F_FrmContent);
//表单设计器
renderForm= formPreview.render({
data: dataJson,
elem: '#frmPreview',
readonly:false
});
renderForm.setFormData(JSON.parse(formtext));
}
else {
$("#frmPreview").load(document.location.origin + '/form/' + data.F_DbName + '.html');
form.render();
}
}
});
}
form.render();
});
function initControl() {
$("#F_SchemeId").bindSelect({
url: "/SystemManage/Flowscheme/GetListJson",
id: 'F_Id',
text: 'F_SchemeName'
});
form.render();
}
flowDesignPanel.reinitSize($(window).width() - 50, $(window).height() - 100);
$(window).resize(function () {
flowDesignPanel.reinitSize($(window).width() - 50, $(window).height() - 100);
});
wcLoading.close();
//让层自适应iframe
//layer.iframeAuto(index);
$('.pre').click(function () {
step.pre('#stepForm');
});
$('.next').click(function () {
step.next('#stepForm');
});
//监听提交
form.on('submit(formStep)', function (data) {
postData = $.extend(postData, data.field);
var content = flowDesignPanel.exportData();
if (content == -1) {
return false; //阻止表单跳转。
}
valueList = $("#valueList").val().split(',');
delete data.field.F_SchemeId;
delete data.field.valueList;
delete data.field.F_Code;
delete data.field.F_Description;
delete data.field.file;
if (postData.NextMakerName == "无人审核") {
common.modalMsg("无人审核,请检查流程", "warning");
return false;
}
if(!!renderForm)
{
var tempdata = renderForm.getFormData();
postData.F_FrmData = JSON.stringify(tempdata);
}
else{
postData.F_FrmData = JSON.stringify(data.field);
}
step.next('#stepForm');
return false;
});
form.on('submit(saveBtn)', function (data) {
postData.NextNodeDesignateType = NextNodeDesignateType;
postData.NextNodeDesignates = postData.NextNodeDesignates ? postData.NextNodeDesignates.split(',') : [];
postData.F_Code = data.field.F_Code;
common.submitForm({
url: '/FlowManage/Flowinstance/SubmitForm?keyValue=' + keyValue,
param: postData,
success: function () {
common.reloadIframe("/FlowManage/Flowinstance/Index", 'data-search-btn');
common.reloadIframe("/FlowManage/Flowinstance/ToDoFlow", 'data-search-btn');
common.reloadIframe("/FlowManage/Flowinstance/DoneFlow", 'data-search-btn');
}
})
return false;
});
});
function search() {
layui.use(['jquery', 'form', 'common'], function () {
var form = layui.form,
$ = layui.$,
common = layui.common;
//不同弹窗
if (NextNodeDesignateType == 'RUNTIME_SPECIAL_ROLE') {
common.modalOpen({
title: "选择角色",
url: "/SystemOrganize/Role/AddForm?name=" + "NextMakerName" + "&value=" + "NextNodeDesignates" + "&ids=" + $('#NextNodeDesignates').val(),
width: "650px",
height: "600px",
});
}
else if (NextNodeDesignateType == 'RUNTIME_SPECIAL_USER') {
common.modalOpen({
title: "选择用户",
url: "/SystemOrganize/User/AddForm?name=" + "NextMakerName" + "&value=" + "NextNodeDesignates" + "&ids=" + $('#NextNodeDesignates').val(),
width: "650px",
height: "600px",
});
}
});
}
</script>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-form layuimini-form" lay-filter="adminform">
<div class="layui-carousel" id="stepForm" lay-filter="stepForm">
<div carousel-item style="overflow:scroll">
<div>
<form class="layui-form layuimini-form">
<div class="layui-form-item layui-hide">
<label class="layui-form-label required">选择流程模板</label>
<div class="layui-input-block">
<select id="F_SchemeId" name="F_SchemeId" lay-filter='schemeChangeFilter' lay-verify="required" lay-search>
<option value="" selected>请选择</option>
</select>
</div>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label required">下一步审核</label>
<div class="layui-input-block">
<input type="text" name="NextMakerName" disabled="disabled" id="NextMakerName" lay-verify="required" onclick="search()" class="layui-input">
<input type="text" name="NextNodeDesignates" id="NextNodeDesignates" class="layui-input layui-hide">
</div>
</div>
<div class="layui-form-item">
<fieldset class="layui-elem-field">
<legend>申请内容</legend>
<div id="frmPreview"></div>
</fieldset>
</div>
<div class="form-group-bottom text-right">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep">
&emsp;下一步&emsp;
</button>
</div>
</div>
</form>
</div>
<div>
<form class="layui-form layuimini-form">
<div class="layui-form-item">
<fieldset class="layui-elem-field">
<legend>基础信息</legend>
<div class="layui-form-item layui-hide">
<label class="layui-form-label">流程编号</label>
<input type="text" name="valueList" id="valueList" class="layui-hide" hidden>
<div class="layui-input-block">
<input type="text" name="F_Code" id="F_Code" disabled="disabled" lay-verify="required"
class="layui-input">
</div>
</div>
<div id="flowPanel"></div>
</fieldset>
</div>
<div class="form-group-bottom text-right">
<div class="layui-input-block">
<button type="button" class="layui-btn layui-btn-primary pre">上一步</button>
<button class="layui-btn site-demo-active" lay-submit lay-filter="saveBtn">
&emsp;保存&emsp;
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,242 @@
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset layui-hide" id="searchField">
<div>
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">关键字:</label>
<div class="layui-input-inline">
<input type="text" id="txt_keyword" name="txt_keyword" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container" id="toolbar">
<button id="NF-add" name="NF-add" authorize class="layui-btn layui-btn-sm" lay-event="add"><i class="layui-icon">&#xe654;</i>申请</button>
<button id="NF-cancle" name="NF-delete" authorize class="layui-btn layui-btn-sm layui-btn-danger layui-hide" lay-event="cancle"> <i class="fa fa-undo"> </i>撤回</button>
<button id="NF-edit" name="NF-edit" authorize class="layui-btn layui-btn-sm layui-btn-warm layui-hide" lay-event="edit"><i class="layui-icon">&#xe642;</i>修改</button>
<button id="NF-delete" name="NF-delete" authorize class="layui-btn layui-btn-sm layui-btn-danger layui-hide" lay-event="delete"> <i class="layui-icon">&#xe640;</i>删除</button>
<button id="NF-details" name="NF-details" authorize class="layui-btn layui-btn-sm layui-btn-normal layui-hide" lay-event="details"> <i class="layui-icon">&#xe60b;</i>进度</button>
</div>
</script>
<script type="text/html" id="currentTableBar">
<a id="NF-cancle" authorize class="layui-btn layui-btn-xs layui-btn-danger" lay-event="cancle">撤回</a>
<a id="NF-edit" authorize class="layui-btn layui-btn-xs layui-btn-warm" lay-event="edit">修改</a>
<a id="NF-delete" authorize class="layui-btn layui-btn-xs layui-btn-danger" lay-event="delete">删除</a>
<a id="NF-details" authorize class="layui-btn layui-btn-xs layui-btn-normal" lay-event="details">进度</a>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
</div>
</div>
<script>
layui.use(['jquery', 'form', 'table', 'common', 'commonTable','optimizeSelectOption'], function () {
var form = layui.form,
table = layui.table,
commonTable = layui.commonTable,
common = layui.common;
//权限控制(js是值传递)
currentTableBar.innerHTML = common.authorizeButtonNew(currentTableBar.innerHTML);
toolbarDemo.innerHTML = common.authorizeButtonNew(toolbarDemo.innerHTML);
commonTable.rendertable({
elem: '#currentTableId',
id: 'currentTableId',
url: '/FlowManage/Flowinstance/GetGridJson',
cols: [[
{ type: "radio", width: 50, fixed: 'left' },
{
field: 'F_IsFinish', title: '流程状态', width: 120, sort: true, filter: true,
templet: function (d) {
if (d.F_IsFinish == 0) {
return "<span class='layui-badge layui-bg-blue'>正在运行</span>";
}
else if (d.F_IsFinish == 2) {
return "<span class= 'layui-badge layui-bg-gray'>被撤回</span >";
}
else if (d.F_IsFinish == 3) {
return "<span class= 'layui-badge'>不同意</span >";
}
else if (d.F_IsFinish == 4) {
return "<span class= 'layui-badge layui-bg-gray'>被驳回</span >";
}
else{
return "<span class='layui-badge layui-bg-green'>审批通过</span>";
}
}
},
{ field: 'F_Code', title: '实例编号', width: 150, sort: true, filter: true },
{ field: 'F_CustomName', title: '实例名称', minWidth: 150, sort: true, filter: true },
{ field: 'F_ActivityName', title: '当前节点名称', width: 140, filter: true },
{ field: 'F_Description', title: '实例备注', minWidth: 150, filter: true },
{
field: 'F_CreatorTime', title: '创建时间', width: 160, sort: true, filter: { type: 'date[yyyy/MM/dd HH:mm:ss]' }
},
{ field: 'F_CreatorUserName', title: '创建人', width: 120, sort: true, filter: true },
{ title: '操作', width: 205, toolbar: '#currentTableBar', align: "center", fixed: 'right' }
]]
});
// 监听搜索操作
form.on('submit(data-search-btn)', function (data) {
//执行搜索重载
commonTable.reloadtable({
elem: 'currentTableId',
curr: 1,
where: { keyword: data.field.txt_keyword}
});
entity = null;
return false;
});
wcLoading.close();
//行点击事件监听,控制按钮显示
var oneList = ["NF-edit", "NF-details", "NF-delete","NF-cancle"];//选择1条显示
commonTable.tableRowClick("radio", "currentTableFilter", "currentTableId", oneList);
//toolbar监听事件
table.on('toolbar(currentTableFilter)', function (obj) {
var data = table.checkStatus('currentTableId').data;
if (obj.event === 'add') { // 监听添加操作
common.openNewTabByIframe({
title: "添加申请",
href: "/FlowManage/Flowinstance/Form",
});
}
else if (obj.event === 'delete') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
if (data[0].F_IsFinish != 4 && data[0].F_IsFinish != 2) {
common.modalMsg("申请已处理,无法删除", "warning");
return false;
}
common.deleteForm({
url: "/FlowManage/Flowinstance/DeleteForm",
param: { keyValue: data[0].F_Id },
success: function () {
common.reload('data-search-btn');
entity = null;
}
});
}
else if (obj.event === 'cancle') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
if (data[0].F_IsFinish != 0) {
common.modalMsg("申请已处理,无法撤回", "warning");
return false;
}
common.submitPost({
prompt:"注:您确定要撤回选中数据吗?",
url: "/FlowManage/Flowinstance/CancleForm",
param: { keyValue: data[0].F_Id },
success: function () {
common.reload('data-search-btn');
entity = null;
}
});
}
else if (obj.event === 'edit') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
var userId = top.currentUser.F_Id;
if ((data[0].F_IsFinish != 4 && data[0].F_IsFinish != 2) || data[0].F_MakerList.indexOf(userId)<0 ) {
common.modalMsg("申请已处理,无法修改", "warning");
return false;
}
common.openNewTabByIframe({
title: "修改申请",
href: "/FlowManage/Flowinstance/Form?keyValue=" + data[0].F_Id,
});
}
else if (obj.event === 'details') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + data[0].F_Id,
width: "700px",
height: "600px",
btn: []
});
}
else if (obj.event === 'TABLE_SEARCH') {
var _that = $("#searchField");
if (_that.hasClass("layui-hide")) {
_that.removeClass('layui-hide');
} else {
_that.addClass('layui-hide');
}
table.resize();
}
return false;
});
//toolrow监听事件
table.on('tool(currentTableFilter)', function (obj) {
if (obj.event === 'delete') {
if (obj.data.F_IsFinish != 4 && obj.data.F_IsFinish != 2) {
common.modalMsg("申请已处理,无法删除", "warning");
return false;
}
common.deleteForm({
url: "/FlowManage/Flowinstance/DeleteForm",
param: { keyValue: obj.data.F_Id },
success: function () {
common.reload('data-search-btn');
entity = null;
}
});
}
if (obj.event === 'cancle') {
if (obj.data.F_IsFinish != 0) {
common.modalMsg("申请已处理,无法撤回", "warning");
return false;
}
common.submitPost({
prompt:"注:您确定要撤回选中数据吗?",
url: "/FlowManage/Flowinstance/CancleForm",
param: { keyValue: obj.data.F_Id },
success: function () {
common.reload('data-search-btn');
entity = null;
}
});
}
else if (obj.event === 'edit') {
var userId = top.currentUser.F_Id;
if ((obj.data.F_IsFinish != 4 && obj.data.F_IsFinish != 2) || obj.data.F_MakerList.indexOf(userId) < 0) {
common.modalMsg("申请已处理,无法修改", "warning");
return false;
}
common.openNewTabByIframe({
title: "修改申请",
href: "/FlowManage/Flowinstance/Form?keyValue=" + obj.data.F_Id,
});
}
else if (obj.event === 'details') {
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + obj.data.F_Id,
width: "700px",
height: "600px",
btn: []
});
}
return false;
});
});
</script>

View File

@ -0,0 +1,167 @@
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Index.cshtml";
}
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset layui-hide" id="searchField">
<div>
<form class="layui-form layui-form-pane">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">关键字:</label>
<div class="layui-input-inline">
<input type="text" id="txt_keyword" name="txt_keyword" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</div>
</form>
</div>
</fieldset>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container" id="toolbar">
<button id="NF-vft" name="NF-vft" authorize class="layui-btn layui-btn-sm data-vft-btn layui-hide" lay-event="vft"><i class="layui-icon">&#xe654;</i>处理</button>
<button id="NF-details" name="NF-details" authorize class="layui-btn layui-btn-sm layui-btn-normal layui-hide" lay-event="details"> <i class="layui-icon">&#xe60b;</i>进度</button>
</div>
</script>
<script type="text/html" id="currentTableBar">
<a id="NF-vft" authorize class="layui-btn layui-btn-xs" lay-event="vft">处理</a>
<a id="NF-details" authorize class="layui-btn layui-btn-xs layui-btn-normal" lay-event="details">进度</a>
</script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
</div>
</div>
<script>
layui.use(['form', 'table', 'common', 'commonTable', 'optimizeSelectOption'], function () {
var form = layui.form,
table = layui.table,
commonTable = layui.commonTable,
common = layui.common;
//权限控制(js是值传递)
currentTableBar.innerHTML = common.authorizeButtonNew(currentTableBar.innerHTML);
toolbarDemo.innerHTML = common.authorizeButtonNew(toolbarDemo.innerHTML);
commonTable.rendertable({
elem: '#currentTableId',
id: 'currentTableId',
url: '/FlowManage/Flowinstance/GetGridJson',
where: { type: 'todo' },
cols: [[
{ type: "radio", width: 50, fixed: 'left' },
{
field: 'F_IsFinish', title: '流程状态', width: 120, sort: true, filter: true,
templet: function (d) {
if (d.F_IsFinish == 0) {
return "<span class='layui-badge layui-bg-blue'>正在运行</span>";
}
else if (d.F_IsFinish == 2) {
return "<span class= 'layui-badge layui-bg-gray'>被撤回</span >";
}
else if (d.F_IsFinish == 3) {
return "<span class= 'layui-badge'>不同意</span >";
}
else if (d.F_IsFinish == 4) {
return "<span class= 'layui-badge layui-bg-gray'>被驳回</span >";
}
else {
return "<span class='layui-badge layui-bg-green'>审批通过</span>";
}
}
},
{ field: 'F_Code', title: '实例编号', width: 150, sort: true, filter: true },
{ field: 'F_CustomName', title: '实例名称', minWidth: 150, sort: true, filter: true },
{ field: 'F_ActivityName', title: '当前节点名称', width: 140, filter: true },
{ field: 'F_Description', title: '实例备注', minWidth: 150, filter: true },
{
field: 'F_CreatorTime', title: '创建时间', width: 160, sort: true, filter: { type: 'date[yyyy/MM/dd HH:mm:ss]' }
},
{ field: 'F_CreatorUserName', title: '创建人', width: 120, sort: true, filter: true },
{ title: '操作', width: 120, toolbar: '#currentTableBar', align: "center", fixed: 'right' }
]]
});
// 监听搜索操作
form.on('submit(data-search-btn)', function (data) {
//执行搜索重载
commonTable.reloadtable({
elem: 'currentTableId',
curr: 1,
where: { keyword: data.field.txt_keyword, type: 'todo' }
});
return false;
});
wcLoading.close();
//行点击事件监听,控制按钮显示
var oneList = ["NF-vft", "NF-details"];//选择1条显示
commonTable.tableRowClick("radio", "currentTableFilter", "currentTableId", oneList);
//toolbar监听事件
table.on('toolbar(currentTableFilter)', function (obj) {
var data = table.checkStatus('currentTableId').data;
if (obj.event === 'vft') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
if (data[0].F_IsFinish != 0 && data[0].F_IsFinish != 4) {
common.modalMsg("申请已处理,无法处理", "warning");
return false;
}
common.modalOpen({
title: "处理流程",
url: "/FlowManage/Flowinstance/Verification?keyValue=" + data[0].F_Id,
width: "800px",
height: "600px",
});
}
else if (obj.event === 'details') {
if (data.length == 0) {
common.modalMsg("未选中数据", "warning");
return false;
}
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + data[0].F_Id,
width: "700px",
height: "600px",
btn: []
});
}
else if (obj.event === 'TABLE_SEARCH') {
var _that = $("#searchField");
if (_that.hasClass("layui-hide")) {
_that.removeClass('layui-hide');
} else {
_that.addClass('layui-hide');
}
table.resize();
}
return false;
});
//toolrow监听事件
table.on('tool(currentTableFilter)', function (obj) {
if (obj.event === 'details') {
common.modalOpen({
title: "查看进度",
url: "/FlowManage/Flowinstance/Details?keyValue=" + obj.data.F_Id,
width: "700px",
height: "600px",
btn: []
});
}
else if (obj.event === 'vft') {
if (obj.data.F_IsFinish != 0 && obj.data.F_IsFinish != 4) {
common.modalMsg("申请已处理,无法处理", "warning");
return false;
}
common.modalOpen({
title: "处理流程",
url: "/FlowManage/Flowinstance/Verification?keyValue=" + obj.data.F_Id,
width: "800px",
height: "600px",
});
}
return false;
});
});
</script>

View File

@ -0,0 +1,266 @@
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Form.cshtml";
}
<link href="~/js/lay-module/flow/WaterFlow.css" rel="stylesheet" />
<link href="~/js/lay-module/formDesigner/formPreview.css" rel="stylesheet" />
<style type="text/css">
div.layui-table-cell {
color: rgb(102, 102, 102) !important;
}
</style>
<script>
//参数传递到表单页
//表单数据
var formtext;
//只读参数
var readonly = true;
//允许修改表单数据
var canWriteFormItems = [];
var NextNodeDesignateType = "";
layui.use(['form', 'table', 'layer', 'element', 'jquery', 'waterflow', 'flowlayout', 'common', 'formPreview'], function () {
var form = layui.form, element = layui.element,
table = layui.table,
layer = layui.layer,
common = layui.common,
formPreview = layui.formPreview,
$ = layui.jquery;
var keyValue = $.request("keyValue");
$("#F_FlowInstanceId").val(keyValue);
//权限字段
common.authorizeFields('adminform');
var flowDesignPanel;
table.render({
elem: '#mainList',
page: false,
url: '/FlowManage/Flowinstance/QueryHistories',
where: { time: new Date().Format("yyyy-MM-dd hh:mm:ss") },
cols: [[ //标题栏
{ field: 'F_Content', title: '流转记录', minWidth: 150 }
, { field: 'F_CreatorUserName', title: '操作人', width: 150 }
, {
field: 'F_CreatorTime', title: '创建时间', width: 180,
templet: function (d) {
if (d.F_CreatorTime) {
var time = new Date(d.F_CreatorTime);
return time.Format("yyyy-MM-dd hh:mm:ss");
}
return '';
}
},
]]
, where: {
keyValue: keyValue
}
, parseData: function (res) { //res 即为原始返回的数据
return {
"code": res.state, //解析接口状态
"msg": res.message, //解析提示文本
"count": res.count, //解析数据长度
"data": res.data //解析数据列表
};
}
});
var renderForm;
$(function () {
common.ajax({
url: '/FlowManage/Flowinstance/GetFormJson',
dataType: 'json',
data: { keyValue: keyValue },
async: false,
success: function (data) {
var schemeContent = JSON.parse(data.F_SchemeContent);
if (!!data.CurrentMakerName) {
$('#CurrentMakerName').val(data.CurrentMakerName);
}
else {
$('#CurrentMakerName').parent().parent().remove();
}
NextNodeDesignateType = data.NextNodeDesignateType;
if (!data.NextNodeDesignateType) {
$('#NextMakerName').parent().parent().remove();
}
else if (data.NextNodeDesignateType == "RUNTIME_SPECIAL_ROLE") {
$('#NextMakerName').removeAttr('disabled');
$('#NextMakerName').attr('placeholder','请点击选择角色');
}
else if (data.NextNodeDesignateType == "RUNTIME_SPECIAL_USER") {
$('#NextMakerName').removeAttr('disabled');
$('#NextMakerName').attr('placeholder','请点击选择用户');
}
else {
$('#NextMakerName').val(data.NextMakerName);
if (!data.NextMakerName) {
$('#NextMakerName').val("所有人");
}
}
canWriteFormItems = data.CanWriteFormItems;
flowDesignPanel = $('#flowPanel').flowdesign({
haveTool: false
, isprocessing: true
, activityId: data.F_ActivityId
, nodeData: schemeContent.nodes
, flowcontent: schemeContent
});
formtext = data.F_FrmData;
if (data.F_FrmType == 0) {
var dataJson = JSON.parse(data.F_FrmContent);
//表单设计器
renderForm= formPreview.render({
data: dataJson,
elem: '#frmPreview',
readonly:true,
canformitems: canWriteFormItems
});
renderForm.setFormData(JSON.parse(formtext));
}
else {
$("#frmPreview").load(document.location.origin + '/form/' + data.F_DbName + '.html');
}
$("#valueList").val(data.F_FrmContentData);
flowDesignPanel.reinitSize($(window).width() * 2 / 3 - 40, $(window).height() - 100);
}
});
form.render();
});
$(window).resize(function () {
flowDesignPanel.reinitSize($(window).width() * 2 / 3 - 40, $(window).height() - 100);
});
wcLoading.close();
form.on('select(VerificationFinally)',
function (data) {
if (data.value != "1") {
$('#NextMakerName').parent().parent().remove();
}
});
//监听提交
form.on('submit(saveBtn)', function (data) {
var postData={};
$.extend(true, postData, data.field)
if(!!renderForm)
{
var tempdata = renderForm.getFormData();
postData.F_FrmData = JSON.stringify(tempdata);
}
else{
delete data.field.CurrentMakerName;
delete data.field.NextMakerName;
delete data.field.F_FlowInstanceId;
delete data.field.F_VerificationFinally;
delete data.field.file;
delete data.field.NextNodeDesignates;
delete data.field.F_VerificationOpinion;
postData.F_FrmData = JSON.stringify(data.field);
}
postData.NodeDesignateType = NextNodeDesignateType;
postData.NodeDesignates = postData.NextNodeDesignates?postData.NextNodeDesignates.split(','):[];
common.submitForm({
url: "/FlowManage/Flowinstance/Verification?keyValue=" + keyValue,
param: postData,
success: function () {
common.parentreload("data-search-btn");
common.reloadIframe("/FlowManage/Flowinstance/Index", 'data-search-btn');
common.reloadIframe("/FlowManage/Flowinstance/DoneFlow", 'data-search-btn');
}
})
return false;
});
});
function search() {
layui.use(['jquery', 'form', 'common'], function () {
var form = layui.form,
$ = layui.$,
common = layui.common;
//不同弹窗
if (NextNodeDesignateType == 'RUNTIME_SPECIAL_ROLE') {
common.modalOpen({
title: "选择角色",
url: "/SystemOrganize/Role/AddForm?name=" + "NextMakerName" + "&value=" + "NextNodeDesignates" + "&ids=" + $('#NextNodeDesignates').val(),
width: "650px",
height: "600px",
});
}
else if (NextNodeDesignateType == 'RUNTIME_SPECIAL_USER') {
common.modalOpen({
title: "选择用户",
url: "/SystemOrganize/User/AddForm?name=" + "NextMakerName" + "&value=" + "NextNodeDesignates" + "&ids=" + $('#NextNodeDesignates').val(),
width: "650px",
height: "600px",
});
}
});
}
</script>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-form layuimini-form" lay-filter="adminform">
<div class="layui-row ">
<div class="layui-col-xs8">
<div class="layui-tab layui-tab-brief" lay-filter="tab" style="margin: 0px">
<ul class="layui-tab-title">
<li class="layui-this">表单信息</li>
<li>流程信息</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<form class="layui-form layuimini-form" lay-filter="FrmData">
<div class="layui-form-item">
<fieldset class="layui-elem-field" style="padding-top:15px;">
<div id="frmPreview"></div>
</fieldset>
</div>
</form>
</div>
<div class="layui-tab-item">
<div class="layui-form-item">
<label class="layui-form-label">当前审核人</label>
<div class="layui-input-block">
<input id="CurrentMakerName" name="CurrentMakerName" class="layui-input" disabled>
</div>
</div>
<table class="layui-table" id="mainList">
</table>
<div id="flowPanel"></div>
</div>
</div>
</div>
</div>
<div class="layui-col-xs4" style="background-color: #1e9fff7d; min-height: 500px;">
<input type="hidden" id="F_FlowInstanceId" name="F_FlowInstanceId" />
<div class="layui-form-item layui-hide">
<label class="layui-form-label">审核结果</label>
<div class="layui-input-block">
<select id="F_VerificationFinally" name="F_VerificationFinally" lay-filter='VerificationFinally' required lay-verify="required" lay-search>
<option value="1">同意</option>
<option value="2">不同意</option>
<option value="3">驳回</option>
</select>
</div>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label">审核意见</label>
<div class="layui-input-block">
<textarea name="F_VerificationOpinion" id="F_VerificationOpinion"
placeholder="" autocomplete="off" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item layui-hide">
<label class="layui-form-label">下一步审核</label>
<div class="layui-input-block">
<input type="text" name="NextMakerName" disabled="disabled" id="NextMakerName" lay-verify="required" onclick="search()" class="layui-input">
<input type="text" name="NextNodeDesignates" id="NextNodeDesignates" class="layui-input layui-hide">
</div>
</div>
<div class="layui-form-item layui-hide">
<button class="layui-btn site-demo-active" lay-submit id="submit" lay-filter="saveBtn">确认保存</button>
</div>
</div>
</div>
</div>
</div>
</div>