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;
creatername:string;
creatertime:string;
flowkey:any;
}
export type CustomerFormPageResult = PageResult<customerFormCont[]>;

40
src/api/workflowapi/index.ts

@ -55,3 +55,43 @@ export function gainFlowVersionList(data: publicid): AxiosPromise<flowversion[]>
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)=>{
console.log("选定版本----表单--->",val)
// console.log("------->",val)
})
</script>
<template>

20
src/components/workflow/addNode.vue

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

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

@ -16,7 +16,7 @@ export let getDepartmentList = async (parentId:any = 0) => {
parentId = 309
}
let { data } = await getBasisOrgChiled({ id:parentId.toString() })
console.log("data---->",data)
// console.log("data---->",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)
const saveDialog = () => {
let checkedList = checkedRoleList.value.map(item => ({
type: "position",
targetId: item.id,
type: 4,
targetId: item.id.toString(),
name: item.name
}))
emits('change', checkedList)

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

@ -61,7 +61,7 @@ watch(visible,(val:any)=>{
})
watch(approverConfig1, (val:any)=>{
console.log("directormaxlevel",visible.value)
// console.log("directormaxlevel",visible.value)
approverConfig.value = val.value
if(val.type == 3){
nodeTitle.value = "执行人设置"
@ -266,7 +266,7 @@ const sureFormTableApprover = (data:any)=> {
</select>
</el-col>
<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>
</select>
</el-col>

35
src/components/workflow/nodeWrap.vue

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

2
src/utils/request.ts

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

8
src/utils/workflow/index.ts

@ -75,6 +75,7 @@ All.prototype = {
// return "指定成员"
}
} else if (nodeConfig.settype == 2) {
let level = nodeConfig.directorLevel == 1 ? '直接主管' : '第' + nodeConfig.directorLevel + '级主管'
if (nodeConfig.examineMode == 1) {
return level
@ -84,14 +85,14 @@ All.prototype = {
return level + + "非会签"
}
} else if (nodeConfig.settype == 3) {
console.log("nodeConfig==会签==>",nodeConfig)
// console.log("nodeConfig==会签==>",nodeConfig)
if (nodeConfig.nodeUserList.length == 1) {
return nodeConfig.nodeUserList[0].name
}else{
return "指定行政岗位"
}
} 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) {
return "发起人自选"
} else {
@ -108,11 +109,12 @@ All.prototype = {
} else if (nodeConfig.settype == 5) {
return "发起人自己"
} else if (nodeConfig.settype == 6) {
// console.log("nodeConfig==直接主管==>",nodeConfig)
return '从直接主管到通讯录中级别最高的第' + nodeConfig.examineEndDirectorLevel + '个层级主管'
}else if (nodeConfig.settype == 7){
return "指定前置审批为本节点设置审批人"
}else if (nodeConfig.settype == 8){
console.log("checkedFormList--1111->",nodeConfig)
// console.log("checkedFormList--1111->",nodeConfig)
if(nodeConfig.nodeUserList.length > 0){
if (nodeConfig.examineMode == 1) {
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 setupWorkFlow = (cont:customerFormCont) => {
drawerWidht.value = contbody.value?.clientWidth
// console.log("clientHeight--->",drawerWidht.value)
// console.log("clientHeight--->",cont)
drawer.value = true
isFormFlow.value = true;
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 { flowversion } from '@/api/workflowapi/types'
<<<<<<< HEAD
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";
@ -65,21 +69,44 @@ const shenPiTitle = ref<string>("")
const activeTabs = ref<string>(""); //
const versionList = ref<flowversion[]>(); //
const enableFlow = ref<any>();
const isRead = ref(false)
const enableVersion = ref<string>();
//
const getFlowVerList = ()=>{
gainFlowVersionList({id:props.flowKey.toString()})
gainFlowVersionList({id:props.customerFormKey.toString()})
.then(({data})=>{
if(data){
if(data.length>0){
data.forEach((item:any)=>{
if(item.state == 1){
activeTabs.value = item.version
activeTabs.value = item.id
enableFlow.value = item
enableVersion.value = item.id
}
})
<<<<<<< HEAD
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,
tableId,
} = data;
processConfig.value.workFlowDef.formKey = props.customerFormKey
nodeConfig.value = nodes;
flowPermission = flowPermission;
directorMaxLeveling = directorMaxLevel;
flowPermission.value = flowPermission;
directorMaxLeveling.value = directorMaxLevel;
workFlowDef.value = workName;
setTableId(tableId);
// console.log("max--1->",data)
// console.log("max--6->",tableId)
// console.log("max--2->",flowPermission)
// console.log("max--3->",flowPermission)
// console.log("max--3->",nodeConfig)
// console.log("max--4->",directorMaxLevel)
console.log("max--5->",workName)
// console.log("max--5->",processConfig)
}
//
const reErr = ({ childNode }:any) => {
@ -153,7 +181,18 @@ const saveSet = async () => {
console.log("processConfig",processConfig.value);
console.log("flowPermission",flowPermission.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);
// if (res.code == 200) {
// ElMessage.success("")
@ -178,35 +217,169 @@ const zoomSize = (type:number) => {
}
};
//
const clearCanvas = () =>{
ElMessageBox.confirm('确定要清空画布?')
.then(() => {
const clearCanvas = (isOk?:number) =>{
if(isOk==1){
initWorkFlowData()
setIsTried(false);
tipList.value = []
})
}else{
ElMessageBox.confirm('确定要清空画布?')
.then(() => {
initWorkFlowData()
setIsTried(false);
tipList.value = []
})
}
enableFlow.value = ""
}
watch(()=>props.openDrawer,(val)=>{
// console.log("1111",props.customerFormKey,val)
if(val){
if(props.flowKey != ""){
if(props.customerFormKey != ""){
getFlowVerList()
}else{
initWorkFlowData()
}
initWorkFlowData()
shenPiTitle.value = props.customerFormName
}else{
setIsTried(false);
tipList.value = []
enableFlow.value = ""
isRead.value=false
}
})
//
const clickFormTable = (val:any) =>{
// console.log("",val,formTableIndex.value)
console.log("切换表单",val,activeTabs.value)
enableVersion.value = val
gainFlowCont();
clickOpenOrClose();
// 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>
<template>
<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-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-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-icon class="el-icon--left"><CircleCloseFilled /></el-icon>
关闭
@ -230,20 +411,21 @@ const clickFormTable = (val:any) =>{
</template>
<div class="canvas_body">
<el-row v-if="props.flowKey!=''" :gutter="20">
<el-col :span="20">
<el-row v-if="isRead" :gutter="20">
<el-col :span="22">
<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>
<span class="custom-tabs-label">
<span>{{ item.version }}}</span>
<span>V{{ item.version }}</span>
</span>
</template>
</el-tab-pane>
</el-tabs>
</el-col>
<el-col :span="3" style="text-align: center;">
<el-button type="primary" round>启用</el-button>
<el-col :span="1" style="text-align: center; display: flex; margin: auto;">
<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-row>
<div class="fd-nav-content-new">

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

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

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

@ -16,6 +16,18 @@ const openfloaw = ()=>{
}
const isFormFlow = ref(false)
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>
<template>
<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" />
<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>
</template>
<style lang='scss' scoped>

Loading…
Cancel
Save