Browse Source

Merge branch 'qin_v9_master'

lwx_v12
超级管理员 1 year ago
parent
commit
2c9f3f4f62
  1. 16
      src/api/DesignForm/requestapi.ts
  2. 9
      src/api/taskapi/management.ts
  3. 85
      src/components/DesignForm/app/formPage.vue
  4. 13
      src/components/DesignForm/app/index.vue
  5. 6
      src/components/DesignForm/public/form/childTable.vue
  6. 1
      src/components/DesignForm/public/form/formGroup.vue
  7. 27
      src/components/DesignForm/tableListPage/formPageCont.vue
  8. 389
      src/components/DesignForm/tableListPage/formPageContApp.vue
  9. 2
      src/styles/workflowcss/workflow.css
  10. 2
      src/styles/workflowcss/workflow.min.css
  11. 4
      src/styles/workflowcss/workflow.scss
  12. 1
      src/types/components.d.ts
  13. 1
      src/views/sysworkflow/lowcodepage/runApp/operationAction/AppEditPage.vue
  14. 13
      src/views/sysworkflow/lowcodepage/runApp/regularPage/completedMattersPage.vue
  15. 222
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue
  16. 229
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate_20240616.vue
  17. 31
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myDrafts.vue
  18. 30
      src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue
  19. 39
      src/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue
  20. 218
      src/views/taskplatform/taskmanagement/lookFlowInfoApp.vue
  21. 18
      src/views/taskplatform/taskmanagement/runFlowStep.vue
  22. 249
      src/views/taskplatform/taskmanagement/runFlowStepApp.vue
  23. 4
      src/widget/number/index.vue

16
src/api/DesignForm/requestapi.ts

@ -528,3 +528,19 @@ export function saveDraftAgain(data: any) {
data: data
});
}
//编辑任务
export function editCustomerTable(data: any) {
return request({
url: '/systemapi/task_management/editCustomerTable',
method: 'post',
data: data
});
}
//重新提交(有流程就发动流程,无流程就正常发表)
export function afreshAppSubmit(data: any) {
return request({
url: '/systemapi/task_flow/afreshAppSubmit',
method: 'post',
data: data
});
}

9
src/api/taskapi/management.ts

@ -84,6 +84,7 @@ export function gainTaskFormInfo(data: customerFormLogo):AxiosPromise<customerFo
data: data
});
}
//获取工作流步进节点
export function softDeletion(data: any):any{
return request({
@ -149,6 +150,14 @@ export function authorizeWorkflow(data?:any){
data: data
});
}
export function runTaskFlow(data?:any){
return request({
url: '/systemapi/task_management/runTaskFlow',
method: 'post',
data: data
});
}
//获取流程可见范围
export function gainFlowLookSee(data?:any){
return request({

85
src/components/DesignForm/app/formPage.vue

@ -6,6 +6,7 @@
<script lang='ts' setup>
import '@/assets/scss/element-var.scss'
import '@/assets/scss/index.scss'
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { FormData,FormList,FormDataStyle } from '@/api/DesignForm/types'
import { useRoute, useRouter } from 'vue-router'
import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
@ -19,7 +20,7 @@ import {
} from '@/api/DesignForm/utils'
import formatResult from '@/utils/DesignForm/formatResult'
import formChangeValue from '@/utils/DesignForm/formChangeValue'
import { judgeSubmitCancel,gainRunFlowStart,startRunFlow,saveDraftAgain } from '@/api/DesignForm/requestapi'
import { judgeSubmitCancel,gainRunFlowStart,startRunFlow,saveDraftAgain,afreshAppSubmit } from '@/api/DesignForm/requestapi'
import { notAsA_BasisForJudgment,asAnApprovalActionControl,fixedValueControl,timeControl,timeEquation,submitButton, afreshSubmitButton } from '@/utils/workflow/const'
import { jsonParseStringify } from '@/utils/DesignForm'
//
@ -96,6 +97,7 @@ const emits = defineEmits<{
(e: 'btnClick', type: string): void
(e: 'change', val: any): void //
(e: 'update:issave', type: boolean): void
(e: 'closePage', type: string): void
}>()
const route = useRoute()
@ -157,7 +159,7 @@ const model = ref<any>({})
//
watch(()=>props.isWorkFlow,(val:number)=>{
console.log("获取流程----->",val)
console.log("监听是否为流程表单----->",val,formProps)
if(val == 1){
getFlowInitSwps()
}
@ -361,7 +363,7 @@ watch(() => props.options,(val:any) => {
*/
provide(constFormBtnEvent, (obj: any) => {
emits('btnClick', obj.key)
// xz
console.log("按钮组件事件-----2-------->",obj.key)
if ([3, 4, 5].includes(props.type)) {
return ElMessage.error('当前模式不能提交表单')
}
@ -385,6 +387,7 @@ provide(constFormBtnEvent, (obj: any) => {
saveDraftAgainSend()
break
case 'afreshSubmit': //
appAfreshSubmit()
break
case 'draftSubmit': //稿
@ -398,6 +401,57 @@ provide(constFormBtnEvent, (obj: any) => {
})
/**
@ 作者: 秦东
@ 时间: 2024-06-13 11:11:13
@ 功能: app重新提交表单
*/
const appAfreshSubmit = (params = {}) => {
let addUrl = props.formData.config?.addUrl || props.addUrl
console.log("自定义App提交表单", props.addUrl)
if (props.isSearch || !addUrl || loading.value) {
if (!props.isSearch && !addUrl) {
console.error(
new Error('请在表单设计处配置接口事件url或选择数据源或设置props')
)
}
return
}
validate((valid: boolean, fields: any) => {
if (valid) {
const formatParams = Object.assign({}, fields, params)
let submitParams
const beforeSubmit = props.formData.events?.beforeSubmit
if (beforeSubmit) {
if (typeof beforeSubmit === 'function') {
submitParams = beforeSubmit(formatParams, route)
} else {
submitParams = formatResult(formatParams, beforeSubmit)
}
}
if (props.beforeSubmit && typeof props.beforeSubmit === 'string') {
submitParams = formatResult(formatParams, props.beforeSubmit)
} else if (typeof props.beforeSubmit === 'function') {
submitParams = props.beforeSubmit(formatParams, route)
}
if (submitParams === false) {
return
}
formatParams.versionId=props.versionId
formatParams.appKey=props.groupid
formatParams.status=1
formatParams.flowList=json2string(flowMap.value)
console.log("submitParams--111->",submitParams )
console.log("formatParams--111->",formatParams)
afreshAppSubmit(submitParams??formatParams)
.then((data:any)=>{
console.log("app重新提交表单--112221->",data)
emits("closePage")
})
}
})
}
/**
@ 作者: 秦东
@ 时间: 2024-06-10 10:37:30
@ 功能: 再次保存草稿箱
*/
@ -436,11 +490,13 @@ const saveDraftAgainSend = (params = {}) => {
formatParams.appKey=props.groupid
formatParams.status=1
console.log("submitParams--111->",submitParams )
console.log("formatParams--111->",formatParams)
console.log("submitParams--111221->",submitParams )
console.log("formatParams--1112222->",formatParams)
saveDraftAgain(submitParams??formatParams)
.then((data:any)=>{
console.log("提交草稿数据--111->",data)
console.log("提交草稿数据--112221->",data)
emits("closePage")
})
}else{
afterSubmit('validate', fields)
@ -678,9 +734,12 @@ const appFormSubmit = (params = {}) => {
.then((data:any)=>{
console.log("流程提交成功--------1---------->",data)
})
.finally(() =>{
afterSubmit('success', data)
})
})
}
afterSubmit('success', data)
})
.catch(res => {
afterSubmit('fail', res)
@ -758,7 +817,14 @@ const getValue = (filter?: boolean) => {
return model.value
}
}
/**
@ 作者: 秦东
@ 时间: 2024-06-13 16:06:26
@ 功能: 关闭抽屉
*/
const closePage = () =>{
}
/**
@ 作者: 秦东
@ 时间: 2024-06-06 13:18:58
@ -923,8 +989,9 @@ const changeKeyVal = (key:any,val:any,type:any,attribute:any) => {
})
}
}
console.log("isUpdateFlowChart",isUpdateFlowChart)
//
if(isUpdateFlowChart){
if(isUpdateFlowChart && gainFlowChart.id !=0){
flowLoading.value = true
//
gainFlowChart.conditionList=flowFactor
@ -950,7 +1017,7 @@ defineExpose({
validate,
resetFields,
appFormSubmit,
closePage,
// getData, //
// anewSubmit,
// saveDraftPage,

13
src/components/DesignForm/app/index.vue

@ -16,6 +16,8 @@ import { Picture,InfoFilled,QuestionFilled } from '@element-plus/icons-vue'
import { softDeletion,retractRunWorkFlow } from '@/api/taskapi/management'
//
import FormPageCont from '@/components/DesignForm/tableListPage/formPageCont.vue'
import TableFlow from '@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue'
@ -63,6 +65,9 @@ const props = withDefaults(
versionid:() =>{
return ""
},
signCode:() =>{
return ""
},
versiontitle:() =>{
return ""
},
@ -412,9 +417,10 @@ const submitApproval = (val:any) => {
@ 功能: 撤回申请
*/
const withdrawApplication = (val:any) => {
// console.log("", val);
console.log("撤回申请", val);
let sendInfo = {
id: val.masters_key,
// id: val.masters_key,
id: val.runFlowId
}
retractRunWorkFlow(sendInfo)
.then((data)=>{
@ -580,6 +586,7 @@ const editFormSendFlow = (val:any) => {
</el-table-column>
<el-table-column v-else-if="item.fieldClass=='__control'" :prop="item.field" :label="item.label" config="" width="160">
<template #default="scope">
<el-button-group>
<el-tooltip
v-if="scope.row.flowIsOpen==1&&scope.row.taskStatus==1"
@ -779,7 +786,7 @@ const editFormSendFlow = (val:any) => {
>
<el-button type="info" size="small" class="fa fa-edit" />
</el-tooltip>
</el-button-group>
</el-button-group>
</el-col>

6
src/components/DesignForm/public/form/childTable.vue

@ -21,6 +21,10 @@ const props = withDefaults(
)
const formProps = inject(constFormProps, {}) as any
const tableDataNew = computed(() => {
console.log("如果编辑页禁用时-----1123---->",props.data.name)
console.log("如果编辑页禁用时-----1123---->",formProps.value.model[props.data.name])
console.log("如果编辑页禁用时-----1123---->",formProps.value.model)
console.log("如果编辑页禁用时-----1123---->",formProps.value)
return formProps.value.model[props.data.name]
})
const type = computed(() => {
@ -31,6 +35,7 @@ const editDisabled = computed(() => {
return formProps.value.type === 2 && props.data.config?.editDisabled
})
const addColumn = () => {
console.log("如果编辑页禁用时--------->",tableDataNew.value)
const temp: any = {}
if (props.data.list) {
props.data.list.forEach((item: any) => {
@ -53,6 +58,7 @@ const delColumn = (index: number) => {
}
</script>
<template>
<div class="form-table form-table-add">
<el-table
v-bind="data.control"

1
src/components/DesignForm/public/form/formGroup.vue

@ -385,6 +385,7 @@ const getFormItemLableStyle = (ele: any) => {
<!-- <form-group :data="element.list" data-type="not-nested" /> -->
<form-group :data="element.list" data-type="not-table" />
</div>
<child-table v-else :data="element" />
</template>
<!--格栅布局-->

27
src/components/DesignForm/tableListPage/formPageCont.vue

@ -10,6 +10,10 @@ import { gainTaskFormInfo,generateFlow,gainEditDataLog,draftsInitiateApproval,af
import { Close } from '@element-plus/icons-vue'
import { judgeSubmitCancel,startRunFlow } from '@/api/DesignForm/requestapi'
import { submitButtonEs } from '@/api/DesignForm/tableButton'
import {
constFormBtnEvent,
constFormProps
} from '@/api/DesignForm/utils'
import RunFlowStep from '@/views/taskplatform/taskmanagement/runFlowStep.vue'
@ -53,6 +57,7 @@ const openOfClose = computed({
emits('update:isShow', val)
}
});
const formProps = inject(constFormProps, {}) as any
/**
@ 作者: 秦东
@ 时间: 2024-04-03 14:09:24
@ -161,12 +166,12 @@ const drawerBeforeClose = () => {
}
//
const sendDraftSubmit = (type: string,val?:any) => {
// console.log("",type,val)
console.log("提交审批",type,val)
// emits("getmytodolist")
if (type === 'success') {
if(props.pageInfo.flowIsOpen == 1){
let sendInfo ={
id:val.data.masterKey,
id:val.data.runFlowId,
flowList:flowAry.value,
state:3
}
@ -198,9 +203,9 @@ const saveEditFormInfo = (type: string,val?:any) => {
//
const anewSubmit = (type: string,val?:any) => {
console.log("重新提交数据-11--<",type,val)
if(type == "success"){
afreshRunWorkflow({id:val.data.flowkeys})
afreshRunWorkflow({id:val.data.runFlowId})
.then((data:any) => {
console.log("重新提交数据---<",data,runstep.value)
runstep.value.gainRunFlowTask()
@ -276,6 +281,12 @@ const submitEdit = (type: string,val?:any) => {
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table style="margin-top:20px;">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{item.explicate}}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
@ -288,7 +299,8 @@ const submitEdit = (type: string,val?:any) => {
</div>
</el-header>
<el-scrollbar class="scorllbarBox">
<RunFlowStep ref="runstep" v-model:flowary="flowAry" :flow-key="props.pageInfo.masters_key" :current-progress="currentProgress" @updatelist="drawerBeforeClose" />
<RunFlowStep ref="runstep" v-model:flowary="flowAry" :flow-key="props.pageInfo.runFlowId" :current-progress="currentProgress" @updatelist="drawerBeforeClose" />
</el-scrollbar>
</el-aside>
@ -370,5 +382,8 @@ const submitEdit = (type: string,val?:any) => {
}
}
.biankuang{
border: 1px solid #D4D7DE;
padding:10px 10px;
}
</style>

389
src/components/DesignForm/tableListPage/formPageContApp.vue

@ -0,0 +1,389 @@
<!--
@ 作者: 秦东
@ 时间: 2024-04-03 13:39:16
@ 备注: app专用列表内容展示
-->
<script lang='ts' setup>
import { submitButton, afreshSubmitButton,editFormCont,draftSubmitButton,editLookFormCont } from "@/utils/workflow/const";
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { gainTaskFormInfo,generateFlow,gainEditDataLog,draftsInitiateApproval,afreshRunWorkflow } from '@/api/taskapi/management'
import { Close } from '@element-plus/icons-vue'
import { judgeSubmitCancel,startRunFlow } from '@/api/DesignForm/requestapi'
import { submitButtonEs } from '@/api/DesignForm/tableButton'
import RunFlowStep from '@/views/taskplatform/taskmanagement/runFlowStep.vue'
const props = defineProps({
isShow:{
type:Boolean,
default:false,
},
drawerWith:{
type:Number,
default:0
},
tablePageClass:{
type:Number,
default:1
},
operState:{
type:Number,
default:1
},
pageInfo:{
type:Object,
default(){
return {}
}
}
});
const formEl = ref<any>();
const emits = defineEmits(["update:isShow","getPageData"]);
const formLoading = ref(false);
const flowAry = ref<any[]>(); //
const currentProgress = ref<number>(1); //
const runstep = ref(null)
//ID
const openOfClose = computed({
get() {
return props.isShow
},
set(val: boolean) {
emits('update:isShow', val)
}
});
/**
@ 作者: 秦东
@ 时间: 2024-04-03 14:09:24
@ 功能: 监听状态变化处理数据
*/
watch(()=>props.isShow,(val:bool)=>{
console.log("监听状态变化处理数据",props.pageInfo)
if(val){
formLoading.value = true;
getCustomrrFormInfo();
}
})
/**
@ 作者: 秦东
@ 时间: 2024-04-03 14:25:15
@ 功能: 关闭抽屉
*/
const closeDrawer = () => {
emits('update:isShow', false)
}
//
const formState = reactive({
formData: {
list: [],
form: {},
config: {}
},
dict: {},
formId: props.pageInfo.idStr,
id: 1,
loading: true
})
const pageLog = ref<any[]>([])
/**
@ 作者: 秦东
@ 时间: 2024-04-03 14:33:15
@ 功能: 获取自定义表单内容
*/
const getCustomrrFormInfo = () => {
gainTaskFormInfo({id:props.pageInfo.mastersKeyStr})
.then(({data})=>{
// console.log("",data,data.structure)
formState.formData = stringToObj(data.structure.mastesform)
// console.log("--->",formState)
formState.dict = string2json(data.structure.dict)
// formState.formData.list.push(editLookFormCont)
if(props.tablePageClass != 4){
judgeSubmitCancel({"name":data.structure.mastesformjson})
.then((data:any) =>{
if(data.code == 0){
if (data.data == 3 || data.data == 4){
// formState.formData.list.push(submitButtonEs)
if(props.operState == 2){
formState.formData.list.push(afreshSubmitButton)
}else if(props.operState == 3){
formState.formData.list.push(editFormCont)
}else if(props.operState == 4){
formState.formData.list.push(draftSubmitButton)
}else if(props.operState == 5){
formState.formData.list.push(submitButtonEs)
}
}
}
})
}
nextTick(()=>{
// console.log("-1111-->",data.tableData)
formEl.value.setValue(data.tableData)
})
})
.finally(()=>{
formLoading.value = false;
gainEditDataLog({id:props.pageInfo.mastersKeyStr})
.then(({data})=>{
console.log("获取修改记录-1111-->",data)
pageLog.value = data.logAry
});
})
}
/**
@ 作者: 秦东
@ 时间: 2024-04-07 10:55:34
@ 功能: 表单动作回调
*/
const afterSubmit = (type: string) => {
console.log("表单提交成功")
if (type === 'success') {
// router.go(-1)
// console.log("")
emits("getPageData");
closeDrawer();
}
}
const closeAppSubmit = () => {
closeDrawer()
}
//
const drawerBeforeClose = () => {
console.log("监听打开关闭",false)
// emits("getmytodolist")
// emits("update:isshow", false);
}
//
const sendDraftSubmit = (type: string,val?:any) => {
console.log("提交审批",type,val)
// emits("getmytodolist")
if (type === 'success') {
if(props.pageInfo.types == 1){
let sendInfo ={
id:val.data.runFlowId,
flowList:flowAry.value,
state:3
}
console.log("草稿提交审批--1-<",sendInfo)
draftsInitiateApproval(sendInfo)
.then((data:any) =>{
console.log("草稿提交审批---<",sendInfo,data)
if(data.code == 0){
ElMessage.success(data.msg || '提交成功!')
if(runstep.value){
runstep.value.gainRunFlowTask()
}
emits("getPageData");
closeDrawer()
}
})
}
}
}
//稿()
const saveEditFormInfo = (type: string,val?:any) => {
console.log("草稿提交审批--1-<",type,val)
if(type == "success"){
runstep.value.gainRunFlowTask()
emits("getPageData");
closeDrawer()
}
}
//
const anewSubmit = (type: string,val?:any) => {
console.log("重新提交数据-22--<",type,val)
if(type == "success"){
afreshRunWorkflow({id:val.data.runFlowId})
.then((data:any) => {
console.log("重新提交数据---<",data,runstep.value)
runstep.value.gainRunFlowTask()
})
.finally(() => {
emits("getPageData");
closeDrawer()
})
}
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:35:24
@ 功能: 申请修改
*/
//
const submitEdit = (type: string,val?:any) => {
// console("----->",type,val)
if(type == "success"){
runstep.value.anewSubmit()
emits("getPageData");
closeDrawer()
}
}
</script>
<template>
<el-drawer
v-model="openOfClose"
title="查看表单内容"
:size="drawerWith"
:with-header="false"
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
>
<div v-if="props.pageInfo.types==1" class="common-layout">
<el-container>
<el-main>
<ak-form
ref="formEl"
v-loading="formLoading" element-loading-text="Loading..."
:form-data="formState.formData"
:type="props.tablePageClass"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:close-app-submit="closeDrawer"
:change-key-val="changeKeyVal"
:anew-submit = "anewSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
:after-submit="afterSubmit"
:submit-edit="submitEdit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
<el-timeline style="width: 100%">
<el-timeline-item v-for="(item,index) in pageLog" :key="index" :timestamp="item.time+' 操作人:'+item.creater" placement="top">
<el-card>
<el-descriptions border>
<el-descriptions-item v-for="(mastItem,mastIndex) in item.masterdata" :key="mastIndex" :label="mastIndex">
{{mastItem}}
</el-descriptions-item>
</el-descriptions>
<el-tabs v-if="item.sunList" type="border-card" style="margin-top:20px;">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunList" :label="sonIndex" :key="sonIndex">
<el-descriptions v-for="(sonVal,sonIndex) in sonItem" :key="sonIndex" border>
<el-descriptions-item v-for="(sonCentor,sonKey) in sonVal" :key="sonKey" :label="sonKey"> {{sonCentor}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table v-if="item.explicate!=''" style="margin-top:20px;">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{item.explicate}}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
</el-main>
<el-aside width="350px" class="flowBox">
<el-header height="30px">
<div class="workFlowHead">
<el-text>审批流程</el-text>
<el-icon @click="closeDrawer"><Close /></el-icon>
</div>
</el-header>
<el-scrollbar class="scorllbarBox">
<RunFlowStep ref="runstep" v-model:flowary="flowAry" :flow-key="props.pageInfo.runFlowIdStr" :current-progress="currentProgress" @updatelist="drawerBeforeClose" />
</el-scrollbar>
</el-aside>
</el-container>
</div>
<div v-else class="common-layout">
<el-header height="30px">
<el-icon @click="closeDrawer"><Close /></el-icon>
</el-header>
<ak-form
ref="formEl"
v-loading="formLoading" element-loading-text="Loading..."
:form-data="formState.formData"
:type="props.tablePageClass"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:close-app-submit="closeDrawer"
:change-key-val="changeKeyVal"
:anew-submit = "anewSubmit"
:after-submit="afterSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
:submit-edit="submitEdit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
<el-timeline style="width: 100%">
<el-timeline-item v-for="(item,index) in pageLog" :key="index" :timestamp="item.time+' 操作人:'+item.creater" placement="top">
<el-card>
<el-descriptions border>
<el-descriptions-item v-for="(mastItem,mastIndex) in item.masterdata" :key="mastIndex" :label="mastIndex">
{{mastItem}}
</el-descriptions-item>
</el-descriptions>
<el-tabs v-if="item.sunList" type="border-card" style="margin-top:20px;">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunList" :label="sonIndex" :key="sonIndex">
<el-descriptions v-for="(sonVal,sonIndex) in sonItem" :key="sonIndex" border>
<el-descriptions-item v-for="(sonCentor,sonKey) in sonVal" :key="sonKey" :label="sonKey"> {{sonCentor}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table style="margin-top:20px;">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{item.explicate}}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</el-drawer>
</template>
<style lang='scss' scoped>
.common-layout{
height: 100vh;
padding: 0 15px;
.el-main{
height: 100vh;
padding:0;
}
.flowBox{
height: 100vh;
border-left: 1px solid #ccc;
.scorllbarBox{
height: calc(100vh - 35px)
}
.workFlowHead{
display: flex;
align-items: center;
justify-content: space-between;
}
}
.el-header{
padding:0 10px;
line-height:30px;
text-align:right;
font-size:20px;
i{
cursor:pointer;
}
}
}
.biankuang{
border: 1px solid #D4D7DE;
padding:10px 10px;
}
</style>

2
src/styles/workflowcss/workflow.css

@ -922,8 +922,6 @@ html {
@font-face {
font-family: IconFont;
src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot");
src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg");
}
.iconfont {

2
src/styles/workflowcss/workflow.min.css

File diff suppressed because one or more lines are too long

4
src/styles/workflowcss/workflow.scss

@ -918,8 +918,8 @@ html {
@font-face {
font-family: IconFont;
src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot");
src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg")
// src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot");
// src: url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.woff") format("woff"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.ttf") format("truetype"), url("//at.alicdn.com/t/font_135284_ph2thxxbzgf.svg#IconFont") format("svg")
}
.iconfont {

1
src/types/components.d.ts

@ -109,6 +109,7 @@ declare module '@vue/runtime-core' {
FormItem: typeof import('./../components/DesignForm/public/form/formItem.vue')['default']
FormPage: typeof import('./../components/DesignForm/app/formPage.vue')['default']
FormPageCont: typeof import('./../components/DesignForm/tableListPage/formPageCont.vue')['default']
FormPageContApp: typeof import('./../components/DesignForm/tableListPage/formPageContApp.vue')['default']
FormVersion: typeof import('./../components/DesignForm/formVersion.vue')['default']
FormWord: typeof import('./../components/workflow/dialog/formWord.vue')['default']
GithubCorner: typeof import('./../components/GithubCorner/index.vue')['default']

1
src/views/sysworkflow/lowcodepage/runApp/operationAction/AppEditPage.vue

@ -122,6 +122,7 @@ watch(()=>props.isOpen,(val:Boolean)=>{
:sign-code="props.taskInfo.signCode"
:version-id="props.taskInfo.versionIdStr"
add-url="addData"
@close-page="drawerBeforeClose"
/>
</el-drawer>
</template>

13
src/views/sysworkflow/lowcodepage/runApp/regularPage/completedMattersPage.vue

@ -5,6 +5,7 @@
-->
<script lang='ts' setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi"
import LookAndOperateLogInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue'
const props = defineProps({
pickAppMenu:{
type:Object,
@ -52,9 +53,21 @@ const getToDoList = () =>{
onMounted(() =>{
getToDoList()
})
const flowLogInfo = ref<any>()
const darwOpenOrClose = ref(false)
/**
@ 作者: 秦东
@ 时间: 2024-06-17 14:46:51
@ 功能: 查看表单详情
*/
const lookFlowInfo = (val:any,types:number) =>{
flowLogInfo.value = val
darwOpenOrClose.value = true
}
</script>
<template>
<div ref="myappbox" class="app_box">
<LookAndOperateLogInfo v-if="darwOpenOrClose" v-model:isshow="darwOpenOrClose" :flow-log-info="flowLogInfo" :drawer-with="drawerMyWith" @getmytodolist="getToDoListTd" />
<div class="app-container">
<div class="search">
<div class="titleBox">

222
src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate.vue

@ -4,9 +4,13 @@
@ 备注: 我创建的
-->
<script lang='ts' setup>
import { softDeletion,retractRunWorkFlow } from '@/api/taskapi/management'
import { gainAppAllTaskList } from "@/api/DesignForm/requestapi"
//
import FormPageCont from '@/components/DesignForm/tableListPage/formPageContApp.vue'
import TableFlow from '@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue'
const props = defineProps({
pickAppMenu:{
type:Object,
@ -22,6 +26,7 @@ const selectInfo = reactive<taskflowquery>({
class:1,
id:props.pickAppMenu.appkey
})
const operState = ref<number>(1) // 1234;5:
const loading = ref(false)
const searckFormRef = ref(ElForm);
const totals = ref<number>(0) //
@ -55,9 +60,121 @@ const getToDoList = () =>{
onMounted(() =>{
getToDoList()
})
const container = ref() //
const drawerWith = ref(); //
const openTaskDrawer = ref(false) //
/**
@ 作者: 秦东
@ 时间: 2024-04-03 13:24:06
@ 功能: 查看详细内容
*/
const tablePageClass = ref(1)
const lookPageInfoIsShow = ref(false)
const pageInfoCont = ref<any>()
const lookPageInfo = (val:any) => {
tablePageClass.value = 4;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-05 11:29:50
@ 功能: 编辑表单内容
*/
const editInfo = (val:any) => {
console.log('修改数据!',val)
operState.value = 5;
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-10 15:32:55
@ 功能: 提交审批
*/
const submitApproval = (val:any) => {
operState.value = 4
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 09:36:59
@ 功能: 撤回申请
*/
const withdrawApplication = (val:any) => {
console.log("撤回申请", val);
let sendInfo = {
id: val.runFlowIdStr,
}
retractRunWorkFlow(sendInfo)
.then((data)=>{
ElMessage({
message: '撤回成功!',
type: 'success'
})
getToDoList()
})
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:17:42
@ 功能: 重新提交申请
*/
const afreshSendFlow = (val:any) => {
operState.value = 2
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ 时间: 2024-04-11 11:19:21
@ 功能: 申请修改数据
*/
const editFormSendFlow = (val:any) => {
operState.value = 3
tablePageClass.value = 2;
pageInfoCont.value = val
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
const cancelEvent = (val:any) => {
console.log('cancel!',val)
}
/**
@ 作者: 秦东
@ 时间: 2024-04-03 13:13:56
@ 功能: 列表信息删除信息
*/
const confirmEvent = (val:any) => {
let sendData = {
id:[val.mastersKeyStr],
isTrue:2
}
softDeletion(sendData)
.then((data)=>{
console.log('cancel!',data)
ElNotification({
title: '温馨提示!',
message: data.mag,
type: 'success',
})
getToDoList()
})
}
</script>
<template>
<div ref="myappbox" class="app_box">
<div ref="container" class="app_box">
<div class="app-container">
<div class="search">
<div class="titleBox">
@ -97,6 +214,7 @@ onMounted(() =>{
<el-table-column label="状态" prop="status" align="center" width="220" >
<template #default="scope">
{{scope.row.status}}---->{{scope.row.types}}
<el-tag
v-if="scope.row.status==1"
class="mx-1"
@ -106,7 +224,7 @@ onMounted(() =>{
草稿
</el-tag>
<el-tag
v-else-if="scope.row.status==2"
v-else-if="scope.row.status==2&&scope.row.types==1"
type="danger"
class="mx-1"
effect="plain"
@ -114,6 +232,15 @@ onMounted(() =>{
>
驳回
</el-tag>
<el-tag
v-else-if="scope.row.status==2&&scope.row.types!=1"
type="danger"
class="mx-1"
effect="plain"
round
>
发表
</el-tag>
<el-tag
v-else-if="scope.row.status==3"
type="success"
@ -166,16 +293,84 @@ onMounted(() =>{
</template>
</el-table-column>
<el-table-column fixed="right" align="center" label="操作" width="100" >
<el-table-column fixed="right" align="center" label="操作" width="200" >
<template #default="scope">
<el-tooltip
class="box-item"
effect="dark"
content="查看详情"
placement="top-end"
>
<el-button type="primary" size="small" class="fa fa-eye" @click="lookFlowInfo(scope.row,3)" />
</el-tooltip>
<el-button-group>
<el-tooltip
v-if="scope.row.types==1&&scope.row.status==1"
class="box-item"
effect="dark"
content="提交审批"
placement="top-end"
>
<el-button type="success" size="small" class="fa fa-send-o" @click="submitApproval(scope.row)" />
</el-tooltip>
<el-tooltip
v-if="scope.row.types==1&&scope.row.status==2"
class="box-item"
effect="dark"
content="重新申请"
placement="top-end"
>
<el-button type="warning" size="small" class="fa fa-retweet" @click="afreshSendFlow(scope.row)" />
</el-tooltip>
<el-tooltip
class="box-item"
effect="dark"
content="查看详情"
placement="top-end"
>
<el-button @click="lookPageInfo(scope.row)" type="primary" size="small" class="fa fa-eye" />
</el-tooltip>
<el-popconfirm
v-if="scope.row.types==1&&scope.row.isRetract"
confirm-button-text="确定"
cancel-button-text="取消"
:icon="QuestionFilled"
icon-color="#F56C6C"
title="您确定要撤回此次申请?一经撤回!需要此流程重新提交申请!"
@confirm="withdrawApplication (scope.row)"
@cancel="cancelEvent(scope.row)"
>
<template #reference>
<el-button size="small" class="fa fa-reply-all" />
</template>
</el-popconfirm>
<el-tooltip
v-if="scope.row.types==2"
class="box-item"
effect="dark"
content="编辑"
placement="top-end"
>
<el-button @click="editInfo(scope.row)" type="info" size="small" class="fa fa-edit" />
</el-tooltip>
<el-popconfirm
v-if="scope.row.status==2||scope.row.status==1"
confirm-button-text="确定"
cancel-button-text="取消"
:icon="QuestionFilled"
icon-color="#F56C6C"
title="您确定要删除此条记录?一经删除!数据将不可恢复!"
@confirm="confirmEvent(scope.row)"
@cancel="cancelEvent(scope.row)"
>
<template #reference>
<el-button type="danger" size="small" class="fa fa-trash-o" />
</template>
</el-popconfirm>
<el-tooltip
v-if="scope.row.types==1&&scope.row.status==4"
class="box-item"
effect="dark"
content="申请修改"
placement="top-end"
>
<el-button type="info" size="small" class="fa fa-edit" @click="editFormSendFlow(scope.row)" />
</el-tooltip>
</el-button-group>
</template>
</el-table-column>
</el-table>
@ -189,6 +384,9 @@ onMounted(() =>{
<FormPageCont v-model:is-show="lookPageInfoIsShow" :drawer-with="drawerWith" :page-info="pageInfoCont" :table-page-class="tablePageClass" :oper-state="operState" @getPageData="getToDoList" />
<TableFlow v-model:isopen="openTaskDrawer" :versionid="props.versionid" :versiontitle="props.versiontitle" :drawerwith="drawerWith" :pick-app-menu="pickAppMenu" @searchquery="getListData" />

229
src/views/sysworkflow/lowcodepage/runApp/regularPage/myCreate_20240616.vue

@ -0,0 +1,229 @@
<!--
@ 作者: 秦东
@ 时间: 2024-05-31 13:59:06
@ 备注: 我创建的
-->
<script lang='ts' setup>
import { gainAppAllTaskList } from "@/api/DesignForm/requestapi"
const props = defineProps({
pickAppMenu:{
type:Object,
default(){
return {}
}
}
});
const selectInfo = reactive<taskflowquery>({
page: 1,
pagesize: 20,
class:1,
id:props.pickAppMenu.appkey
})
const loading = ref(false)
const searckFormRef = ref(ElForm);
const totals = ref<number>(0) //
const taskFlowAry = ref<any>([]) //
//
const resetQuery = () =>{
searckFormRef.value.resetFields();
initData();
}
//
const initData = () =>{
selectInfo.page = 1;
selectInfo.pagesize = 15;
selectInfo.title = ""
selectInfo.class = 3;
selectInfo.state = 0;
}
/**
@ 作者: 秦东
@ 时间: 2024-06-07 09:28:35
@ 功能: 加载数据
*/
const getToDoList = () =>{
gainAppAllTaskList(selectInfo)
.then((data) =>{
console.log("加载数据--->",data)
totals.value = data.data.total
taskFlowAry.value = data.data.list
})
}
onMounted(() =>{
getToDoList()
})
</script>
<template>
<div ref="myappbox" class="app_box">
<div class="app-container">
<div class="search">
<div class="titleBox">
我创建的
</div>
<el-form ref="searckFormRef" :model="selectInfo" :inline="true">
<el-form-item label="任务标题" prop="name">
<el-input
v-model="selectInfo.title"
placeholder="请输入任务标题"
clearable
@keyup.enter="searchQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getToDoList()"><i-ep-search />搜索</el-button>
<el-button @click="resetQuery()"><i-ep-refresh />重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card shadow="never">
<el-table
v-loading="loading"
element-loading-text="Loading..."
highlight-current-row
:data="taskFlowAry"
border
class="table_box"
>
<el-table-column fixed label="标题" prop="title" width="500" />
<el-table-column label="创建人" prop="creater" width="200">
<template #default="scope">
{{ scope.row.createrInfo.name }}<el-text type="info">{{ scope.row.createrInfo.number }}</el-text>
</template>
</el-table-column>
<el-table-column label="发起日期" prop="createrTimeStr" align="center" width="300" />
<el-table-column label="状态" prop="status" align="center" width="220" >
<template #default="scope">
<el-tag
v-if="scope.row.status==1"
class="mx-1"
effect="plain"
round
>
草稿
</el-tag>
<el-tag
v-else-if="scope.row.status==2&&scope.row.types==1"
type="danger"
class="mx-1"
effect="plain"
round
>
驳回
</el-tag>
<el-tag
v-else-if="scope.row.status==2&&scope.row.types!=1"
type="danger"
class="mx-1"
effect="plain"
round
>
发表
</el-tag>
<el-tag
v-else-if="scope.row.status==3"
type="success"
class="mx-1"
effect="plain"
round
>
审批中
</el-tag>
<el-tag
v-else-if="scope.row.status==4"
type="info"
class="mx-1"
effect="plain"
round
>
归档
</el-tag>
<el-tag
v-else
type="info"
class="mx-1"
effect="plain"
round
>
删除
</el-tag>
</template>
</el-table-column>
<el-table-column label="任务性质" prop="currentStep" width="200" align="center">
<template #default="scope">
<el-tag
v-if="scope.row.types==1"
type="danger"
class="mx-1"
effect="plain"
round
>
流程任务
</el-tag>
<el-tag
v-else
class="mx-1"
effect="plain"
round
>
普通任务
</el-tag>
</template>
</el-table-column>
<el-table-column fixed="right" align="center" label="操作" width="100" >
<template #default="scope">
<el-tooltip
class="box-item"
effect="dark"
content="查看详情"
placement="top-end"
>
<el-button type="primary" size="small" class="fa fa-eye" @click="lookFlowInfo(scope.row,3)" />
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination
v-model:total="totals"
v-model:page="selectInfo.page"
v-model:limit="selectInfo.pagesize"
@pagination="getToDoList"
/>
</el-card>
</div>
</div>
</template>
<style lang='scss' scoped>
.app_box{
width:100%;
overflow: hidden;
overflow-y: auto;
.search{
display: flex;
align-items: center;
justify-content: space-between;
}
.titleBox{
font-size: 20px;
margin-top: -20px;
}
}
.box-card {
width: 100%;
}
.table_box{
width: 100%;
height: calc(100vh - 260px);
}
</style>

31
src/views/sysworkflow/lowcodepage/runApp/regularPage/myDrafts.vue

@ -4,7 +4,7 @@
@ 备注: 草稿箱
-->
<script lang='ts' setup>
import FormPageCont from '@/components/DesignForm/tableListPage/formPageContApp.vue'
import { gainAppAllTaskList } from "@/api/DesignForm/requestapi"
//
@ -25,6 +25,8 @@ const selectInfo = reactive<taskflowquery>({
class:2,
id:props.pickAppMenu.appkey
})
const tablePageClass = ref(1)
const operState = ref<number>(1) // 1234;5:
const myappbox = ref();
const loading = ref(false)
const searckFormRef = ref(ElForm);
@ -34,6 +36,8 @@ const drawerMyWith = ref<number>(0); //页面宽度
const editPageShow = ref(false)
const sendPageShow = ref(false)
const taskInfo = ref<any>("")
const lookPageInfoIsShow = ref(false)
const pageInfoCont = ref<any>()
//
const resetQuery = () =>{
searckFormRef.value.resetFields();
@ -69,9 +73,16 @@ onMounted(() =>{
@ 功能: 提交审批
*/
const submitApproval = (val:any) =>{
taskInfo.value = val
drawerMyWith.value = myappbox.value?.clientWidth;
sendPageShow.value = true
// taskInfo.value = val
// drawerMyWith.value = myappbox.value?.clientWidth;
// sendPageShow.value = true
console.log("提交审批--->",val)
operState.value = 4
tablePageClass.value = 2;
pageInfoCont.value = val
drawerMyWith.value = myappbox.value?.clientWidth
lookPageInfoIsShow.value = true;
}
/**
@ 作者: 秦东
@ -79,13 +90,19 @@ const submitApproval = (val:any) =>{
@ 功能: 编辑草稿内容
*/
const editFlow = (val:any) =>{
taskInfo.value = val
drawerMyWith.value = myappbox.value?.clientWidth;
editPageShow.value = true
// taskInfo.value = val
// drawerMyWith.value = myappbox.value?.clientWidth;
// editPageShow.value = true
operState.value = 5;
tablePageClass.value = 2;
pageInfoCont.value = val
drawerMyWith.value = myappbox.value?.clientWidth
lookPageInfoIsShow.value = true;
}
</script>
<template>
<div ref="myappbox" class="app_box">
<FormPageCont v-model:is-show="lookPageInfoIsShow" :drawer-with="drawerMyWith" :page-info="pageInfoCont" :table-page-class="tablePageClass" :oper-state="operState" @getPageData="getToDoList" />
<AppEditPage v-model:is-open="editPageShow" :task-info="taskInfo" :drawer-width="drawerMyWith" @refreshFunction="getToDoList" />
<div class="app-container">
<div class="search">

30
src/views/sysworkflow/lowcodepage/runApp/regularPage/myToDoPage.vue

@ -6,6 +6,10 @@
<script lang='ts' setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi"
import { taskflowquery } from '@/api/DesignForm/type'
import LookAndOperateLogInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue'
const props = defineProps({
pickAppMenu:{
type:Object,
@ -19,9 +23,9 @@ const searckFormRefTd = ref(ElForm); //表单
const taskFlowAryTd = ref<any>([]) //
//
const selectInfoTd = reactive<taskflowquery>({
page: 2,
page: 1,
pagesize: 20,
class: 1,
class: 2,
id:props.pickAppMenu.appkey
})
const totalstd = ref<number>(0) //
@ -55,9 +59,31 @@ const getToDoList = () =>{
onMounted(() =>{
getToDoList()
})
/**
@ 作者: 秦东
@ 时间: 2024-06-17 08:13:56
@ 功能: 搜索
*/
const getToDoListTd = () =>{
getToDoList()
}
const flowLogInfo = ref<any>()
const darwOpenOrClose = ref(false)
/**
@ 作者: 秦东
@ 时间: 2024-06-17 14:46:51
@ 功能: 查看表单详情
*/
const lookFlowInfo = (val:any,types:number) =>{
flowLogInfo.value = val
darwOpenOrClose.value = true
}
</script>
<template>
<div ref="myappbox" class="app_box">
<LookAndOperateLogInfo v-if="darwOpenOrClose" v-model:isshow="darwOpenOrClose" :flow-log-info="flowLogInfo" :drawer-with="drawerMyWith" @getmytodolist="getToDoListTd" />
<div class="app-container">
<div class="search">

39
src/views/sysworkflow/lowcodepage/runApp/regularPage/sendCopy.vue

@ -5,11 +5,20 @@
-->
<script lang='ts' setup>
import { gainAppTaskList } from "@/api/DesignForm/requestapi"
import LookAndOperateLogInfo from '@/views/taskplatform/taskmanagement/lookFlowInfoApp.vue'
const props = defineProps({
pickAppMenu:{
type:Object,
default(){
return {}
}
}
});
const selectInfo = reactive<taskflowquery>({
page: 1,
pagesize: 20,
class:3
class:5,
id:props.pickAppMenu.appkey
})
const loading = ref(false)
const searckFormRef = ref(ElForm);
@ -25,12 +34,36 @@ const initData = () =>{
selectInfo.page = 1;
selectInfo.pagesize = 15;
selectInfo.title = ""
selectInfo.class = 3;
selectInfo.class = 5;
selectInfo.state = 0;
}
const getToDoList = () =>{
gainAppTaskList(selectInfo)
.then((data) =>{
console.log("加载数据--->",data)
totals.value = data.data.total
taskFlowAry.value = data.data.list
})
}
onMounted(() =>{
getToDoList()
})
const flowLogInfo = ref<any>()
const darwOpenOrClose = ref(false)
/**
@ 作者: 秦东
@ 时间: 2024-06-17 14:46:51
@ 功能: 查看表单详情
*/
const lookFlowInfo = (val:any,types:number) =>{
flowLogInfo.value = val
darwOpenOrClose.value = true
}
</script>
<template>
<div ref="myappbox" class="app_box">
<LookAndOperateLogInfo v-if="darwOpenOrClose" v-model:isshow="darwOpenOrClose" :flow-log-info="flowLogInfo" :drawer-with="drawerMyWith" @getmytodolist="getToDoListTd" />
<div class="app-container">
<div class="search">
<div class="titleBox">

218
src/views/taskplatform/taskmanagement/lookFlowInfoApp.vue

@ -0,0 +1,218 @@
<!--
@ 作者: 秦东
@ 时间: 2024-06-17 15:30:36
@ 备注: App执行任务
-->
<script lang='ts' setup>
import { submitButton, afreshSubmitButton,editFormCont,draftSubmitButton,editLookFormCont } from "@/utils/workflow/const";
import {
json2string,
objToStringify,
string2json,
stringToObj
} from '@/utils/DesignForm/form'
import { haveCustomerFormVersion,generateFlow,gainTaskFormInfo,gainEditDataLog } from '@/api/taskapi/management'
import RunFlowStepApp from '@/views/taskplatform/taskmanagement/runFlowStepApp.vue'
import { judgeSubmitCancel,startRunFlow,afreshRunFlow,onlyPublishFlow,gainEditFormFlowInfo } from '@/api/DesignForm/requestapi'
import FlowStep from '@/views/taskplatform/taskmanagement/flowStep.vue'
const props = defineProps({
isshow:{
type:Boolean,
default:true
},
drawerWith:{
type:Number,
default:0
},
flowLogInfo:{
type:Object,
default(){
return {}
}
},
operState:{
type:Number,
default:1
}
})
const flowAry = ref<any[]>();
const emits = defineEmits(["update:isshow","getmytodolist"]);
const isOpen = computed({
get: () => props.isshow,
set: (val) => {
emits("update:isshow", val);
},
});
const logistrue = ref(false)
const formLoading = ref(false)
const loadingData = ref(false) //
const flowLoading = ref(false) //
const versiontitle = ref<any>("")
const flowMap = ref<any>()
const nextStep = ref(0)
const nodeKey = ref<string>('');
const currentProgress = ref<number>(1);
const newLogAry = ref<any>("")
const oldLogAry = ref<any>("")
const newDataLen = ref<number>(0);
//
const formState = reactive({
formData: {
list: [],
form: {},
config: {}
},
dict: {},
formId: 25,
id: 1,
loading: true
})
const formEl = ref<any>()
const drawerBeforeClose = () => {
console.log("监听打开关闭",false)
emits("getmytodolist")
emits("update:isshow", false);
}
onMounted(()=>{
versiontitle.value = props.flowLogInfo.title
flowMap.value = JSON.parse(props.flowLogInfo.flowcont)
console.log("监听打开关闭",props.flowLogInfo)
gainFormData()
})
const pageLog = ref<any[]>([])
//
const gainFormData = () =>{
formLoading.value = true;
console.log("获取表单内容--->",props.flowLogInfo)
nextStep.value = props.flowLogInfo.nextStep
nodeKey.value = props.flowLogInfo.nodeKey;
currentProgress.value = props.flowLogInfo.currentStep
console.log("props.flowLogInfo--5-------->",props.flowLogInfo.mastesform)
formState.formData = stringToObj(props.flowLogInfo.mastesform)
gainTaskFormInfo({ id: props.flowLogInfo.mastersKeyStr})
.then((data:any)=>{
if(data.data.logistrue){
formState.formData.list.push(editLookFormCont)
}
console.log("res----获得数据回显------->",data)
formEl.value.setValue(data.data.masterDataInfo)
newLogAry.value = data.data.newData
oldLogAry.value = data.data.oldData
logistrue.value = data.data.logistrue
newDataLen.value = data.data.newDataLen
formLoading.value = false;
nextTick(()=>{
console.log("获取自定义表单内容-1111-->",data.data.tableData)
formEl.value.setValue(data.data.tableData)
})
})
.finally(()=>{
formLoading.value = false;
gainEditDataLog({id:props.flowLogInfo.mastersKeyStr})
.then(({data})=>{
console.log("获取修改记录-1111-->",data)
pageLog.value = data.logAry
});
})
// haveCustomerFormVersion({id:props.flowLogInfo.version_id.toString()})
// .then(({ data }) =>{
// formState.dict = string2json(data.dict)
// judgeSubmitCancel({"name":data.mastesformjson})
// .then((dataBut:any) =>{
// if(dataBut.code == 0){
// formState.formData.list.push(afreshSubmitButton)
// // console.log("res----------->",dataBut,props.operState)
// // if (dataBut.data == 3 || dataBut.data == 4){
// // formInfo.formData.list.push(editFormCont)
// // }
// }
// })
// })
// .finally(() => {
// formLoading.value = false;
// formEl
// })
}
</script>
<template>
<el-drawer v-model="isOpen" v-loading="loadingData" element-loading-my-text="Loading..." :title="versiontitle" :close-on-click-modal="false" :close-on-press-escape="false" :destroy-on-close="true" :size="props.drawerWith" class="drawerClass" :before-close="drawerBeforeClose">
<table border="0" class="tableFlowBox">
<tr>
<td valign="top">
<div class="drawerFormBox boxLeft">
<ak-form
ref="formEl"
v-loading="formLoading" element-loading-text="Loading..."
:form-data="formState.formData"
:type="formType"
:dict="formState.dict"
request-url="getFormContent"
add-url="saveFormContent"
edit-url="editFormContent"
:before-submit="beforeSubmit"
:close-app-submit="closeAppSubmit"
:change-key-val="changeKeyVal"
:anew-submit = "anewSubmit"
:save-edit-form-info="saveEditFormInfo"
:send-draft-submit= "sendDraftSubmit"
/>
<el-divider v-if="pageLog&&pageLog.length > 0" content-position="left">历史记录</el-divider>
<el-timeline>
<el-timeline-item v-for="(item,index) in pageLog" :key="index" :timestamp="item.time+' 操作人:'+item.creater" placement="top">
<el-card>
<el-descriptions border>
<el-descriptions-item v-for="(mastItem,mastIndex) in item.masterdata" :key="mastIndex" :label="mastIndex">
{{mastItem}}
</el-descriptions-item>
</el-descriptions>
<el-tabs v-if="item.sunList" type="border-card" style="margin-top:20px;">
<el-tab-pane v-for="(sonItem,sonIndex) in item.sunList" :label="sonIndex" :key="sonIndex">
<el-descriptions v-for="(sonVal,sonIndex) in sonItem" :key="sonIndex" border>
<el-descriptions-item v-for="(sonCentor,sonKey) in sonVal" :key="sonKey" :label="sonKey"> {{sonCentor}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
<table style="margin-top:20px;">
<tr>
<td class="biankuang" width="100">修改说明</td>
<td class="biankuang">{{item.explicate}}</td>
</tr>
</table>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</td>
<td valign="top" width="350">
<RunFlowStepApp ref="runstep" v-model:flowary="flowAry" :flow-key="props.flowLogInfo.idStr" :current-progress="currentProgress" @updatelist="drawerBeforeClose" />
</td>
</tr>
</table>
</el-drawer>
</template>
<style lang='scss' scoped>
.biankuang{
border: 1px solid #D4D7DE;
padding:10px 10px;
}
</style>

18
src/views/taskplatform/taskmanagement/runFlowStep.vue

@ -7,7 +7,7 @@
import SvgIcon from "@/components/SvgIcon/index.vue";
import OrgUserPage from "@/views/public/orguser/orguser.vue"
import OrgAllUserPage from "@/views/public/orguser/orgalluser.vue"
import { authorizeWorkflow } from '@/api/taskapi/management'
import { authorizeWorkflow,afreshRunWorkflow } from '@/api/taskapi/management'
// import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
import { gainRunTaskFlow,submitApprovalResults } from '@/api/DesignForm/requestapi'
@ -53,7 +53,7 @@ const gainRunFlowTask = () =>{
}
gainRunTaskFlow(sendInfo)
.then((data:any) =>{
console.log("获取流程----->",data)
console.log("获取流程--werwerwerwer--->",data)
flowMaps.value = data.data.flowList
flowOpinion.value = data.data.operational
currentStep.value = data.data.current_step
@ -129,7 +129,19 @@ const yesOrNo = (val:string,agreeOrRefuse:number) =>{
})
}
defineExpose({gainRunFlowTask})
//
const anewSubmit = (type: string,val?:any) => {
afreshRunWorkflow({id:props.flowKey})
.then((data:any) => {
})
.finally(() => {
gainRunFlowTask()
})
}
defineExpose({gainRunFlowTask,anewSubmit})
</script>
<template>
<div class="drawerFormBox boxRight">

249
src/views/taskplatform/taskmanagement/runFlowStepApp.vue

@ -0,0 +1,249 @@
<!--
@ 作者: 秦东
@ 时间: 2024-06-17 15:39:17
@ 备注: 审批设置
-->
<script lang='ts' setup>
import SvgIcon from "@/components/SvgIcon/index.vue";
import OrgUserPage from "@/views/public/orguser/orguser.vue"
import OrgAllUserPage from "@/views/public/orguser/orgalluser.vue"
import { authorizeWorkflow,runTaskFlow } from '@/api/taskapi/management'
// import { nodeFlow,conditionInfo,nodelPeoples } from '@/api/taskapi/types'
import { gainRunTaskFlow,submitApprovalResults } from '@/api/DesignForm/requestapi'
//
import squareUrlOne from "@/assets/images/1.png"
import squareUrlTwo from "@/assets/images/2.png"
const state = reactive({
circleUrl:squareUrlTwo,
squareUrl: squareUrlOne,
sizeList: ['small', '', 'large'] as const,
})
const { circleUrl, squareUrl, sizeList } = toRefs(state)
const props = defineProps({
flowKey:{
type:String,
default:""
},
currentProgress:{
type:Number,
default:0
}
})
const emits = defineEmits(["update:flowary","updatelist"]);
const flowLoading = ref(false)
const openOrClose = ref(false) //
const openclosebox = ref(false) //
const presetPersonnel = ref<any>([]); //
const selectedPeople = ref<any>([]); //
const flowOpinion = ref(false) //
const currentStep = ref<number>(props.currentProgress)
const flowMaps = ref<any[]>();
//
const gainRunFlowTask = () =>{
flowLoading.value = true
let sendInfo = {
id:props.flowKey
}
gainRunTaskFlow(sendInfo)
.then((data:any) =>{
console.log("获取流程--获取任务流程--->",data)
flowMaps.value = data.data.flowList
flowOpinion.value = data.data.operational
currentStep.value = data.data.current_step
emits("update:flowary", data.data.flowList);
})
.finally(()=>{
flowLoading.value = false
})
}
//
onBeforeMount(()=>{
gainRunFlowTask();
})
//
onMounted(()=>{
})
//
const judgeAddUser = (val:any):boolean =>{
console.log("获取流程----1111->",val.judgelist)
if(val.judgelist){
return true
}
return false
}
let zhiXingStep = 1;
//
const addPeople = (val:any) =>{
zhiXingStep = val.step
presetPersonnel.value = val.pendpers
selectedPeople.value = val.operator
if(val.runscope == 1){
openclosebox.value = true
}else{
openOrClose.value = true
}
}
//
const updateNode = (val:any) =>{
if(flowMaps.value&& flowMaps.value.length > 0){
flowMaps.value.forEach((item:any) =>{
if(item.step == zhiXingStep){
item.operator = val
}
})
}
}
const sendFlowInfo = ref<string>() //
//
const yesOrNo = (val:string,agreeOrRefuse:number) =>{
console.log("提交审批----1111->",val,agreeOrRefuse,sendFlowInfo.value)
let sendInfo = {
id:props.flowKey,
agreeOrRefuse:agreeOrRefuse,
suggest:sendFlowInfo.value,
flowlist:flowMaps.value
}
runTaskFlow(sendInfo)
.then((data:any)=>{
// console.log("----22222->",data)
ElMessage({
message: '处理完成!',
type: 'success'
})
})
.finally(()=>{
gainRunFlowTask();
emits("updatelist");
})
}
defineExpose({gainRunFlowTask})
</script>
<template>
<div class="drawerFormBox boxRight">
<div class="flowBox">
<!-- <el-affix :offset="20" style="width:100%">
<el-text size="large">审批流程</el-text>
</el-affix> -->
<el-steps v-loading="flowLoading" element-loading-text="Loading..." direction="vertical" :active="currentStep">
<el-step v-for="item in flowMaps" :key="item.step">
<template #title>
{{ item.nodeName }}<span v-if="item.examinemode==1"> 依次审批</span><span v-if="item.examinemode==2"> 会签</span><span v-if="item.examinemode==3"> 或签</span>
</template>
<template #description>
<table>
<tr v-for="items in item.operator" :key="items.id">
<td valign="top" align="center" width="50">
<el-avatar v-if="items.iconbase64==''&&items.icon!=''" shape="square" fit="cover" :src="items.icon" />
<el-avatar v-else-if="items.iconbase64!=''" shape="square" fit="cover" :src="items.iconbase64" />
<el-avatar v-else shape="square" fit="cover" :src="squareUrl" />
</td>
<td valign="top" align="left">
<el-row>
<el-col :span="24">
<el-text>{{ items.departmentname }}</el-text>
<el-text><span v-if="items.departmentname"> - </span>{{ items.postname }}</el-text>
<el-text><span v-if="items.departmentname||items.postname"> - </span>{{ items.name }}</el-text>
</el-col>
<el-col :span="24">
<ul>
<li v-for="(logItem,logIndex) in items.log" :key="logIndex" class="logLi">
<el-text v-if="logItem.state==2" type="success">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已同意</span>
</el-text>
<el-text v-else-if="logItem.state==3" type="danger">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已驳回</span>
</el-text>
<el-text v-else-if="logItem.state==4" type="primary">
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>已查看</span>
</el-text>
<el-text v-else>
<span v-if="logItem.cause">{{logItem.cause}}</span><span v-else>未操作</span>
</el-text> · {{ logItem.time }}
</li>
</ul>
</el-col>
</el-row>
</td>
</tr>
<tr>
<td>
<div v-if="item.judgelist" class="addUser" @click="addPeople(item)">
<svg-icon icon-class="addxuxian" size="50" />
</div>
</td>
<td></td>
</tr>
</table>
</template>
</el-step>
</el-steps>
</div>
<el-affix v-if="flowOpinion" position="bottom" :offset="0">
<div class="approvalBoard">
<el-text size="large" class="appBoardTitle">审批意见</el-text>
<el-row :gutter="20">
<el-col :span="24">
<el-input
v-model="sendFlowInfo"
:autosize="{ minRows: 2, maxRows: 6 }"
type="textarea"
placeholder="请输入审批意见"
/>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="4"></el-col>
<el-col :span="8" class="juzhong"><el-button type="primary" style="width:100%" @click="yesOrNo(props.flowKey,1)">同意</el-button></el-col>
<el-col :span="8" class="juzhong"><el-button type="danger" style="width:100%" @click="yesOrNo(props.flowKey,2)">驳回</el-button></el-col>
<el-col :span="4"></el-col>
</el-row>
</div>
</el-affix>
<OrgUserPage v-if="openOrClose" v-model:openclose="openOrClose" :preset-personnel="presetPersonnel" :selected-people="selectedPeople" @update-node="updateNode" />
<OrgAllUserPage v-if="openclosebox" v-model:openclosebox="openclosebox" :selected-people="selectedPeople" @update-node="updateNode" />
</div>
</template>
<style lang='scss' scoped>
.drawerFormBox{
width: 100%;
height: 100%;
}
.boxRight{
overflow: hidden;
overflow-y: auto;
border-left: 1px solid #EEEEEE;
}
.flowBox{
width: 100%;
padding: 0 5px 0 10px;
}
.approvalBoard{
padding: 5px 10px;
background-color: #FFFFFF;
border-top: 1px solid #EEEEEE;
.juzhong{
padding: 10px 0;
text-align: center;
}
.appBoardTitle{
padding: 5px 0 10px 0;
display: block;
}
}
</style>

4
src/widget/number/index.vue

@ -83,8 +83,8 @@ const updateModel = (val: any) => {
})
}
onMounted(() => {
console.log("编码组件---》",props.data,props.data.control.config)
if(props.numrun == 1){
console.log("编码组件---》",props.numrun,props.data,props.data.control.config)
if(props.numrun == 2){
getNumber()
}
})

Loading…
Cancel
Save