someone-oa/pc/finance-invoice.html
2025-12-11 19:04:46 +08:00

193 lines
9.9 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>