514 lines
23 KiB
Python
514 lines
23 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
生成OA系统项目报价文档
|
||
"""
|
||
from docx import Document
|
||
from docx.shared import Pt, Inches, RGBColor
|
||
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
||
from datetime import datetime, timedelta
|
||
from docx.oxml.ns import qn
|
||
|
||
def set_chinese_font(run, font_name='宋体'):
|
||
"""设置中文字体"""
|
||
run.font.name = font_name
|
||
run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
|
||
|
||
def add_section_title(doc, text, level=1):
|
||
"""添加章节标题"""
|
||
heading = doc.add_heading(text, level=level)
|
||
return heading
|
||
|
||
def add_formatted_paragraph(doc, text, bold=False, align=None):
|
||
"""添加格式化的段落"""
|
||
p = doc.add_paragraph()
|
||
if align == 'center':
|
||
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
elif align == 'right':
|
||
p.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
||
run = p.add_run(text)
|
||
if bold:
|
||
run.bold = True
|
||
set_chinese_font(run)
|
||
return p
|
||
|
||
def add_table_with_header(doc, headers, data, style='Light Grid Accent 1'):
|
||
"""创建带表头的表格"""
|
||
table = doc.add_table(rows=1, cols=len(headers))
|
||
table.style = style
|
||
|
||
# 添加表头
|
||
hdr_cells = table.rows[0].cells
|
||
for i, header in enumerate(headers):
|
||
hdr_cells[i].text = header
|
||
# 表头加粗
|
||
for paragraph in hdr_cells[i].paragraphs:
|
||
for run in paragraph.runs:
|
||
run.bold = True
|
||
set_chinese_font(run)
|
||
|
||
# 添加数据行
|
||
for row_data in data:
|
||
row_cells = table.add_row().cells
|
||
for i, cell_data in enumerate(row_data):
|
||
row_cells[i].text = str(cell_data)
|
||
# 设置中文字体
|
||
for paragraph in row_cells[i].paragraphs:
|
||
for run in paragraph.runs:
|
||
set_chinese_font(run)
|
||
|
||
return table
|
||
|
||
def generate_quotation():
|
||
"""生成报价文档"""
|
||
doc = Document()
|
||
|
||
# 设置文档样式
|
||
style = doc.styles['Normal']
|
||
font = style.font
|
||
font.name = '宋体'
|
||
font.size = Pt(12)
|
||
|
||
# ========== 文档封面 ==========
|
||
# 标题
|
||
title = doc.add_heading('OA系统开发项目报价书', 0)
|
||
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
|
||
# 副标题
|
||
subtitle = doc.add_paragraph()
|
||
subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
run = subtitle.add_run('(产品需求文档 v1.0)')
|
||
run.font.size = Pt(14)
|
||
set_chinese_font(run)
|
||
|
||
# 添加空白行
|
||
for _ in range(5):
|
||
doc.add_paragraph()
|
||
|
||
# 公司信息
|
||
company_info = doc.add_paragraph()
|
||
company_info.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
run = company_info.add_run('项目报价单位:[您的公司名称]')
|
||
run.font.size = Pt(14)
|
||
run.bold = True
|
||
set_chinese_font(run)
|
||
|
||
doc.add_paragraph()
|
||
|
||
date_para = doc.add_paragraph()
|
||
date_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||
run = date_para.add_run(f'报价日期:{datetime.now().strftime("%Y年%m月%d日")}')
|
||
run.font.size = Pt(12)
|
||
set_chinese_font(run)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 1. 项目概述 ==========
|
||
add_section_title(doc, '一、项目概述', 1)
|
||
|
||
add_section_title(doc, '1.1 项目背景', 2)
|
||
doc.add_paragraph('随着贵公司业务发展,项目管理流程日趋复杂,需要一套完整的OA系统来支撑从商机立项到项目完成、财务结算的全流程管理。系统需支持项目过程跟踪、状态管理、产值统计与回款管理等核心业务,实现项目管理数字化、流程化、可视化管理。')
|
||
|
||
add_section_title(doc, '1.2 项目目标', 2)
|
||
objectives = [
|
||
'实现项目全生命周期在线管理,从立项到回款全流程数字化',
|
||
'建立项目状态可视化跟踪机制,实时掌握项目进展',
|
||
'支持产值与财务数据统计,为管理决策提供数据支撑',
|
||
'建立规范的审核流程,确保关键环节可追溯',
|
||
'支持PC端与移动端,提升使用便捷性',
|
||
'提升项目管理效率,降低管理成本'
|
||
]
|
||
for obj in objectives:
|
||
p = doc.add_paragraph(obj, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
add_section_title(doc, '1.3 交付范围', 2)
|
||
doc.add_paragraph('本报价包含以下交付内容:')
|
||
deliverables = [
|
||
'OA系统PC端完整功能开发',
|
||
'OA系统移动端应用开发(支持iOS和Android)',
|
||
'系统部署和上线',
|
||
'系统使用培训(不少于2次)',
|
||
'系统使用文档(用户手册、管理员手册)',
|
||
'系统质保期内的维护和技术支持(详见质保条款)'
|
||
]
|
||
for item in deliverables:
|
||
p = doc.add_paragraph(item, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 2. 功能清单 ==========
|
||
add_section_title(doc, '二、功能清单', 1)
|
||
|
||
add_section_title(doc, '2.1 商机(立项)管理模块', 2)
|
||
functions_1 = [
|
||
('立项申请', '商务人员在线提交项目立项申请,包含项目基本信息、客户信息、服务内容等'),
|
||
('审核流程', '经营管理部及总经理依次审核立项申请,支持审核通过/驳回'),
|
||
('项目编号', '系统自动生成项目编号(年份+序号),确保唯一性'),
|
||
('投标管理', '项目状态管理,支持投标状态更新和投标附件上传'),
|
||
('合同管理', '合同状态管理和合同附件上传'),
|
||
('项目查询', '多条件组合查询项目,支持按编号、名称、状态等查询,支持导出')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_1)
|
||
|
||
add_section_title(doc, '2.2 项目过程管理模块', 2)
|
||
functions_2 = [
|
||
('项目启动', '项目启动申请,关联立项项目,分配执业工程师和工作内容'),
|
||
('启动审核', '经营管理部和总经理审核启动申请'),
|
||
('启动编号', '系统自动生成启动编号(立项编号+类型+序号)'),
|
||
('成果管理', '执业工程师提交项目成果(初稿、对账、最终成果)'),
|
||
('成果审核', '组长和领导依次审核项目成果'),
|
||
('差异提醒', '初稿与对账金额差异过大时自动提醒'),
|
||
('进度查询', '实时查询项目执行进度,支持多条件筛选'),
|
||
('费用计算', '根据标准文件自动计算项目费用(支持6种项目类型)')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_2)
|
||
|
||
add_section_title(doc, '2.3 财务管理模块', 2)
|
||
functions_3 = [
|
||
('开票申请', '商务人员提交开票申请'),
|
||
('开票管理', '财务人员开票并填写开票金额,上传开票附件'),
|
||
('回款管理', '记录回款金额,更新回款状态'),
|
||
('请款申请', '商务人员提交请款申请'),
|
||
('请款审核', '总经理审核请款申请'),
|
||
('付款管理', '出纳确认付款,更新付款状态')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_3)
|
||
|
||
add_section_title(doc, '2.4 报表管理模块', 2)
|
||
functions_4 = [
|
||
('项目明细表', '展示项目从立项到回款的所有明细信息,支持查询和导出'),
|
||
('项目汇总表', '按状态、负责人等维度汇总项目数量和金额'),
|
||
('产值明细表', '按执业者展示完成产值明细,自动计算产值分配'),
|
||
('产值汇总表', '按执业者统计指定时间段的产值完成情况'),
|
||
('应收账款汇总表', '按客户单位汇总应收账款'),
|
||
('应收账款明细表', '按客户单位展示多个项目的应收账款明细'),
|
||
('应付账款明细表', '展示请款申请的应付账款明细'),
|
||
('应付账款汇总表', '汇总所有请款金额')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_4)
|
||
|
||
add_section_title(doc, '2.5 系统设置模块', 2)
|
||
functions_5 = [
|
||
('组织架构管理', '自定义部门层级结构,支持多级部门'),
|
||
('账号管理', '用户账号的创建、编辑、禁用等管理'),
|
||
('角色权限', '基于角色的权限控制(RBAC),可配置功能权限和数据权限'),
|
||
('审核流程配置', '可配置审核流程节点和审核人'),
|
||
('系统参数配置', '系统参数、计算公式等可配置化管理')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_5)
|
||
|
||
add_section_title(doc, '2.6 通用功能', 2)
|
||
functions_6 = [
|
||
('消息通知', '站内消息、邮件、短信、移动端推送等多种通知方式'),
|
||
('附件管理', '支持多种格式文件上传、下载、在线预览'),
|
||
('操作日志', '记录所有关键操作日志,支持查询和导出'),
|
||
('数据权限', '三级数据权限控制(个人/部门/全部)'),
|
||
('移动端支持', 'iOS和Android移动应用,支持待办审核、消息通知等')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['功能点', '功能描述'], functions_6)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 3. 技术方案 ==========
|
||
add_section_title(doc, '三、技术方案', 1)
|
||
|
||
add_section_title(doc, '3.1 技术架构', 2)
|
||
doc.add_paragraph('采用前后端分离架构,确保系统的可维护性和可扩展性。')
|
||
|
||
tech_stack = [
|
||
('前端技术', 'Vue.js 3.x + Element Plus(PC端),Vue Native/React Native(移动端)'),
|
||
('后端技术', 'Java Spring Boot / Python Django(根据实际情况选择)'),
|
||
('数据库', 'MySQL 8.0(主数据库),Redis(缓存)'),
|
||
('文件存储', '本地存储或云存储(阿里云OSS/腾讯云COS)'),
|
||
('消息队列', 'RabbitMQ或Redis(用于异步任务和消息通知)'),
|
||
('部署方式', 'Docker容器化部署,支持集群部署')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['技术栈', '技术选型'], tech_stack)
|
||
|
||
add_section_title(doc, '3.2 性能指标', 2)
|
||
performance = [
|
||
('响应时间', '常规操作响应时间≤2秒,复杂查询≤5秒'),
|
||
('并发支持', '支持至少50个用户同时在线使用'),
|
||
('数据容量', '支持至少10万条项目记录'),
|
||
('可用性', '系统可用性≥99%(排除计划内维护)'),
|
||
('安全标准', '符合网络安全等级保护要求')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['性能指标', '指标值'], performance)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 4. 项目周期 ==========
|
||
add_section_title(doc, '四、项目周期', 1)
|
||
|
||
doc.add_paragraph('项目预计总周期:16周(约4个月)')
|
||
|
||
add_section_title(doc, '4.1 项目阶段划分', 2)
|
||
|
||
phases = [
|
||
('需求分析', '2周', '需求调研、需求确认、原型设计确认'),
|
||
('系统设计', '2周', '数据库设计、接口设计、UI设计'),
|
||
('开发阶段', '8周', '后端开发(4周)、PC前端开发(3周)、移动端开发(3周,并行)'),
|
||
('测试阶段', '2周', '功能测试、性能测试、安全测试、用户验收测试'),
|
||
('部署上线', '1周', '系统部署、数据迁移、上线试运行'),
|
||
('培训交付', '1周', '用户培训、文档交付、正式验收')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['项目阶段', '周期', '主要工作'], phases)
|
||
|
||
add_section_title(doc, '4.2 里程碑节点', 2)
|
||
|
||
milestones = [
|
||
('M1', '需求确认', '需求文档确认签字', '第2周末'),
|
||
('M2', '原型确认', '原型设计确认签字', '第3周末'),
|
||
('M3', '设计评审', '数据库和接口设计评审通过', '第4周末'),
|
||
('M4', '开发完成', '所有功能开发完成,提交测试', '第12周末'),
|
||
('M5', '测试完成', '测试通过,准备上线', '第14周末'),
|
||
('M6', '正式验收', '项目正式验收,交付使用', '第16周末')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['里程碑', '节点名称', '交付物', '时间节点'], milestones)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 5. 项目费用 ==========
|
||
add_section_title(doc, '五、项目费用', 1)
|
||
|
||
doc.add_paragraph('项目总费用说明:以下费用包含所有开发、实施、培训、质保期维护等费用。')
|
||
|
||
add_section_title(doc, '5.1 费用明细', 2)
|
||
|
||
# 费用明细表
|
||
cost_details = [
|
||
('需求分析与设计', '需求调研、原型设计、数据库设计、接口设计', '3周', '¥XX,XXX', '15%'),
|
||
('PC端开发', '后端开发、PC前端开发、接口开发', '8周', '¥XX,XXX', '40%'),
|
||
('移动端开发', 'iOS和Android应用开发', '3周', '¥XX,XXX', '15%'),
|
||
('测试与优化', '功能测试、性能测试、安全测试、bug修复', '2周', '¥XX,XXX', '10%'),
|
||
('部署与培训', '系统部署、数据迁移、用户培训、文档编写', '2周', '¥XX,XXX', '10%'),
|
||
('项目管理', '项目协调、进度管理、质量管控', '全程', '¥XX,XXX', '10%')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['工作内容', '说明', '工期', '费用', '占比'], cost_details)
|
||
|
||
add_section_title(doc, '5.2 费用汇总', 2)
|
||
|
||
# 费用汇总
|
||
total_cost = [
|
||
('开发费用', '包含需求、设计、开发、测试、部署等所有费用', '¥XXX,XXX', '80%'),
|
||
('质保期维护', '12个月质保期内的bug修复、技术支持和系统优化', '¥XX,XXX', '10%'),
|
||
('培训费用', '用户培训、管理员培训(不少于2次)', '¥XX,XXX', '5%'),
|
||
('文档费用', '用户手册、管理员手册、技术文档', '¥XX,XXX', '5%'),
|
||
('项目总价', '(含税)', '¥XXX,XXX', '100%')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['费用项目', '说明', '金额', '占比'], total_cost)
|
||
|
||
add_section_title(doc, '5.3 付款方式', 2)
|
||
doc.add_paragraph('建议付款方式(可协商调整):')
|
||
|
||
payment_terms = [
|
||
('首付款', '合同签订后3个工作日内', '30%', '¥XXX,XXX'),
|
||
('进度款1', '原型设计确认后', '20%', '¥XX,XXX'),
|
||
('进度款2', '开发完成并提交测试后', '30%', '¥XXX,XXX'),
|
||
('验收款', '项目验收通过后', '15%', '¥XX,XXX'),
|
||
('质保金', '质保期结束后', '5%', '¥XX,XXX')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['付款节点', '付款条件', '付款比例', '金额'], payment_terms)
|
||
|
||
doc.add_paragraph()
|
||
doc.add_paragraph('注:以上费用均为含税价格,发票类型为【增值税专用发票/普通发票】。')
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 6. 交付物清单 ==========
|
||
add_section_title(doc, '六、交付物清单', 1)
|
||
|
||
deliverables_list = [
|
||
('源代码', '完整的系统源代码(含注释),包含前端、后端、移动端', '电子版'),
|
||
('部署包', '可直接部署的系统安装包和部署脚本', '电子版'),
|
||
('数据库脚本', '数据库初始化脚本和升级脚本', '电子版'),
|
||
('接口文档', '完整的RESTful API接口文档(Swagger格式)', '电子版'),
|
||
('数据库设计文档', '数据库表结构设计文档', '电子版+纸质版'),
|
||
('系统架构文档', '系统技术架构设计文档', '电子版+纸质版'),
|
||
('用户操作手册', 'PC端和移动端用户操作手册', '电子版+纸质版'),
|
||
('管理员手册', '系统管理员配置和维护手册', '电子版+纸质版'),
|
||
('测试报告', '功能测试、性能测试、安全测试报告', '电子版+纸质版'),
|
||
('培训材料', '培训PPT和相关培训资料', '电子版')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['交付物', '说明', '交付形式'], deliverables_list)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 7. 质量保证 ==========
|
||
add_section_title(doc, '七、质量保证', 1)
|
||
|
||
add_section_title(doc, '7.1 开发质量标准', 2)
|
||
quality_standards = [
|
||
'代码规范:遵循行业代码规范,代码注释完整,便于维护',
|
||
'测试覆盖:单元测试覆盖率≥70%,关键功能测试覆盖率100%',
|
||
'性能标准:满足性能指标要求,通过性能压力测试',
|
||
'安全标准:通过安全测试,无高危安全漏洞',
|
||
'兼容性:支持主流浏览器和移动设备,兼容性测试通过'
|
||
]
|
||
for standard in quality_standards:
|
||
p = doc.add_paragraph(standard, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
add_section_title(doc, '7.2 质保服务', 2)
|
||
doc.add_paragraph('质保期:自项目验收通过之日起12个月。')
|
||
doc.add_paragraph('质保期内服务内容:')
|
||
|
||
warranty_services = [
|
||
'免费修复系统运行中发现的bug和缺陷',
|
||
'免费技术支持(工作日工作时间)',
|
||
'免费系统优化(性能优化、安全加固等)',
|
||
'免费提供系统版本升级(功能增强需另行协商)',
|
||
'7×24小时紧急技术支持(系统故障)'
|
||
]
|
||
for service in warranty_services:
|
||
p = doc.add_paragraph(service, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
add_section_title(doc, '7.3 验收标准', 2)
|
||
doc.add_paragraph('项目验收需满足以下条件:')
|
||
|
||
acceptance_criteria = [
|
||
'所有功能需求已实现,功能测试通过',
|
||
'性能指标达到要求,性能测试通过',
|
||
'安全测试通过,无高危漏洞',
|
||
'兼容性测试通过,支持指定浏览器和设备',
|
||
'用户培训已完成,用户能够独立操作系统',
|
||
'所有交付物已提交,文档完整'
|
||
]
|
||
for criterion in acceptance_criteria:
|
||
p = doc.add_paragraph(criterion, style='List Bullet')
|
||
set_chinese_font(p.runs[0])
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 8. 服务支持 ==========
|
||
add_section_title(doc, '八、服务支持', 1)
|
||
|
||
add_section_title(doc, '8.1 技术支持', 2)
|
||
support_services = [
|
||
('服务时间', '工作日:9:00-18:00\n紧急情况:7×24小时'),
|
||
('支持方式', '电话支持、远程协助、现场支持(必要时)'),
|
||
('响应时间', '一般问题:4小时内响应\n紧急问题:1小时内响应\n系统故障:30分钟内响应'),
|
||
('支持内容', '系统使用咨询、bug修复、系统优化、技术培训')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['服务项目', '服务内容'], support_services)
|
||
|
||
add_section_title(doc, '8.2 培训服务', 2)
|
||
training_services = [
|
||
('培训对象', '系统管理员、业务用户(商务、财务、执业工程师等)'),
|
||
('培训方式', '现场培训、在线培训、录播视频'),
|
||
('培训次数', '不少于2次集中培训,后续可安排补充培训'),
|
||
('培训内容', '系统功能介绍、操作演示、常见问题解答'),
|
||
('培训材料', '提供培训PPT、操作视频、FAQ文档')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['培训项目', '说明'], training_services)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 9. 风险说明 ==========
|
||
add_section_title(doc, '九、风险说明', 1)
|
||
|
||
doc.add_paragraph('项目执行过程中可能存在的风险及应对措施:')
|
||
|
||
risks = [
|
||
('需求变更风险', '项目执行过程中需求可能发生变更', '建立需求变更流程,变更需双方确认,可能影响工期和费用'),
|
||
('技术风险', '新技术应用或技术难点可能影响进度', '提前进行技术预研,预留技术攻关时间'),
|
||
('数据风险', '数据迁移或数据质量问题', '提前进行数据梳理,制定详细的数据迁移方案'),
|
||
('人员风险', '关键人员变动可能影响项目进度', '建立知识文档,确保知识传承'),
|
||
('时间风险', '项目进度可能因各种原因延期', '制定详细的项目计划,定期跟踪进度,及时调整')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['风险类型', '风险描述', '应对措施'], risks)
|
||
|
||
doc.add_page_break()
|
||
|
||
# ========== 10. 其他条款 ==========
|
||
add_section_title(doc, '十、其他条款', 1)
|
||
|
||
add_section_title(doc, '10.1 知识产权', 2)
|
||
doc.add_paragraph('• 系统源代码的知识产权归【甲方/双方共有】(需协商确定)')
|
||
doc.add_paragraph('• 系统使用权归甲方所有')
|
||
doc.add_paragraph('• 乙方不得将甲方数据泄露给第三方')
|
||
|
||
add_section_title(doc, '10.2 保密条款', 2)
|
||
doc.add_paragraph('双方对项目过程中涉及的商业机密、技术资料等负有保密义务,保密期限为【3年】。')
|
||
|
||
add_section_title(doc, '10.3 违约责任', 2)
|
||
doc.add_paragraph('• 如因乙方原因导致项目延期,每延期1周,扣除合同总额的1%作为违约金')
|
||
doc.add_paragraph('• 如因甲方原因导致项目延期,工期相应顺延')
|
||
doc.add_paragraph('• 如因不可抗力导致项目延期,双方协商解决')
|
||
|
||
add_section_title(doc, '10.4 合同生效', 2)
|
||
doc.add_paragraph('本合同经双方签字盖章后生效,合同一式两份,双方各执一份。')
|
||
|
||
# ========== 11. 联系方式 ==========
|
||
doc.add_page_break()
|
||
add_section_title(doc, '十一、联系方式', 1)
|
||
|
||
contact_info = [
|
||
('项目负责人', '[姓名]', '[电话]', '[邮箱]'),
|
||
('技术负责人', '[姓名]', '[电话]', '[邮箱]'),
|
||
('商务联系人', '[姓名]', '[电话]', '[邮箱]'),
|
||
('公司地址', '[详细地址]', '', ''),
|
||
('公司网站', '[网址]', '', '')
|
||
]
|
||
|
||
table = add_table_with_header(doc, ['联系人', '姓名', '电话', '邮箱'], contact_info)
|
||
|
||
# ========== 结尾 ==========
|
||
doc.add_page_break()
|
||
|
||
doc.add_paragraph()
|
||
doc.add_paragraph()
|
||
|
||
end_para = doc.add_paragraph()
|
||
end_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
||
run = end_para.add_run('[您的公司名称]')
|
||
run.bold = True
|
||
set_chinese_font(run)
|
||
|
||
date_para = doc.add_paragraph()
|
||
date_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
||
run = date_para.add_run(datetime.now().strftime("%Y年%m月%d日"))
|
||
set_chinese_font(run)
|
||
|
||
return doc
|
||
|
||
def main():
|
||
print("正在生成项目报价文档...")
|
||
doc = generate_quotation()
|
||
|
||
output_file = "项目报价文档.docx"
|
||
doc.save(output_file)
|
||
|
||
print(f"✓ 报价文档生成成功!")
|
||
print(f" 文件路径: {output_file}")
|
||
print()
|
||
print("注意:")
|
||
print(" 1. 文档中的费用金额需要根据实际情况填写(标注为¥XX,XXX的地方)")
|
||
print(" 2. 需要填写公司名称、联系方式等信息(标注为[XXX]的地方)")
|
||
print(" 3. 付款方式、合同条款等可根据实际情况调整")
|
||
print(" 4. 建议根据实际工作量和技术难度调整项目周期和费用")
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|