提交 aa04eea3 authored 作者: kxjia's avatar kxjia

问题管理

上级 df2abfb6
......@@ -141,7 +141,9 @@ export const batchDelete = (params, handleSuccess) => {
return defHttp.delete(
{
url: "/flowable/definition/batchDelete",
data: params}
params: params
},
{joinParamsToUrl: true}
).then(() => {
handleSuccess();
});
......@@ -188,3 +190,11 @@ export function definitionStartByDeployId(deployId, data) {
})
}
//根据部署ID查询流程定义信息
export function getNodesByTableName(tableName) {
return defHttp.get({
url: '/flowable/form/getNodesByTableName',
params: {tableName:tableName}
})
}
<template>
<div style="margin:10px;height: 100%;">
<div style="height: 80vh;overflow: hidden;padding: 10px;">
<vxe-grid ref="tableRef" v-bind="gridOptions">
<template #toolbarButtons>
<vxe-button status="primary" icon="vxe-icon-add" @click="handleAdd" :loading="loading.add">新增</vxe-button>
......@@ -107,7 +107,6 @@ const srhParams = ref<SrhParam>({
const gridOptions = reactive<VxeGridProps<RowVO>>({
border: true,
height: "100%",
rowConfig: {
keyField: 'id'
},
......@@ -119,7 +118,18 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
},
pagerConfig: {
enabled: true,
pageSize: 10
pageSize: 10,
currentPage: 1,
pageSizes: [
{ label: '10 条', value: 10 },
{ label: '20 条', value: 20 },
{ label: '50 条', value: 50 },
{ label: '100 条', value: 100 }
],
layouts: ['Total', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'Sizes', 'FullJump'],
perfect: false,
autoHidden: false,
align: 'right'
},
toolbarConfig: {
refresh: false,
......@@ -137,7 +147,7 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
{ title: '流程编号', field: 'deploymentId', align: 'left', minWidth: '18%' },
{ title: '业务表单', field: 'formName', align: 'center', width: '10%', visible: false },
{ title: '流程版本', field: 'version', align: 'center', width: '10%' },
{ title: '最新版本', field: 'isLastVersion', align: 'center', width: '10%' },
{ title: '最新版本', field: 'isLastVersion', align: 'center', width: '10%', visible: false },
{
title: '状态', field: 'suspensionState', align: 'center', width: '10%',
formatter: ({ cellValue }) => {
......@@ -149,7 +159,7 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
}
},
{
title: '部署时间', field: 'deploymentTime', align: 'center', width: '10%',
title: '部署时间', field: 'deploymentTime', align: 'center', width: '14%',
formatter: ({ cellValue }) => {
if (!cellValue) return '-'
return new Date(cellValue).toLocaleString()
......@@ -158,7 +168,7 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
{
title: '操作',
align: 'center',
width: '16%',
width: '20%',
fixed: 'right',
slots: { default: 'operate' }
}
......@@ -167,7 +177,7 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
seq: true,
props: {
result: 'result',
total: 'page.total'
total: 'total'
},
ajax: {
query: ({ page }) => {
......@@ -202,9 +212,7 @@ const findPageList = async (currentPage: number, pageSize: number) => {
srhParams.value.pageSize = pageSize;
const retData = await setData();
return {
page: {
total: retData.total
},
total: retData.total,
result: retData.records
};
};
......@@ -341,20 +349,13 @@ async function handleBatchDelete(ids?: string[]) {
if (isOperationInProgress('batchDelete')) return;
const selectedIds = ids || await getSelectIds();
if (selectedIds.length === 0) {
// 可以添加提示
// message.warning('请选择要删除的流程');
return;
}
setOperationState('batchDelete', null, true);
try {
await batchDelete({ ids: selectedIds.join(",") }, handleSuccess)
// 可以在这里添加成功提示
// message.success(`成功删除 ${selectedIds.length} 个流程`);
} catch (error) {
console.error('批量删除失败:', error);
// 可以在这里添加错误提示
// message.error('批量删除失败');
} finally {
setOperationState('batchDelete', null, false);
}
......
......@@ -249,7 +249,7 @@ const submitForm = async () => {
const submitFn = formState.formId ? updateForm : addForm
await submitFn(formState)
message.success(formState.formId ? '修改成功' : '新增成功')
//message.success(formState.formId ? '修改成功' : '新增成功')
formOpen.value = false
resetForm()
......
......@@ -110,12 +110,12 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
},
columns: [
{ type: 'checkbox', visible: true, width: '40', showOverflow: false },
{ title: '表单主键', field: 'formId', align: 'center', width: '200' },
{ title: '表单编号', field: 'formId', align: 'center', width: '100' },
{
title: '表单类别',
field: 'formTp',
align: 'center',
width: '200',
width: '100',
filters: tpOptions,
filterMultiple: false,
formatter ({ cellValue }) {
......@@ -123,13 +123,14 @@ const gridOptions = reactive<VxeGridProps<RowVO>>({
return item ? item.label : ''
}
},
{ title: '表单名称', field: 'formName', align: 'left', minWidth: '200' },
{ title: '表单地址', field: 'formUrl', align: 'left', minWidth: '200' },
{ title: '备注', field: 'remark', align: 'left', minWidth: '200'},
{ title: '表单名称', field: 'formName', align: 'left', width: '300' },
{ title: '表单地址', field: 'formUrl', align: 'left', minWidth: '220' },
{ title: '列表地址', field: 'formListurl', align: 'left', minWidth: '220' },
{ title: '备注', field: 'remark', align: 'left', minWidth: '100'},
{
title: '操作',
align: 'center',
width: '200',
width: '130',
fixed: 'right',
slots: { default: 'operate' }
}
......
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)"/>
</template>
</BasicTable>
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list} from './StProblemCheck.api';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import { useRoute } from 'vue-router';
const route = useRoute();
//注册model
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
//注册table数据
const { prefixCls, tableContext } = useListPage({
tableProps: {
title: '问题归档',
api: list,
columns,
canResize: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
fieldMapToNumber: [],
fieldMapToTime: [],
},
beforeFetch(params) {
params['id'] = route.query.id
},
actionColumn: {
width: 200,
fixed: 'right',
},
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
function handleArchive(record: Recordable) {
openExecuteModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
function getTableAction(record) {
return [
{
label: '问题归档',
onClick: handleArchive.bind(null, record),
},
];
}
</script>
<style scoped></style>
<template>
<div>
<!--Tab页导航-->
<a-tabs v-model:activeKey="activeTab" @change="handleTabChange" style="margin-left: 16px">
<a-tab-pane key="1" tab="待计划" />
<a-tab-pane key="2" tab="待执行" />
<a-tab-pane key="3" tab="待审核" />
<a-tab-pane key="4" tab="已完成" />
</a-tabs>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
......@@ -35,49 +27,23 @@
</template>
</BasicTable>
<!-- 表单区域 -->
<StProblemCheckModal @register="registerModal" @success="handleSuccess" />
<!-- 整改计划 -->
<StProblemCheckPlanModal @register="registerPlanModal" @success="handleSuccess" />
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
<!-- 整改审核 -->
<StProblemCheckReviewModal @register="registerReviewModal" @success="handleSuccess" />
<!-- <StProblemCheckFlowModal ref="refStProblemCheckFlow" /> -->
<StProblemCheckModal @register="registerModal" @success="handleSuccess" :bmpNodeId="1" />
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref, computed, unref } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import StProblemCheckModal from './components/StProblemCheckModal.vue';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './StProblemCheck.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import StProblemCheckPlanModal from './components/StProblemCheckPlanModal.vue';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import StProblemCheckReviewModal from './components/StProblemCheckReviewModal.vue';
import StProblemCheckFlowModal from './components/StProblemCheckFlowModal.vue';
import { store } from '/@/store';
import { definitionStartByDeployId } from '/@/components/Process/api/definition';
import { useRoute } from 'vue-router';
const route = useRoute();
const checkedKeys = ref<Array<string | number>>([]);
//Tab页状态
const activeTab = ref('1');
//Tab页切换事件
function handleTabChange(key) {
activeTab.value = key;
reload();
}
//注册model
const [registerModal, { openModal }] = useModal();
const [registerPlanModal, { openModal: openPlanModal }] = useModal();
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
const [registerReviewModal, { openModal: openReviewModal }] = useModal();
//注册table数据
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: {
......@@ -94,17 +60,10 @@
fieldMapToTime: [],
},
beforeFetch(params) {
//根据Tab页筛选状态
const tabStatusMap = {
'1': '1', //待计划
'2': '2', //待执行
'3': '3', //待审核
'4': '4', //已完成
};
params['bpmStatus'] = tabStatusMap[activeTab.value];
params['id'] ="" //route.query.id
},
actionColumn: {
width: 200,
width: 400,
fixed: 'right',
},
},
......@@ -127,7 +86,7 @@
openModal(true, {
isUpdate: false,
showFooter: true,
bpmStatus: activeTab.value,
bmpNodeId: route.query.bmpNodeId
});
}
/**
......@@ -138,7 +97,6 @@
record,
isUpdate: true,
showFooter: true,
bpmStatus: activeTab.value,
});
}
function handlePlan(record: Recordable) {
......@@ -148,20 +106,7 @@
showFooter: true,
});
}
function handleExecute(record: Recordable) {
openExecuteModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleReview(record: Recordable) {
openReviewModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
......@@ -194,50 +139,27 @@
* 操作栏
*/
function getTableAction(record) {
const actions = [
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '启动流程',
// onClick: handleFlow.bind(null, record),
ifShow: () => {
if (record['bpmStatus'] == null || record['bpmStatus'] == '') return true;
else return false;
},
onClick: handleFlow.bind(null, record),
// ifShow: ()=> {
// if(record['bpmStatus']==null||record['bpmStatus']=='')
// return true
// else return false
// }
},
];
//根据当前Tab页显示不同的操作按钮
switch (activeTab.value) {
case '1': //待计划
actions.push({
label: '去计划',
onClick: handlePlan.bind(null, record),
});
break;
case '2': //待执行
actions.push({
label: '去执行',
onClick: handleExecute.bind(null, record),
});
break;
case '3': //待审核
actions.push({
label: '去审核',
onClick: handleReview.bind(null, record),
});
break;
case '4': //已完成
actions.push({
label: '查看详情',
onClick: handleDetail.bind(null, record),
});
break;
}
// {
// label: '整改计划',
// onClick: handlePlan.bind(null, record),
// },
return actions;
];
}
/**
* 下拉操作栏
......@@ -257,17 +179,19 @@
},
];
}
const formData = ref<any>({}) // 填写的表单数据
const refStProblemCheckFlow = ref();
function handleFlow(record: Recordable) {
formData.dataId=record.id;
formData.dataName='id';
definitionStartByDeployId(record.deployId, formData).then(res => {
handleSuccess();
})
}
const formData = ref<any>({}); // 填写的表单数据
// const refStProblemCheckFlow = ref();
// function handleFlow(record: Recordable) {
// formData.dataId = record.id;
// formData.dataName = 'id';
// definitionStartByDeployId(record.deployId, formData).then((res) => {
// console.log('计划启动----------- res', res);
// handle.valueSuccess();
// });
// }
</script>
<style scoped></style>
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)"/>
</template>
</BasicTable>
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list} from './StProblemCheck.api';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import { useRoute } from 'vue-router';
const route = useRoute();
//注册model
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
//注册table数据
const { prefixCls, tableContext } = useListPage({
tableProps: {
title: '计划执行审批',
api: list,
columns,
canResize: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
fieldMapToNumber: [],
fieldMapToTime: [],
},
beforeFetch(params) {
params['id'] = route.query.id
},
actionColumn: {
width: 200,
fixed: 'right',
},
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
function handleExecuteApproval(record: Recordable) {
openExecuteModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
function getTableAction(record) {
return [
{
label: '整改审核',
onClick: handleExecuteApproval.bind(null, record),
},
];
}
</script>
<style scoped></style>
......@@ -4,70 +4,36 @@
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined" />
删除
</a-menu-item>
</a-menu>
</template>
<a-button
>批量操作
<Icon icon="mdi:chevron-down" />
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
<TableAction :actions="getTableAction(record)"/>
</template>
</BasicTable>
<!-- 表单区域 -->
<StProblemCheckModal @register="registerModal" @success="handleSuccess" />
<!-- 整改计划 -->
<StProblemCheckPlanModal @register="registerPlanModal" @success="handleSuccess" />
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
<!-- 整改审核 -->
<StProblemCheckReviewModal @register="registerReviewModal" @success="handleSuccess" />
<!-- <StProblemCheckFlowModal ref="refStProblemCheckFlow" /> -->
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref, computed, unref } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import StProblemCheckModal from './components/StProblemCheckModal.vue';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './StProblemCheck.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import StProblemCheckPlanModal from './components/StProblemCheckPlanModal.vue';
import { list} from './StProblemCheck.api';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import StProblemCheckReviewModal from './components/StProblemCheckReviewModal.vue';
import StProblemCheckFlowModal from './components/StProblemCheckFlowModal.vue';
import { store } from '/@/store';
import { definitionStartByDeployId } from "/@/components/Process/api/definition"
import { useRoute } from 'vue-router';
const route = useRoute();
const checkedKeys = ref<Array<string | number>>([]);
//注册model
const [registerModal, { openModal }] = useModal();
const [registerPlanModal, { openModal: openPlanModal }] = useModal();
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
const [registerReviewModal, { openModal: openReviewModal }] = useModal();
//注册table数据
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
const { prefixCls, tableContext } = useListPage({
tableProps: {
title: '问题整改',
api: list,
......@@ -85,48 +51,14 @@
params['id'] = route.query.id
},
actionColumn: {
width: 400,
width: 200,
fixed: 'right',
},
},
exportConfig: {
name: '问题整改',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess,
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handlePlan(record: Recordable) {
openPlanModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleExecute(record: Recordable) {
openExecuteModal(true, {
record,
......@@ -134,103 +66,19 @@
showFooter: true,
});
}
function handleReview(record: Recordable) {
openReviewModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record) {
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '启动流程',
onClick: handleFlow.bind(null, record),
ifShow: ()=> {
if(record['bpmStatus']==null||record['bpmStatus']=='')
return true
else return false
}
},
{
label: '整改计划',
onClick: handlePlan.bind(null, record),
},
{
label: '整改执行',
onClick: handleExecute.bind(null, record),
},
{
label: '整改审核',
onClick: handleReview.bind(null, record),
},
];
}
/**
* 下拉操作栏
*/
function getDropDownAction(record) {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
},
},
];
}
const formData = ref<any>({}) // 填写的表单数据
const refStProblemCheckFlow = ref();
function handleFlow(record: Recordable) {
formData.dataId=record.id;
formData.dataName='id';
definitionStartByDeployId(record.deployId, formData).then(res => {
handleSuccess();
})
}
</script>
......
<template>
<div>
<a-tabs v-model:activeKey="activeTab" @change="handleTabChange" style="margin-left: 16px">
<a-tab-pane v-for="(node, index) in workflowNodes" :key="index + 1" :tab="node.name">
<div v-if="node.formListUrl" class="tab-content">
<component :is="loadComponent(node.formListUrl)" />
</div>
<div v-else class="no-form">
该节点未配置表单
</div>
</a-tab-pane>
</a-tabs>
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref, nextTick, onMounted, defineAsyncComponent, h } from 'vue';
import { useRoute } from 'vue-router';
import { getNodesByTableName } from '/@/components/Process/api/definition';
const route = useRoute();
const workflowNodes = ref<any[]>([]);
const activeTab = ref(1);
// 组件缓存,避免重复加载
const componentCache = new Map();
function handleTabChange(key) {
activeTab.value = key;
}
// 将formListurl转换为正确的导入路径并动态加载组件
function loadComponent(formListurl: string) {
console.log('开始加载组件,formListurl:', formListurl);
if (componentCache.has(formListurl)) {
console.log('从缓存加载组件:', formListurl);
return componentCache.get(formListurl);
}
// 解析formListurl,提取组件路径
// formListurl格式:/project/problemCheck/StProblemCheckList
// 转换为:./StProblemCheckList.vue
const pathParts = formListurl.split('/');
console.log('路径分割结果:', pathParts);
// 获取最后一个部分作为组件名
const componentName = pathParts[pathParts.length - 1];
console.log('提取的组件名:', componentName);
// 构建导入路径
const importPath = `./${componentName}.vue`;
console.log('生成的导入路径:', importPath);
const AsyncComponent = defineAsyncComponent({
loader: async () => {
try {
const module = await import(importPath);
return module.default || module;
} catch (error) {
console.error(`加载组件失败 (${formListurl}):`, error);
return { render: () => h('div', '组件加载失败') };
}
},
loadingComponent: { render: () => h('div', '加载中...') },
errorComponent: { render: () => h('div', '组件加载失败') },
// 延迟显示加载组件的时间(毫秒)
delay: 200,
// 超时时间(毫秒)
timeout: 3000
});
componentCache.set(formListurl, AsyncComponent);
return AsyncComponent;
}
onMounted(async () => {
await nextTick();
try {
const nodes = await getNodesByTableName("st_problem_check");
const nodeData = nodes?.data?.records || nodes?.records || nodes || [];
workflowNodes.value = nodeData;
} catch (error) {
console.error('获取工作流节点失败:', error);
}
});
</script>
<style scoped>
.tab-content {
padding: 0px;
}
.no-form {
padding: 40px;
text-align: center;
color: #999;
}
</style>
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)"/>
</template>
</BasicTable>
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list} from './StProblemCheck.api';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import { useRoute } from 'vue-router';
const route = useRoute();
//注册model
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
//注册table数据
const { prefixCls, tableContext } = useListPage({
tableProps: {
title: '问题整改',
api: list,
columns,
canResize: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter: true,
showAdvancedButton: true,
fieldMapToNumber: [],
fieldMapToTime: [],
},
beforeFetch(params) {
params['id'] = route.query.id
},
actionColumn: {
width: 200,
fixed: 'right',
},
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
function handlePlanApproval(record: Recordable) {
openExecuteModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
function getTableAction(record) {
return [
{
label: '计划审核',
onClick: handlePlanApproval.bind(null, record),
},
];
}
</script>
<style scoped></style>
......@@ -4,72 +4,35 @@
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined" />
删除
</a-menu-item>
</a-menu>
</template>
<a-button
>批量操作
<Icon icon="mdi:chevron-down" />
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
<TableAction :actions="getTableAction(record)"/>
</template>
</BasicTable>
<!-- 表单区域 -->
<StProblemCheckModal @register="registerModal" @success="handleSuccess" />
<!-- 整改计划 -->
<StProblemCheckPlanModal @register="registerPlanModal" @success="handleSuccess" />
<!-- 整改执行 -->
<StProblemCheckExecuteModal @register="registerExecuteModal" @success="handleSuccess" />
<!-- 整改审核 -->
<StProblemCheckReviewModal @register="registerReviewModal" @success="handleSuccess" />
<!-- <StProblemCheckFlowModal ref="refStProblemCheckFlow" /> -->
</div>
</template>
<script lang="ts" name="problem-stProblemCheck" setup>
import { ref, computed, unref } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import { ref } from 'vue';
import { BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import StProblemCheckModal from './components/StProblemCheckModal.vue';
import { columns, searchFormSchema } from './StProblemCheck.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './StProblemCheck.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import StProblemCheckPlanModal from './components/StProblemCheckPlanModal.vue';
import { list} from './StProblemCheck.api';
import StProblemCheckExecuteModal from './components/StProblemCheckExecuteModal.vue';
import StProblemCheckReviewModal from './components/StProblemCheckReviewModal.vue';
import StProblemCheckFlowModal from './components/StProblemCheckFlowModal.vue';
import { store } from '/@/store';
import { definitionStartByDeployId } from "/@/components/Process/api/definition"
import { useRoute } from 'vue-router';
const route = useRoute();
const checkedKeys = ref<Array<string | number>>([]);
//注册model
const [registerModal, { openModal }] = useModal();
const [registerPlanModal, { openModal: openPlanModal }] = useModal();
const [registerExecuteModal, { openModal: openExecuteModal }] = useModal();
const [registerReviewModal, { openModal: openReviewModal }] = useModal();
//注册table数据
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
const { prefixCls, tableContext } = useListPage({
tableProps: {
title: '问题整改',
title: '问题整改计划',
api: list,
columns,
canResize: false,
......@@ -85,152 +48,34 @@
params['id'] = route.query.id
},
actionColumn: {
width: 400,
width: 200,
fixed: 'right',
},
},
exportConfig: {
name: '问题整改',
url: getExportUrl,
},
importConfig: {
url: getImportUrl,
success: handleSuccess,
},
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handlePlan(record: Recordable) {
openPlanModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleExecute(record: Recordable) {
openExecuteModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
function handleReview(record: Recordable) {
openReviewModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({ id: record.id }, handleSuccess);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ ids: selectedRowKeys.value }, handleSuccess);
}
/**
* 成功回调
*/
function handleSuccess() {
(selectedRowKeys.value = []) && reload();
}
/**
* 操作栏
*/
function getTableAction(record) {
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '启动流程',
onClick: handleFlow.bind(null, record),
ifShow: ()=> {
if(record['bpmStatus']==null||record['bpmStatus']=='')
return true
else return false
}
},
{
label: '整改计划',
label: '制定整改计划',
onClick: handlePlan.bind(null, record),
},
{
label: '整改执行',
onClick: handleExecute.bind(null, record),
},
{
label: '整改审核',
onClick: handleReview.bind(null, record),
},
];
}
/**
* 下拉操作栏
*/
function getDropDownAction(record) {
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
},
{
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
},
},
];
}
const formData = ref<any>({}) // 填写的表单数据
const refStProblemCheckFlow = ref();
function handleFlow(record: Recordable) {
formData.dataId=record.id;
formData.dataName='id';
definitionStartByDeployId(record.deployId, formData).then(res => {
handleSuccess();
})
}
</script>
......
......@@ -41,6 +41,7 @@
let formData = {};
const queryByIdUrl = '/problem/stProblemCheck/queryById/';
alert(props.formData.dataId)
async function initFormData() {
let params = { id: props.formData.dataId };
const data = await defHttp.get({ url: queryByIdUrl, params });
......
<template>
<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
<!-- <st-problem-check-form /> -->
<BasicForm @register="registerForm"></BasicForm>
<st-problem-check-form />
<!-- <BasicForm @register="registerForm"></BasicForm> -->
</BasicModal>
</template>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论