init
This commit is contained in:
98
src/flow/support/common.ts
Normal file
98
src/flow/support/common.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* 业务公共处理类
|
||||
* @author luolin
|
||||
*/
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {deepClone} from "/@/utils/other";
|
||||
|
||||
// 校验是否为对象或数组
|
||||
export function validateObjArr(objArr) {
|
||||
return objArr instanceof Array || objArr instanceof Object;
|
||||
}
|
||||
|
||||
// 处理克隆
|
||||
export function handleClone(_this, form: any, ...keys?: string[]) {
|
||||
if (_this.operType !== 'add' && _this.operType !== 'copy') return
|
||||
if (!form) form = _this.form
|
||||
setPropsNull(form, 'code', 'status', 'finishTime', 'createUser', 'createTime', 'updateUser', 'updateTime')
|
||||
// 自定义清空字段
|
||||
setPropsNull(form, ...keys)
|
||||
return form
|
||||
}
|
||||
|
||||
// 处理克隆提交前
|
||||
export function handleCloneSubmit(_this, row?: any, callback?: Function) {
|
||||
if (_this.operType !== 'add' && _this.operType !== 'copy') return
|
||||
if (!row) row = _this.form
|
||||
row = handleClone(_this, row)
|
||||
setPropsNull(row, 'id', 'flowInstId')
|
||||
if (callback) callback(row)
|
||||
}
|
||||
|
||||
// 设置属性值null
|
||||
// @ts-ignore
|
||||
export function setPropsNull(form: any, ...keys?: string[]) {
|
||||
if (arguments.length < 2) return
|
||||
let args = Array.prototype.slice.call(arguments)
|
||||
for (let i = 1; i < args.length; i++) {
|
||||
form[args[i]] = null
|
||||
}
|
||||
}
|
||||
|
||||
// 统一设置属性值
|
||||
// @ts-ignore
|
||||
export function setPropsValue(form: any, value: any, ...keys?: string[]) {
|
||||
if (arguments.length < 3) return
|
||||
let args = Array.prototype.slice.call(arguments)
|
||||
for (let i = 2; i < args.length; i++) {
|
||||
form[args[i]] = value
|
||||
}
|
||||
}
|
||||
|
||||
// 重置表单数据
|
||||
// @ts-ignore
|
||||
export function setPropsNullValue(form: any, data: any, ...keys?: string[]) {
|
||||
if (arguments.length < 3) {
|
||||
keys = Object.keys(form)
|
||||
}
|
||||
setPropsNull(form, ...keys)
|
||||
if (validateNull(data)) return
|
||||
setPropsDataValue(form, data, keys)
|
||||
}
|
||||
|
||||
// 设置属性为data值
|
||||
// @ts-ignore
|
||||
export function setPropsDataValue(form, data, keys?: string[]) {
|
||||
if (arguments.length < 3) {
|
||||
let keys = Object.keys(data);
|
||||
for (let i = 2; i < keys.length; i++) {
|
||||
if (!validateNull(data[keys[i]])) form[keys[i]] = data[keys[i]]
|
||||
}
|
||||
return
|
||||
}
|
||||
let args = Array.prototype.slice.call(arguments)
|
||||
// 第三个参数是否为数组
|
||||
if (args[2] instanceof Array) {
|
||||
args[2].forEach(key => {
|
||||
if (!validateNull(data[key])) {
|
||||
// 防止相同引用
|
||||
if (validateObjArr(data[key])) form[key] = deepClone(data[key])
|
||||
else form[key] = data[key]
|
||||
}
|
||||
})
|
||||
} else {
|
||||
for (let i = 2; i < args.length; i++) {
|
||||
if (!validateNull(data[args[i]])) form[args[i]] = data[args[i]]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 设置Crud queryForm
|
||||
export function setCrudQueryForm(_this, ...params?) {
|
||||
if (arguments.length < 2) return
|
||||
let args = Array.prototype.slice.call(arguments)
|
||||
// 单个修改
|
||||
for (let i = 1; i < args.length; i++) {
|
||||
_this.queryForm[args[i].prop] = args[i].value
|
||||
}
|
||||
}
|
||||
782
src/flow/support/dict-prop.ts
Normal file
782
src/flow/support/dict-prop.ts
Normal file
@@ -0,0 +1,782 @@
|
||||
/**
|
||||
* 字典属性常量
|
||||
* @author luolin
|
||||
*/
|
||||
|
||||
let paramValTypes = [{
|
||||
label: '表单字段',
|
||||
value: '0',
|
||||
}, {
|
||||
label: 'SpEL表达式',
|
||||
value: '1',
|
||||
}, {
|
||||
label: '固定值',
|
||||
value: '2',
|
||||
}]
|
||||
|
||||
let jobTypes = [{
|
||||
label: '人员',
|
||||
value: '0',
|
||||
labelEn: 'User'
|
||||
}, {
|
||||
label: '角色',
|
||||
value: '1',
|
||||
labelEn: 'Role'
|
||||
}, {
|
||||
label: '岗位',
|
||||
value: '2',
|
||||
labelEn: 'Post'
|
||||
}, {
|
||||
label: '部门',
|
||||
value: '3',
|
||||
labelEn: 'Dept'
|
||||
}]
|
||||
|
||||
let methods = [{
|
||||
label: '当开启任务时',
|
||||
value: 'startJob'
|
||||
}, {
|
||||
label: '当完成任务时',
|
||||
value: 'completeJob'
|
||||
}, {
|
||||
label: '当开启下一步任务时',
|
||||
value: 'startNextJob'
|
||||
}, {
|
||||
label: '当开启节点时',
|
||||
value: 'startNode'
|
||||
}, {
|
||||
label: '当完成节点时',
|
||||
value: 'completeNode'
|
||||
}, {
|
||||
label: '当开启下一步节点时',
|
||||
value: 'startNextNode'
|
||||
}, {
|
||||
label: '当任务跳转时',
|
||||
value: 'anyJump'
|
||||
}, {
|
||||
label: '当任务被跳转时',
|
||||
value: 'anyJumped'
|
||||
}, {
|
||||
label: '当任务驳回时',
|
||||
value: 'reject'
|
||||
}, {
|
||||
label: '当任务被驳回时',
|
||||
value: 'rejected'
|
||||
}, {
|
||||
label: '当需分配参与者时',
|
||||
value: 'distPerson'
|
||||
}, {
|
||||
label: '退回首节点时',
|
||||
value: 'backFirst'
|
||||
}, {
|
||||
label: '退回上一步时',
|
||||
value: 'backPre'
|
||||
}]
|
||||
|
||||
export let DIC_PROP = {
|
||||
YES_OR_NO: [{
|
||||
label: '否',
|
||||
value: '0',
|
||||
labelEn: 'No'
|
||||
}, {
|
||||
label: '是',
|
||||
value: '1',
|
||||
labelEn: 'Yes'
|
||||
}],
|
||||
YES_OR_NO_BOOL: [{
|
||||
label: '否',
|
||||
value: false,
|
||||
labelEn: 'No'
|
||||
}, {
|
||||
label: '是',
|
||||
value: true,
|
||||
labelEn: 'Yes'
|
||||
}],
|
||||
YES_OR_NO_NUM: [{
|
||||
label: '否',
|
||||
value: 0,
|
||||
labelEn: 'No'
|
||||
}, {
|
||||
label: '是',
|
||||
value: 1,
|
||||
labelEn: 'Yes'
|
||||
}],
|
||||
DELEGATE_STATUS: [{
|
||||
label: '暂存',
|
||||
value: '-1',
|
||||
labelEn: 'Temp'
|
||||
}, {
|
||||
label: '启用',
|
||||
value: '0',
|
||||
labelEn: 'Enable'
|
||||
}, {
|
||||
label: '停用',
|
||||
value: '1',
|
||||
labelEn: 'Disable'
|
||||
}],
|
||||
TEMP_STATUS: [{
|
||||
label: '暂存',
|
||||
value: '-1',
|
||||
labelEn: 'Temp'
|
||||
}, {
|
||||
label: '作废',
|
||||
value: '0',
|
||||
labelEn: 'Invalid'
|
||||
}, {
|
||||
label: '发布',
|
||||
value: '1',
|
||||
labelEn: 'Publish'
|
||||
}],
|
||||
ORDER_STATUS: [{
|
||||
label: '撤回',
|
||||
value: '-2'
|
||||
}, {
|
||||
label: '暂存',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '运行中',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '完成',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '作废',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '终止',
|
||||
value: '3'
|
||||
}],
|
||||
HANDOVER_TYPE: [{
|
||||
label: '任务交接',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '可自定义更多',
|
||||
value: '0'
|
||||
}],
|
||||
HANDOVER_REASON: [{
|
||||
label: '日常交接',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '晋升',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '转岗',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '离职',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '平调',
|
||||
value: '3'
|
||||
}],
|
||||
HANDOVER_STATUS: [{
|
||||
label: '撤回',
|
||||
value: '-2'
|
||||
}, {
|
||||
label: '未交接',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '交接中',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '已交接',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '作废',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '终止',
|
||||
value: '3'
|
||||
}],
|
||||
NODE_TYPE: [
|
||||
{
|
||||
label: '开始节点',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '串行节点',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '并行节点',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '结束节点',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '虚拟节点',
|
||||
value: '3'
|
||||
}, {
|
||||
label: '横向泳道',
|
||||
value: '8'
|
||||
}, {
|
||||
label: '纵向泳道',
|
||||
value: '9'
|
||||
}
|
||||
],
|
||||
LINK_TYPE: [
|
||||
{
|
||||
label: '节点到节点',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '节点到任务',
|
||||
value: '1'
|
||||
}
|
||||
],
|
||||
FLOW_METHOD_TYPE: [{
|
||||
label: '发起人本人',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '单级部门主管',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '多级部门主管',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '指定部门主管',
|
||||
value: '3'
|
||||
}, {
|
||||
label: '表单内人员',
|
||||
value: '4'
|
||||
}, {
|
||||
label: '可自定义更多',
|
||||
value: '-1'
|
||||
}],
|
||||
JOB_MSG_TYPE: [{
|
||||
label: '个人任务',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '组任务',
|
||||
value: '1'
|
||||
}],
|
||||
JOB_USER_TYPE: jobTypes,
|
||||
JOB_USER_NONE_TYPE: [{
|
||||
label: '无',
|
||||
value: '-1',
|
||||
labelEn: 'None'
|
||||
},
|
||||
...jobTypes
|
||||
],
|
||||
NODE_APPROVE_METHOD: [{
|
||||
label: '会签(需所有节点通过)',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '或签(一个节点通过即可)',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '依次审批(按顺序依次通过)',
|
||||
value: '3'
|
||||
}],
|
||||
APPROVE_METHOD: [{
|
||||
label: '会签(需所有审批人同意)',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '或签(一名审批人同意即可)',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '依次审批(按顺序依次审批)',
|
||||
value: '3'
|
||||
}, {
|
||||
label: '票签(自定义完成比率%)',
|
||||
value: '4'
|
||||
}],
|
||||
SIGNATURE_TYPE: [{
|
||||
label: '前加签',
|
||||
value: '1',
|
||||
labelEn: 'Before Signature'
|
||||
}, {
|
||||
label: '后加签',
|
||||
value: '2',
|
||||
labelEn: 'After Signature'
|
||||
}, {
|
||||
label: '加并签',
|
||||
value: '3',
|
||||
labelEn: 'Sign Together'
|
||||
}],
|
||||
NODE_SEQUENTIAL_TYPE: [{
|
||||
label: '在当前节点之前审批',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '在当前节点之后审批',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '与当前节点同时审批',
|
||||
value: '3'
|
||||
}],
|
||||
NODE_SIGNATURE_TYPE: [{
|
||||
label: '前加节点',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '后加节点',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '加并节点',
|
||||
value: '3'
|
||||
}],
|
||||
BELONG_TYPE: [{
|
||||
label: '普通任务',
|
||||
value: '0',
|
||||
labelEn: 'Common Task'
|
||||
}, {
|
||||
label: '抄送任务',
|
||||
value: '1',
|
||||
labelEn: 'Copy Task'
|
||||
}, {
|
||||
label: '传阅任务',
|
||||
value: '2',
|
||||
labelEn: 'Pass task'
|
||||
}],
|
||||
JOB_BTNS: [{
|
||||
label: '同意',
|
||||
value: '0',
|
||||
labelEn: 'Agree'
|
||||
}, {
|
||||
label: '前加节点',
|
||||
value: '13',
|
||||
labelEn: 'Before Node'
|
||||
}, {
|
||||
label: '后加节点',
|
||||
value: '14',
|
||||
labelEn: 'After Node'
|
||||
}, {
|
||||
label: '加并节点',
|
||||
value: '15',
|
||||
labelEn: 'Node Together'
|
||||
}, {
|
||||
label: '前加签',
|
||||
value: '5',
|
||||
labelEn: 'Before Signature'
|
||||
}, {
|
||||
label: '后加签',
|
||||
value: '6',
|
||||
labelEn: 'After Signature'
|
||||
}, {
|
||||
label: '加并签',
|
||||
value: '7',
|
||||
labelEn: 'Sign Together'
|
||||
}, {
|
||||
label: '退回首节点',
|
||||
value: '1',
|
||||
labelEn: 'Back First'
|
||||
}, {
|
||||
label: '退回上一步',
|
||||
value: '10',
|
||||
labelEn: 'Back Pre'
|
||||
}, {
|
||||
label: '任意跳转',
|
||||
value: '8',
|
||||
labelEn: 'Any Jump'
|
||||
}, {
|
||||
label: '任意驳回',
|
||||
value: '2',
|
||||
labelEn: 'Any Reject'
|
||||
}, {
|
||||
label: '抄送任务',
|
||||
value: '11',
|
||||
labelEn: 'Carbon Copy'
|
||||
}, {
|
||||
label: '传阅任务',
|
||||
value: '12',
|
||||
labelEn: 'Pass Read'
|
||||
}, {
|
||||
label: '下一办理人',
|
||||
value: '3',
|
||||
labelEn: 'Next Handler'
|
||||
}, {
|
||||
label: '转办任务',
|
||||
value: '17',
|
||||
labelEn: 'Turn Job'
|
||||
}, {
|
||||
label: '终止流程',
|
||||
value: '18',
|
||||
labelEn: 'Terminate'
|
||||
}, {
|
||||
label: '提前结束',
|
||||
value: '9',
|
||||
labelEn: 'Early End'
|
||||
}, {
|
||||
label: '作废流程',
|
||||
value: '4',
|
||||
labelEn: 'Invalid'
|
||||
}, {
|
||||
label: '分配参与者',
|
||||
value: '-9',
|
||||
labelEn: 'Dist Person'
|
||||
}],
|
||||
ROUTE_ACTIONS: [{
|
||||
label: '暂停当前节点',
|
||||
value: '-4',
|
||||
labelEn: 'STop Current Node'
|
||||
}, {
|
||||
label: '开启下一节点',
|
||||
value: '8',
|
||||
labelEn: 'Start Next Node'
|
||||
}, {
|
||||
label: '通过',
|
||||
value: '0',
|
||||
labelEn: 'Agree'
|
||||
}, {
|
||||
label: '驳回到其他节点',
|
||||
value: '2',
|
||||
labelEn: 'Reject To Node'
|
||||
}, {
|
||||
label: '退回首节点',
|
||||
value: '1',
|
||||
labelEn: 'Back First'
|
||||
}, {
|
||||
label: '退回上一步',
|
||||
value: '10',
|
||||
labelEn: 'Back Pre'
|
||||
}, {
|
||||
label: '终止流程',
|
||||
value: '18',
|
||||
labelEn: 'Terminate'
|
||||
}, {
|
||||
label: '提前结束',
|
||||
value: '9',
|
||||
labelEn: 'Early End'
|
||||
}, {
|
||||
label: '可自定义更多',
|
||||
value: '_define_',
|
||||
labelEn: '_define_'
|
||||
}],
|
||||
MSG_TYPE: [{
|
||||
label: '个人消息',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '群消息',
|
||||
value: '1'
|
||||
}],
|
||||
NODE_STATUS: [{
|
||||
label: '未开始',
|
||||
value: '-1',
|
||||
labelEn: 'No Start'
|
||||
}, {
|
||||
label: '办理中',
|
||||
value: '0',
|
||||
labelEn: 'Running'
|
||||
}, {
|
||||
label: '完成',
|
||||
value: '1',
|
||||
labelEn: 'Complete'
|
||||
}, {
|
||||
label: '驳回中',
|
||||
value: '2',
|
||||
labelEn: 'Rejecting'
|
||||
}, {
|
||||
label: '跳过',
|
||||
value: '3',
|
||||
labelEn: 'Skip'
|
||||
}, {
|
||||
label: '被驳回',
|
||||
value: '9',
|
||||
labelEn: 'Rejected'
|
||||
}],
|
||||
REJECT_STATUS: [{
|
||||
label: '驳回中',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '结束',
|
||||
value: '1'
|
||||
}],
|
||||
REJECT_TYPE: [{
|
||||
label: '依次返回',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '直接返回',
|
||||
value: '1'
|
||||
}],
|
||||
OPERATOR: [{
|
||||
label: '等于',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '不等于',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '大于',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '大于等于',
|
||||
value: '3'
|
||||
}, {
|
||||
label: '小于',
|
||||
value: '4'
|
||||
}, {
|
||||
label: '小于等于',
|
||||
value: '5'
|
||||
}, {
|
||||
label: '包含',
|
||||
value: '6'
|
||||
}, {
|
||||
label: '不包含',
|
||||
value: '7'
|
||||
}],
|
||||
VAL_TYPE: [{
|
||||
label: '普通模式',
|
||||
value: '-2'
|
||||
}, {
|
||||
label: '分配模式',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '简单模式',
|
||||
value: '0'
|
||||
}, {
|
||||
label: 'SpEL模式',// 针对人员为固定模式
|
||||
value: '1'
|
||||
}, {
|
||||
label: '专业模式',
|
||||
value: '2'
|
||||
}, {
|
||||
label: 'Http模式',
|
||||
value: '3'
|
||||
}],
|
||||
NOTICE_STATUS: [{
|
||||
label: '发起',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '办理中',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '完成',
|
||||
value: '1'
|
||||
}],
|
||||
TODO_JOB_STATUS: [{
|
||||
label: '未开始',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '办理中',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '驳回中',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '被驳回',
|
||||
value: '9'
|
||||
}],
|
||||
FLOW_STATUS: [{
|
||||
label: '撤回',
|
||||
value: '-2',
|
||||
labelEn: 'Recall'
|
||||
}, {
|
||||
label: '发起',
|
||||
value: '-1',
|
||||
labelEn: 'Initiate'
|
||||
}, {
|
||||
label: '运行中',
|
||||
value: '0',
|
||||
labelEn: 'Running'
|
||||
}, {
|
||||
label: '完结',
|
||||
value: '1',
|
||||
labelEn: 'End'
|
||||
}, {
|
||||
label: '作废',
|
||||
value: '2',
|
||||
labelEn: 'Invalid'
|
||||
}, {
|
||||
label: '终止',
|
||||
value: '3',
|
||||
labelEn: 'Terminate'
|
||||
}],
|
||||
NODE_METHODS: methods,
|
||||
FLOW_METHODS: [{
|
||||
label: '当流程发起时',
|
||||
value: 'initiate'
|
||||
}, {
|
||||
label: '当流程完成时',
|
||||
value: 'finish'
|
||||
}, {
|
||||
label: '当流程被撤回时',
|
||||
value: 'recall'
|
||||
}, {
|
||||
label: '当流程被重发时',
|
||||
value: 'reset'
|
||||
}, {
|
||||
label: '当流程被终止时',
|
||||
value: 'terminate'
|
||||
}, {
|
||||
label: '当流程被作废时',
|
||||
value: 'invalid'
|
||||
}, {
|
||||
label: '当流程被恢复时',
|
||||
value: 'recover'
|
||||
}, ...methods],
|
||||
CLAZZ_TYPE: [{
|
||||
label: '节点事件',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '全局事件',
|
||||
value: '1'
|
||||
}],
|
||||
COLUMN_TYPE: [
|
||||
{
|
||||
label: "varchar",
|
||||
value: "varchar"
|
||||
},{
|
||||
label: "bigint",
|
||||
value: "bigint"
|
||||
},{
|
||||
label: "int",
|
||||
value: "int"
|
||||
},{
|
||||
label: "double",
|
||||
value: "double"
|
||||
},{
|
||||
label: "timestamp",
|
||||
value: "timestamp"
|
||||
},{
|
||||
label: "date",
|
||||
value: "date"
|
||||
},{
|
||||
label: "float",
|
||||
value: "float"
|
||||
},{
|
||||
label: "bit",
|
||||
value: "bit"
|
||||
}
|
||||
],
|
||||
LOCK_FLAG: [{
|
||||
label: '有效',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '锁定',
|
||||
value: '9'
|
||||
}],
|
||||
DATABASE_TYPE: [{
|
||||
label: 'MySQL数据库',
|
||||
value: 'MySQL'
|
||||
}, {
|
||||
label: '达梦数据库',
|
||||
value: 'DM'
|
||||
}],
|
||||
FORM_TYPE: [{
|
||||
label: '设计表单',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '系统表单',
|
||||
value: '1'
|
||||
}],
|
||||
FORM_DATA_TYPE: [{
|
||||
label: '字段定义',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '权限配置',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '打印设计',
|
||||
value: '2'
|
||||
}],
|
||||
FORM_PERM_TYPE: [{
|
||||
label: '隐藏',
|
||||
value: '-1'
|
||||
}, {
|
||||
label: '只读',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '可编辑',
|
||||
value: '1'
|
||||
}],
|
||||
ALL_FORM_PERM_TYPE: [{
|
||||
label: '全部只读',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '全部可编辑',
|
||||
value: '1'
|
||||
}],
|
||||
PARAM_RULE_TYPE: [{
|
||||
label: '人员规则',
|
||||
value: '0'
|
||||
}, {
|
||||
label: '条件规则',
|
||||
value: '1'
|
||||
}, {
|
||||
label: '父子流程',
|
||||
value: '2'
|
||||
}, {
|
||||
label: '监听事件',
|
||||
value: '3'
|
||||
}, {
|
||||
label: '查询/更新表单Http参数',
|
||||
value: '4'
|
||||
}, {
|
||||
label: '保存子流程表单Http接口',
|
||||
value: '5'
|
||||
}, {
|
||||
label: '更新子流程表单Http接口',
|
||||
value: '6'
|
||||
}, {
|
||||
label: '更新父流程表单Http接口',
|
||||
value: '7'
|
||||
}, {
|
||||
label: '节点路由',
|
||||
value: '8'
|
||||
}],
|
||||
OR_OR_AND: [{
|
||||
label: '或',
|
||||
value: '0',
|
||||
}, {
|
||||
label: '且',
|
||||
value: '1',
|
||||
}],
|
||||
PARAM_FROM: [{
|
||||
label: '请求头',
|
||||
value: '0',
|
||||
}, {
|
||||
label: '传参',
|
||||
value: '1',
|
||||
}, {
|
||||
label: '回参',
|
||||
value: '2',
|
||||
}],
|
||||
PARAM_VAL_TYPE: paramValTypes,
|
||||
SYS_PARAM_VAL_TYPE: [{
|
||||
label: '系统字段',
|
||||
value: '0',
|
||||
}, ...paramValTypes.slice(1)
|
||||
],
|
||||
HTTP_METHODS: [{
|
||||
label: 'GET',
|
||||
value: 'GET',
|
||||
}, {
|
||||
label: 'POST',
|
||||
value: 'POST',
|
||||
}, {
|
||||
label: 'PUT',
|
||||
value: 'PUT',
|
||||
}, {
|
||||
label: 'DELETE',
|
||||
value: 'DELETE',
|
||||
}],
|
||||
PARAM_TYPES: [{
|
||||
label: 'json',
|
||||
value: '0',
|
||||
}, {
|
||||
label: 'form',
|
||||
value: '1',
|
||||
}],
|
||||
PREDICT_OPTIONS: [{
|
||||
label: '预测参与者',
|
||||
value: 1,
|
||||
}, {
|
||||
label: '预测监听事件',
|
||||
value: 2,
|
||||
}, {
|
||||
label: '预测节点路由',
|
||||
value: 4,
|
||||
}, {
|
||||
label: '预测子流程',
|
||||
value: 8
|
||||
}, {
|
||||
label: '预测审批过程',
|
||||
value: 16,
|
||||
}, {
|
||||
label: '预测非自动流转',
|
||||
value: 32,
|
||||
}, {
|
||||
label: '预测流程轨迹',
|
||||
value: 0,
|
||||
disabled: true
|
||||
}, {
|
||||
label: '预测连线条件',
|
||||
value: 0,
|
||||
disabled: true
|
||||
}],
|
||||
}
|
||||
255
src/flow/support/extend.ts
Normal file
255
src/flow/support/extend.ts
Normal file
@@ -0,0 +1,255 @@
|
||||
import {RouteRecordRaw} from "vue-router";
|
||||
import {flowConfig} from "/@/flow/designer/config/flow-config";
|
||||
import {Session} from "/@/utils/storage";
|
||||
import {locationHash, vueKeySys} from "/@/api/order/order-key-vue";
|
||||
import {useUserInfo} from "/@/stores/userInfo";
|
||||
import {validateNull} from "/@/utils/validate";
|
||||
import {getToDoneDetail} from "/@/api/jsonflow/hi-job";
|
||||
import * as doJob from "/@/api/jsonflow/do-job";
|
||||
import {DIC_PROP} from "/@/flow/support/dict-prop";
|
||||
import {paramsFilter} from "/@/flow";
|
||||
|
||||
// 移动端path
|
||||
export const vueAppKeyHash = {
|
||||
flowview: 'jsonflow/flow-design/view'
|
||||
, jobview: 'order/run-application/view'
|
||||
, jobinitiate: 'order/flow-application/initiate'
|
||||
, jobinitagain: 'order/run-application/initiate'
|
||||
, jobform: 'order/run-application/flow'
|
||||
}
|
||||
|
||||
export async function initJobDataByApp($route, props) {
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix
|
||||
let app = !validateNull($route.query[appdata]);
|
||||
if (!app) return
|
||||
let split = $route.query[appdata].split('-');
|
||||
let query = {orderId: split[1], id: split[2], flowInstId: split[3], runNodeId: split[4], elTabId: split[5], hiJob: split[6] === 'Y'}
|
||||
if (query.hiJob) {
|
||||
await handleToDoneDetail(query, props, '1')
|
||||
} else {
|
||||
await handleTodoDetail(query, props)
|
||||
}
|
||||
props.currJob.hiJob = query.hiJob
|
||||
props.currElTab.id = query.elTabId
|
||||
}
|
||||
|
||||
export async function handleTodoDetail(row, data, isView?, isRead?, $message?, getDataList?) {
|
||||
let query = Object.assign({}, row, {order: null, elTabs: null});
|
||||
query = paramsFilter(query)
|
||||
await doJob.getTodoDetail(query).then(response => {
|
||||
if ($message) data.currJob = response.data
|
||||
// 兼容移动端
|
||||
else Object.assign(data.currJob, response.data);
|
||||
if (isRead !== '1' && isView !== '1' && DIC_PROP.NODE_STATUS[2].value === data.currJob.status) {
|
||||
if ($message) {
|
||||
$message.warning('当前任务已被其他办理人审批')
|
||||
getDataList();
|
||||
}
|
||||
} else {
|
||||
if (isView !== '1') {
|
||||
if (isRead === '1') data.currJob.hiJob = true
|
||||
doJob.isRead(data.currJob).then(() => {
|
||||
row.isRead = '1'
|
||||
// 独立标签都需执行
|
||||
if (isRead === '1') getDataList();
|
||||
})
|
||||
} else data.currJob.hiJob = true
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const channel = new BroadcastChannel('currJob_channel');
|
||||
export async function handleFlowPreview($router, row, isView?, isRead?, $message?, flowJob?, getDataList?) {
|
||||
channel.onmessage = (event) => {
|
||||
flowJob.delJobLen();
|
||||
// getDataList();
|
||||
};
|
||||
row.isHiJob = '0'
|
||||
windowOpenFlow($router, row, isView, isRead)
|
||||
}
|
||||
|
||||
function windowOpenFlow($router, row, isView?, isRead?, isApp?, isForm?) {
|
||||
let query = { id: row.id, flowInstId: row.flowInstId, isHiJob: row.isHiJob, isView, isRead, isApp, isForm }
|
||||
$router.push({
|
||||
name: dynamicRoutesFlow[0].name,
|
||||
query: query
|
||||
})
|
||||
/*const routeUrl = $router.resolve({
|
||||
path: dynamicRoutesFlow[0].path,
|
||||
query: query,
|
||||
});
|
||||
window.open(routeUrl.href, '_blank');*/
|
||||
}
|
||||
|
||||
export async function handleToDoneDetail(row, data, isApp?, isForm?) {
|
||||
let query = Object.assign({}, row, {order: null, elTabs: null});
|
||||
query = paramsFilter(query)
|
||||
await getToDoneDetail(query).then(response => {
|
||||
// 兼容移动端
|
||||
if (isApp === '1') {
|
||||
Object.assign(data.currJob, response.data);
|
||||
return
|
||||
}
|
||||
data.currJob = response.data
|
||||
if (isForm === '1') {
|
||||
let elTabs = data.currJob.elTabs;
|
||||
data.currJob.elTabs = elTabs.filter(f => vueKeySys.sysPaths.includes(f.path))
|
||||
// 判断是否只配置表单
|
||||
if (validateNull(data.currJob.elTabs)) data.currJob.elTabs = elTabs
|
||||
}
|
||||
// 历史查看标识
|
||||
data.currJob.hiJob = true
|
||||
})
|
||||
}
|
||||
|
||||
export async function openFlowPreview($router, row, isForm?) {
|
||||
row.isHiJob = '1'
|
||||
windowOpenFlow($router, row, null, null, null, isForm)
|
||||
}
|
||||
|
||||
export async function replaceRouterRoute(route, router) {
|
||||
// 兼容移动端
|
||||
let appPath = '', appdata = flowConfig.mobileConfig.mobilePrefix;
|
||||
// 防止重复进入
|
||||
if (route.fullPath.indexOf('?' + appdata + '=') !== -1) {
|
||||
return
|
||||
}
|
||||
let index = route.fullPath.indexOf(appdata);
|
||||
if (index !== -1) {
|
||||
let last = route.fullPath.indexOf("-");
|
||||
if (route.fullPath.indexOf('?' + appdata + '=') !== -1) last = route.fullPath.indexOf("?");
|
||||
appPath = route.fullPath.substring(route.fullPath.indexOf("/") + 1, last);
|
||||
|
||||
router.currentRoute.value.name = "flowRoutes." + appPath
|
||||
let fullPath = route.fullPath.replace('-', '?');
|
||||
fullPath = fullPath.replace('-', '=');
|
||||
fullPath = fullPath.replace(appPath, vueAppKeyHash[appPath]);
|
||||
|
||||
let split = fullPath.split('=')[1].split('-');
|
||||
// 存储token 信息
|
||||
if (split[0].indexOf('_') !== -1) {
|
||||
// 判断是否微服务版本
|
||||
let tokenTenant = split[0].replace('_', '-').split('-')
|
||||
Session.set('tenantId', tokenTenant[0]);
|
||||
Session.set('token', tokenTenant[1].replaceAll('_', '-'));
|
||||
} else {
|
||||
Session.set('token', split[0]);
|
||||
}
|
||||
// 触发初始化用户信息 pinia
|
||||
await useUserInfo().setUserInfos();
|
||||
await router.replace(fullPath);
|
||||
}
|
||||
}
|
||||
|
||||
export async function replaceRouterThirdRoute(route, router) {
|
||||
let fullPath = route.fullPath;
|
||||
// 防止重复进入
|
||||
if (fullPath.indexOf('tokenLoaded') !== -1) {
|
||||
// 防止刷新后无用户信息
|
||||
await useUserInfo().setUserInfos();
|
||||
return
|
||||
}
|
||||
// 三方系统单点
|
||||
if (fullPath.indexOf('token') !== -1) {
|
||||
Session.clear()
|
||||
fullPath = fullPath.replace('token', 'tokenLoaded');
|
||||
// 存储token 信息
|
||||
Session.set('tenantId', route.query.tenantId);
|
||||
Session.set('token', route.query.token);
|
||||
} else {
|
||||
fullPath = route.fullPath + '&tokenLoaded=1';
|
||||
}
|
||||
// 必须获取用户信息
|
||||
await useUserInfo().setUserInfos();
|
||||
router.currentRoute.value.name = "staticRoutes.handleoajob"
|
||||
await router.replace(fullPath);
|
||||
}
|
||||
|
||||
export function initJsonFlowViewByApp($route, props) {
|
||||
let appdata = flowConfig.mobileConfig.mobilePrefix
|
||||
let app = !validateNull($route.query[appdata]);
|
||||
if (app) {
|
||||
let split = $route.query[appdata].split('-');
|
||||
let query = {defFlowId: split[1], flowInstId: split[2] === 'undefined' ? '' : split[2]}
|
||||
Object.assign(props.currJob, query);
|
||||
}
|
||||
}
|
||||
|
||||
export function windowLocationHrefParam(hash, param = '') {
|
||||
return window.location.href = window.location.origin + window.location.pathname + locationHash[hash] + param
|
||||
}
|
||||
|
||||
export function windowLocationHref(hash) {
|
||||
window.location.href = window.location.origin + window.location.pathname + hash
|
||||
}
|
||||
|
||||
/**
|
||||
* 定义静态路由(默认路由)
|
||||
*/
|
||||
export const staticRoutesFlow: Array<RouteRecordRaw> = [
|
||||
{
|
||||
path: '/jsonflow/flow-design/view',
|
||||
name: 'flowRoutes.flowview',
|
||||
component: () => import('/@/views/jsonflow/flow-design/view.vue'),
|
||||
meta: {
|
||||
isAuth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/order/run-application/view',
|
||||
name: 'flowRoutes.jobview',
|
||||
component: () => import('/@/views/order/run-application/view.vue'),
|
||||
meta: {
|
||||
isAuth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/order/flow-application/initiate',
|
||||
name: 'flowRoutes.jobinitiate',
|
||||
component: () => import('/@/views/order/flow-application/initiate.vue'),
|
||||
meta: {
|
||||
isAuth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/order/run-application/initiate',
|
||||
name: 'flowRoutes.jobinitagain',
|
||||
component: () => import('/@/views/order/run-application/initiate.vue'),
|
||||
meta: {
|
||||
isAuth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/order/run-application/flow',
|
||||
name: 'flowRoutes.jobform',
|
||||
component: () => import('/@/views/order/run-application/flow.vue'),
|
||||
meta: {
|
||||
isAuth: false,
|
||||
},
|
||||
}
|
||||
];
|
||||
|
||||
/**
|
||||
* 定义静态路由(默认路由)
|
||||
* 前端添加路由,请在此处加
|
||||
*/
|
||||
export const dynamicRoutesFlow: Array<RouteRecordRaw> = [
|
||||
{
|
||||
path: '/flow/components/handle-job/handle',
|
||||
name: 'flowRoutes.handlejob',
|
||||
component: () => import('/@/flow/components/handle-job/handle.vue'),
|
||||
meta: {
|
||||
isKeepAlive: false,
|
||||
isHide: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/jsonflow/flow-design/index',
|
||||
name: 'flowRoutes.flowdesign',
|
||||
component: () => import('/@/views/jsonflow/flow-design/index.vue'),
|
||||
meta: {
|
||||
isKeepAlive: false,
|
||||
isHide: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
85
src/flow/support/prop-const.ts
Normal file
85
src/flow/support/prop-const.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* 字段属性常量
|
||||
* @author luolin
|
||||
*/
|
||||
const varKeyVal = {
|
||||
sys: '#sys.',
|
||||
flow: '#flow.',
|
||||
order: '#order.',
|
||||
form: '#form.',
|
||||
user: '#user.',
|
||||
var: '#var.',
|
||||
dist: '#dist.',
|
||||
}
|
||||
|
||||
export let PROP_CONST = {
|
||||
COMMON: {
|
||||
flowInstId: 'flowInstId',
|
||||
code: 'code',
|
||||
userUserPrefix: 'USER_',
|
||||
userRolePrefix: 'ROLE_',
|
||||
userPostPrefix: 'POST_',
|
||||
userDeptPrefix: 'DEPT_',
|
||||
tableName: 'order_run_application',
|
||||
},
|
||||
FORM_DESIGN: {
|
||||
// 注意相反的!
|
||||
subForm: 'group',
|
||||
group: 'subForm',
|
||||
fcRow: 'fcRow',
|
||||
tableForm: 'tableForm',
|
||||
fcTable: 'fcTable',
|
||||
elTabs: 'elTabs',
|
||||
elCollapse: 'elCollapse',
|
||||
elCard: 'elCard',
|
||||
},
|
||||
TEXT_DESC: {
|
||||
condSpELExplain: "当选择SpEL模式时, SpEL表达式必须符合SpEL格式, #anyKey表示表单的字段 ( 默认#form.前缀 ), 例如0<#days && #days>=3 ( 加前缀#var.anyKey表示从流程条件中取值,#user.anyKey表示从当前用户中取值 )",
|
||||
condUserExplain: "1、SpEL上下文表达式 ( 常用于发起时可确定的参与者值 ), #anyKey表示表单的字段 ( 默认#form.前缀 ), 例如#userId ( 加前缀#var.anyKey表示从流程条件中取值,#user.anyKey表示从当前用户中取值 )",
|
||||
condMethodExplain1: "采用函数表达式 ( 以下两种方式均支持自定义任意扩展 ), 返回值为字符串 1 ( 满足 ) 或 0 ( 不满足 ), 满足您复杂条件的场景 :",
|
||||
condMethodExplain2: "1、SpEL上下文表达式, #anyKey表示表单的字段 ( 默认#form.前缀 ), 例如#isGoEnd ( 加前缀#var.anyKey表示从流程条件中取值,#user.anyKey表示从当前用户中取值 )",
|
||||
condMethodExplain3: '2、SpringBean函数表达式, 如某个Bean对象的beanName为bean,取值#bean.anyMethod(), 带参数格式#bean.anyMethod(String#admin,SysUser#{"username": "admin"},SysRole#NULL)',
|
||||
condMethodExplain4: '备注:函数表达式 ( 参数支持SpEL上下文表达式且需带前缀如Long#form.userId ), 参数格式为#bean.anyMethod(参数类型#参数值), 多个参数逗号分割。类型为复杂对象时参数值为Json格式',
|
||||
condMethodExplain5: '字段可包含参与者类型、参与者ID、参与者任务名称、参与者任务排序( 只有ID值时,参与者类型默认人员,参与者ID是人员ID )',
|
||||
condMethodExplain6: '返回值要求请参考路由指定动作接口的入参',
|
||||
},
|
||||
HANDOVER_FLOW: {
|
||||
userKey: {
|
||||
create_user:'create_user'
|
||||
,receive_user:'receive_user'
|
||||
,curr_dept_manager:'curr_dept_manager'
|
||||
}
|
||||
},
|
||||
LOAD_USER_ROLE: [
|
||||
{key: "users", type: "jobType", typeVal: "0", field: 'roleId'}, {key: "roles", type: "jobType", typeVal: "1", field: 'roleId'},
|
||||
{key: "posts", type: "jobType", typeVal: "2", field: 'roleId'}, {key: "depts", type: "jobType", typeVal: "3", field: 'roleId'}
|
||||
],
|
||||
SYS_FIELDS: [
|
||||
// 用 order 简化报表打印回显
|
||||
{prefix: varKeyVal.order, prop:"flowInstId", label:"流程实例ID", valueKey: "id", showKey: "flowName"}
|
||||
,{prefix: varKeyVal.order, prop:"flowKey", label:"流程业务KEY"}
|
||||
,{prefix: varKeyVal.order, prop:"createUser", label:"发起人", valueKey: "userId", showKey: "name"}
|
||||
,{prefix: varKeyVal.order, prop:"code", label:"工单编号"}
|
||||
,{prefix: varKeyVal.order, prop:"status", label:"工单状态"}
|
||||
,{prefix: varKeyVal.order, prop:"createTime", label:"发起时间"}
|
||||
,{prefix: varKeyVal.order, prop:"finishTime", label:"完成时间"}
|
||||
,{prefix: varKeyVal.order, prop:"_define_", label:"可自定义更多"}
|
||||
],
|
||||
VAR_KEY_VAL: {
|
||||
route: '#route.',
|
||||
routeName: '路由规则',
|
||||
person: '#person.',
|
||||
personName: '审批规则',
|
||||
link: '#link.',
|
||||
// 取值来源
|
||||
order: varKeyVal.order,
|
||||
form: varKeyVal.form,
|
||||
user: varKeyVal.user,
|
||||
var: varKeyVal.var,
|
||||
dist: varKeyVal.dist,
|
||||
},
|
||||
FLOW_METHOD: {
|
||||
whoseLeader: {name: '发起人本人', userId: varKeyVal.order.replace("#", "") + 'createUser'}
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user