fix:修改问题保存分支2

This commit is contained in:
大黑 2026-01-05 17:39:25 +08:00
parent c37ce897f2
commit 48d2ad9197
20 changed files with 1202 additions and 683 deletions

1
.gitignore vendored
View File

@ -26,3 +26,4 @@ yarn-error.log*
*.sw?
node_modules.zip
apaas-custom-mydemo.zip
apaas-custom-mydemo-1.zip

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,5 @@
<template>
<x-app-layout
:layoutEngine="layoutEngine"
:isCollapse="isCollapse"
>
<x-app-layout :layoutEngine="layoutEngine" :isCollapse="isCollapse">
<template v-slot:header>
<x-app-header v-if="appInfo" :layoutEngine="layoutEngine" :appInfo="appInfo"></x-app-header>
</template>
@ -20,18 +17,19 @@
<x-svg-icon v-if="isCollapse" name="arrow-right-icon"></x-svg-icon>
<x-svg-icon v-else name="arrow-left-icon"></x-svg-icon>
</div>
<div v-for="menu of layoutEngine.layoutConfig.keepAliveComps" :key="menu.id">
<!-- <div v-for="menu of layoutEngine.layoutConfig.keepAliveComps" :key="menu.id">
<div :style="{color: menu.id === layoutEngine.layoutConfig.currentMenu.id ? 'red' : '#000'}" @click="handlerclick(menu)">
{{ menu.menuName }}
<el-button @click.stop="closed(menu)">关闭</el-button>
</div>
</div>
</div> -->
<slot name="appPage"></slot>
</template>
</x-app-layout>
</template>
<script>
import api from '@/api'
import { getUserId } from '@/utils'
export default {
name: 'CustomLayout',
props: {
@ -45,25 +43,66 @@ export default {
data() {
return {
isCollapse: false,
showMenu: true
showMenu: true,
badgeNum: 0
}
},
computed: {
appInfo() {
return (this.layoutEngine && this.layoutEngine.layoutDataControl && this.layoutEngine.layoutDataControl.appInfo) || {}
return (
(this.layoutEngine &&
this.layoutEngine.layoutDataControl &&
this.layoutEngine.layoutDataControl.appInfo) ||
{}
)
},
menuConfig() {
return (this.layoutEngine && this.layoutEngine.layoutDataControl && this.layoutEngine.layoutDataControl.menuConfig) || {
// 访 $route.fullPath 使
void this.$route.fullPath
const data = (this.layoutEngine &&
this.layoutEngine.layoutDataControl &&
this.layoutEngine.layoutDataControl.menuConfig) || {
menu: [],
defaultActive: null,
menuTreeData: []
}
console.log(data, 2222323232, 'data')
data.menuTreeData[0].badgeNum = this.badgeNum
return data
}
},
watch: {
$route: {
handler() {
console.log(2222323232, '2222323232')
this.setBadgeNum()
},
immediate: false
}
},
mounted() {
console.log(this.layoutEngine.layoutConfig.keepAliveComps, 545454545454545454545454)
},
methods: {
setBadgeNum() {
const request = {
...api.GET_TODO_LIST,
params: {
page: 1,
size: 10,
personId: getUserId()
},
disableSuccessMsg: true
}
this.$request(request)
.asyncThen((resp) => {
this.badgeNum = resp.data.totalCount
})
.asyncErrorCatch((err) => {
console.error('获取待办列表失败:', err)
})
},
changeCollapse() {
this.showMenu = false
this.$nextTick(() => {
@ -94,7 +133,7 @@ export default {
</script>
<style lang="scss">
$--app-box-bgColor: #ffffff;
$--app-box-border-color: #DCDFE6;
$--app-box-border-color: #dcdfe6;
.x-app-layout {
.layout-middle {

View File

@ -87,7 +87,6 @@
:disabled="!formData.department"
filterable
remote
reserve-keyword
:remote-method="handleRemoteSearch"
:loading="userLoading"
class="handler-select"

View File

@ -1151,7 +1151,7 @@ export default {
flex: 1;
min-height: 0;
padding: 20px;
background: #fff;
.x-empty-page {
top: 0;
}

View File

@ -37,11 +37,11 @@
基础信息
</div>
<div class="info-grid">
<div class="theme-info-item">
<div class="remain-info">
<div class="info-item">
<span class="label">流程主题</span>
<span class="value">{{ progressDetail.processTitle || '--' }}</span>
</div>
<div class="remain-info">
<div class="info-item">
<span class="label">机型名称</span>
<span class="value">{{ progressDetail.modelName || '--' }}</span>

View File

@ -24,14 +24,14 @@
<el-button type="primary" size="small" :loading="dispatchLoading" @click="handleConfirmDispatch">确认分发</el-button>
</template>
<template v-else>
<el-select
<!-- <el-select
v-model="currentVersionId"
size="small"
@change="onVersionChange"
:disabled="isEditMode"
>
<el-option v-for="ver in versions" :key="ver.id" :label="ver.label" :value="ver.id" />
</el-select>
</el-select> -->
<el-button
v-if="!isEditMode && !isJustCheckMode"
size="small"
@ -200,7 +200,6 @@
clearable
filterable
remote
reserve-keyword
:remote-method="(query) => handleFillerRemoteSearch(query, row)"
:loading="fillerUserLoading"
@change="(value) => handleFillerChange(value, row)"
@ -333,7 +332,6 @@
multiple
filterable
remote
reserve-keyword
placeholder="请选择"
:remote-method="(query) => handleRemoteSearch(query, index)"
:loading="step.loading"

View File

@ -5,13 +5,13 @@
<el-button type="primary" @click="handleAdd">
新增
</el-button>
<el-button
<!-- <el-button
icon="el-icon-refresh"
size="small"
@click="handleRefresh"
>
刷新
</el-button>
</el-button> -->
</div>
<div class="table-section">
@ -139,7 +139,6 @@
:disabled="!formData.selectDeptId"
filterable
remote
reserve-keyword
:remote-method="handleRemoteSearch"
:loading="userLoading"
class="handler-select"

View File

@ -73,6 +73,8 @@
<table class="comparison-table">
<thead>
<tr>
<th class="subsystem-column">子系统名称</th>
<th class="parts-column">零部件名称</th>
<th class="param-column">参数名称</th>
<th
v-for="(model, index) in comparisonModels"
@ -102,6 +104,8 @@
</thead>
<tbody>
<tr v-for="(param, paramIndex) in displayParams" :key="paramIndex">
<td class="subsystem-column">{{ param.subsystemName }}</td>
<td class="parts-column">{{ param.displayPartsName }}</td>
<td class="param-column">
<span class="param-name">{{ getParamDisplayName(param) }}</span>
<i
@ -1587,26 +1591,19 @@ export default {
this.savingFavorite = true
const request = {
...api.ADD_USER_COMMONLY_USED,
params: requestData,
disableSuccessMsg: true
params: requestData
}
this.$request(request)
.asyncThen((resp) => {
this.$message({
type: 'success',
message: '新增常用成功'
})
// this.$message.success('')
this.handleAddFavoriteDialogClose()
//
this.loadFavoritesList()
})
.asyncErrorCatch((err) => {
console.error('新增常用失败:', err)
this.$message({
type: 'error',
message: '新增常用失败'
})
this.$message.error(err.message || '新增常用失败')
})
.finally(() => {
this.savingFavorite = false

View File

@ -170,6 +170,20 @@ export default {
this.loadData()
},
methods: {
setStatusText(result) {
const statusMap = {
'PASS': '通过',
'REJECT': '驳回',
'REFUSE': '驳回',
'APPROVE': '批准',
'APPROVING': '审批中',
'PENDING': '待处理',
'WAITING': '待处理',
'STAY': '待审批',
'INITIATE': '发起审批'
}
return statusMap[result] || result || '待处理'
},
handleBack() {
console.log('handleBack called')
this.$emit('back')

View File

@ -10,7 +10,9 @@
<div class="apaas-custom-page-mydemo custom-page">
<template v-if="!showModelDetail">
<div class="page-header">
<div class="operation"> </div>
<div class="title">
参数模板管理
</div>
</div>
<div class="page-search-panel">
<div class="search-fields">
@ -19,19 +21,21 @@
<el-select
v-model="searchPanelValue.templateName"
:loading="templateSelectLoading"
placeholder="请选择模板名称"
placeholder="请输入或选择模板名称"
clearable
filterable
:filter-method="filterTemplateOptions"
style="width: 220px"
@change="handleSearch"
>
<el-option
v-for="item in templateOptions"
v-for="item in filteredTemplateOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
<div class="search-actions">
<el-button v-if="hasTemplateManagementEditPermission()" type="primary" @click="handleDownloadImportTemplate">
@ -245,6 +249,7 @@ export default {
return {
searchPanelValue: createDefaultSearch(),
templateOptions: [],
filteredTemplateOptions: [],
templateSelectLoading: false,
tableData: [],
errorList: '',
@ -1000,6 +1005,20 @@ export default {
console.error('查询失败:', err)
})
},
//
filterTemplateOptions(query) {
if (!query || query.trim() === '') {
//
this.filteredTemplateOptions = this.templateOptions
return
}
//
const queryLower = query.toLowerCase().trim()
this.filteredTemplateOptions = this.templateOptions.filter((option) => {
// label
return option.label && option.label.toLowerCase().includes(queryLower)
})
},
//
loadTemplateOptions() {
this.templateSelectLoading = true
@ -1029,11 +1048,14 @@ export default {
value: name
}))
this.templateOptions = options
//
this.filteredTemplateOptions = options
this.templateSelectLoading = false
})
.asyncErrorCatch((err) => {
console.error('加载模板列表失败:', err)
this.templateOptions = []
this.filteredTemplateOptions = []
this.templateSelectLoading = false
})
},

View File

@ -289,7 +289,6 @@
multiple
filterable
remote
reserve-keyword
placeholder="请选择"
:remote-method="(query) => handleRemoteSearch(query, index)"
:loading="step.loading"
@ -3102,6 +3101,7 @@ export default {
padding: 20px;
overflow-y: auto;
overflow-x: hidden;
background: #fff;
&.has-footer {
/* 审批模式下为底部按钮预留空间 */

View File

@ -208,7 +208,6 @@
multiple
filterable
remote
reserve-keyword
placeholder="请输入人员姓名进行搜索"
style="width: 100%"
clearable
@ -1489,7 +1488,7 @@ export default {
//
loadDepartmentList() {
const request = {
...api.GET_SUB_DEPT,
...api.QUERY_ORG_TREE,
disableSuccessMsg: true
}
this.$request(request)

View File

@ -420,7 +420,6 @@
multiple
filterable
remote
reserve-keyword
placeholder="请选择"
:remote-method="(query) => handleLaunchRemoteSearch(query, index)"
:loading="step.loading"
@ -718,7 +717,7 @@ export default {
const permissionPath = perm.permissionPath || ''
const parameterPer = perm.parameterPer
return (
permissionPath === '报告' &&
permissionPath === '对标报告' &&
(parameterPer === 2 ||
parameterPer === '2' ||
parameterPer === '编辑')

View File

@ -334,7 +334,6 @@
multiple
filterable
remote
reserve-keyword
placeholder="请选择"
:remote-method="(query) => handleLaunchRemoteSearch(query, index)"
:loading="step.loading"
@ -984,37 +983,50 @@ export default {
)
if (requiredStepsWithoutHandlers.length > 0) {
const stepNames = requiredStepsWithoutHandlers.map((step) => step.name).join('、')
this.$message.warning(`请为必填环节"${stepNames}"选择处理人`)
this.$message({
type: 'warning',
message: `请为必填环节"${stepNames}"选择处理人`
})
return
}
if (!this.reportDetail.reportId && !this.reportDetail.id) {
this.$message.error('缺少报告信息')
this.$message({
type: 'error',
message: '缺少报告信息'
})
return
}
//
const processTitle = (this.launchProcessTitle || '').trim()
if (!processTitle) {
this.$message.warning('请填写流程主题')
this.$message({
type: 'warning',
message: '请填写流程主题'
})
return
}
const reportId = this.reportDetail.reportId || this.reportDetail.id
if (!reportId) {
this.$message.error('缺少报告ID')
this.$message({
type: 'error',
message: '缺少报告ID'
})
return
}
const nodeList = this.launchWorkflowSteps.map((step, index) => ({
nodeName: step.name,
assignees: step.handlers,
nodeOrder: index + 1
}))
//
const submitData = {
processTitle: this.launchProcessTitle,
reportId: reportId,
userId: getUserId(),
processTitle: processTitle,
proofreadUsers: this.launchWorkflowSteps[0].handlers,
reviewUsers: this.launchWorkflowSteps[1].handlers,
countersignUsers: [],
approveUsers: this.launchWorkflowSteps[2].handlers
nodeList: nodeList
}
this.launching = true
@ -1040,7 +1052,10 @@ export default {
.asyncErrorCatch((err) => {
console.error('发起失败:', err)
this.launching = false
this.$message.error('发起失败,请重试')
this.$message({
type: 'error',
message: '发起失败,请重试'
})
})
},
//

View File

@ -50,7 +50,7 @@
@click.stop="handleRowView(row)"
>查看</a
>
<span
<!-- <span
v-if="row.dataType === '数据维护'"
style="width: 6px; display: inline-block"
></span>
@ -59,7 +59,7 @@
class="el-link el-link--primary"
@click.stop="handleRowBack(row)"
>退回</a
>
> -->
</div>
</template>

View File

@ -19,7 +19,7 @@ import ApaasCustomTodoList from './custom-page/todo.vue'
import ApaasCustomMyDone from './custom-page/myDone.vue'
import ApaasCustomMySend from './custom-page/mySend.vue'
import ApaasCustomPermissionManagement from './custom-page/permissionManagement.vue'
import ApaasCustomLayout from './custom-layout/custom-layout.vue'
import { customFormComponentList } from './custom-component/form-component'
import { widgetConfigList } from './custom-component/form-config'
@ -46,6 +46,7 @@ const install = function(Vue, opts) {
Vue.component('apaas-custom-myDone', ApaasCustomMyDone)
Vue.component('apaas-custom-mySend', ApaasCustomMySend)
Vue.component('apaas-custom-permissionManagement', ApaasCustomPermissionManagement)
Vue.component('apaas-custom-layout', ApaasCustomLayout)
// 安装表单部件
// 注册自开发表单组件
if (
@ -55,6 +56,10 @@ const install = function(Vue, opts) {
Vue.component(comp.name, comp)
})
}
if (Vue.LayoutEngine) {
const layoutEngine = Vue.LayoutEngine.getInstance(Vue.LayoutEngine.currentLayoutId)
layoutEngine.registerLayoutComponent(ApaasCustomLayout)
}
// 表单引擎注册自开发组件配置
if (
widgetConfigList && Array.isArray(widgetConfigList)