You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

335 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>发起流程 - 资金使用管理系统</title>
<link href="https://cdn.staticfile.org/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.staticfile.org/bootstrap-icons/1.11.0/font/bootstrap-icons.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Microsoft YaHei', sans-serif;
background-color: #f5f7fa;
padding: 20px;
}
.page-header {
background: white;
padding: 25px 30px;
border-radius: 10px;
margin-bottom: 20px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
}
.page-title {
font-size: 24px;
font-weight: 600;
color: #333;
margin: 0;
}
.page-title i {
margin-right: 10px;
color: #667eea;
}
.process-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 25px;
max-width: 1400px;
margin: 0 auto;
}
.process-card {
background: white;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 40px 30px;
text-align: center;
cursor: pointer;
transition: all 0.3s;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
position: relative;
}
.process-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
border-color: #667eea;
}
.process-card.has-subprocess {
padding-bottom: 50px;
}
.process-icon {
width: 80px;
height: 80px;
margin: 0 auto 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 48px;
color: #3b82f6;
}
.process-title {
font-size: 20px;
font-weight: 600;
color: #333;
margin-bottom: 12px;
}
.process-subtitle {
font-size: 14px;
color: #666;
line-height: 1.5;
margin-bottom: 15px;
}
.subprocess-list {
display: none;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #e5e7eb;
}
.process-card.expanded .subprocess-list {
display: block;
}
.subprocess-item {
display: block;
padding: 10px 15px;
margin: 8px 0;
background: #f8f9fa;
border-radius: 6px;
font-size: 14px;
color: #333;
text-decoration: none;
transition: all 0.2s;
text-align: left;
}
.subprocess-item:hover {
background: #e7f3ff;
color: #667eea;
transform: translateX(5px);
}
.expand-indicator {
position: absolute;
bottom: 15px;
left: 50%;
transform: translateX(-50%);
font-size: 12px;
color: #999;
display: flex;
align-items: center;
gap: 5px;
}
.process-card.expanded .expand-indicator i {
transform: rotate(180deg);
}
</style>
</head>
<body>
<!-- 页面头部 -->
<div class="page-header">
<h1 class="page-title">
<i class="bi bi-plus-circle"></i> 发起流程
</h1>
</div>
<!-- 流程卡片 -->
<div class="process-grid">
<!-- 采购管理 -->
<div class="process-card has-subprocess expanded" onclick="toggleSubprocess(event, this)">
<div class="process-icon">
<i class="bi bi-cart"></i>
</div>
<div class="process-title">采购管理</div>
<div class="process-subtitle">课题/非课题采购审批</div>
<div class="subprocess-list">
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'procurement', 'project')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 课题采购
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'procurement', 'non-project')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 非课题采购
</a>
</div>
<div class="expand-indicator">
<span>收起子流程</span>
<i class="bi bi-chevron-down"></i>
</div>
</div>
<!-- 会议、培训、接待 -->
<div class="process-card has-subprocess expanded" onclick="toggleSubprocess(event, this)">
<div class="process-icon">
<i class="bi bi-people"></i>
</div>
<div class="process-title">会议、培训、接待</div>
<div class="process-subtitle">培训、会议、接待审批</div>
<div class="subprocess-list">
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'meeting', 'training')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 培训审批
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'meeting', 'meeting')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 会议审批
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'meeting', 'reception')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 公务接待审批
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'meeting', 'expert')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 邀请外部专家审批
</a>
</div>
<div class="expand-indicator">
<span>收起子流程</span>
<i class="bi bi-chevron-down"></i>
</div>
</div>
<!-- 车船管理及维修 -->
<div class="process-card" onclick="loadProcess('vehicle')">
<div class="process-icon">
<i class="bi bi-truck"></i>
</div>
<div class="process-title">车船管理及维修</div>
<div class="process-subtitle">车船维修保养申请</div>
</div>
<!-- 仪器管理 -->
<div class="process-card has-subprocess expanded" onclick="toggleSubprocess(event, this)">
<div class="process-icon">
<i class="bi bi-gear"></i>
</div>
<div class="process-title">仪器管理</div>
<div class="process-subtitle">仪器设备相关申请</div>
<div class="subprocess-list">
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'instrument', 'repair')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 仪器设备维修
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'instrument', 'purchase')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 仪器设备购置申请
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'instrument', 'acceptance')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 仪器设备验收
</a>
</div>
<div class="expand-indicator">
<span>收起子流程</span>
<i class="bi bi-chevron-down"></i>
</div>
</div>
<!-- 出差管理 -->
<div class="process-card" onclick="loadProcess('travel')">
<div class="process-icon">
<i class="bi bi-airplane"></i>
</div>
<div class="process-title">出差管理</div>
<div class="process-subtitle">出差审批</div>
</div>
<!-- 合同管理 -->
<div class="process-card has-subprocess expanded" onclick="toggleSubprocess(event, this)">
<div class="process-icon">
<i class="bi bi-file-earmark-text"></i>
</div>
<div class="process-title">合同管理</div>
<div class="process-subtitle">合同审批、变更审批</div>
<div class="subprocess-list">
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'contract', 'approval')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 合同审批
</a>
<a href="#" class="subprocess-item" onclick="loadSubProcess(event, 'contract', 'change')">
<i class="bi bi-circle-fill" style="font-size: 6px; margin-right: 8px;"></i> 合同变更审批
</a>
</div>
<div class="expand-indicator">
<span>收起子流程</span>
<i class="bi bi-chevron-down"></i>
</div>
</div>
<!-- 安装维修 -->
<div class="process-card" onclick="loadProcess('installation')">
<div class="process-icon">
<i class="bi bi-tools"></i>
</div>
<div class="process-title">安装维修</div>
<div class="process-subtitle">安装、维修申请</div>
</div>
</div>
<script src="https://cdn.staticfile.org/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<script>
// 流程类型到页面的映射
const processPageMap = {
'procurement': 'pages/pre-approval/procurement.html',
'meeting': 'pages/pre-approval/meeting.html',
'vehicle': 'pages/pre-approval/vehicle.html',
'instrument': 'pages/pre-approval/instrument.html',
'travel': 'pages/pre-approval/travel.html',
'contract': 'pages/pre-approval/contract.html',
'installation': 'pages/pre-approval/installation.html'
};
// 切换子流程显示
function toggleSubprocess(event, card) {
// 如果点击的是子流程项,不切换展开状态
if (event.target.closest('.subprocess-item')) {
return;
}
card.classList.toggle('expanded');
}
// 加载子流程页面
function loadSubProcess(event, processType, subType) {
event.preventDefault();
event.stopPropagation();
const page = processPageMap[processType];
if (page) {
// 构建URL包含子类型参数
const url = page + '?type=' + subType;
if (parent && parent.loadPage) {
parent.loadPage(url);
} else {
window.location.href = url;
}
} else {
alert('流程页面未配置');
}
}
// 加载流程页面
function loadProcess(processType) {
const page = processPageMap[processType];
if (page) {
if (parent && parent.loadPage) {
parent.loadPage(page);
} else {
window.location.href = page;
}
} else {
alert('流程页面未配置');
}
}
</script>
</body>
</html>