Browse Source

流程界面CURD操作完成

liwenxuan_v2
超级管理员 2 years ago
parent
commit
d57a248130
  1. 40
      src/api/workflowapi/index.ts
  2. 2
      src/components/DesignForm/public/headTools.vue
  3. 8
      src/components/workflow/addNode.vue
  4. 2
      src/components/workflow/dialog/common.ts
  5. 4
      src/components/workflow/dialog/positionDialog.vue
  6. 4
      src/components/workflow/drwer/approverDrawer.vue
  7. 5
      src/components/workflow/nodeWrap.vue
  8. 2
      src/utils/request.ts
  9. 8
      src/utils/workflow/index.ts
  10. 2
      src/views/sysworkflow/codepage/index.vue
  11. 213
      src/views/sysworkflow/flow/flowDrawingBoard.vue
  12. 39
      src/views/sysworkflow/flow/index.vue

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>

8
src/components/workflow/addNode.vue

@ -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
}
@ -129,7 +129,7 @@ const addType = (type:any)=> {
"nodeUserList": [],
"childNode": props.childNodeP,
"fromNode": onlyNumber,
"gotoNode":gotoNodeNumber,
"gotoNode":gotoNodeNumber!=""?[gotoNodeNumber]:[],
}, {
"nodeNumber":snowflake2,
"nodeName": "条件2",

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>

5
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);
});
@ -249,9 +250,7 @@ onMounted(() => {
<!--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()"/>
<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>

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

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

@ -8,7 +8,7 @@ import '@/styles/workflowcss/workflow.scss'
import { useStore } from '@/store/workflow/index'
import { flowversion } from '@/api/workflowapi/types'
import { initializeWorkFlow,setWorkFlowData,gainFlowVersionList } from '@/api/workflowapi/index'
import { initializeWorkFlow,setWorkFlowData,gainFlowVersionList,saveFlowCont,gainFlowInfo,editFlowCont,saveNewFlow,switchFlowVersion } from '@/api/workflowapi/index'
//
import errorDialog from "@/components/workflow/dialog/errorDialog.vue";
@ -65,20 +65,40 @@ 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){
versionList.value = data;
data.forEach(item=>{
if(item.state == 1){
activeTabs.value = item.version
activeTabs.value = item.id
enableFlow.value = item
enableVersion.value = item.id
}
})
isRead.value = true
}else{
isRead.value = false
}
}
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();
})
}
@ -98,17 +118,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) => {
@ -152,7 +173,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("")
@ -177,35 +209,169 @@ const zoomSize = (type:number) => {
}
};
//
const clearCanvas = () =>{
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">
@ -218,10 +384,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>
关闭
@ -229,20 +403,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">

39
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,8 +35,35 @@ 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>
.canvas_body{

Loading…
Cancel
Save