Browse Source

合并秦东代码2023.10.28

liwenxuan_v2
超级管理员 2 years ago
parent
commit
5ca9020bbf
  1. 1
      src/api/DesignForm/type.ts
  2. 40
      src/api/workflowapi/index.ts
  3. 2
      src/components/DesignForm/public/headTools.vue
  4. 20
      src/components/workflow/addNode.vue
  5. 2
      src/components/workflow/dialog/common.ts
  6. 4
      src/components/workflow/dialog/positionDialog.vue
  7. 4
      src/components/workflow/drwer/approverDrawer.vue
  8. 35
      src/components/workflow/nodeWrap.vue
  9. 109
      src/components/workflow/selectBox.vue
  10. 2
      src/components/workflow/selectBoxs.vue
  11. 2
      src/utils/request.ts
  12. 8
      src/utils/workflow/index.ts
  13. 2
      src/views/sysworkflow/codepage/index.vue
  14. 226
      src/views/sysworkflow/flow/flowDrawingBoard.vue
  15. 2
      src/views/sysworkflow/flow/flowcanvas.vue
  16. 41
      src/views/sysworkflow/flow/index.vue

1
src/api/DesignForm/type.ts

@ -12,6 +12,7 @@ export interface customerFormCont{
classify:number; classify:number;
creatername:string; creatername:string;
creatertime:string; creatertime:string;
flowkey:any;
} }
export type CustomerFormPageResult = PageResult<customerFormCont[]>; export type CustomerFormPageResult = PageResult<customerFormCont[]>;

40
src/api/workflowapi/index.ts

@ -55,3 +55,43 @@ export function gainFlowVersionList(data: publicid): AxiosPromise<flowversion[]>
data: data data: data
}); });
} }
//保存工作流版本
export function saveFlowCont(data: any) {
return request({
url: '/systemapi/task_flow/save_flow_cont',
method: 'post',
data: data
});
}
//获取工作流信息
export function gainFlowInfo(data: publicid) {
return request({
url: '/systemapi/task_flow/gain_flow_info',
method: 'post',
data: data
});
}
//编辑工作流版本
export function editFlowCont(data: any) {
return request({
url: '/systemapi/task_flow/edit_flow_cont',
method: 'post',
data: data
});
}
//编辑工作流版本
export function saveNewFlow(data: any) {
return request({
url: '/systemapi/task_flow/save_new_flow',
method: 'post',
data: data
});
}
//启用&禁用工作流版本
export function switchFlowVersion(data: any) {
return request({
url: '/systemapi/task_flow/switch_flow_version',
method: 'post',
data: data
});
}

2
src/components/DesignForm/public/headTools.vue

@ -53,7 +53,7 @@ const btnList = computed(() => {
}) })
watch(()=>props.customerformid,(val: any)=>{ watch(()=>props.customerformid,(val: any)=>{
console.log("选定版本----表单--->",val) // console.log("------->",val)
}) })
</script> </script>
<template> <template>

20
src/components/workflow/addNode.vue

@ -51,10 +51,10 @@ const addType = (type:any)=> {
var data; var data;
if (type == 1) { if (type == 1) {
data = { data = {
"nodeNumber":onlyNumber, "nodeNumber":onlyNumber, //
"nodeName": "审核人", "nodeName": "审核人", //
"error": true, "error": true, //
"type": 1, "type": 1, // 0 1 2 3 4 5
"settype": 1, "settype": 1,
"selectMode": 0, "selectMode": 0,
"selectRange": 0, "selectRange": 0,
@ -65,7 +65,7 @@ const addType = (type:any)=> {
"childNode": props.childNodeP, "childNode": props.childNodeP,
"nodeUserList": [], "nodeUserList": [],
"fromNode": fromNodeNumber, "fromNode": fromNodeNumber,
"gotoNode":[gotoNodeNumber], "gotoNode":gotoNodeNumber!=""?[gotoNodeNumber]:[],
"sendBackNode":"beginnode", "sendBackNode":"beginnode",
"attribute":1 "attribute":1
} }
@ -79,7 +79,7 @@ const addType = (type:any)=> {
"childNode": props.childNodeP, "childNode": props.childNodeP,
"nodeUserList": [], "nodeUserList": [],
"fromNode": fromNodeNumber, "fromNode": fromNodeNumber,
"gotoNode":[gotoNodeNumber], "gotoNode":gotoNodeNumber!=""?[gotoNodeNumber]:[],
} }
// console.log("p5",data) // console.log("p5",data)
}else if (type == 3) { }else if (type == 3) {
@ -98,7 +98,7 @@ const addType = (type:any)=> {
"childNode": props.childNodeP, "childNode": props.childNodeP,
"nodeUserList": [], "nodeUserList": [],
"fromNode": fromNodeNumber, "fromNode": fromNodeNumber,
"gotoNode":[gotoNodeNumber], "gotoNode":gotoNodeNumber!=""?[gotoNodeNumber]:[],
"sendBackNode":"beginnode", "sendBackNode":"beginnode",
"attribute":1 "attribute":1
} }
@ -123,17 +123,17 @@ const addType = (type:any)=> {
"nodeNumber":snowflake1, "nodeNumber":snowflake1,
"nodeName": "条件1", "nodeName": "条件1",
"error": true, "error": true,
"type": 3, "type": 4,
"priorityLevel": 1, "priorityLevel": 1,
"conditionList": [], "conditionList": [],
"nodeUserList": [], "nodeUserList": [],
"childNode": props.childNodeP, "childNode": props.childNodeP,
"fromNode": onlyNumber, "fromNode": onlyNumber,
"gotoNode":gotoNodeNumber, "gotoNode":gotoNodeNumber!=""?[gotoNodeNumber]:[],
}, { }, {
"nodeNumber":snowflake2, "nodeNumber":snowflake2,
"nodeName": "条件2", "nodeName": "条件2",
"type": 3, "type": 4,
"priorityLevel": 2, "priorityLevel": 2,
"conditionList": [], "conditionList": [],
"nodeUserList": [], "nodeUserList": [],

2
src/components/workflow/dialog/common.ts

@ -16,7 +16,7 @@ export let getDepartmentList = async (parentId:any = 0) => {
parentId = 309 parentId = 309
} }
let { data } = await getBasisOrgChiled({ id:parentId.toString() }) let { data } = await getBasisOrgChiled({ id:parentId.toString() })
console.log("data---->",data) // console.log("data---->",data)
departments.value = data; departments.value = data;
} }
//搜索成员 //搜索成员

4
src/components/workflow/dialog/positionDialog.vue

@ -64,8 +64,8 @@ watch(() => props.visible, (val) => {
let total = computed(() => checkedRoleList.value.length) let total = computed(() => checkedRoleList.value.length)
const saveDialog = () => { const saveDialog = () => {
let checkedList = checkedRoleList.value.map(item => ({ let checkedList = checkedRoleList.value.map(item => ({
type: "position", type: 4,
targetId: item.id, targetId: item.id.toString(),
name: item.name name: item.name
})) }))
emits('change', checkedList) emits('change', checkedList)

4
src/components/workflow/drwer/approverDrawer.vue

@ -61,7 +61,7 @@ watch(visible,(val:any)=>{
}) })
watch(approverConfig1, (val:any)=>{ watch(approverConfig1, (val:any)=>{
console.log("directormaxlevel",visible.value) // console.log("directormaxlevel",visible.value)
approverConfig.value = val.value approverConfig.value = val.value
if(val.type == 3){ if(val.type == 3){
nodeTitle.value = "执行人设置" nodeTitle.value = "执行人设置"
@ -266,7 +266,7 @@ const sureFormTableApprover = (data:any)=> {
</select> </select>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<select v-model="approverConfig.directorLevel"> <select v-model="approverConfig.examineEndDirectorLevel">
<option v-for="item in props.directormaxlevel" :key="item" :value="item">{{item==1?'直接':''+item+''}}主管</option> <option v-for="item in props.directormaxlevel" :key="item" :value="item">{{item==1?'直接':''+item+''}}主管</option>
</select> </select>
</el-col> </el-col>

35
src/components/workflow/nodeWrap.vue

@ -48,6 +48,7 @@ let showText = computed(() => {
if (props.nodeConfig.type == 0) if (props.nodeConfig.type == 0)
return $func.arrToStr(props.flowPermission) || "所有人"; return $func.arrToStr(props.flowPermission) || "所有人";
if (props.nodeConfig.type == 1) return $func.setApproverStr(props.nodeConfig); if (props.nodeConfig.type == 1) return $func.setApproverStr(props.nodeConfig);
if (props.nodeConfig.type == 3) return $func.setApproverStr(props.nodeConfig);
// console.log("props.nodeConfig.type",props.nodeConfig.type); // console.log("props.nodeConfig.type",props.nodeConfig.type);
return $func.copyerStr(props.nodeConfig); return $func.copyerStr(props.nodeConfig);
}); });
@ -62,7 +63,7 @@ const resetConditionNodesErr = () => {
} }
}; };
const clickEvent = (index: any) => { const clickEvent = (index?: any) => {
if (index || index === 0) { if (index || index === 0) {
isInputList.value[index] = true; isInputList.value[index] = true;
} else { } else {
@ -172,12 +173,13 @@ const arrTransfer = (index: any, type = 1) => {
//-1,1 //-1,1
// eslint-disable-next-line vue/no-mutating-props // eslint-disable-next-line vue/no-mutating-props
props.nodeConfig.conditionNodes[index] = props.nodeConfig.conditionNodes[index] =
// eslint-disable-next-line vue/no-mutating-props
props.nodeConfig.conditionNodes.splice( props.nodeConfig.conditionNodes.splice(
index + type, index + type,
1, 1,
props.nodeConfig.conditionNodes[index] props.nodeConfig.conditionNodes[index]
)[0]; )[0];
props.nodeConfig.conditionNodes.map((item, index) => { props.nodeConfig.conditionNodes.map((item:any, index:any) => {
item.priorityLevel = index + 1; item.priorityLevel = index + 1;
}); });
resetConditionNodesErr(); resetConditionNodesErr();
@ -246,19 +248,9 @@ onMounted(() => {
><i class="fa fa-pencil-square-o"></i ><i class="fa fa-pencil-square-o"></i
></span> ></span>
<!--eslint-disable-next-line vue/no-mutating-props--> <!--eslint-disable-next-line vue/no-mutating-props-->
<input <input v-if="isInput" v-model="nodeConfig.nodeName" v-focus:placeholder="defaultText" type="text" class="ant-input editable-title-input" @blur="blurEvent()" @focus="$event.currentTarget.select()"/>
v-if="isInput"
v-model="nodeConfig.nodeName"
v-focus:placeholder="defaultText"
type="text"
class="ant-input editable-title-input"
@blur="blurEvent()"
@focus="$event.currentTarget.select()"
/>
<span v-else class="editable-title" @click="clickEvent()">{{ <span v-else class="editable-title" @click="clickEvent()">{{nodeConfig.nodeName}}</span>
nodeConfig.nodeName
}}</span>
<i class="fa fa-close close" @click="delNode"></i> <i class="fa fa-close close" @click="delNode"></i>
</template> </template>
</div> </div>
@ -278,10 +270,7 @@ onMounted(() => {
</div> </div>
</div> </div>
<!--eslint-disable-next-line vue/no-mutating-props--> <!--eslint-disable-next-line vue/no-mutating-props-->
<addNode <addNode v-model:childNodeP="nodeConfig.childNode" :node-config="props.nodeConfig" />
v-model:childNodeP="nodeConfig.childNode"
:node-config="props.nodeConfig"
/>
</div> </div>
<!--路由模块--> <!--路由模块-->
<div v-if="nodeConfig.type == 5" class="node-wrap"> <div v-if="nodeConfig.type == 5" class="node-wrap">
@ -361,18 +350,12 @@ onMounted(() => {
</div> </div>
</div> </div>
<!--eslint-disable-next-line vue/no-mutating-props--> <!--eslint-disable-next-line vue/no-mutating-props-->
<addNode <addNode v-model:childNodeP="nodeConfig.childNode" :node-config="props.nodeConfig" />
v-model:childNodeP="nodeConfig.childNode"
:node-config="props.nodeConfig"
/>
</div> </div>
</div> </div>
<!--循环组件--> <!--循环组件-->
<!--eslint-disable-next-line vue/no-mutating-props--> <!--eslint-disable-next-line vue/no-mutating-props-->
<nodeWrap <nodeWrap v-if="nodeConfig.childNode" v-model:nodeConfig="nodeConfig.childNode"/>
v-if="nodeConfig.childNode"
v-model:nodeConfig="nodeConfig.childNode"
/>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.nodeIcon { .nodeIcon {

109
src/components/workflow/selectBox.vue

@ -1,109 +0,0 @@
<!--
@ 作者: 秦东
@ 时间: 2023-10-13 08:48:13
@ 备注: 选在人员或角色通用模块
-->
<script lang='ts' setup>
defineProps({
list: {
type: Array,
default: () => []
}
})
</script>
<template>
<ul class="select-box">
<template v-for="(elem, i) in list" :key="i">
<template v-if="elem.type === 'role'">
<li v-for="item in elem.data" :key="item.roleId"
class="check_box"
:class="{active: elem.isActive && elem.isActive(item), not: elem.not}"
@click="elem.change(item)">
<a :title="item.description" :class="{active: elem.isActiveItem && elem.isActiveItem(item)}">
<img src="@/assets/images/icon_role.png">{{item.roleName}}
</a>
</li>
</template>
<template v-if="elem.type === 'department'">
<li v-for="item in elem.data" :key="item.id" class="check_box not" :class="{not: !elem.isDepartment}">
<a v-if="elem.isDepartment" :class="elem.isActive(item) && 'active'" @click="elem.change(item)">
<img src="@/assets/images/icon_file.png">{{item.departmentName}}
</a>
<a v-else><img src="@/assets/images/icon_file.png">{{item.departmentName}}</a>
<i @click="elem.next(item)">下级</i>
</li>
</template>
<template v-if="elem.type === 'employee'">
<li v-for="item in elem.data" :key="item.id" class="check_box">
<a :class="elem.isActive(item) && 'active'" :title="item.departmentNames" @click="elem.change(item)" >
<img v-if="item.icon != ''" :src="item.icon">
<img v-if="item.icon == '' && item.iconToBase64 != ''" :src="item.iconToBase64">
<img v-if="item.icon == '' && item.iconToBase64 == ''" src="@/assets/images/icon_people.png">{{item.employeeName}}
</a>
</li>
</template>
</template>
</ul>
</template>
<style lang="less">
.select-box {
height: 420px;
overflow-y: auto;
li {
padding: 5px 0;
i {
float: right;
padding-left: 24px;
padding-right: 10px;
color: #3195f8;
font-size: 12px;
cursor: pointer;
background: url('../../assets/images/next_level_active.png') no-repeat 10px center;
border-left: 1px solid rgb(238, 238, 238);
}
a.active+i {
color: rgb(197, 197, 197);
background-image: url('../../assets/images/next_level.png');
pointer-events: none;
}
img {
width: 14px;
vertical-align: middle;
margin-right: 5px;
}
}
}
.not{
a{
padding-left:20px
}
}
.not a::before {
position: absolute;
width: 14px;
height: 14px;
border: 1px solid #dcdfe6;
border-radius: 2px;
left: 0;
top: 1px;
content: "";
}
.not a.active {
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
top: 3px;
left: 3px;
content: "";
background: url("../../assets/images/check_box.png") no-repeat center;
}
</style>

2
src/components/workflow/selectBoxs.vue

@ -7,7 +7,7 @@
defineProps({ defineProps({
list: { list: {
type: Array, type: Array,
default: () => [] default: () => [{ type: 'role', data:any, cancel:()=>{} }]
} }
}) })
</script> </script>

2
src/utils/request.ts

@ -33,7 +33,7 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response: AxiosResponse) => { (response: AxiosResponse) => {
const { code, msg } = response.data; const { code, msg } = response.data;
if (code === 0) { if (code === 0 || code === 10001) {
return response.data; return response.data;
} }
if (code === 7 || code === 300 || code === 301 || code === 302){ if (code === 7 || code === 300 || code === 301 || code === 302){

8
src/utils/workflow/index.ts

@ -75,6 +75,7 @@ All.prototype = {
// return "指定成员" // return "指定成员"
} }
} else if (nodeConfig.settype == 2) { } else if (nodeConfig.settype == 2) {
let level = nodeConfig.directorLevel == 1 ? '直接主管' : '第' + nodeConfig.directorLevel + '级主管' let level = nodeConfig.directorLevel == 1 ? '直接主管' : '第' + nodeConfig.directorLevel + '级主管'
if (nodeConfig.examineMode == 1) { if (nodeConfig.examineMode == 1) {
return level return level
@ -84,14 +85,14 @@ All.prototype = {
return level + + "非会签" return level + + "非会签"
} }
} else if (nodeConfig.settype == 3) { } else if (nodeConfig.settype == 3) {
console.log("nodeConfig==会签==>",nodeConfig) // console.log("nodeConfig==会签==>",nodeConfig)
if (nodeConfig.nodeUserList.length == 1) { if (nodeConfig.nodeUserList.length == 1) {
return nodeConfig.nodeUserList[0].name return nodeConfig.nodeUserList[0].name
}else{ }else{
return "指定行政岗位" return "指定行政岗位"
} }
} else if (nodeConfig.settype == 4) { } else if (nodeConfig.settype == 4) {
console.log("nodeConfig.selectRange",nodeConfig.selectRange,nodeConfig.nodeUserList); // console.log("nodeConfig.selectRange",nodeConfig.selectRange,nodeConfig.nodeUserList);
if (nodeConfig.selectRange == 1) { if (nodeConfig.selectRange == 1) {
return "发起人自选" return "发起人自选"
} else { } else {
@ -108,11 +109,12 @@ All.prototype = {
} else if (nodeConfig.settype == 5) { } else if (nodeConfig.settype == 5) {
return "发起人自己" return "发起人自己"
} else if (nodeConfig.settype == 6) { } else if (nodeConfig.settype == 6) {
// console.log("nodeConfig==直接主管==>",nodeConfig)
return '从直接主管到通讯录中级别最高的第' + nodeConfig.examineEndDirectorLevel + '个层级主管' return '从直接主管到通讯录中级别最高的第' + nodeConfig.examineEndDirectorLevel + '个层级主管'
}else if (nodeConfig.settype == 7){ }else if (nodeConfig.settype == 7){
return "指定前置审批为本节点设置审批人" return "指定前置审批为本节点设置审批人"
}else if (nodeConfig.settype == 8){ }else if (nodeConfig.settype == 8){
console.log("checkedFormList--1111->",nodeConfig) // console.log("checkedFormList--1111->",nodeConfig)
if(nodeConfig.nodeUserList.length > 0){ if(nodeConfig.nodeUserList.length > 0){
if (nodeConfig.examineMode == 1) { if (nodeConfig.examineMode == 1) {
return nodeConfig.nodeUserList[0].name + "依次审批" return nodeConfig.nodeUserList[0].name + "依次审批"

2
src/views/sysworkflow/codepage/index.vue

@ -154,7 +154,7 @@ const customerFormName = ref<string>()
const flowKey = ref<string>() const flowKey = ref<string>()
const setupWorkFlow = (cont:customerFormCont) => { const setupWorkFlow = (cont:customerFormCont) => {
drawerWidht.value = contbody.value?.clientWidth drawerWidht.value = contbody.value?.clientWidth
// console.log("clientHeight--->",drawerWidht.value) // console.log("clientHeight--->",cont)
drawer.value = true drawer.value = true
isFormFlow.value = true; isFormFlow.value = true;
customerFormName.value = cont.name customerFormName.value = cont.name

226
src/views/sysworkflow/flow/flowDrawingBoard.vue

@ -8,7 +8,11 @@ import '@/styles/workflowcss/workflow.scss'
import { useStore } from '@/store/workflow/index' import { useStore } from '@/store/workflow/index'
import { flowversion } from '@/api/workflowapi/types' import { flowversion } from '@/api/workflowapi/types'
<<<<<<< HEAD
import { initializeWorkFlow,setWorkFlowData,gainFlowVersionList } from '@/api/workflowapi/index' import { initializeWorkFlow,setWorkFlowData,gainFlowVersionList } from '@/api/workflowapi/index'
=======
import { initializeWorkFlow,setWorkFlowData,gainFlowVersionList,saveFlowCont,gainFlowInfo,editFlowCont,saveNewFlow,switchFlowVersion } from '@/api/workflowapi/index'
>>>>>>> v3
// //
import errorDialog from "@/components/workflow/dialog/errorDialog.vue"; import errorDialog from "@/components/workflow/dialog/errorDialog.vue";
@ -65,21 +69,44 @@ const shenPiTitle = ref<string>("")
const activeTabs = ref<string>(""); // const activeTabs = ref<string>(""); //
const versionList = ref<flowversion[]>(); // const versionList = ref<flowversion[]>(); //
const enableFlow = ref<any>();
const isRead = ref(false)
const enableVersion = ref<string>();
// //
const getFlowVerList = ()=>{ const getFlowVerList = ()=>{
gainFlowVersionList({id:props.flowKey.toString()}) gainFlowVersionList({id:props.customerFormKey.toString()})
.then(({data})=>{ .then(({data})=>{
if(data){ if(data){
if(data.length>0){ if(data.length>0){
data.forEach((item:any)=>{ data.forEach((item:any)=>{
if(item.state == 1){ if(item.state == 1){
activeTabs.value = item.version activeTabs.value = item.id
enableFlow.value = item
enableVersion.value = item.id
} }
}) })
<<<<<<< HEAD
versionList.value = data; versionList.value = data;
=======
isRead.value = true
}else{
isRead.value = false
>>>>>>> v3
} }
} }
console.log("获取工作流版本列表---1-->",activeTabs.value);
console.log("获取工作流版本列表---2-->",enableFlow.value);
console.log("获取工作流版本列表---3-->",enableVersion.value);
})
.finally(()=>{
if(isRead.value == true){
gainFlowCont();
}else{
clearCanvas(1);
}
clickOpenOrClose();
}) })
} }
@ -99,17 +126,18 @@ const initWorkFlowData = async() => {
workFlowDef:workName, workFlowDef:workName,
tableId, tableId,
} = data; } = data;
processConfig.value.workFlowDef.formKey = props.customerFormKey
nodeConfig.value = nodes; nodeConfig.value = nodes;
flowPermission = flowPermission; flowPermission.value = flowPermission;
directorMaxLeveling = directorMaxLevel; directorMaxLeveling.value = directorMaxLevel;
workFlowDef.value = workName; workFlowDef.value = workName;
setTableId(tableId); setTableId(tableId);
// console.log("max--1->",data) // console.log("max--1->",data)
// console.log("max--6->",tableId) // console.log("max--6->",tableId)
// console.log("max--2->",flowPermission) // console.log("max--2->",flowPermission)
// console.log("max--3->",flowPermission) // console.log("max--3->",nodeConfig)
// console.log("max--4->",directorMaxLevel) // console.log("max--4->",directorMaxLevel)
console.log("max--5->",workName) // console.log("max--5->",processConfig)
} }
// //
const reErr = ({ childNode }:any) => { const reErr = ({ childNode }:any) => {
@ -153,7 +181,18 @@ const saveSet = async () => {
console.log("processConfig",processConfig.value); console.log("processConfig",processConfig.value);
console.log("flowPermission",flowPermission.value); console.log("flowPermission",flowPermission.value);
console.log("nodeConfig",nodeConfig.value); console.log("nodeConfig",nodeConfig.value);
saveFlowCont(processConfig.value)
.then((data:any) => {
if(data.code == 0){
ElMessage.success("设置成功");
emits("update:openDrawer", false);
clearCanvas(1);
}
})
.finally(()=>{
})
// let res = await setWorkFlowData(processConfig.value); // let res = await setWorkFlowData(processConfig.value);
// if (res.code == 200) { // if (res.code == 200) {
// ElMessage.success("") // ElMessage.success("")
@ -178,35 +217,169 @@ const zoomSize = (type:number) => {
} }
}; };
// //
const clearCanvas = () =>{ const clearCanvas = (isOk?:number) =>{
ElMessageBox.confirm('确定要清空画布?') if(isOk==1){
.then(() => {
initWorkFlowData() initWorkFlowData()
setIsTried(false); setIsTried(false);
tipList.value = [] tipList.value = []
}) }else{
ElMessageBox.confirm('确定要清空画布?')
.then(() => {
initWorkFlowData()
setIsTried(false);
tipList.value = []
})
}
enableFlow.value = ""
} }
watch(()=>props.openDrawer,(val)=>{ watch(()=>props.openDrawer,(val)=>{
// console.log("1111",props.customerFormKey,val)
if(val){ if(val){
if(props.flowKey != ""){ if(props.customerFormKey != ""){
getFlowVerList() getFlowVerList()
}else{ }else{
initWorkFlowData()
} }
initWorkFlowData()
shenPiTitle.value = props.customerFormName shenPiTitle.value = props.customerFormName
}else{ }else{
setIsTried(false); setIsTried(false);
tipList.value = [] tipList.value = []
enableFlow.value = ""
isRead.value=false
} }
}) })
// //
const clickFormTable = (val:any) =>{ const clickFormTable = (val:any) =>{
// console.log("",val,formTableIndex.value) console.log("切换表单",val,activeTabs.value)
enableVersion.value = val
gainFlowCont();
clickOpenOrClose();
// getTableFieldList(versionIndex.value,val) // getTableFieldList(versionIndex.value,val)
} }
//
const saveEdit =()=>{
setIsTried(true);
tipList.value = [];
reErr(nodeConfig.value);
if (tipList.value.length != 0) {
tipVisible.value = true;
return;
}
processConfig.value.flowPermission = flowPermission.value;
// eslint-disable-next-line no-console
console.log("processConfig",flowPermission);
// console.log("flowPermission",flowPermission.value);
console.log("activeTabs",enableFlow.value);
let sendCont = {
id:enableVersion.value.toString(),
flowinfo:processConfig.value
}
editFlowCont(sendCont)
.then((data:any) => {
if(data.code == 0){
ElMessage.success("设置成功");
emits("update:openDrawer", false);
clearCanvas(1);
}
})
.finally(()=>{
})
}
//
const saveNew = () => {
setIsTried(true);
tipList.value = [];
reErr(nodeConfig.value);
if (tipList.value.length != 0) {
tipVisible.value = true;
return;
}
processConfig.value.flowPermission = flowPermission.value;
// eslint-disable-next-line no-console
// console.log("processConfig",flowPermission);
// console.log("flowPermission",flowPermission.value);
// console.log("activeTabs",enableFlow.value);
let sendCont = {
id:enableVersion.value.toString(),
flowinfo:processConfig.value
}
saveNewFlow(sendCont)
.then((data:any) => {
if(data.code == 0){
ElMessage.success("设置成功");
emits("update:openDrawer", false);
clearCanvas(1);
}
})
}
//
const gainFlowCont = () =>{
gainFlowInfo({id:enableVersion.value.toString()})
.then((data:any)=>{
// console.log("-1->",data,enableFlow.value)
if(data.code == 0){
processConfig.value = data.data;
processConfig.value.workFlowDef.formKey = props.customerFormKey
nodeConfig.value = data.data.nodeConfig;
flowPermission.value = data.data.flowPermission;
directorMaxLeveling = data.data.directorMaxLevel;
workFlowDef.value = data.data.workFlowDef;
setTableId(data.data.tableId);
// console.log("max--1->",data)
// console.log("max--6->",data.data.tableId)
// console.log("max--2->",data.data.flowPermission)
// console.log("max--3->",nodeConfig)
// console.log("max--4->",data.data.directorMaxLevel)
// console.log("max--5->",processConfig.value)
}else{
clearCanvas(1);
}
// initWorkFlowData();
})
}
//
const setupState = (val:number) =>{
let sendCont = {
id:enableVersion.value.toString(),
status:val
}
switchFlowVersion(sendCont)
.then((data)=>{
ElMessage.success(data.msg);
// activeTabs.value = enableVersion.value
// enableFlow.value.id = enableVersion.value
if(versionList.value.length > 0){
versionList.value.forEach(item=>{
if(item.id == enableVersion.value){
enableFlow.value = item
}
})
}
})
.finally(()=>{
clickOpenOrClose();
})
console.log("enableFlow.version==activeTabs",enableFlow.version,activeTabs)
}
const openOfClise = ref(false)
const clickOpenOrClose = () => {
if(enableFlow.value.id==activeTabs.value){
openOfClise.value = true
}else{
openOfClise.value = false
}
console.log("openOfClise",openOfClise.value)
console.log("enableFlow.version=1=activeTabs",enableFlow.value,activeTabs.value)
}
</script> </script>
<template> <template>
<el-drawer v-model="isShow" :size="props.drawerWidht" :show-close="false"> <el-drawer v-model="isShow" :size="props.drawerWidht" :show-close="false">
@ -219,10 +392,18 @@ const clickFormTable = (val:any) =>{
<el-icon class="el-icon--left"><Delete /></el-icon> <el-icon class="el-icon--left"><Delete /></el-icon>
清空 清空
</el-button> </el-button>
<el-button type="primary" @click="saveSet"> <el-button v-if="!isRead" type="primary" @click="saveSet">
<el-icon class="el-icon--left"><Promotion /></el-icon> <el-icon class="el-icon--left"><Promotion /></el-icon>
发布 发布
</el-button> </el-button>
<el-button v-if="isRead" type="primary" @click="saveEdit">
<el-icon class="fa fa-save" style="margin-right:5px"></el-icon>
保存
</el-button>
<el-button v-if="isRead" color="#626aef" @click="saveNew">
<el-icon class="el-icon--left"><Share /></el-icon>
另存为新版
</el-button>
<el-button type="danger" @click="close"> <el-button type="danger" @click="close">
<el-icon class="el-icon--left"><CircleCloseFilled /></el-icon> <el-icon class="el-icon--left"><CircleCloseFilled /></el-icon>
关闭 关闭
@ -230,20 +411,21 @@ const clickFormTable = (val:any) =>{
</template> </template>
<div class="canvas_body"> <div class="canvas_body">
<el-row v-if="props.flowKey!=''" :gutter="20"> <el-row v-if="isRead" :gutter="20">
<el-col :span="20"> <el-col :span="22">
<el-tabs v-model="activeTabs" class="flow_version" @tab-change="clickFormTable"> <el-tabs v-model="activeTabs" class="flow_version" @tab-change="clickFormTable">
<el-tab-pane v-for="item in versionList" :key="item.id"> <el-tab-pane v-for="item in versionList" :key="item.id" :label="item.version" :name="item.id">
<template #label> <template #label>
<span class="custom-tabs-label"> <span class="custom-tabs-label">
<span>{{ item.version }}}</span> <span>V{{ item.version }}</span>
</span> </span>
</template> </template>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-col> </el-col>
<el-col :span="3" style="text-align: center;"> <el-col :span="1" style="text-align: center; display: flex; margin: auto;">
<el-button type="primary" round>启用</el-button> <el-button v-if="openOfClise" type="danger" size="small" round @click="setupState(2)">禁用</el-button>
<el-button v-if="!openOfClise" type="success" size="small" round @click="setupState(1)">启用</el-button>
</el-col> </el-col>
</el-row> </el-row>
<div class="fd-nav-content-new"> <div class="fd-nav-content-new">

2
src/views/sysworkflow/flow/flowcanvas.vue

@ -7,7 +7,7 @@
import '@/styles/workflowcss/workflow.scss' import '@/styles/workflowcss/workflow.scss'
import { useStore } from '@/store/workflow/index' import { useStore } from '@/store/workflow/index'
import { tipListStrucr } from '@/api/workflowapi/types'
import { initializeWorkFlow,setWorkFlowData } from '@/api/workflowapi/index' import { initializeWorkFlow,setWorkFlowData } from '@/api/workflowapi/index'
let { setTableId, setIsTried } = useStore() let { setTableId, setIsTried } = useStore()

41
src/views/sysworkflow/flow/index.vue

@ -16,6 +16,18 @@ const openfloaw = ()=>{
} }
const isFormFlow = ref(false) const isFormFlow = ref(false)
const customerFormKey = ref<string>() const customerFormKey = ref<string>()
const scrollContainer = ref<any>(null)
const fixedElement = ref<any>(null)
const scrollToFixed = () =>{
console.log("scrollToFixed",scrollContainer.value?.offsetTop)
console.log("scrollToFixed",fixedElement.value?.offsetTop)
scrollContainer.value.scrollIntoView({
behavior: "smooth"
})
scrollContainer.value.scrollTop = fixedElement.value?.offsetTop - scrollContainer.value?.offsetTop
}
</script> </script>
<template> <template>
<div ref="flowcont"> <div ref="flowcont">
@ -23,7 +35,34 @@ const customerFormKey = ref<string>()
<FlowDrawingBoard v-model:open-drawer="drawer" :drawer-widht = "drawerWidht" :is-form-flow="isFormFlow" :customer-form-key="customerFormKey" /> <FlowDrawingBoard v-model:open-drawer="drawer" :drawer-widht = "drawerWidht" :is-form-flow="isFormFlow" :customer-form-key="customerFormKey" />
<div ref="scrollContainer" style="height: 200px; overflow: auto;">
<!-- 这里是滚动内容 -->
<div ref="fixedElement">指定位置元素</div>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</div>
<button @click="scrollToFixed">滚动到指定位置</button>
</div> </div>
</template> </template>
<style lang='scss' scoped> <style lang='scss' scoped>

Loading…
Cancel
Save