193 lines
9.9 KiB
HTML
193 lines
9.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>开票管理 - OA系统</title>
|
||
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
|
||
<!-- 统一布局样式 -->
|
||
<link rel="stylesheet" href="unified-layout.css">
|
||
<style>
|
||
/* 页面特定样式覆盖 */
|
||
</style>
|
||
<!-- Vue.js -->
|
||
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
|
||
<!-- Element UI JS -->
|
||
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
|
||
</head>
|
||
<body>
|
||
<div class="layout-container">
|
||
<div class="main-container">
|
||
<div class="sidebar">
|
||
<div class="menu-item active">开票管理</div>
|
||
<div class="menu-item" onclick="window.location.href='finance-payment.html'">回款管理</div>
|
||
<div class="menu-item" onclick="window.location.href='finance-request.html'">请款管理</div>
|
||
</div>
|
||
<div class="app-main">
|
||
<div class="content">
|
||
<div class="page-header">
|
||
<div class="page-title">开票管理</div>
|
||
<button class="btn btn-primary" onclick="applyInvoice()">+ 开票申请</button>
|
||
</div>
|
||
<div class="search-form">
|
||
<div class="form-row">
|
||
<div class="form-item">
|
||
<input type="text" class="form-input" placeholder="项目编号/名称">
|
||
</div>
|
||
<div class="form-item">
|
||
<select class="form-select">
|
||
<option>全部状态</option>
|
||
<option>待开票</option>
|
||
<option>已开票</option>
|
||
</select>
|
||
</div>
|
||
<div class="form-item" style="display: flex; gap: 8px;">
|
||
<button class="btn btn-primary">查询</button>
|
||
<button class="btn btn-default">重置</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="table-container">
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>项目编号</th>
|
||
<th>项目名称</th>
|
||
<th>开票金额</th>
|
||
<th>开票时间</th>
|
||
<th>状态</th>
|
||
<th>操作</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>25-1</td>
|
||
<td>XX工程项目</td>
|
||
<td>¥100,000</td>
|
||
<td>2025-01-15</td>
|
||
<td><span class="status-badge status-published">已开票</span></td>
|
||
<td>
|
||
<span class="action-link" onclick="window.location.href='invoice-detail.html?id=FP-2025-001'">查看详情</span>
|
||
<span class="action-link" onclick="downloadInvoice('FP-2025-001')">下载</span>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script src="common.js"></script>
|
||
<script>
|
||
// 项目选择变化事件
|
||
function onProjectSelect() {
|
||
const select = document.getElementById('invoice-project');
|
||
const selectedOption = select.options[select.selectedIndex];
|
||
const projectInfo = document.getElementById('projectInfo');
|
||
const projectDetail = document.getElementById('projectDetail');
|
||
|
||
if (!selectedOption.value) {
|
||
projectInfo.style.display = 'none';
|
||
return;
|
||
}
|
||
|
||
const projectNumber = selectedOption.value;
|
||
const status = selectedOption.getAttribute('data-status');
|
||
const statusText = status === 'contract' ? '已签合同' : '已提交正式成果';
|
||
|
||
// 模拟项目详情数据(实际应从后端获取)
|
||
const projectData = {
|
||
'25-1': { name: 'XX工程项目', customer: 'XX公司', amount: '¥500,000', contractAmount: '¥500,000' },
|
||
'25-2': { name: 'YY工程项目', customer: 'YY公司', amount: '¥800,000', contractAmount: '-' },
|
||
'25-3': { name: 'ZZ工程项目', customer: 'ZZ公司', amount: '¥600,000', contractAmount: '¥600,000' },
|
||
'25-4': { name: 'AA工程项目', customer: 'AA公司', amount: '¥1,200,000', contractAmount: '-' }
|
||
};
|
||
|
||
const data = projectData[projectNumber] || {};
|
||
projectDetail.innerHTML = `
|
||
<div style="margin-top: 4px;">项目名称:${data.name || '-'}</div>
|
||
<div>客户名称:${data.customer || '-'}</div>
|
||
<div>项目金额:${data.amount || '-'}</div>
|
||
<div>合同金额:${data.contractAmount || '-'}</div>
|
||
<div style="color: #52c41a; margin-top: 4px;">✓ 状态:${statusText}</div>
|
||
`;
|
||
projectInfo.style.display = 'block';
|
||
}
|
||
|
||
function downloadInvoice(id) {
|
||
CommonUtils.downloadFile('发票_' + id + '.pdf', id);
|
||
}
|
||
|
||
function applyInvoice() {
|
||
const content = `
|
||
<div style="padding: 20px;">
|
||
<div style="margin-bottom: 16px;">
|
||
<label style="display: block; margin-bottom: 8px; color: #606266;">
|
||
<span style="color: #ff4d4f;">*</span>选择项目
|
||
</label>
|
||
<select id="invoice-project" class="form-select" style="width: 100%; padding: 8px 12px; border: 1px solid #d9d9d9; border-radius: 4px;" onchange="onProjectSelect()">
|
||
<option value="">请选择项目</option>
|
||
<option value="25-1" data-status="contract">25-1 - XX工程项目(已签合同)</option>
|
||
<option value="25-2" data-status="output">25-2 - YY工程项目(已提交正式成果)</option>
|
||
<option value="25-3" data-status="contract">25-3 - ZZ工程项目(已签合同)</option>
|
||
<option value="25-4" data-status="output">25-4 - AA工程项目(已提交正式成果)</option>
|
||
</select>
|
||
<div style="font-size: 12px; color: #1890ff; margin-top: 4px;">
|
||
✅ 仅显示有合同或已提交正式成果的项目(已自动筛选)
|
||
</div>
|
||
<div id="projectInfo" style="font-size: 12px; color: #666; margin-top: 8px; padding: 8px; background: #f5f5f5; border-radius: 4px; display: none;">
|
||
<div><strong>项目信息:</strong></div>
|
||
<div id="projectDetail"></div>
|
||
</div>
|
||
</div>
|
||
<div style="margin-bottom: 16px;">
|
||
<label style="display: block; margin-bottom: 8px; color: #606266;">
|
||
<span style="color: #ff4d4f;">*</span>开票金额(元)
|
||
</label>
|
||
<input type="number" id="invoice-amount" class="form-input" placeholder="请输入开票金额" style="width: 100%; padding: 8px 12px; border: 1px solid #d9d9d9; border-radius: 4px;">
|
||
</div>
|
||
<div style="margin-bottom: 16px;">
|
||
<label style="display: block; margin-bottom: 8px; color: #606266;">
|
||
<span style="color: #ff4d4f;">*</span>发票类型
|
||
</label>
|
||
<select id="invoice-type" class="form-select" style="width: 100%; padding: 8px 12px; border: 1px solid #d9d9d9; border-radius: 4px;">
|
||
<option value="normal">增值税普通发票</option>
|
||
<option value="special">增值税专用发票</option>
|
||
</select>
|
||
</div>
|
||
<div style="margin-bottom: 16px;">
|
||
<label style="display: block; margin-bottom: 8px; color: #606266;">开票说明</label>
|
||
<textarea id="invoice-desc" class="form-textarea" placeholder="请输入开票说明" style="width: 100%; padding: 8px 12px; border: 1px solid #d9d9d9; border-radius: 4px; min-height: 80px; resize: vertical;"></textarea>
|
||
</div>
|
||
</div>
|
||
`;
|
||
|
||
CommonUtils.createModal('开票申请', content, () => {
|
||
const project = document.getElementById('invoice-project').value;
|
||
const amount = document.getElementById('invoice-amount').value;
|
||
const type = document.getElementById('invoice-type').value;
|
||
|
||
if (!project) {
|
||
CommonUtils.showMessage('请选择项目', 'error');
|
||
return false;
|
||
}
|
||
if (!amount || parseFloat(amount) <= 0) {
|
||
CommonUtils.showMessage('请输入有效的开票金额', 'error');
|
||
return false;
|
||
}
|
||
|
||
CommonUtils.showMessage('开票申请已提交,等待审核');
|
||
setTimeout(() => location.reload(), 1000);
|
||
return true;
|
||
});
|
||
}
|
||
</script>
|
||
<script src="unified-layout.js"></script>
|
||
<script>
|
||
initUnifiedLayout('finance');
|
||
</script>
|
||
</body>
|
||
</html>
|
||
|