Compare commits
2 Commits
1e6e01eb31
...
adafbc5985
| Author | SHA1 | Date |
|---|---|---|
|
|
adafbc5985 | |
|
|
3a1aa488bb |
|
|
@ -2,7 +2,8 @@
|
||||||
import { defHttp } from '@/utils/http/axios';
|
import { defHttp } from '@/utils/http/axios';
|
||||||
import {SchemeListParams,GetSchemeModel,AddParams,
|
import {SchemeListParams,GetSchemeModel,AddParams,
|
||||||
DeleteParams,UpdateParams,StateParams,HistoryParams,GetHistoryModel,SchemeParams,DetailParams} from './model/wfSchemeInfoModel'
|
DeleteParams,UpdateParams,StateParams,HistoryParams,GetHistoryModel,SchemeParams,DetailParams} from './model/wfSchemeInfoModel'
|
||||||
enum Api {
|
|
||||||
|
enum Api {
|
||||||
// 流程模板基本信息
|
// 流程模板基本信息
|
||||||
LoadPage = '/api/WFSchemeInfo/LoadPage',
|
LoadPage = '/api/WFSchemeInfo/LoadPage',
|
||||||
Add = '/api/WFSchemeInfo/Add',
|
Add = '/api/WFSchemeInfo/Add',
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { defHttp } from '@/utils/http/axios';
|
||||||
|
import {TableListParams,TableListModel,TableFormsParams,TableFormsModel} from './model/flowPenal'
|
||||||
|
|
||||||
|
enum Api {
|
||||||
|
GetTableList = '/api/FormModule/GetTableList',
|
||||||
|
GetTableForms = '/api/CodeTable/GetForms',
|
||||||
|
Update = '/api/SysDataItemDetail/Update',
|
||||||
|
Delete = '/api/SysDataItemDetail/Delete',
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: getTableList 获取表
|
||||||
|
*/
|
||||||
|
export function getTableList(params: TableListParams) {
|
||||||
|
return defHttp.get<TableListModel>({ url: Api.GetTableList, params });
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: getTableForms 获取表的对象集合
|
||||||
|
*/
|
||||||
|
export function getTableForms(params: TableFormsParams) {
|
||||||
|
return defHttp.get<TableFormsModel>({ url: Api.GetTableForms, params });
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
/**
|
||||||
|
* @description: 表数据
|
||||||
|
*/
|
||||||
|
export interface TableListModel {
|
||||||
|
name: string;
|
||||||
|
description: number;
|
||||||
|
dbObjectType: number;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: 获取数据库表
|
||||||
|
*/
|
||||||
|
export interface TableListParams {
|
||||||
|
code: string;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: 表对象集合的参数
|
||||||
|
*/
|
||||||
|
export interface TableFormsParams {
|
||||||
|
dbCode: string;
|
||||||
|
tableNames: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 表对象集合
|
||||||
|
*/
|
||||||
|
export interface TableFormsModel {
|
||||||
|
db_codetable: object;
|
||||||
|
db_codecolumnsList:object
|
||||||
|
}
|
||||||
|
|
@ -9,7 +9,7 @@ export interface SchemeListParams {
|
||||||
ids?: string;
|
ids?: string;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* @description: 获取流程模板详情参数
|
* @description: 获取流程模板详情参数 \获取数据库表
|
||||||
*/
|
*/
|
||||||
export interface DetailParams {
|
export interface DetailParams {
|
||||||
code: string;
|
code: string;
|
||||||
|
|
|
||||||
|
|
@ -63,19 +63,21 @@
|
||||||
validateFlow
|
validateFlow
|
||||||
})
|
})
|
||||||
function connectionAdded(node) {
|
function connectionAdded(node) {
|
||||||
console.log(node)
|
data.element = node;
|
||||||
console.log('connectionAdded')
|
console.log('connectionAdded')
|
||||||
|
|
||||||
}
|
}
|
||||||
function connectionRemoved(node) {
|
function connectionRemoved(node) {
|
||||||
console.log(node)
|
|
||||||
console.log('connectionRemoved')
|
console.log('connectionRemoved')
|
||||||
}
|
}
|
||||||
function connectionChanged(node) {
|
function connectionChanged(node) {
|
||||||
console.log(node)
|
data.element = node;
|
||||||
console.log('connectionChanged')
|
console.log('connectionChanged')
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
function elementClick(element) {
|
function elementClick(element) {
|
||||||
console.log(element)
|
console.log('elementClick')
|
||||||
data.element = element;
|
data.element = element;
|
||||||
}
|
}
|
||||||
function initModeler(modeler) {
|
function initModeler(modeler) {
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ export default {
|
||||||
"Timer start event": "定时开始事件",
|
"Timer start event": "定时开始事件",
|
||||||
"Conditional start event": "条件开始事件",
|
"Conditional start event": "条件开始事件",
|
||||||
"Signal start event": "信号开始事件",
|
"Signal start event": "信号开始事件",
|
||||||
|
"Exclusive gateway":"排他网关",
|
||||||
"Parallel gateway":"并行网关",
|
"Parallel gateway":"并行网关",
|
||||||
"Inclusive gateway":"包容网关",
|
"Inclusive gateway":"包容网关",
|
||||||
"Complex gateway":"复杂网关",
|
"Complex gateway":"复杂网关",
|
||||||
|
|
|
||||||
|
|
@ -5,16 +5,26 @@
|
||||||
<start-event-option ref="startRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
<start-event-option ref="startRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
:pageView="props.pageView" :pageType="props.pageType"
|
:pageView="props.pageView" :pageType="props.pageType"
|
||||||
:class="data.currentWfNode.type=='bpmn:StartEvent' ? '' : 'hidden'"></start-event-option>
|
:class="data.currentWfNode.type=='bpmn:StartEvent' ? '' : 'hidden'"></start-event-option>
|
||||||
<user-task-option ref="taskRef" :element="data.currentWfNode" :schemeCode="props.schemeCode" :pageView="props.pageView" :pageType="props.pageType"
|
<user-task-option ref="taskRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
|
:pageView="props.pageView" :pageType="props.pageType"
|
||||||
:class="data.currentWfNode.type=='bpmn:Task' ? '' : 'hidden'">
|
:class="data.currentWfNode.type=='bpmn:Task' ? '' : 'hidden'">
|
||||||
</user-task-option>
|
</user-task-option>
|
||||||
<end-event-option ref="endRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
<end-event-option ref="endRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
:class="data.currentWfNode.type=='bpmn:EndEvent' ? '' : 'hidden'"></end-event-option>
|
:class="data.currentWfNode.type=='bpmn:EndEvent' ? '' : 'hidden'"></end-event-option>
|
||||||
<subprocess-option ref="subprocessRef" :element="data.currentWfNode" :schemeCode="props.schemeCode" :pageView="props.pageView" :pageType="props.pageType"
|
<subprocess-option ref="subprocessRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
|
:pageView="props.pageView" :pageType="props.pageType"
|
||||||
:class="data.currentWfNode.type=='bpmn:SubProcess' ? '' : 'hidden'"></subprocess-option>
|
:class="data.currentWfNode.type=='bpmn:SubProcess' ? '' : 'hidden'"></subprocess-option>
|
||||||
|
<exclusive-gateway-option ref="exclusiveGatewayRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
|
:pageView="props.pageView" :pageType="props.pageType"
|
||||||
|
:class="data.currentWfNode.type=='bpmn:ExclusiveGateway' ? '' : 'hidden'">
|
||||||
|
</exclusive-gateway-option>
|
||||||
|
<myline-option ref="mylineRef" :element="data.currentWfNode" :schemeCode="props.schemeCode"
|
||||||
|
:pageView="props.pageView" :pageType="props.pageType" :wfData="data.wfData" :flowRef="data.flowRef"
|
||||||
|
:class="data.currentWfNode.type=='bpmn:SequenceFlow' ? '' : 'hidden'">
|
||||||
|
</myline-option>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane tab="流程属性" key="2">
|
<a-tab-pane tab="流程属性" key="2">
|
||||||
<shcemeinfo-config ref="shcemeinfoRef" :disabled="true" :pageType="props.pageType"></shcemeinfo-config>
|
<shcemeinfo-config ref="shcemeinfoRef" :disabled="true" :pageType="props.pageType"></shcemeinfo-config>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="3" tab="发起权限" force-render v-if="props.pageType!='detail'">
|
<a-tab-pane key="3" tab="发起权限" force-render v-if="props.pageType!='detail'">
|
||||||
<auth-config ref="authRef"></auth-config>
|
<auth-config ref="authRef"></auth-config>
|
||||||
|
|
@ -47,8 +57,8 @@
|
||||||
import endEventOption from './endEvent/index.vue'
|
import endEventOption from './endEvent/index.vue'
|
||||||
// 网关和
|
// 网关和
|
||||||
import gatewayAndOption from './config/gatewayAnd.vue'
|
import gatewayAndOption from './config/gatewayAnd.vue'
|
||||||
// 网关包容
|
// 排他网关
|
||||||
import gatewayInclusiveOption from './config/gatewayInclusive.vue'
|
import exclusiveGatewayOption from './exclusiveGateway/index.vue'
|
||||||
// 网关Xor
|
// 网关Xor
|
||||||
import gatewayXorOption from './config/gatewayXor.vue'
|
import gatewayXorOption from './config/gatewayXor.vue'
|
||||||
// 脚本任务
|
// 脚本任务
|
||||||
|
|
@ -56,7 +66,7 @@
|
||||||
// 子流程
|
// 子流程
|
||||||
import subprocessOption from './subprocess/index.vue'
|
import subprocessOption from './subprocess/index.vue'
|
||||||
// 线
|
// 线
|
||||||
import mylineOption from './config/myline.vue'
|
import mylineOption from './myline/index.vue'
|
||||||
/**
|
/**
|
||||||
* 侧边栏
|
* 侧边栏
|
||||||
* @Author MiyueFE
|
* @Author MiyueFE
|
||||||
|
|
@ -86,14 +96,18 @@
|
||||||
const taskRef = ref < any > ()
|
const taskRef = ref < any > ()
|
||||||
const endRef = ref < any > ()
|
const endRef = ref < any > ()
|
||||||
const subprocessRef = ref < any > ()
|
const subprocessRef = ref < any > ()
|
||||||
|
const exclusiveGatewayRef = ref < any > ()
|
||||||
const configActiveName = ref('2')
|
const configActiveName = ref('2')
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
currentWfNode: undefined,
|
currentWfNode: undefined,
|
||||||
wfNodeName: "",
|
wfNodeName: "",
|
||||||
|
wfData:[],
|
||||||
|
flowRef:{}
|
||||||
})
|
})
|
||||||
watch(
|
watch(
|
||||||
() => props.element,
|
() => props.element,
|
||||||
(newVal, oldVal) => {
|
(newVal, oldVal) => {
|
||||||
|
console.log(newVal)
|
||||||
var typeName = newVal.type.replace('bpmn:', '')
|
var typeName = newVal.type.replace('bpmn:', '')
|
||||||
if (newVal.type == "bpmn:Process") {
|
if (newVal.type == "bpmn:Process") {
|
||||||
data.currentWfNode = {
|
data.currentWfNode = {
|
||||||
|
|
@ -132,6 +146,27 @@
|
||||||
type: newVal.type
|
type: newVal.type
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'ExclusiveGateway':
|
||||||
|
data.wfNodeName = "排他网关"
|
||||||
|
data.currentWfNode = {
|
||||||
|
id: newVal.id,
|
||||||
|
type: newVal.type
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'SequenceFlow':
|
||||||
|
data.wfNodeName = "线条"
|
||||||
|
data.currentWfNode = {
|
||||||
|
id: newVal.id,
|
||||||
|
type: newVal.type
|
||||||
|
}
|
||||||
|
// 获取线条两头的节点id
|
||||||
|
data.flowRef={
|
||||||
|
from:newVal.businessObject.sourceRef.id,
|
||||||
|
to:newVal.businessObject.targetRef.id,
|
||||||
|
}
|
||||||
|
// 获取排他网关和审核节点的数据,为选择流转条件使用
|
||||||
|
getWfData()
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -219,7 +254,34 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async function getWfData() {
|
||||||
|
let wfData = []
|
||||||
|
// 排他网关exclusiveGatewayRef
|
||||||
|
// 审核节点taskRef
|
||||||
|
let taskFrom = await !(taskRef.value) ? {} : taskRef.value.getForm();
|
||||||
|
let gatewayInclusiveFrom = await !(exclusiveGatewayRef.value) ? {} : exclusiveGatewayRef.value.getForm();
|
||||||
|
if (gatewayInclusiveFrom != undefined) {
|
||||||
|
wfData.push(gatewayInclusiveFrom)
|
||||||
|
}
|
||||||
|
if (taskFrom != undefined) {
|
||||||
|
wfData.push(taskFrom)
|
||||||
|
}
|
||||||
|
// 3.流程节点信息
|
||||||
|
wfData.forEach(node => {
|
||||||
|
if (node.type == 'myline' && !node.isInit) {
|
||||||
|
node.isInit = true
|
||||||
|
node.lineConditions = ''
|
||||||
|
const fromNode = this.wfData.find(t => t.id == node.from)
|
||||||
|
if (fromNode.type == 'userTask') {
|
||||||
|
if (fromNode.btnlist.findIndex(t => t.code == 'agree' && !t.hidden) != -1) {
|
||||||
|
node.lineConditions = 'agree' // 流转条件
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
data.wfData = wfData
|
||||||
|
|
||||||
|
}
|
||||||
async function validatePanel() {
|
async function validatePanel() {
|
||||||
let res = await shcemeinfoRef.value.validateForm();
|
let res = await shcemeinfoRef.value.validateForm();
|
||||||
return res
|
return res
|
||||||
|
|
@ -243,13 +305,20 @@
|
||||||
let wfData = []
|
let wfData = []
|
||||||
wfData.push(startFrom)
|
wfData.push(startFrom)
|
||||||
wfData.push(endFrom)
|
wfData.push(endFrom)
|
||||||
|
// 审核节点
|
||||||
let taskFrom = await !(taskRef.value) ? {} : taskRef.value.getForm();
|
let taskFrom = await !(taskRef.value) ? {} : taskRef.value.getForm();
|
||||||
|
if (taskFrom != undefined) {
|
||||||
|
wfData.push(taskFrom)
|
||||||
|
}
|
||||||
|
// 子流程
|
||||||
let subprocessFrom = await !(subprocessRef.value) ? {} : subprocessRef.value.getForm();
|
let subprocessFrom = await !(subprocessRef.value) ? {} : subprocessRef.value.getForm();
|
||||||
if (subprocessFrom != undefined) {
|
if (subprocessFrom != undefined) {
|
||||||
wfData.push(subprocessFrom)
|
wfData.push(subprocessFrom)
|
||||||
}
|
}
|
||||||
if (taskFrom != undefined) {
|
// 排他网关
|
||||||
wfData.push(taskFrom)
|
let gatewayInclusiveFrom = await !(exclusiveGatewayRef.value) ? {} : exclusiveGatewayRef.value.getForm();
|
||||||
|
if (gatewayInclusiveFrom != undefined) {
|
||||||
|
wfData.push(gatewayInclusiveFrom)
|
||||||
}
|
}
|
||||||
// 3.流程节点信息
|
// 3.流程节点信息
|
||||||
wfData.forEach(node => {
|
wfData.forEach(node => {
|
||||||
|
|
@ -325,7 +394,7 @@
|
||||||
if (props.schemeCode) {
|
if (props.schemeCode) {
|
||||||
getDetailInfo()
|
getDetailInfo()
|
||||||
}
|
}
|
||||||
if(props.pageType == 'detail') {
|
if (props.pageType == 'detail') {
|
||||||
var content = JSON.parse(props.pageView)
|
var content = JSON.parse(props.pageView)
|
||||||
shcemeinfoRef.value.setForm(content)
|
shcemeinfoRef.value.setForm(content)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,145 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="l-from-body" >
|
|
||||||
<el-form :model="formData" :rules="rules" size="mini" ref="form" label-width="120px" >
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="条件名称" prop="name">
|
|
||||||
<el-input v-model="formData.name" >
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="数据库" prop="dbCode">
|
|
||||||
<el-select v-model="formData.dbCode" placeholder="请选择">
|
|
||||||
<el-option-group
|
|
||||||
v-for="group in lr_dblinkTree"
|
|
||||||
:key="group.id"
|
|
||||||
:label="group.label">
|
|
||||||
<el-option
|
|
||||||
v-for="item in group.children"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.id">
|
|
||||||
</el-option>
|
|
||||||
</el-option-group>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="数据表" prop="table">
|
|
||||||
<l-codetable-select
|
|
||||||
@change="handleTableChange"
|
|
||||||
:dbCode="formData.dbCode"
|
|
||||||
v-model="formData.table"></l-codetable-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="关联流程字段" prop="rfield">
|
|
||||||
<l-select :options="formData.columns" valueKey="name" labelKey="coment" v-model="formData.rfield" >
|
|
||||||
</l-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="比较字段" prop="cfield">
|
|
||||||
<l-select :options="formData.columns" valueKey="name" labelKey="coment" v-model="formData.cfield" >
|
|
||||||
</l-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="比较类型" prop="compareType">
|
|
||||||
<l-select :options="options" v-model="formData.compareType" >
|
|
||||||
</l-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="数据值" prop="value">
|
|
||||||
<el-input v-model="formData.value" >
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name:'condition-formula',
|
|
||||||
props:{
|
|
||||||
},
|
|
||||||
data(){
|
|
||||||
return {
|
|
||||||
formData:{
|
|
||||||
dbCode:'',
|
|
||||||
table:'',
|
|
||||||
columns:[],
|
|
||||||
rfield:'',
|
|
||||||
cfield:'',
|
|
||||||
compareType:'',
|
|
||||||
value:'',
|
|
||||||
name:''
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
dbCode: [
|
|
||||||
{ required: true, message: '请选择数据库' }
|
|
||||||
],
|
|
||||||
table: [
|
|
||||||
{ required: true, message: '请选择数据表' }
|
|
||||||
],
|
|
||||||
rfield: [
|
|
||||||
{ required: true, message: '请选择关联字段' }
|
|
||||||
],
|
|
||||||
cfield: [
|
|
||||||
{ required: true, message: '请选择比较字段' }
|
|
||||||
],
|
|
||||||
compareType: [
|
|
||||||
{ required: true, message: '请选择比较类型' }
|
|
||||||
],
|
|
||||||
value: [
|
|
||||||
{ required: true, message: '请填写值' }
|
|
||||||
],
|
|
||||||
name: [
|
|
||||||
{ required: true, message: '请填写条件名称' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
options:[
|
|
||||||
{ value: '1', label: '等于' },
|
|
||||||
{ value: '2', label: '不等于' },
|
|
||||||
{ value: '3', label: '大于' },
|
|
||||||
{ value: '4', label: '大于等于' },
|
|
||||||
{ value: '5', label: '小于' },
|
|
||||||
{ value: '6', label: '小于等于' },
|
|
||||||
{ value: '7', label: '包含' },
|
|
||||||
{ value: '8', label: '不包含' },
|
|
||||||
{ value: '9', label: '包含于' },
|
|
||||||
{ value: '10', label: '不包含于' }]
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed:{
|
|
||||||
},
|
|
||||||
created () {
|
|
||||||
},
|
|
||||||
methods:{
|
|
||||||
handleTableChange(table){
|
|
||||||
this.formData.columns = table.columns;
|
|
||||||
console.log(table);
|
|
||||||
},
|
|
||||||
resetForm(){
|
|
||||||
this.formData.columns = [];
|
|
||||||
this.$refs.form && this.$refs.form.resetFields();
|
|
||||||
},
|
|
||||||
// 校验表单
|
|
||||||
validateForm(callback){
|
|
||||||
this.$refs.form.validate((valid) => {
|
|
||||||
if(valid){
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
setForm(data){
|
|
||||||
this.formData = this.$deepClone(data);
|
|
||||||
},
|
|
||||||
getForm(){
|
|
||||||
let formData = this.$deepClone(this.formData);
|
|
||||||
return formData;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="l-from-body" >
|
|
||||||
<el-form :model="formData" :rules="rules" size="mini" ref="form" label-width="120px" >
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="条件名称" prop="name">
|
|
||||||
<el-input v-model="formData.name" >
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="数据库" prop="dbCode">
|
|
||||||
<el-select v-model="formData.dbCode" placeholder="请选择">
|
|
||||||
<el-option-group
|
|
||||||
v-for="group in lr_dblinkTree"
|
|
||||||
:key="group.id"
|
|
||||||
:label="group.label">
|
|
||||||
<el-option
|
|
||||||
v-for="item in group.children"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.id">
|
|
||||||
</el-option>
|
|
||||||
</el-option-group>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<div style="padding:0 0 16px 120px;">
|
|
||||||
<el-alert
|
|
||||||
title="sql语句说明"
|
|
||||||
type="warning"
|
|
||||||
description="请在开发人员指导下进行配置SQL语句({processId}流程发起实例主键{userId}流程发起用户Id{userAccount}流程发起用户账号{companyId}流程发起用户公司{departmentId}流程发起用户部门)!"
|
|
||||||
show-icon
|
|
||||||
:closable="false"
|
|
||||||
>
|
|
||||||
</el-alert>
|
|
||||||
</div>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="SQL语句" prop="sql">
|
|
||||||
<el-input v-model="formData.sql" type="textarea"
|
|
||||||
:autosize="{ minRows: 8}" >
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name:'condition-sql',
|
|
||||||
props:{
|
|
||||||
},
|
|
||||||
data(){
|
|
||||||
return {
|
|
||||||
formData:{
|
|
||||||
dbCode:'',
|
|
||||||
sql:'',
|
|
||||||
name:''
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
dbCode: [
|
|
||||||
{ required: true, message: '请选择数据库' }
|
|
||||||
],
|
|
||||||
sql: [
|
|
||||||
{ required: true, message: '请填写sql语句' }
|
|
||||||
],
|
|
||||||
name: [
|
|
||||||
{ required: true, message: '请填写条件名称' }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed:{
|
|
||||||
},
|
|
||||||
created () {
|
|
||||||
},
|
|
||||||
methods:{
|
|
||||||
resetForm(){
|
|
||||||
this.$refs.form && this.$refs.form.resetFields();
|
|
||||||
},
|
|
||||||
// 校验表单
|
|
||||||
validateForm(callback){
|
|
||||||
this.$refs.form.validate((valid) => {
|
|
||||||
if(valid){
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
setForm(data){
|
|
||||||
this.formData = this.$deepClone(data);
|
|
||||||
},
|
|
||||||
getForm(){
|
|
||||||
let formData = this.$deepClone(this.formData);
|
|
||||||
return formData;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,211 +0,0 @@
|
||||||
<template>
|
|
||||||
<l-layout :top="180" >
|
|
||||||
<template #top>
|
|
||||||
<el-form
|
|
||||||
class="l-form-config"
|
|
||||||
label-width="88px"
|
|
||||||
label-position="left"
|
|
||||||
size="mini"
|
|
||||||
>
|
|
||||||
<el-form-item label="节点标识">
|
|
||||||
<el-input v-model="node.id" readonly ></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<div style="padding:0 16px;">
|
|
||||||
<el-alert
|
|
||||||
title="包容网关说明"
|
|
||||||
type="info"
|
|
||||||
description="包容网关会等待所有分支汇入才往下执行,出口分支能执行多条(条件为true)"
|
|
||||||
show-icon
|
|
||||||
:closable="false"
|
|
||||||
>
|
|
||||||
</el-alert>
|
|
||||||
</div>
|
|
||||||
</el-form>
|
|
||||||
</template>
|
|
||||||
<l-layout :top="40">
|
|
||||||
<template #top v-if="!disabled">
|
|
||||||
<div style="padding-left:8px;float:left;" >
|
|
||||||
<el-button-group>
|
|
||||||
<el-button size="mini" icon="el-icon-plus" @click="handleFormulaClick">{{$t('公式')}}</el-button>
|
|
||||||
<el-button size="mini" icon="el-icon-plus" @click="handleSQlClick">{{$t('sql语句')}}</el-button>
|
|
||||||
</el-button-group>
|
|
||||||
</div>
|
|
||||||
<div style="padding-right:8px;float:right;">
|
|
||||||
<el-button size="mini" type="danger" icon="el-icon-delete" @click="handleClearClick">{{$t('清空')}}</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<l-table :columns="columns" :dataSource="node.conditions" >
|
|
||||||
<template v-slot:type="scope" >
|
|
||||||
{{typeFormat(scope.row.type)}}
|
|
||||||
</template>
|
|
||||||
<l-table-btns v-if="!disabled" :btns="tableBtns" @click="handleTableBtnClick" ></l-table-btns>
|
|
||||||
</l-table>
|
|
||||||
</l-layout>
|
|
||||||
|
|
||||||
|
|
||||||
<l-dialog
|
|
||||||
:title="$t('添加公式条件')"
|
|
||||||
:visible.sync="formulaVisible"
|
|
||||||
:height="480"
|
|
||||||
|
|
||||||
@ok="handleFormulaOk"
|
|
||||||
@closed="handleFormulaClosed"
|
|
||||||
@opened="handleFormulaOpened"
|
|
||||||
>
|
|
||||||
<condition-formula ref="conditionFormula" ></condition-formula>
|
|
||||||
</l-dialog>
|
|
||||||
|
|
||||||
<l-dialog
|
|
||||||
:title="$t('添加sql条件')"
|
|
||||||
:visible.sync="sqlVisible"
|
|
||||||
:height="480"
|
|
||||||
|
|
||||||
@ok="handleSqlOk"
|
|
||||||
@closed="handleSqlClosed"
|
|
||||||
@opened="handleSqlOpened"
|
|
||||||
>
|
|
||||||
<condition-sql ref="conditionSql" ></condition-sql>
|
|
||||||
</l-dialog>
|
|
||||||
|
|
||||||
|
|
||||||
</l-layout>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import conditionFormula from './conditionFormula.vue'
|
|
||||||
import conditionSql from './conditionSql.vue'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name:'gateway-inclusive-option',
|
|
||||||
props:{
|
|
||||||
disabled:{
|
|
||||||
type:Boolean,
|
|
||||||
default:false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
components: {
|
|
||||||
conditionFormula,
|
|
||||||
conditionSql
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
tableBtns:[
|
|
||||||
{prop:'Edit',label:'编辑'},
|
|
||||||
{prop:'Delete',label:'删除'}
|
|
||||||
],
|
|
||||||
columns:[
|
|
||||||
{label:'类型',prop:'type',width:'80', align: 'center'},
|
|
||||||
{label:'名称',prop:'name',minWidth:'100'},
|
|
||||||
],
|
|
||||||
tableData:[],
|
|
||||||
|
|
||||||
formulaVisible:false,
|
|
||||||
sqlVisible:false,
|
|
||||||
|
|
||||||
editRow:null,
|
|
||||||
isEdit:false,
|
|
||||||
rowIndex:0,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
node(){
|
|
||||||
return this.wfdesign.currentWfNode;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
inject: ["wfdesign"],
|
|
||||||
methods:{
|
|
||||||
typeFormat(type){
|
|
||||||
switch(type){
|
|
||||||
case '1':
|
|
||||||
return '表达式'
|
|
||||||
case '2':
|
|
||||||
return 'sql语句'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleTableBtnClick(btn){
|
|
||||||
switch(btn.type){
|
|
||||||
case 'Edit':
|
|
||||||
this.isEdit = true;
|
|
||||||
this.editRow = btn.row;
|
|
||||||
this.rowIndex = btn.rowIndex;
|
|
||||||
if(this.editRow.type == '1'){
|
|
||||||
this.formulaVisible = true;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
this.sqlVisible = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'Delete':
|
|
||||||
this.node.conditions.splice(btn.rowIndex,1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
console.log(btn);
|
|
||||||
//this.tableData.splice(btn.rowIndex,1);
|
|
||||||
},
|
|
||||||
handleFormulaClick(){
|
|
||||||
this.isEdit = false;
|
|
||||||
this.formulaVisible = true;
|
|
||||||
},
|
|
||||||
handleSQlClick(){
|
|
||||||
this.isEdit = false;
|
|
||||||
this.sqlVisible = true;
|
|
||||||
},
|
|
||||||
handleClearClick(){
|
|
||||||
this.node.conditions = [];
|
|
||||||
},
|
|
||||||
handleFormulaOk(){
|
|
||||||
this.$refs.conditionFormula.validateForm(()=>{
|
|
||||||
let formData = this.$refs.conditionFormula.getForm();
|
|
||||||
formData.type = '1';
|
|
||||||
|
|
||||||
if(this.isEdit){
|
|
||||||
this.node.conditions[this.rowIndex] = formData;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
formData.code = this.$uuid();
|
|
||||||
this.node.conditions.push(formData);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
this.formulaVisible = false;
|
|
||||||
})
|
|
||||||
},
|
|
||||||
handleFormulaOpened(){
|
|
||||||
if(this.isEdit){
|
|
||||||
this.$refs.conditionFormula.setForm(this.editRow);
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
handleFormulaClosed(){
|
|
||||||
this.$refs.conditionFormula.resetForm();
|
|
||||||
},
|
|
||||||
handleSqlOk(){
|
|
||||||
this.$refs.conditionSql.validateForm(()=>{
|
|
||||||
let formData = this.$refs.conditionSql.getForm();
|
|
||||||
formData.type = '2';
|
|
||||||
|
|
||||||
if(this.isEdit){
|
|
||||||
this.node.conditions[this.rowIndex] = formData;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
formData.code = this.$uuid();
|
|
||||||
this.node.conditions.push(formData);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.sqlVisible = false;
|
|
||||||
})
|
|
||||||
},
|
|
||||||
handleSqlOpened(){
|
|
||||||
if(this.isEdit){
|
|
||||||
this.$refs.conditionSql.setForm(this.editRow);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleSqlClosed(){
|
|
||||||
this.$refs.conditionSql.resetForm();
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
<!-- 开始节点配置 -->
|
|
||||||
<template>
|
|
||||||
<el-form
|
|
||||||
class="l-form-config"
|
|
||||||
label-width="88px"
|
|
||||||
label-position="left"
|
|
||||||
size="mini">
|
|
||||||
<el-form-item label="节点标识">
|
|
||||||
<el-input v-model="node.id" readonly ></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item v-if="conditionsOptions && conditionsOptions.length >0" label="流转条件">
|
|
||||||
<l-select
|
|
||||||
:disabled="disabled"
|
|
||||||
|
|
||||||
v-model="value"
|
|
||||||
:options="conditionsOptions"
|
|
||||||
|
|
||||||
labelKey="name"
|
|
||||||
valueKey="code"
|
|
||||||
:multiple="true"
|
|
||||||
placeholder="不选择,默认流转条件为true"
|
|
||||||
></l-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
|
|
||||||
</el-form>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name:'line-option',
|
|
||||||
props:{
|
|
||||||
disabled:{
|
|
||||||
type:Boolean,
|
|
||||||
default:false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
conditionsOptions:[],
|
|
||||||
value2:''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
node(){
|
|
||||||
return this.wfdesign.currentWfNode;
|
|
||||||
},
|
|
||||||
value:{
|
|
||||||
get(){
|
|
||||||
return this.value2;
|
|
||||||
},
|
|
||||||
set(val){
|
|
||||||
this.value2 = val;
|
|
||||||
this.node.lineConditions = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
inject: ["wfdesign"],
|
|
||||||
created(){
|
|
||||||
this.getConditions()
|
|
||||||
},
|
|
||||||
methods:{
|
|
||||||
getConditions(){
|
|
||||||
let wfdata = this.wfdesign.handleGetWFData();
|
|
||||||
let fromNode = wfdata.find(t=>t.id == this.node.from);
|
|
||||||
/**
|
|
||||||
* startEvent:'开始节点',
|
|
||||||
endEvent:'结束节点',
|
|
||||||
gatewayAnd:'并行网关',
|
|
||||||
gatewayInclusive:'包含网关',
|
|
||||||
gatewayXor:'排他网关',
|
|
||||||
scriptTask:'脚本节点',
|
|
||||||
userTask:'审核节点',
|
|
||||||
subprocess:'子流程',
|
|
||||||
*/
|
|
||||||
switch(fromNode.type){
|
|
||||||
case 'startEvent':
|
|
||||||
case 'endEvent':
|
|
||||||
case 'gatewayAnd':
|
|
||||||
case 'scriptTask':
|
|
||||||
case 'subprocess':
|
|
||||||
this.node.lineConditions = ''
|
|
||||||
this.conditionsOptions = []
|
|
||||||
break
|
|
||||||
case 'gatewayInclusive':
|
|
||||||
case 'gatewayXor':
|
|
||||||
this.conditionsOptions = fromNode.conditions
|
|
||||||
// 过滤掉没有的值
|
|
||||||
this.filterValue()
|
|
||||||
break
|
|
||||||
case 'userTask':
|
|
||||||
this.conditionsOptions = fromNode.btnlist.filter(t=>!t.hidden)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 过滤掉没有的值
|
|
||||||
this.filterValue()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.value2 = this.node.lineConditions
|
|
||||||
},
|
|
||||||
filterValue(){
|
|
||||||
const vlist = this.node.lineConditions.split(',')
|
|
||||||
const res = []
|
|
||||||
vlist.forEach(item => {
|
|
||||||
if(this.conditionsOptions.findIndex(t=>t.code == item) != -1){
|
|
||||||
res.push(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
this.node.lineConditions = String(res)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
|
|
@ -0,0 +1,168 @@
|
||||||
|
<template>
|
||||||
|
<div class="user-task">
|
||||||
|
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol"
|
||||||
|
:wrapper-col="wrapperCol" :disabled="data.componentDisabled">
|
||||||
|
<a-form-item label="节点标识">
|
||||||
|
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
||||||
|
</a-form-item>
|
||||||
|
<a-alert message="排他网关说明"
|
||||||
|
description="排他网关不会等待所有分支汇入才往下执行,只要有分支汇入就会往下执行,出口分支只会执行一条(条件为true,如果多条出口分支条件为true也执行一条)" type="info"
|
||||||
|
show-icon />
|
||||||
|
<a-space>
|
||||||
|
<a-radio-group>
|
||||||
|
<a-radio-button value="1" @click="handleFormulaClick">公式</a-radio-button>
|
||||||
|
<a-radio-button value="2" @click="handleSQlClick">sql语句</a-radio-button>
|
||||||
|
</a-radio-group>
|
||||||
|
<a-button danger :size="size" @click="handleClearClick">清空</a-button>
|
||||||
|
</a-space>
|
||||||
|
<a-table :columns="data.columns" :data-source="node.conditions" bordered :pagination="false">
|
||||||
|
<template #bodyCell="{ column, text, record }">
|
||||||
|
<template v-if="['name', 'type'].includes(column.dataIndex)">
|
||||||
|
<div>
|
||||||
|
{{ text }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="column.dataIndex === 'operation'">
|
||||||
|
<a-button>编辑</a-button>
|
||||||
|
<a-button danger @click='onDelete(record.name,false)'>删除</a-button>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</a-form>
|
||||||
|
<a-modal width="40%" v-model:open="data.formulaVisible" title="添加公式条件" @ok="handleFormulaOk">
|
||||||
|
<conditionFormula ref="conditionFormulaRef"></conditionFormula>
|
||||||
|
</a-modal>
|
||||||
|
<a-modal width="40%" v-model:open="data.sqlVisible" title="添加sql条件" @ok="handleSqlOk">
|
||||||
|
<conditionSql ref="conditionSqlRef"></conditionSql>
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import conditionFormula from './src/conditionFormula.vue'
|
||||||
|
import conditionSql from './src/conditionSql.vue'
|
||||||
|
import { reactive, ref, onMounted, nextTick, unref, h, watch, defineProps } from 'vue';
|
||||||
|
const labelCol = { span: 7 };
|
||||||
|
const wrapperCol = { span: 17 };
|
||||||
|
const conditionFormulaRef = ref < any > ()
|
||||||
|
const conditionSqlRef = ref < any > ()
|
||||||
|
const props = defineProps({
|
||||||
|
element: Object,
|
||||||
|
schemeCode: String,
|
||||||
|
pageType: String,
|
||||||
|
pageView: String,
|
||||||
|
})
|
||||||
|
const node = ref({
|
||||||
|
conditions: [],
|
||||||
|
id: ''
|
||||||
|
})
|
||||||
|
watch(
|
||||||
|
() => props.element,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
console.log(newVal)
|
||||||
|
if (newVal.type == "bpmn:ExclusiveGateway") {
|
||||||
|
node.value.id = newVal.id
|
||||||
|
node.value.type = newVal.type
|
||||||
|
if (props.pageType == 'detail') {
|
||||||
|
getNode()
|
||||||
|
}
|
||||||
|
if (props.schemeCode) {
|
||||||
|
getDetailInfo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
tableBtns: [
|
||||||
|
{ prop: 'Edit', label: '编辑' },
|
||||||
|
{ prop: 'Delete', label: '删除' }
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
{ title: '类型', dataIndex: 'type' },
|
||||||
|
{ title: '名称', dataIndex: 'name' },
|
||||||
|
],
|
||||||
|
tableData: [],
|
||||||
|
|
||||||
|
formulaVisible: false,
|
||||||
|
sqlVisible: false,
|
||||||
|
|
||||||
|
editRow: null,
|
||||||
|
rowIndex: 0,
|
||||||
|
})
|
||||||
|
function getNode() {
|
||||||
|
var content = JSON.parse(props.pageView)
|
||||||
|
content.wfData.forEach(element => {
|
||||||
|
if (element.id == node.value.id) {
|
||||||
|
node.value = element
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function getDetailInfo() {
|
||||||
|
let data = await getDetail({ code: props.schemeCode })
|
||||||
|
let scheme = JSON.parse(data.scheme.content);
|
||||||
|
let wfData = scheme.wfData
|
||||||
|
wfData.forEach(element => {
|
||||||
|
if (element.id == node.value.id) {
|
||||||
|
console.log(node)
|
||||||
|
node.value = element
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
if (props.schemeCode) {
|
||||||
|
getDetailInfo()
|
||||||
|
}
|
||||||
|
if (props.pageType == 'detail') {
|
||||||
|
getNode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
function typeFormat(type) {
|
||||||
|
switch (type) {
|
||||||
|
case '1':
|
||||||
|
return '表达式'
|
||||||
|
case '2':
|
||||||
|
return 'sql语句'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleFormulaClick() {
|
||||||
|
data.formulaVisible = true;
|
||||||
|
}
|
||||||
|
function handleSQlClick() {
|
||||||
|
data.sqlVisible = true;
|
||||||
|
}
|
||||||
|
function handleClearClick() {
|
||||||
|
node.conditions = [];
|
||||||
|
}
|
||||||
|
async function handleFormulaOk() {
|
||||||
|
conditionFormulaRef.value.validateForm()
|
||||||
|
let obj = conditionFormulaRef.value.getForm()
|
||||||
|
console.log(obj.name)
|
||||||
|
if (obj.name != '') {
|
||||||
|
data.formulaVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
function handleSqlOk() {
|
||||||
|
console.log(conditionSqlRef.value.getForm())
|
||||||
|
// this.sqlVisible = false;
|
||||||
|
}
|
||||||
|
function getForm() {
|
||||||
|
return node.value
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
getForm
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
::v-deep .ant-alert-info {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .ant-table-wrapper {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
<template>
|
||||||
|
<div class="l-from-body">
|
||||||
|
<a-form ref="formRef" :rules="data.rules" :model="formData" labelAlign="left" :label-col="labelCol"
|
||||||
|
:wrapper-col="wrapperCol">
|
||||||
|
<a-form-item label="条件名称" name="name">
|
||||||
|
<a-input v-model:value="formData.name" placeholder="请输入" />
|
||||||
|
</a-form-item>
|
||||||
|
<!-- <a-form-item label="数据库" name="dbCode">
|
||||||
|
<a-select v-model:value="formData.dbCode" placeholder="请选择" :options="data.options">
|
||||||
|
<el-option-group v-for="group in lr_dblinkTree" :key="group.id" :label="group.label">
|
||||||
|
<el-option v-for="item in group.children" :key="item.id" :label="item.label" :value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-option-group>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item> -->
|
||||||
|
<a-form-item label="数据表" name="table">
|
||||||
|
<!-- <a-select v-model:value="formData.table" placeholder="请选择" :options="formData.columns">
|
||||||
|
</a-select> -->
|
||||||
|
<a-space>
|
||||||
|
<a-input v-model:value="formData.table" placeholder="请输入" readonly />
|
||||||
|
<a-button @click="handleTableClick">选择</a-button>
|
||||||
|
</a-space>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="关联流程字段" name="rfield">
|
||||||
|
<a-select v-model:value="formData.rfield" placeholder="请选择" :options="formData.columns">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="比较字段" name="cfield">
|
||||||
|
<a-select v-model:value="formData.cfield" placeholder="请选择" :options="formData.columns">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="比较类型" name="compareType">
|
||||||
|
<a-select v-model:value="formData.compareType" placeholder="请选择" :options="data.options">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="数据值" name="value">
|
||||||
|
<a-input v-model:value="formData.value" placeholder="请输入" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
<a-modal width="60%" height="80%" v-model:open="data.tableOpen" title="选择数据表" @ok="tableHandleOk">
|
||||||
|
<SelectTable ref="tableRef"></SelectTable>
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, ref, onMounted } from 'vue'
|
||||||
|
import SelectTable from '@/components/SelectTable/index.vue'
|
||||||
|
import { getTableForms } from '@/api/sys/flowPenal'
|
||||||
|
|
||||||
|
const labelCol = { span: 5 };
|
||||||
|
const wrapperCol = { span: 17 };
|
||||||
|
const formRef = ref < any > ()
|
||||||
|
const tableRef = ref < any > ()
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
rules: {
|
||||||
|
dbCode: [
|
||||||
|
{ required: true, message: '请选择数据库' }
|
||||||
|
],
|
||||||
|
table: [
|
||||||
|
{ required: true, message: '请选择数据表' }
|
||||||
|
],
|
||||||
|
rfield: [
|
||||||
|
{ required: true, message: '请选择关联字段' }
|
||||||
|
],
|
||||||
|
cfield: [
|
||||||
|
{ required: true, message: '请选择比较字段' }
|
||||||
|
],
|
||||||
|
compareType: [
|
||||||
|
{ required: true, message: '请选择比较类型' }
|
||||||
|
],
|
||||||
|
value: [
|
||||||
|
{ required: true, message: '请填写值' }
|
||||||
|
],
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请填写条件名称' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{ value: '1', label: '等于' },
|
||||||
|
{ value: '2', label: '不等于' },
|
||||||
|
{ value: '3', label: '大于' },
|
||||||
|
{ value: '4', label: '大于等于' },
|
||||||
|
{ value: '5', label: '小于' },
|
||||||
|
{ value: '6', label: '小于等于' },
|
||||||
|
{ value: '7', label: '包含' },
|
||||||
|
{ value: '8', label: '不包含' },
|
||||||
|
{ value: '9', label: '包含于' },
|
||||||
|
{ value: '10', label: '不包含于' }
|
||||||
|
],
|
||||||
|
tableOpen: false
|
||||||
|
})
|
||||||
|
let formData = ref({
|
||||||
|
dbCode: '',
|
||||||
|
table: '',
|
||||||
|
columns: [],
|
||||||
|
rfield: '',
|
||||||
|
cfield: '',
|
||||||
|
compareType: '',
|
||||||
|
value: '',
|
||||||
|
name: ''
|
||||||
|
})
|
||||||
|
function handleTableClick() {
|
||||||
|
data.tableOpen = true
|
||||||
|
}
|
||||||
|
function tableHandleOk() {
|
||||||
|
console.log(tableRef.value.getRow())
|
||||||
|
const obj = tableRef.value.getRow()
|
||||||
|
formData.value.table = obj[0].name
|
||||||
|
handleTableChange(obj[0].name)
|
||||||
|
data.tableOpen=false
|
||||||
|
}
|
||||||
|
// 选择数据表,把获取表头
|
||||||
|
async function handleTableChange(table) {
|
||||||
|
var querys = {
|
||||||
|
dbCode: 'lrsystemdb',
|
||||||
|
tableNames: table
|
||||||
|
}
|
||||||
|
console.log(querys)
|
||||||
|
const data = await getTableForms(querys)
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
// 校验表单
|
||||||
|
function validateForm() {
|
||||||
|
formRef.value
|
||||||
|
.validate()
|
||||||
|
.then((values) => {
|
||||||
|
return formData.value
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.log(error)
|
||||||
|
return {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function setForm(data) {
|
||||||
|
this.formData = this.$deepClone(data);
|
||||||
|
}
|
||||||
|
function getForm() {
|
||||||
|
return formData.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
validateForm,
|
||||||
|
getForm
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.l-from-body {
|
||||||
|
padding: 10px 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
<template>
|
||||||
|
<div class="l-from-body">
|
||||||
|
<a-form ref="formRef" :rules="data.rules" :model="formData" labelAlign="left" :label-col="labelCol"
|
||||||
|
:wrapper-col="wrapperCol">
|
||||||
|
<a-form-item label="条件名称" name="name">
|
||||||
|
<a-input v-model:value="formData.name" placeholder="请输入" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="数据库" name="dbCode">
|
||||||
|
<a-select v-model:value="formData.dbCode" placeholder="请选择" :options="data.options">
|
||||||
|
<el-option-group v-for="group in lr_dblinkTree" :key="group.id" :label="group.label">
|
||||||
|
<el-option v-for="item in group.children" :key="item.id" :label="item.label" :value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-option-group>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="SQL语句" name="sql">
|
||||||
|
<a-textarea v-model:value="formData.sql" placeholder="请输入" :rows="4"></a-textarea>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, ref } from 'vue'
|
||||||
|
const labelCol = { span: 5 };
|
||||||
|
const wrapperCol = { span: 17 };
|
||||||
|
const formRef = ref < any > ()
|
||||||
|
const formData = reactive({
|
||||||
|
name: '',
|
||||||
|
dbCode: '',
|
||||||
|
sql: '',
|
||||||
|
|
||||||
|
})
|
||||||
|
const data = reactive({
|
||||||
|
rules: {
|
||||||
|
dbCode: [
|
||||||
|
{ required: true, message: '请选择数据库' }
|
||||||
|
],
|
||||||
|
sql: [
|
||||||
|
{ required: true, message: '请填写sql语句' }
|
||||||
|
],
|
||||||
|
name: [
|
||||||
|
{ required: true, message: '请填写条件名称' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
})
|
||||||
|
async function getForm() {
|
||||||
|
let res = await formRef.value
|
||||||
|
.validate()
|
||||||
|
.then((values) => {
|
||||||
|
return formData.value
|
||||||
|
})
|
||||||
|
.catch((error: ValidateErrorEntity<FormState>) => {
|
||||||
|
return {}
|
||||||
|
});
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
getForm
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.l-from-body{
|
||||||
|
padding: 10px 30px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
<!-- 开始节点配置 -->
|
||||||
|
<template>
|
||||||
|
<div class="start-event">
|
||||||
|
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol" :wrapper-col="wrapperCol"
|
||||||
|
:disabled="data.componentDisabled">
|
||||||
|
<a-form-item label="节点标识">
|
||||||
|
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item v-if="data.conditionsOptions && data.conditionsOptions.length >0" label="流转条件">
|
||||||
|
<a-select v-model:value="node.lineConditions" placeholder="请选择" :options="data.conditionsOptions"
|
||||||
|
:field-names="{ label: 'name', value: 'code' }">
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { getDetail } from '@/api/sys/WFSchemeInfo'
|
||||||
|
import { ref, reactive, defineProps, onMounted, watch } from 'vue'
|
||||||
|
const props = defineProps({
|
||||||
|
disabled: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
element: Object,
|
||||||
|
schemeCode: String,
|
||||||
|
pageType: String,
|
||||||
|
pageView: String,
|
||||||
|
wfData: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
flowRef: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({
|
||||||
|
from: '',
|
||||||
|
to: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(props)
|
||||||
|
let node = ref({
|
||||||
|
id: "",
|
||||||
|
lineConditions: ''
|
||||||
|
})
|
||||||
|
const data = reactive({
|
||||||
|
conditionsOptions: [],
|
||||||
|
|
||||||
|
})
|
||||||
|
watch(
|
||||||
|
() => props.element,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
if (newVal.type == "bpmn:SequenceFlow") {
|
||||||
|
node.value.id = newVal.id
|
||||||
|
node.value.type = newVal.type
|
||||||
|
getConditions()
|
||||||
|
if (props.pageType == 'detail') {
|
||||||
|
getNode()
|
||||||
|
}
|
||||||
|
if (props.schemeCode) {
|
||||||
|
getDetailInfo()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (props.schemeCode) {
|
||||||
|
getDetailInfo()
|
||||||
|
}
|
||||||
|
if (props.pageType == 'detail') {
|
||||||
|
getNode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
function getNode() {
|
||||||
|
var content = JSON.parse(props.pageView)
|
||||||
|
content.wfData.forEach(element => {
|
||||||
|
if (element.id == node.value.id) {
|
||||||
|
node.value = element
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
async function getDetailInfo() {
|
||||||
|
let data = await getDetail({ code: props.schemeCode })
|
||||||
|
let scheme = JSON.parse(data.scheme.content);
|
||||||
|
let wfData = scheme.wfData
|
||||||
|
wfData.forEach(element => {
|
||||||
|
if (element.id == node.value.id) {
|
||||||
|
node.value = element
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
function getConditions() {
|
||||||
|
/**
|
||||||
|
ExclusiveGateway:'排他网关',
|
||||||
|
Task:'审核节点',
|
||||||
|
*/
|
||||||
|
if (props.wfData.length == 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let wfdata = JSON.parse(JSON.stringify(props.wfData))
|
||||||
|
wfdata.forEach(element => {
|
||||||
|
if (element.id == props.flowRef.from) {
|
||||||
|
if (element.type == 'bpmn:ExclusiveGateway') {
|
||||||
|
data.conditionsOptions = element.conditions
|
||||||
|
} else if (element.type == 'bpmn:Task') {
|
||||||
|
data.conditionsOptions = element.btnlist.filter(t => !t.hidden)
|
||||||
|
} else {
|
||||||
|
data.conditionsOptions = []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log(data.conditionsOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function filterValue() {
|
||||||
|
const vlist = this.node.lineConditions.split(',')
|
||||||
|
const res = []
|
||||||
|
vlist.forEach(item => {
|
||||||
|
if (this.conditionsOptions.findIndex(t => t.code == item) != -1) {
|
||||||
|
res.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.node.lineConditions = String(res)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="start-event">
|
<div class="start-event">
|
||||||
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol"
|
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol"
|
||||||
:wrapper-col="wrapperCol">
|
:wrapper-col="wrapperCol" :disabled="data.componentDisabled">
|
||||||
<a-form-item label="节点标识">
|
<a-form-item label="节点标识">
|
||||||
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
@ -131,7 +131,8 @@
|
||||||
|
|
||||||
],
|
],
|
||||||
formRelations: [],
|
formRelations: [],
|
||||||
elementData: props.element
|
elementData: props.element,
|
||||||
|
componentDisabled: props.pageType == 'detail' ? true : false
|
||||||
})
|
})
|
||||||
let node = ref({
|
let node = ref({
|
||||||
id: data.elementData.id,
|
id: data.elementData.id,
|
||||||
|
|
@ -165,7 +166,8 @@
|
||||||
node.value.type = newVal.type
|
node.value.type = newVal.type
|
||||||
if(props.pageType == 'detail'){
|
if(props.pageType == 'detail'){
|
||||||
getNode()
|
getNode()
|
||||||
}else{
|
}
|
||||||
|
if(props.schemeCode) {
|
||||||
getDetailInfo()
|
getDetailInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!-- 开始节点配置 -->
|
<!-- 开始节点配置 -->
|
||||||
<template>
|
<template>
|
||||||
<div class="subprocess">
|
<div class="subprocess">
|
||||||
<a-form ref="formRef" :model="node" labelAlign="left" :label-col="labelCol" :wrapper-col="wrapperCol">
|
<a-form ref="formRef" :model="node" labelAlign="left" :label-col="labelCol" :wrapper-col="wrapperCol" :disabled="data.componentDisabled">
|
||||||
<a-form-item label="节点标识">
|
<a-form-item label="节点标识">
|
||||||
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
<a-input v-model:value="node.id" placeholder="请输入" readonly />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
@ -45,7 +45,8 @@
|
||||||
node.value.type = newVal.type
|
node.value.type = newVal.type
|
||||||
if(props.pageType == 'detail'){
|
if(props.pageType == 'detail'){
|
||||||
getNode()
|
getNode()
|
||||||
}else{
|
}
|
||||||
|
if(props.schemeCode) {
|
||||||
getDetailInfo()
|
getDetailInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -72,7 +73,9 @@
|
||||||
}
|
}
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
list: [],
|
list: [],
|
||||||
verisons: []
|
verisons: [],
|
||||||
|
componentDisabled: props.pageType == 'detail' ? true : false
|
||||||
|
|
||||||
})
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (props.schemeCode) {
|
if (props.schemeCode) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="user-task">
|
<div class="user-task">
|
||||||
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol"
|
<a-form ref="formRef" :rules="rules" :model="node" labelAlign="left" :label-col="labelCol"
|
||||||
:wrapper-col="wrapperCol">
|
:wrapper-col="wrapperCol" :disabled="data.componentDisabled">
|
||||||
<a-collapse v-model:activeKey="activeKey" accordion ghost>
|
<a-collapse v-model:activeKey="activeKey" accordion ghost>
|
||||||
<a-collapse-panel key="1" header="基础配置">
|
<a-collapse-panel key="1" header="基础配置">
|
||||||
<a-form-item label="节点标识">
|
<a-form-item label="节点标识">
|
||||||
|
|
@ -243,6 +243,8 @@
|
||||||
],
|
],
|
||||||
isLooker: false,
|
isLooker: false,
|
||||||
conditionOptions: [{ value: '1', label: '同一个部门' }, { value: '2', label: '同一个公司' }, { value: '3', label: '发起人上级' }, { value: '4', label: '发起人下级' }],
|
conditionOptions: [{ value: '1', label: '同一个部门' }, { value: '2', label: '同一个公司' }, { value: '3', label: '发起人上级' }, { value: '4', label: '发起人下级' }],
|
||||||
|
componentDisabled: props.pageType == 'detail' ? true : false
|
||||||
|
|
||||||
})
|
})
|
||||||
let node = ref({
|
let node = ref({
|
||||||
id: "",
|
id: "",
|
||||||
|
|
@ -311,7 +313,8 @@
|
||||||
node.value.type = newVal.type
|
node.value.type = newVal.type
|
||||||
if (props.pageType == 'detail') {
|
if (props.pageType == 'detail') {
|
||||||
getNode()
|
getNode()
|
||||||
} else {
|
}
|
||||||
|
if (props.schemeCode) {
|
||||||
getDetailInfo()
|
getDetailInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -416,7 +419,6 @@
|
||||||
node.value.btnlist = node.value.btnlist.filter(item => item.code !== key);
|
node.value.btnlist = node.value.btnlist.filter(item => item.code !== key);
|
||||||
}
|
}
|
||||||
function getForm() {
|
function getForm() {
|
||||||
console.log(node.value)
|
|
||||||
if (node.value.id != '') {
|
if (node.value.id != '') {
|
||||||
return node.value
|
return node.value
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable @register="registerTable" :searchInfo="searchInfo"> </BasicTable>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { reactive, } from 'vue';
|
||||||
|
import { getTableList } from '@/api/sys/flowPenal'
|
||||||
|
|
||||||
|
import { BasicTable, useTable, TableAction } from '@/components/Table';
|
||||||
|
|
||||||
|
defineOptions({ name: 'RoleManagement' });
|
||||||
|
|
||||||
|
const searchInfo = reactive < Recordable > ({});
|
||||||
|
|
||||||
|
const [registerTable, { reload, getSelectRows, clearSelectedRowKeys }] = useTable({
|
||||||
|
// 表格名称
|
||||||
|
title: '数据表列表',
|
||||||
|
// 获取数据的接口
|
||||||
|
api: getTableList,
|
||||||
|
// 表单列信息 BasicColumn[]
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
title: '表名',
|
||||||
|
dataIndex: 'name',
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '备注',
|
||||||
|
dataIndex: 'description',
|
||||||
|
width: 180,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
rowKey: 'name',
|
||||||
|
// 使用搜索表单
|
||||||
|
useSearchForm: false,
|
||||||
|
// 显示表格设置工具
|
||||||
|
showTableSetting: false,
|
||||||
|
// 是否显示表格边框
|
||||||
|
bordered: true,
|
||||||
|
// 序号列
|
||||||
|
showIndexColumn: false,
|
||||||
|
// 勾选列
|
||||||
|
rowSelection: {//多选框
|
||||||
|
type: 'radio',
|
||||||
|
},
|
||||||
|
tableSetting: { fullScreen: true },
|
||||||
|
isCanResizeParent: true,
|
||||||
|
// 搜索
|
||||||
|
handleSearchInfoFn(info) {
|
||||||
|
return info;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function getRow() {
|
||||||
|
let rows = getSelectRows();
|
||||||
|
return rows
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
getRow
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
Loading…
Reference in New Issue