This commit is contained in:
那些花儿
2025-07-30 15:19:03 +08:00
parent 65b7960783
commit 73974dbdd3
32 changed files with 1403 additions and 388 deletions
@@ -36,7 +36,7 @@
<div class="panel-content">
<div class="info-table">
<!-- 新申请场景 -->
<template v-if="isNewApplication">
<template v-if="isNewApplication || (processInstance && processInstance.state === 30)">
<div class="info-row">
<div class="info-label">流程名称</div>
<div class="info-value">{{ processDefinition.displayName || processDefinition.name }}</div>
@@ -82,13 +82,20 @@
</div>
<!-- 表单处理区域 -->
<div class="form-panel" v-if="isNewApplication || todoTasks.map((v) => v.id).includes(taskId)">
<div
class="form-panel"
v-if="isNewApplication || (processInstance && processInstance.state === 30) || todoTasks.map((v) => v.id).includes(taskId)"
>
<div class="panel-header">
<h3 class="panel-title">{{ formPanelTitle }}</h3>
</div>
<div class="panel-content">
<!-- 新申请表单 -->
<div v-if="isNewApplication" id="application-form-container" class="form-content">
<div
v-if="isNewApplication || (processInstance && processInstance.state === 30)"
id="application-form-container"
class="form-content"
>
<div v-if="pjaxLoading.apply" class="loading-state">
<i class="el-icon-loading"></i>
<span>正在加载申请表单...</span>
@@ -121,7 +128,72 @@
</div>
</template>
<script>
<script type="text/javascript">
class PjaxSync {
constructor() {
this.isLoading = false
this.queue = []
}
async request(url, options = {}) {
return new Promise((resolve, reject) => {
const requestData = { url, options, resolve, reject }
if (this.isLoading) {
this.queue.push(requestData)
return
}
this._executeRequest(requestData)
})
}
_executeRequest({ url, options, resolve, reject }) {
this.isLoading = true
const defaultOptions = {
timeout: 10000,
push: false,
replace: false,
...options
}
const successHandler = (event, data, status, xhr) => {
this._cleanup()
resolve({ data, status, xhr })
this._processQueue()
}
const errorHandler = (event, xhr, textStatus, errorThrown) => {
this._cleanup()
reject(new Error(textStatus || "PJAX request failed"))
this._processQueue()
}
$(document).one("pjax:success", successHandler)
$(document).one("pjax:error", errorHandler)
$.pjax({
url: url,
...defaultOptions
})
}
_cleanup() {
this.isLoading = false
$(document).off("pjax:success pjax:error")
}
_processQueue() {
if (this.queue.length > 0) {
const nextRequest = this.queue.shift()
this._executeRequest(nextRequest)
}
}
}
// 创建全局实例
const pjaxSync = new PjaxSync()
module.exports = {
name: "SnakerFlow",
data() {
@@ -221,7 +293,7 @@ module.exports = {
} else if (this.shouldShowTaskForm) {
return this.currentTask.displayName || "任务表单"
} else if (this.shouldShowHistoryProcess) {
return "办理过程"
return "申请表单"
} else {
return "表单信息"
}
@@ -236,7 +308,6 @@ module.exports = {
// 是否显示任务表单
shouldShowTaskForm() {
debugger
return this.taskId != null
},
@@ -277,20 +348,20 @@ module.exports = {
},
created() {
this.initComponent()
// 监听
window.addEventListener("message", (event) => {
// 监听消息
new BroadcastChannel("zhgh-global-channel").addEventListener("message", (event) => {
if (event.data.type === "task-complete") {
this.initComponent()
}
})
},
beforeDestroy() {
console.log("beforeDestroy")
},
methods: {
// 初始化组件
async initComponent() {
this.loading = true
debugger
if (this.isNewApplication) {
// 新申请:加载流程定义信息
await this.loadProcessDefinition()
@@ -299,6 +370,12 @@ module.exports = {
} else if (this.isExistingProcess) {
// 已有流程:加载流程实例信息
await this.loadProcessInstance()
if (this.processInstance && this.processInstance.state === 30) {
// 流程被撤回了 此时加载申请表单
// 加载流程申请表单
await this.loadApplicationForm()
}
// 加载任务信息
await this.loadCurrentTask()
// 如果有businessId且不是第一个任务节点,加载历史办理过程
@@ -317,9 +394,11 @@ module.exports = {
// 加载流程定义信息
async loadProcessDefinition() {
if (!this.defineKey) return
try {
const response = await $.get("/flow/common/defineInfo", { defineKey: this.defineKey })
const response = await $.get("/flow/common/defineInfo", {
defineKey: this.defineKey,
instanceId: this.instanceId
})
if (response.code === 0) {
this.processDefinition = response.data
}
@@ -334,20 +413,11 @@ module.exports = {
this.pjaxLoading.apply = true
$.pjax({
url: this.processDefinition.instanceUrl,
container: "#application-form-container",
push: false,
replace: false,
timeout: 10000
await pjaxSync.request(this.processDefinition.instanceUrl, {
container: "#application-form-container"
})
.done(() => {
this.pjaxLoading.apply = false
})
.fail(() => {
this.pjaxLoading.apply = false
console.log(this.processDefinition.instanceUrl, "申请表单加载失败")
})
this.pjaxLoading.apply = false
},
// 加载流程实例信息
@@ -356,6 +426,7 @@ module.exports = {
const { code, data, msg } = await $.get("/flow/common/instanceInfo", { instanceId: this.instanceId })
if (code === 0) {
this.processInstance = data.processInstance
this.processDefinition = data.processInstance?.jsonObject
this.todoTasks = data.todoTasks
}
},
@@ -381,43 +452,23 @@ module.exports = {
this.pjaxLoading.taskForm = true
$.pjax({
url: this.currentTask.taskModel.form,
container: "#task-form-container",
push: false,
replace: false,
timeout: 10000
await pjaxSync.request(this.currentTask.taskModel.form, {
container: "#task-form-container"
})
.done(() => {
this.pjaxLoading.taskForm = false
})
.fail(() => {
this.pjaxLoading.taskForm = false
console.log(this.currentTask.taskModel.form, "任务表单加载失败")
})
},
// 加载历史办理过程
async loadHistoryProcess() {
if (!this.businessId) return
const { instanceViewUrl } = this.processInstance.jsonObject
this.pjaxLoading.historyProcess = true
if (instanceViewUrl) {
$.pjax({
url: `${instanceViewUrl}?businessId=${this.businessId}&instanceId=${this.instanceId}`,
container: "#history-process-container",
push: false,
replace: false,
timeout: 10000
this.pjaxLoading.historyProcess = true
await pjaxSync.request(`${instanceViewUrl}?businessId=${this.businessId}&instanceId=${this.instanceId}`, {
container: "#history-process-container"
})
.done(() => {
this.pjaxLoading.historyProcess = false
})
.fail(() => {
this.pjaxLoading.historyProcess = false
console.log("历史办理过程加载失败")
})
this.pjaxLoading.historyProcess = false
}
},
@@ -149,8 +149,7 @@ module.exports = {
// 处理提交操作
handleSubmit() {
// 根据是否有流程实例来确定操作类型
// const submitAction = this.instanceId ? this.actionEnum.RE_APPLY : this.actionEnum.APPLY
const submitAction = this.actionEnum.APPLY
const submitAction = this.instanceId ? this.actionEnum.RE_APPLY : this.actionEnum.APPLY
// 触发父组件事件,传递提交操作
this.$emit("task-action", {
@@ -160,7 +159,6 @@ module.exports = {
defineId: this.defineId,
defineKey: this.defineKey,
businessId: this.businessId
// currentTask: this.taskInfo
})
},
@@ -201,7 +199,11 @@ module.exports = {
// 取消操作
handleCancel() {
this.$emit("cancel")
const func = () => window.close()
this.$emit("cancel", func)
if (!this.$listeners.cancel) {
func()
}
},
// 刷新任务信息