diff --git a/web/package.json b/web/package.json index 00fdd6c..8fd26d8 100644 --- a/web/package.json +++ b/web/package.json @@ -20,7 +20,6 @@ "axios": "^1.4.0", "dayjs": "^1.11.9", "docxtemplater": "^3.67.5", - "docx-preview": "^0.3.7", "dotenv": "^16.3.1", "eslint": "^8.46.0", "file-saver": "^2.0.5", diff --git a/web/public/report_template/report_template.html b/web/public/report_template/report_template.html new file mode 100644 index 0000000..a95c5d8 --- /dev/null +++ b/web/public/report_template/report_template.html @@ -0,0 +1,486 @@ + + + + + + + + + +
+
+ + + +
+
+
+
${asset_name}非遗 IP 知识产权价值评估报告  
+
报告编号:ICH-IPVS-RPT-${yyyymmdd}  
+
非遗 IP 名称:${asset_name}  
+
受评人/单位:成都文化产权交易所  
+
评估日期:${yyyy}年${mm}月${dd}日  
+
+
+
+
+
+ + + +
+
+
+
一、评估总结摘要  
+
指标  
+
数值  
+
等级  
+
待定  
+
${final_value_ab} 万  
+
+
系统估值  
+
-经济价值  
+
-文化价值  
+
-风险调整系数  
+
市场估值  
+
待定  
+
待定  
+
待定  
+
待定  
+
待定  
+
待定  
+
${market_price}万元 -  
+
动态质押率  
+
${dpr}%  
+
-
+
(${b1} × 0.7+${b2} ×  
+
0.3) × ${b3} ×  
+
0.7+${c}×0.3  
+
最终估值  
+
二、受评估单位/人简介  
+
1. 基本情况  
+
名称/姓名:${asset_name}  
+
2
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
统一社会信用代码/身份证号:${credit_code_or_id}  
+
2. 业务/传承介绍  
+
${biz_intro}  
+
三、评估数据详情  
+
3. 输入数据集  
+
(1) 基础信息:  
+
-资产名称:${asset_name}  
+
-所属机构:${institution}  
+
-所属行业:${industry}  
+
(2) 财务数据:  
+
-近 3 年收益:${three_year_income}万元  
+
-近 12 个月营收:${annual_revenue}万元  
+
-研发投入:${rd_investment}万元  
+
(3) 非遗属性:  
+
-非遗等级:${heritage_level}  
+
3
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
-传承人年龄及数量:  
+
50 岁及以下:${inheritor_age_count[0]}  
+
50-70 岁:${inheritor_age_count[1]}  
+
70 岁以上:${inheritor_age_count[2]}  
+
-历史证据:${historical_evidence}  
+
-教学传播:${offline_activities}  
+
(4) 市场表现:  
+
-社交媒体账号:${platform_accounts}  
+
-商品价格波动${price_fluctuation[0]-price_fluctuation[1]}  
+
+
-月交易额范围:${monthly_transaction}  
+
-发行量级:${circulation}  
+
4. 评估参数  
+
(1) 经济价值体系:  
+
-基础价值:${b11}万元  
+
财务价值:${f}  
+
法律强度:${l}分  
+
4
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
发展潜力:${d}分  
+
-流量因子:${b12}  
+
搜索指数比:${[1.055]}  
+
社交媒体传播度:${s3}  
+
-政策乘数:${b13}(契合度${score}分)  
+
(2) 文化价值体系:  
+
-活态传承系数:${b21}  
+
传承人等级:${[1.0]}(国家级)  
+
教学频次:${[7.28]}(线下${[12]}次)  
+
跨界合作:${[0.3]}(品牌联名)  
+
-纹样基因熵值:${b22}分  
+
结构复杂度:${sc}(轮廓${[8]}个)  
+
信息熵:${h}分  
+
历史传承度:${hi}  
+
(3) 风险体系:  
+
-市场风险:${[8]}分(波动率${[18%]})  
+
-法律风险:${[10]}分(无侵权)  
+
-传承风险:${[6]}分(高龄传承人占比)  
+
5
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
(4) 市场验证体系:  
+
-市场竞价:${c1}万元  
+
-热度系数:${c2}(浏览热度${[中]})  
+
-稀缺乘数:${c3}(发行量${[2000]}份)  
+
-时效衰减:${c4}(近一月${[0.7]})  
+
5. 评估结果  
+
(1) 经济价值:  
+
-基础价值:${[2200]}万元-${[极强]}  
+
-流量因子:${[0.8]}-${[优秀]}  
+
-政策系数:${[‘数值’]}-${[‘等级’]}  
+
(2) 文化价值:  
+
-传承系数:${[‘数值’]}-${[‘等级’]}  
+
-纹样熵值:${[‘数值’]}-${[‘等级’]}  
+
(3) 风险指数:${[‘数值’]}-${[‘等级’]}  
+
6
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
(4) 市场估值:${[]}  
+
(5) 动态质押率:${[]}  
+
四、评估依据  
+
1. 法律法规依据  
+
《中华人民共和国非物质文化遗产法2011 年 2 月 25 日第  
+
十一届全国人民代表大会常务委员会第十九次会议通过)  
+
《中华人民共和国著作权法》(2020 年 11 月 11 日第十三届  
+
全国人民代表大会常务委员会第二十三次会议修订)  
+
《中华人民共和国资产评估法》(2016 年 7 月 2 日第十二届  
+
全国人民代表大会常务委员会第二十一次会议通过)  
+
2. 准则依据  
+
《非遗 IP 知识产权价值评估规范》(T/CDAS XXX-2025)  
+
中国资产评估协会《知识产权资产评估指南》(中评协〔2017〕  
+
44 号)  
+
中国资产评估协资产评估执业准则——无形资产中评协  
+
〔2017〕37 号)  
+
7
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
ISO/TC 307 Blockchain and distributed ledger technologies 国  
+
际标准  
+
3. 权属依据  
+
传承人认定证书及授权文件  
+
非遗项目登记证书及认定文件  
+
非遗资产所用专利证书  
+
4. 取价依据  
+
近三年财务报表及审计报告  
+
市场交易数据及可比案例  
+
行业统计数据及研究报告  
+
政策文件及专项资金支持证明  
+
社交媒体平台数据统计  
+
专业数据库及 API 接口数据  
+
五、评估方法  
+
1. 方法选择  
+
本次评估采用双轨定价评估模型,具体包括:  
+
基础评估模型:基于经济价值、文化价值与风险调整系数的  
+
8
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
算法模型  
+
市场竞价评估模型:基于市场交易数据的验证模型  
+
2. 具体方法  
+
收益法应用:采用多期超额收益法,预测非遗 IP 未来收益能  
+
+
市场法调整:通过可比案例进行市场验证和校准  
+
成本法参考:考虑非遗项目的保护和发展成本  
+
3. 技术路线  
+
最终估值=(基础模型估值×0.7+市场估值×0.3)×风险调整系数  
+
其中基础模型估值按下列公式计算:  
+
基础模型估值=(经济价值×0.7+文化价值×0.3)  
+
六、评估程序实施过程  
+
1. 评估准备阶段(1-2 个工作日)  
+
(1) 与用户确认评估目的、基准日、范围等基本事项  
+
(2) 收集并验证评估所需的基础资料和权属证明  
+
(3) 制定评估工作计划和实施方案  
+
9
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
2. 评估数据采集阶段(2-3 个工作日)  
+
(1) 财务数据采集:通过用户填写数据获取近三年财务数据  
+
(2) 市场数据采集:从文化产权交易所、拍卖平台获取交易数据  
+
(3) 网络数据采集:采集社交媒体传播数据、搜索指数等  
+
(4) 文化数据采集:收集传承人信息、教学传播记录等  
+
3. 数据分析阶段(1 个工作日)  
+
(1) 数据清洗和标准化处理  
+
(2) 运用评估模型进行计算和分析  
+
(3) 进行敏感性分析和误差检验  
+
4. 报告编制阶段(7 个工作日)  
+
(1) 编制初步评估报告  
+
(2) 内部审核和质量控制  
+
(3) 与用户沟通确认最终报告  
+
七、评估假设  
+
1. 基本假设  
+
持续使用假设:假设非遗 IP 按现有模式持续使用和发展  
+
10  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
公开市场假设:假设在公开市场条件下进行公平交易  
+
宏观环境稳定假设:假设国家相关政策和经济环境无重大变  
+
+
2. 特殊假设  
+
假设所提供的所有资料真实、合法、完整  
+
假设非遗项目传承和发展符合相关政策要求  
+
假设市场供需关系保持相对稳定  
+
假设无重大不可抗力因素影响  
+
3. 限制性假设  
+
评估结果基于评估基准日的市场条件得出  
+
评估价值不代表未来实际交易价格  
+
评估机构不承担资产权属的法律责任  
+
八、评估解析与金融化建议AI 协助生成)  
+
1. 价值驱动因素分析  
+
-核心优势:  
+
[例:政策乘数 1.8(极强)]:受益于国家级文化数字化战略,  
+
符合《国家文化数字化战略清单》第 X 条,建议申请专项补助。  
+
11  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
[例:活态传承系数 0.92(极强)]:国家级传承人主导+年度  
+
线下活动 24 次,形成可持续传承生态,可纳入 ESG 投资标的。  
+
-关键短板:  
+
[例:流量因子-0.3(低)]:社交媒体转化率仅 0.1%(行业均  
+
值 5%),需优化抖音/B 站内容运营策略。  
+
[例:传承风险评分 2 分(低)]:70 岁以上传承人占比 60%,  
+
建议建立紧急数字化存证机制。  
+
2. 金融机构风控建议  
+
-质押融资方案:  
+
建议质押额度:[最终估值×DPR]万元(当前质押率[DPR]%)  
+
流动性增强建议:[接入阿里拍卖平台提升交易频次(月交  
+
易额>500 万可提升质押率+15%)]  
+
-风险对冲工具:  
+
市场风险:购买搜索指数保险(覆盖单日下跌>40%的损失)  
+
法律风险:追加区块链存证(可提升法律强度分+2 分)  
+
3. 价值提升路径  
+
12  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
-短期(3-6 个月):  
+
申请省级非遗资助(政策乘数+0.03,估值提升约[测算值]  
+
万元)  
+
开发 NFT 数字藏品(稀缺性乘数可升至 1.0,需投入[成本]  
+
万元)  
+
-长期(1-2 年):  
+
培育市级传承人(教学频次需>20 次/年)  
+
参与 ISO/TC307 国际标准认证(提升跨境质押接受度)  
+
九、评估总结  
+
本报告通数值可验证、风险可量化、价值可转化”的三重体  
+
系,全面评估了该非遗 IP 的价值。其核心优势在于高文化稀缺  
+
性与稳健的经济成长性,主要风险在于传承断层与转化效率。  
+
十、特别事项说明  
+
1. 权属事项  
+
本报告对评估对象的权属资料进行了必要的查验;  
+
权属资料的真实性、合法性由资产持有方负责;  
+
13  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
如发生权属纠纷,评估价值需重新评定。  
+
2. 重大期后事项  
+
评估基准日后至报告出具日期间无重大事项影响评估结果;  
+
如发生重大期后事项,需对评估结果进行相应调整。  
+
3. 使用限制  
+
本报告仅用于评估目的载明的用途;  
+
未征得评估机构同意,不得用于其他目的;  
+
报告内容不得被摘抄、引用或披露于公开媒体。  
+
4. 其他事项  
+
评估结果受所采用数据和参数的影响;  
+
互联网数据存在一定的时效性和波动性;  
+
文化价值的量化存在一定的主观判断因素。  
+
十一、评估报告使用限制说明  
+
1. 使用范围限制  
+
本报告仅供注册用户在本评估系统内使用;  
+
不得将报告用于法律诉讼、仲裁等司法程序;  
+
14  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
不得将报告作为资产价值的唯一依据。  
+
2. 时效性限制  
+
评估结果有效期为自评估基准日起 12 个月;  
+
超过有效期需重新进行评估;  
+
如市场环境发生重大变化,评估结果可能失效。  
+
3. 责任限制  
+
评估机构对评估结果的合理性负责不保证资产的实际交易价  
+
格;  
+
用户应对评估结果的适用性自行判断;  
+
因使用不当造成的损失,评估机构不承担责任。  
+
十二、评估报告日  
+
本评估报告日为:[报告出具日期]${yyyy-mm-dd}  
+
十三、评估机构信息  
+
评估机构:成都文化产权交易所-非遗 IP 价值评估系统  
+
联系邮箱:value@cdcee.net  
+
联系电话:028-87360126  
+
15  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+ + + +
+
+
+
+
+
+ + + +
+
+
+ +
附件  
+
【非遗传承人等级证书】  
+
【非遗资产所用专利-证书】  
+
【非遗纹样图片】  
+
16  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+ + \ No newline at end of file diff --git a/web/public/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff b/web/public/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff new file mode 100644 index 0000000..a12979e Binary files /dev/null and b/web/public/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..2b6797d Binary files /dev/null and b/web/public/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..601cf02 Binary files /dev/null and b/web/public/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..e921f2e Binary files /dev/null and b/web/public/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..07b4eec Binary files /dev/null and b/web/public/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..d674b9f Binary files /dev/null and b/web/public/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..fe53974 Binary files /dev/null and b/web/public/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff b/web/public/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..4dce319 Binary files /dev/null and b/web/public/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff differ diff --git a/web/public/report_template/report_template/img_01.png b/web/public/report_template/report_template/img_01.png new file mode 100644 index 0000000..be92019 Binary files /dev/null and b/web/public/report_template/report_template/img_01.png differ diff --git a/web/public/report_template/report_template/img_02.png b/web/public/report_template/report_template/img_02.png new file mode 100644 index 0000000..be04c0b Binary files /dev/null and b/web/public/report_template/report_template/img_02.png differ diff --git a/web/public/report_template/report_template/img_03.svg b/web/public/report_template/report_template/img_03.svg new file mode 100644 index 0000000..84d9bae --- /dev/null +++ b/web/public/report_template/report_template/img_03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_04.png b/web/public/report_template/report_template/img_04.png new file mode 100644 index 0000000..abc0a93 Binary files /dev/null and b/web/public/report_template/report_template/img_04.png differ diff --git a/web/public/report_template/report_template/img_05.png b/web/public/report_template/report_template/img_05.png new file mode 100644 index 0000000..d08e9b8 Binary files /dev/null and b/web/public/report_template/report_template/img_05.png differ diff --git a/web/public/report_template/report_template/img_06.svg b/web/public/report_template/report_template/img_06.svg new file mode 100644 index 0000000..812a77d --- /dev/null +++ b/web/public/report_template/report_template/img_06.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_07.svg b/web/public/report_template/report_template/img_07.svg new file mode 100644 index 0000000..9105925 --- /dev/null +++ b/web/public/report_template/report_template/img_07.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_08.svg b/web/public/report_template/report_template/img_08.svg new file mode 100644 index 0000000..10947f5 --- /dev/null +++ b/web/public/report_template/report_template/img_08.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_09.svg b/web/public/report_template/report_template/img_09.svg new file mode 100644 index 0000000..52ab6d9 --- /dev/null +++ b/web/public/report_template/report_template/img_09.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_10.svg b/web/public/report_template/report_template/img_10.svg new file mode 100644 index 0000000..f8438ae --- /dev/null +++ b/web/public/report_template/report_template/img_10.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_11.svg b/web/public/report_template/report_template/img_11.svg new file mode 100644 index 0000000..4f17bc7 --- /dev/null +++ b/web/public/report_template/report_template/img_11.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_12.svg b/web/public/report_template/report_template/img_12.svg new file mode 100644 index 0000000..9404afc --- /dev/null +++ b/web/public/report_template/report_template/img_12.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_13.svg b/web/public/report_template/report_template/img_13.svg new file mode 100644 index 0000000..eb5c812 --- /dev/null +++ b/web/public/report_template/report_template/img_13.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_14.svg b/web/public/report_template/report_template/img_14.svg new file mode 100644 index 0000000..ba4b602 --- /dev/null +++ b/web/public/report_template/report_template/img_14.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_15.svg b/web/public/report_template/report_template/img_15.svg new file mode 100644 index 0000000..2d162b5 --- /dev/null +++ b/web/public/report_template/report_template/img_15.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_16.svg b/web/public/report_template/report_template/img_16.svg new file mode 100644 index 0000000..5ed0001 --- /dev/null +++ b/web/public/report_template/report_template/img_16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_17.svg b/web/public/report_template/report_template/img_17.svg new file mode 100644 index 0000000..a233f12 --- /dev/null +++ b/web/public/report_template/report_template/img_17.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_18.svg b/web/public/report_template/report_template/img_18.svg new file mode 100644 index 0000000..e02210f --- /dev/null +++ b/web/public/report_template/report_template/img_18.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_19.svg b/web/public/report_template/report_template/img_19.svg new file mode 100644 index 0000000..a3536cc --- /dev/null +++ b/web/public/report_template/report_template/img_19.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/img_20.png b/web/public/report_template/report_template/img_20.png new file mode 100644 index 0000000..fdf950d Binary files /dev/null and b/web/public/report_template/report_template/img_20.png differ diff --git a/web/public/report_template/report_template/img_21.svg b/web/public/report_template/report_template/img_21.svg new file mode 100644 index 0000000..b515546 --- /dev/null +++ b/web/public/report_template/report_template/img_21.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/public/report_template/report_template/style.css b/web/public/report_template/report_template/style.css new file mode 100644 index 0000000..3949c97 --- /dev/null +++ b/web/public/report_template/report_template/style.css @@ -0,0 +1,625 @@ +.stl_ sup { + vertical-align: baseline; + position: relative; + top: -0.4em; +} +.stl_ sub { + vertical-align: baseline; + position: relative; + top: 0.4em; +} +.stl_ a:link {text-decoration:none;} +.stl_ a:visited {text-decoration:none;} +@media screen and (min-device-pixel-ratio:0), (-webkit-min-device-pixel-ratio:0), (min--moz-device-pixel-ratio: 0) {.stl_view{ font-size:10em; transform:scale(0.1); -moz-transform:scale(0.1); -webkit-transform:scale(0.1); -moz-transform-origin:top left; -webkit-transform-origin:top left; } } +.stl_layer { }.stl_ie { font-size: 1pt; } +.stl_ie body { font-size: 12em; } +@media print{.stl_view {font-size:1em; transform:scale(1);}} +.stl_grlink { position:relative;width:100%;height:100%;z-index:1000000; } +.stl_01 { + position: absolute; + white-space: nowrap; +} +.stl_02 { + font-size: 1em; + line-height: 0.0em; + width: 49.58333em; + height: 70.08334em; + border-style: none; + display: block; + margin: 0em; +} + +@supports(-ms-ime-align:auto) { .stl_02 {overflow: hidden;}} +.stl_03 { + position: relative; +} +.stl_04 { + position: absolute; + left: 0em; + top: 0em; +} +.stl_05 { + position: relative; + width: 49.58333em; +} +.stl_06 { + height: 7.008333em; +} +.stl_ie .stl_06 { + height: 70.08334em; +} +@font-face { + font-family:"CHGBEF+HYShuSongErKW"; + src:url("d5865871-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_07 { + font-size: 1.829167em; + font-family: "CHGBEF+HYShuSongErKW", "Times New Roman"; + color: #3F3F3F; +} +.stl_08 { + line-height: 1em; +} +.stl_09 { + letter-spacing: 0.0027em; +} + +.stl_ie .stl_09 { + letter-spacing: 0.0791px; +} +@font-face { + font-family:"MWFHCV+FZFangSong-Z02"; + src:url("87578bda-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_10 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #000000; +} +.stl_11 { + line-height: 1.113281em; +} +.stl_12 { + letter-spacing: 0.006em; +} + +.stl_ie .stl_12 { + letter-spacing: 0.1275px; +} +.stl_13 { + letter-spacing: 0.0066em; +} + +.stl_ie .stl_13 { + letter-spacing: 0.1412px; +} +.stl_14 { + letter-spacing: 0.0057em; +} + +.stl_ie .stl_14 { + letter-spacing: 0.1217px; +} +@font-face { + font-family:"OSPLUE+HYKaiTiJ"; + src:url("2844c8d7-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_15 { + font-size: 1.329167em; + font-family: "OSPLUE+HYKaiTiJ", "Times New Roman"; + color: #000000; +} +.stl_16 { + line-height: 0.999023em; +} +.stl_17 { + letter-spacing: 0.0038em; +} + +.stl_ie .stl_17 { + letter-spacing: 0.0816px; +} +.stl_18 { + letter-spacing: 0.0081em; +} + +.stl_ie .stl_18 { + letter-spacing: 0.1729px; +} +.stl_19 { + letter-spacing: 0.0006em; +} + +.stl_ie .stl_19 { + letter-spacing: 0.0125px; +} +.stl_20 { + letter-spacing: 0.001em; +} + +.stl_ie .stl_20 { + letter-spacing: 0.0204px; +} +.stl_21 { + letter-spacing: 0em; +} + +.stl_ie .stl_21 { + letter-spacing: 0px; +} +.stl_22 { + letter-spacing: 0.0067em; +} + +.stl_ie .stl_22 { + letter-spacing: 0.1433px; +} +.stl_23 { + letter-spacing: 0.0059em; +} + +.stl_ie .stl_23 { + letter-spacing: 0.1264px; +} +.stl_24 { + letter-spacing: 0.0062em; +} + +.stl_ie .stl_24 { + letter-spacing: 0.1328px; +} +.stl_25 { + letter-spacing: 0.0007em; +} + +.stl_ie .stl_25 { + letter-spacing: 0.0153px; +} +.stl_26 { + letter-spacing: 0.0011em; +} + +.stl_ie .stl_26 { + letter-spacing: 0.0242px; +} +.stl_27 { + letter-spacing: 0.0014em; +} + +.stl_ie .stl_27 { + letter-spacing: 0.0297px; +} +.stl_28 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #FF0000; +} +.stl_29 { + letter-spacing: 0.0039em; +} + +.stl_ie .stl_29 { + letter-spacing: 0.0821px; +} +@font-face { + font-family:"AMHITD+HYZhongHeiKW"; + src:url("1e3517ae-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_30 { + font-size: 1.329167em; + font-family: "AMHITD+HYZhongHeiKW", "Times New Roman"; + color: #000000; +} +.stl_31 { + letter-spacing: -0.004em; +} + +.stl_ie .stl_31 { + letter-spacing: -0.0847px; +} +.stl_32 { + letter-spacing: 0.0044em; +} + +.stl_ie .stl_32 { + letter-spacing: 0.0927px; +} +.stl_33 { + letter-spacing: 0.0075em; +} + +.stl_ie .stl_33 { + letter-spacing: 0.1585px; +} +@font-face { + font-family:"BVCSSD+Helvetica Neue"; + src:url("4878cb88-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_34 { + font-size: 1.329167em; + font-family: "BVCSSD+Helvetica Neue", "Times New Roman"; + color: #000000; +} +.stl_35 { + line-height: 1.165em; +} +.stl_36 { + letter-spacing: -0.002em; +} + +.stl_ie .stl_36 { + letter-spacing: -0.0418px; +} +.stl_37 { + letter-spacing: 0.0018em; +} + +.stl_ie .stl_37 { + letter-spacing: 0.039px; +} +@font-face { + font-family:"NRCLEP+Times New Roman Bold Italic"; + src:url("047adafb-0003-0000-0000-000000000000.woff") format("woff"); +} +.stl_38 { + font-size: 0.870833em; + font-family: "NRCLEP+Times New Roman Bold Italic", "Times New Roman"; + color: #FFFFFF; +} +.stl_39 { + line-height: 1.107422em; +} +@font-face { + font-family:"OIVIRS+FZDaBiaoSong-B06S"; + src:url("e3918027-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_40 { + font-size: 1em; + font-family: "OIVIRS+FZDaBiaoSong-B06S", "Times New Roman"; + color: #3F3F3F; +} +.stl_41 { + line-height: 1.132813em; +} +.stl_42 { + letter-spacing: 0.0035em; +} + +.stl_ie .stl_42 { + letter-spacing: 0.0735px; +} +.stl_43 { + letter-spacing: 0.0016em; +} + +.stl_ie .stl_43 { + letter-spacing: 0.035px; +} +.stl_44 { + letter-spacing: 0.0015em; +} + +.stl_ie .stl_44 { + letter-spacing: 0.031px; +} +.stl_45 { + letter-spacing: 0.0061em; +} + +.stl_ie .stl_45 { + letter-spacing: 0.1297px; +} +.stl_46 { + letter-spacing: 0.0021em; +} + +.stl_ie .stl_46 { + letter-spacing: 0.0439px; +} +.stl_47 { + letter-spacing: 0.0017em; +} + +.stl_ie .stl_47 { + letter-spacing: 0.037px; +} +.stl_48 { + letter-spacing: 0.0025em; +} + +.stl_ie .stl_48 { + letter-spacing: 0.0534px; +} +@font-face { + font-family:"ROIQLU+Wingdings"; + src:url("40bfa84e-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_49 { + font-size: 1.329167em; + font-family: "ROIQLU+Wingdings", "Times New Roman"; + color: #000000; +} +.stl_50 { + line-height: 1.109863em; +} +.stl_51 { + letter-spacing: 0.0019em; +} + +.stl_ie .stl_51 { + letter-spacing: 0.0402px; +} +.stl_52 { + letter-spacing: 0.0031em; +} + +.stl_ie .stl_52 { + letter-spacing: 0.0649px; +} +.stl_53 { + letter-spacing: -0.3755em; +} + +.stl_ie .stl_53 { + letter-spacing: -7.9867px; +} +.stl_54 { + letter-spacing: 0.0026em; +} + +.stl_ie .stl_54 { + letter-spacing: 0.0561px; +} +.stl_55 { + letter-spacing: 0.0028em; +} + +.stl_ie .stl_55 { + letter-spacing: 0.0589px; +} +.stl_56 { + letter-spacing: 0.0029em; +} + +.stl_ie .stl_56 { + letter-spacing: 0.0613px; +} +.stl_57 { + letter-spacing: 0.002em; +} + +.stl_ie .stl_57 { + letter-spacing: 0.0427px; +} +.stl_58 { + letter-spacing: 0.0023em; +} + +.stl_ie .stl_58 { + letter-spacing: 0.048px; +} +.stl_59 { + letter-spacing: 0.0024em; +} + +.stl_ie .stl_59 { + letter-spacing: 0.0513px; +} +.stl_60 { + letter-spacing: 0.0022em; +} + +.stl_ie .stl_60 { + letter-spacing: 0.0461px; +} +.stl_61 { + letter-spacing: 0.0036em; +} + +.stl_ie .stl_61 { + letter-spacing: 0.0772px; +} +.stl_62 { + letter-spacing: 0.0064em; +} + +.stl_ie .stl_62 { + letter-spacing: 0.1366px; +} +.stl_63 { + letter-spacing: 0.003em; +} + +.stl_ie .stl_63 { + letter-spacing: 0.0634px; +} +.stl_64 { + letter-spacing: -0.3379em; +} + +.stl_ie .stl_64 { + letter-spacing: -7.1867px; +} +.stl_65 { + letter-spacing: 0.0013em; +} + +.stl_ie .stl_65 { + letter-spacing: 0.0286px; +} +.stl_66 { + letter-spacing: 0.0093em; +} + +.stl_ie .stl_66 { + letter-spacing: 0.1984px; +} +.stl_67 { + letter-spacing: 0.0072em; +} + +.stl_ie .stl_67 { + letter-spacing: 0.1541px; +} +.stl_68 { + letter-spacing: -0.1119em; +} + +.stl_ie .stl_68 { + letter-spacing: -2.3805px; +} +.stl_69 { + letter-spacing: -0.2325em; +} + +.stl_ie .stl_69 { + letter-spacing: -4.9453px; +} +.stl_70 { + letter-spacing: 0.0033em; +} + +.stl_ie .stl_70 { + letter-spacing: 0.0709px; +} +.stl_71 { + letter-spacing: 0.0163em; +} + +.stl_ie .stl_71 { + letter-spacing: 0.3461px; +} +.stl_72 { + letter-spacing: 0.0032em; +} + +.stl_ie .stl_72 { + letter-spacing: 0.0687px; +} +.stl_73 { + letter-spacing: 0.004em; +} + +.stl_ie .stl_73 { + letter-spacing: 0.0841px; +} +.stl_74 { + letter-spacing: 0.0063em; +} + +.stl_ie .stl_74 { + letter-spacing: 0.1334px; +} +.stl_75 { + letter-spacing: 0.0069em; +} + +.stl_ie .stl_75 { + letter-spacing: 0.1464px; +} +.stl_76 { + font-size: 1.329167em; + font-family: "OSPLUE+HYKaiTiJ", "Times New Roman"; + color: #FF0000; +} +.stl_77 { + font-size: 1.329167em; + font-family: "AMHITD+HYZhongHeiKW", "Times New Roman"; + color: #FF0000; +} +.stl_78 { + letter-spacing: -0.0052em; +} + +.stl_ie .stl_78 { + letter-spacing: -0.1115px; +} +.stl_79 { + letter-spacing: 0.0086em; +} + +.stl_ie .stl_79 { + letter-spacing: 0.1824px; +} +.stl_80 { + letter-spacing: -0.0029em; +} + +.stl_ie .stl_80 { + letter-spacing: -0.0625px; +} +.stl_81 { + letter-spacing: 0.0134em; +} + +.stl_ie .stl_81 { + letter-spacing: 0.2846px; +} +.stl_82 { + letter-spacing: 0.0184em; +} + +.stl_ie .stl_82 { + letter-spacing: 0.3911px; +} +.stl_83 { + letter-spacing: 0.0138em; +} + +.stl_ie .stl_83 { + letter-spacing: 0.2929px; +} +.stl_84 { + letter-spacing: -0.0895em; +} + +.stl_ie .stl_84 { + letter-spacing: -1.9025px; +} +.stl_85 { + letter-spacing: 0.0082em; +} + +.stl_ie .stl_85 { + letter-spacing: 0.1733px; +} +.stl_86 { + letter-spacing: -0.0098em; +} + +.stl_ie .stl_86 { + letter-spacing: -0.2077px; +} +.stl_87 { + letter-spacing: 0.0127em; +} + +.stl_ie .stl_87 { + letter-spacing: 0.2697px; +} +.stl_88 { + letter-spacing: 0.0037em; +} + +.stl_ie .stl_88 { + letter-spacing: 0.0795px; +} +.stl_89 { + letter-spacing: -0.3605em; +} + +.stl_ie .stl_89 { + letter-spacing: -7.6667px; +} +.stl_90 { + letter-spacing: 0.0034em; +} + +.stl_ie .stl_90 { + letter-spacing: 0.0729px; +} +.stl_91 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #0000FF; +} diff --git a/web/src/assets/report_template/report_template.html b/web/src/assets/report_template/report_template.html new file mode 100644 index 0000000..a95c5d8 --- /dev/null +++ b/web/src/assets/report_template/report_template.html @@ -0,0 +1,486 @@ + + + + + + + + + +
+
+ + + +
+
+
+
${asset_name}非遗 IP 知识产权价值评估报告  
+
报告编号:ICH-IPVS-RPT-${yyyymmdd}  
+
非遗 IP 名称:${asset_name}  
+
受评人/单位:成都文化产权交易所  
+
评估日期:${yyyy}年${mm}月${dd}日  
+
+
+
+
+
+ + + +
+
+
+
一、评估总结摘要  
+
指标  
+
数值  
+
等级  
+
待定  
+
${final_value_ab} 万  
+
+
系统估值  
+
-经济价值  
+
-文化价值  
+
-风险调整系数  
+
市场估值  
+
待定  
+
待定  
+
待定  
+
待定  
+
待定  
+
待定  
+
${market_price}万元 -  
+
动态质押率  
+
${dpr}%  
+
-
+
(${b1} × 0.7+${b2} ×  
+
0.3) × ${b3} ×  
+
0.7+${c}×0.3  
+
最终估值  
+
二、受评估单位/人简介  
+
1. 基本情况  
+
名称/姓名:${asset_name}  
+
2
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
统一社会信用代码/身份证号:${credit_code_or_id}  
+
2. 业务/传承介绍  
+
${biz_intro}  
+
三、评估数据详情  
+
3. 输入数据集  
+
(1) 基础信息:  
+
-资产名称:${asset_name}  
+
-所属机构:${institution}  
+
-所属行业:${industry}  
+
(2) 财务数据:  
+
-近 3 年收益:${three_year_income}万元  
+
-近 12 个月营收:${annual_revenue}万元  
+
-研发投入:${rd_investment}万元  
+
(3) 非遗属性:  
+
-非遗等级:${heritage_level}  
+
3
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
-传承人年龄及数量:  
+
50 岁及以下:${inheritor_age_count[0]}  
+
50-70 岁:${inheritor_age_count[1]}  
+
70 岁以上:${inheritor_age_count[2]}  
+
-历史证据:${historical_evidence}  
+
-教学传播:${offline_activities}  
+
(4) 市场表现:  
+
-社交媒体账号:${platform_accounts}  
+
-商品价格波动${price_fluctuation[0]-price_fluctuation[1]}  
+
+
-月交易额范围:${monthly_transaction}  
+
-发行量级:${circulation}  
+
4. 评估参数  
+
(1) 经济价值体系:  
+
-基础价值:${b11}万元  
+
财务价值:${f}  
+
法律强度:${l}分  
+
4
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
发展潜力:${d}分  
+
-流量因子:${b12}  
+
搜索指数比:${[1.055]}  
+
社交媒体传播度:${s3}  
+
-政策乘数:${b13}(契合度${score}分)  
+
(2) 文化价值体系:  
+
-活态传承系数:${b21}  
+
传承人等级:${[1.0]}(国家级)  
+
教学频次:${[7.28]}(线下${[12]}次)  
+
跨界合作:${[0.3]}(品牌联名)  
+
-纹样基因熵值:${b22}分  
+
结构复杂度:${sc}(轮廓${[8]}个)  
+
信息熵:${h}分  
+
历史传承度:${hi}  
+
(3) 风险体系:  
+
-市场风险:${[8]}分(波动率${[18%]})  
+
-法律风险:${[10]}分(无侵权)  
+
-传承风险:${[6]}分(高龄传承人占比)  
+
5
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
(4) 市场验证体系:  
+
-市场竞价:${c1}万元  
+
-热度系数:${c2}(浏览热度${[中]})  
+
-稀缺乘数:${c3}(发行量${[2000]}份)  
+
-时效衰减:${c4}(近一月${[0.7]})  
+
5. 评估结果  
+
(1) 经济价值:  
+
-基础价值:${[2200]}万元-${[极强]}  
+
-流量因子:${[0.8]}-${[优秀]}  
+
-政策系数:${[‘数值’]}-${[‘等级’]}  
+
(2) 文化价值:  
+
-传承系数:${[‘数值’]}-${[‘等级’]}  
+
-纹样熵值:${[‘数值’]}-${[‘等级’]}  
+
(3) 风险指数:${[‘数值’]}-${[‘等级’]}  
+
6
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
(4) 市场估值:${[]}  
+
(5) 动态质押率:${[]}  
+
四、评估依据  
+
1. 法律法规依据  
+
《中华人民共和国非物质文化遗产法2011 年 2 月 25 日第  
+
十一届全国人民代表大会常务委员会第十九次会议通过)  
+
《中华人民共和国著作权法》(2020 年 11 月 11 日第十三届  
+
全国人民代表大会常务委员会第二十三次会议修订)  
+
《中华人民共和国资产评估法》(2016 年 7 月 2 日第十二届  
+
全国人民代表大会常务委员会第二十一次会议通过)  
+
2. 准则依据  
+
《非遗 IP 知识产权价值评估规范》(T/CDAS XXX-2025)  
+
中国资产评估协会《知识产权资产评估指南》(中评协〔2017〕  
+
44 号)  
+
中国资产评估协资产评估执业准则——无形资产中评协  
+
〔2017〕37 号)  
+
7
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
ISO/TC 307 Blockchain and distributed ledger technologies 国  
+
际标准  
+
3. 权属依据  
+
传承人认定证书及授权文件  
+
非遗项目登记证书及认定文件  
+
非遗资产所用专利证书  
+
4. 取价依据  
+
近三年财务报表及审计报告  
+
市场交易数据及可比案例  
+
行业统计数据及研究报告  
+
政策文件及专项资金支持证明  
+
社交媒体平台数据统计  
+
专业数据库及 API 接口数据  
+
五、评估方法  
+
1. 方法选择  
+
本次评估采用双轨定价评估模型,具体包括:  
+
基础评估模型:基于经济价值、文化价值与风险调整系数的  
+
8
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
算法模型  
+
市场竞价评估模型:基于市场交易数据的验证模型  
+
2. 具体方法  
+
收益法应用:采用多期超额收益法,预测非遗 IP 未来收益能  
+
+
市场法调整:通过可比案例进行市场验证和校准  
+
成本法参考:考虑非遗项目的保护和发展成本  
+
3. 技术路线  
+
最终估值=(基础模型估值×0.7+市场估值×0.3)×风险调整系数  
+
其中基础模型估值按下列公式计算:  
+
基础模型估值=(经济价值×0.7+文化价值×0.3)  
+
六、评估程序实施过程  
+
1. 评估准备阶段(1-2 个工作日)  
+
(1) 与用户确认评估目的、基准日、范围等基本事项  
+
(2) 收集并验证评估所需的基础资料和权属证明  
+
(3) 制定评估工作计划和实施方案  
+
9
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
2. 评估数据采集阶段(2-3 个工作日)  
+
(1) 财务数据采集:通过用户填写数据获取近三年财务数据  
+
(2) 市场数据采集:从文化产权交易所、拍卖平台获取交易数据  
+
(3) 网络数据采集:采集社交媒体传播数据、搜索指数等  
+
(4) 文化数据采集:收集传承人信息、教学传播记录等  
+
3. 数据分析阶段(1 个工作日)  
+
(1) 数据清洗和标准化处理  
+
(2) 运用评估模型进行计算和分析  
+
(3) 进行敏感性分析和误差检验  
+
4. 报告编制阶段(7 个工作日)  
+
(1) 编制初步评估报告  
+
(2) 内部审核和质量控制  
+
(3) 与用户沟通确认最终报告  
+
七、评估假设  
+
1. 基本假设  
+
持续使用假设:假设非遗 IP 按现有模式持续使用和发展  
+
10  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
公开市场假设:假设在公开市场条件下进行公平交易  
+
宏观环境稳定假设:假设国家相关政策和经济环境无重大变  
+
+
2. 特殊假设  
+
假设所提供的所有资料真实、合法、完整  
+
假设非遗项目传承和发展符合相关政策要求  
+
假设市场供需关系保持相对稳定  
+
假设无重大不可抗力因素影响  
+
3. 限制性假设  
+
评估结果基于评估基准日的市场条件得出  
+
评估价值不代表未来实际交易价格  
+
评估机构不承担资产权属的法律责任  
+
八、评估解析与金融化建议AI 协助生成)  
+
1. 价值驱动因素分析  
+
-核心优势:  
+
[例:政策乘数 1.8(极强)]:受益于国家级文化数字化战略,  
+
符合《国家文化数字化战略清单》第 X 条,建议申请专项补助。  
+
11  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
[例:活态传承系数 0.92(极强)]:国家级传承人主导+年度  
+
线下活动 24 次,形成可持续传承生态,可纳入 ESG 投资标的。  
+
-关键短板:  
+
[例:流量因子-0.3(低)]:社交媒体转化率仅 0.1%(行业均  
+
值 5%),需优化抖音/B 站内容运营策略。  
+
[例:传承风险评分 2 分(低)]:70 岁以上传承人占比 60%,  
+
建议建立紧急数字化存证机制。  
+
2. 金融机构风控建议  
+
-质押融资方案:  
+
建议质押额度:[最终估值×DPR]万元(当前质押率[DPR]%)  
+
流动性增强建议:[接入阿里拍卖平台提升交易频次(月交  
+
易额>500 万可提升质押率+15%)]  
+
-风险对冲工具:  
+
市场风险:购买搜索指数保险(覆盖单日下跌>40%的损失)  
+
法律风险:追加区块链存证(可提升法律强度分+2 分)  
+
3. 价值提升路径  
+
12  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
-短期(3-6 个月):  
+
申请省级非遗资助(政策乘数+0.03,估值提升约[测算值]  
+
万元)  
+
开发 NFT 数字藏品(稀缺性乘数可升至 1.0,需投入[成本]  
+
万元)  
+
-长期(1-2 年):  
+
培育市级传承人(教学频次需>20 次/年)  
+
参与 ISO/TC307 国际标准认证(提升跨境质押接受度)  
+
九、评估总结  
+
本报告通数值可验证、风险可量化、价值可转化”的三重体  
+
系,全面评估了该非遗 IP 的价值。其核心优势在于高文化稀缺  
+
性与稳健的经济成长性,主要风险在于传承断层与转化效率。  
+
十、特别事项说明  
+
1. 权属事项  
+
本报告对评估对象的权属资料进行了必要的查验;  
+
权属资料的真实性、合法性由资产持有方负责;  
+
13  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
如发生权属纠纷,评估价值需重新评定。  
+
2. 重大期后事项  
+
评估基准日后至报告出具日期间无重大事项影响评估结果;  
+
如发生重大期后事项,需对评估结果进行相应调整。  
+
3. 使用限制  
+
本报告仅用于评估目的载明的用途;  
+
未征得评估机构同意,不得用于其他目的;  
+
报告内容不得被摘抄、引用或披露于公开媒体。  
+
4. 其他事项  
+
评估结果受所采用数据和参数的影响;  
+
互联网数据存在一定的时效性和波动性;  
+
文化价值的量化存在一定的主观判断因素。  
+
十一、评估报告使用限制说明  
+
1. 使用范围限制  
+
本报告仅供注册用户在本评估系统内使用;  
+
不得将报告用于法律诉讼、仲裁等司法程序;  
+
14  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+
+
+ + + +
+
+
+
不得将报告作为资产价值的唯一依据。  
+
2. 时效性限制  
+
评估结果有效期为自评估基准日起 12 个月;  
+
超过有效期需重新进行评估;  
+
如市场环境发生重大变化,评估结果可能失效。  
+
3. 责任限制  
+
评估机构对评估结果的合理性负责不保证资产的实际交易价  
+
格;  
+
用户应对评估结果的适用性自行判断;  
+
因使用不当造成的损失,评估机构不承担责任。  
+
十二、评估报告日  
+
本评估报告日为:[报告出具日期]${yyyy-mm-dd}  
+
十三、评估机构信息  
+
评估机构:成都文化产权交易所-非遗 IP 价值评估系统  
+
联系邮箱:value@cdcee.net  
+
联系电话:028-87360126  
+
15  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+ + + +
+
+
+
+
+
+ + + +
+
+
+ +
附件  
+
【非遗传承人等级证书】  
+
【非遗资产所用专利-证书】  
+
【非遗纹样图片】  
+
16  
+
地址:四川省成都市锦江区三色路 38 号成都传媒大厦 B 座 2 楼  
+
电话:028-85955888 邮编:610023  
+
+
+
+ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff new file mode 100644 index 0000000..a12979e Binary files /dev/null and b/web/src/assets/report_template/report_template/047adafb-0003-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..2b6797d Binary files /dev/null and b/web/src/assets/report_template/report_template/1e3517ae-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..601cf02 Binary files /dev/null and b/web/src/assets/report_template/report_template/2844c8d7-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..e921f2e Binary files /dev/null and b/web/src/assets/report_template/report_template/40bfa84e-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..07b4eec Binary files /dev/null and b/web/src/assets/report_template/report_template/4878cb88-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..d674b9f Binary files /dev/null and b/web/src/assets/report_template/report_template/87578bda-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..fe53974 Binary files /dev/null and b/web/src/assets/report_template/report_template/d5865871-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff b/web/src/assets/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff new file mode 100644 index 0000000..4dce319 Binary files /dev/null and b/web/src/assets/report_template/report_template/e3918027-0000-0000-0000-000000000000.woff differ diff --git a/web/src/assets/report_template/report_template/img_01.png b/web/src/assets/report_template/report_template/img_01.png new file mode 100644 index 0000000..be92019 Binary files /dev/null and b/web/src/assets/report_template/report_template/img_01.png differ diff --git a/web/src/assets/report_template/report_template/img_02.png b/web/src/assets/report_template/report_template/img_02.png new file mode 100644 index 0000000..be04c0b Binary files /dev/null and b/web/src/assets/report_template/report_template/img_02.png differ diff --git a/web/src/assets/report_template/report_template/img_03.svg b/web/src/assets/report_template/report_template/img_03.svg new file mode 100644 index 0000000..84d9bae --- /dev/null +++ b/web/src/assets/report_template/report_template/img_03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_04.png b/web/src/assets/report_template/report_template/img_04.png new file mode 100644 index 0000000..abc0a93 Binary files /dev/null and b/web/src/assets/report_template/report_template/img_04.png differ diff --git a/web/src/assets/report_template/report_template/img_05.png b/web/src/assets/report_template/report_template/img_05.png new file mode 100644 index 0000000..d08e9b8 Binary files /dev/null and b/web/src/assets/report_template/report_template/img_05.png differ diff --git a/web/src/assets/report_template/report_template/img_06.svg b/web/src/assets/report_template/report_template/img_06.svg new file mode 100644 index 0000000..812a77d --- /dev/null +++ b/web/src/assets/report_template/report_template/img_06.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_07.svg b/web/src/assets/report_template/report_template/img_07.svg new file mode 100644 index 0000000..9105925 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_07.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_08.svg b/web/src/assets/report_template/report_template/img_08.svg new file mode 100644 index 0000000..10947f5 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_08.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_09.svg b/web/src/assets/report_template/report_template/img_09.svg new file mode 100644 index 0000000..52ab6d9 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_09.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_10.svg b/web/src/assets/report_template/report_template/img_10.svg new file mode 100644 index 0000000..f8438ae --- /dev/null +++ b/web/src/assets/report_template/report_template/img_10.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_11.svg b/web/src/assets/report_template/report_template/img_11.svg new file mode 100644 index 0000000..4f17bc7 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_11.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_12.svg b/web/src/assets/report_template/report_template/img_12.svg new file mode 100644 index 0000000..9404afc --- /dev/null +++ b/web/src/assets/report_template/report_template/img_12.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_13.svg b/web/src/assets/report_template/report_template/img_13.svg new file mode 100644 index 0000000..eb5c812 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_13.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_14.svg b/web/src/assets/report_template/report_template/img_14.svg new file mode 100644 index 0000000..ba4b602 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_14.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_15.svg b/web/src/assets/report_template/report_template/img_15.svg new file mode 100644 index 0000000..2d162b5 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_15.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_16.svg b/web/src/assets/report_template/report_template/img_16.svg new file mode 100644 index 0000000..5ed0001 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_16.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_17.svg b/web/src/assets/report_template/report_template/img_17.svg new file mode 100644 index 0000000..a233f12 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_17.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_18.svg b/web/src/assets/report_template/report_template/img_18.svg new file mode 100644 index 0000000..e02210f --- /dev/null +++ b/web/src/assets/report_template/report_template/img_18.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_19.svg b/web/src/assets/report_template/report_template/img_19.svg new file mode 100644 index 0000000..a3536cc --- /dev/null +++ b/web/src/assets/report_template/report_template/img_19.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/img_20.png b/web/src/assets/report_template/report_template/img_20.png new file mode 100644 index 0000000..fdf950d Binary files /dev/null and b/web/src/assets/report_template/report_template/img_20.png differ diff --git a/web/src/assets/report_template/report_template/img_21.svg b/web/src/assets/report_template/report_template/img_21.svg new file mode 100644 index 0000000..b515546 --- /dev/null +++ b/web/src/assets/report_template/report_template/img_21.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/report_template/report_template/style.css b/web/src/assets/report_template/report_template/style.css new file mode 100644 index 0000000..3949c97 --- /dev/null +++ b/web/src/assets/report_template/report_template/style.css @@ -0,0 +1,625 @@ +.stl_ sup { + vertical-align: baseline; + position: relative; + top: -0.4em; +} +.stl_ sub { + vertical-align: baseline; + position: relative; + top: 0.4em; +} +.stl_ a:link {text-decoration:none;} +.stl_ a:visited {text-decoration:none;} +@media screen and (min-device-pixel-ratio:0), (-webkit-min-device-pixel-ratio:0), (min--moz-device-pixel-ratio: 0) {.stl_view{ font-size:10em; transform:scale(0.1); -moz-transform:scale(0.1); -webkit-transform:scale(0.1); -moz-transform-origin:top left; -webkit-transform-origin:top left; } } +.stl_layer { }.stl_ie { font-size: 1pt; } +.stl_ie body { font-size: 12em; } +@media print{.stl_view {font-size:1em; transform:scale(1);}} +.stl_grlink { position:relative;width:100%;height:100%;z-index:1000000; } +.stl_01 { + position: absolute; + white-space: nowrap; +} +.stl_02 { + font-size: 1em; + line-height: 0.0em; + width: 49.58333em; + height: 70.08334em; + border-style: none; + display: block; + margin: 0em; +} + +@supports(-ms-ime-align:auto) { .stl_02 {overflow: hidden;}} +.stl_03 { + position: relative; +} +.stl_04 { + position: absolute; + left: 0em; + top: 0em; +} +.stl_05 { + position: relative; + width: 49.58333em; +} +.stl_06 { + height: 7.008333em; +} +.stl_ie .stl_06 { + height: 70.08334em; +} +@font-face { + font-family:"CHGBEF+HYShuSongErKW"; + src:url("d5865871-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_07 { + font-size: 1.829167em; + font-family: "CHGBEF+HYShuSongErKW", "Times New Roman"; + color: #3F3F3F; +} +.stl_08 { + line-height: 1em; +} +.stl_09 { + letter-spacing: 0.0027em; +} + +.stl_ie .stl_09 { + letter-spacing: 0.0791px; +} +@font-face { + font-family:"MWFHCV+FZFangSong-Z02"; + src:url("87578bda-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_10 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #000000; +} +.stl_11 { + line-height: 1.113281em; +} +.stl_12 { + letter-spacing: 0.006em; +} + +.stl_ie .stl_12 { + letter-spacing: 0.1275px; +} +.stl_13 { + letter-spacing: 0.0066em; +} + +.stl_ie .stl_13 { + letter-spacing: 0.1412px; +} +.stl_14 { + letter-spacing: 0.0057em; +} + +.stl_ie .stl_14 { + letter-spacing: 0.1217px; +} +@font-face { + font-family:"OSPLUE+HYKaiTiJ"; + src:url("2844c8d7-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_15 { + font-size: 1.329167em; + font-family: "OSPLUE+HYKaiTiJ", "Times New Roman"; + color: #000000; +} +.stl_16 { + line-height: 0.999023em; +} +.stl_17 { + letter-spacing: 0.0038em; +} + +.stl_ie .stl_17 { + letter-spacing: 0.0816px; +} +.stl_18 { + letter-spacing: 0.0081em; +} + +.stl_ie .stl_18 { + letter-spacing: 0.1729px; +} +.stl_19 { + letter-spacing: 0.0006em; +} + +.stl_ie .stl_19 { + letter-spacing: 0.0125px; +} +.stl_20 { + letter-spacing: 0.001em; +} + +.stl_ie .stl_20 { + letter-spacing: 0.0204px; +} +.stl_21 { + letter-spacing: 0em; +} + +.stl_ie .stl_21 { + letter-spacing: 0px; +} +.stl_22 { + letter-spacing: 0.0067em; +} + +.stl_ie .stl_22 { + letter-spacing: 0.1433px; +} +.stl_23 { + letter-spacing: 0.0059em; +} + +.stl_ie .stl_23 { + letter-spacing: 0.1264px; +} +.stl_24 { + letter-spacing: 0.0062em; +} + +.stl_ie .stl_24 { + letter-spacing: 0.1328px; +} +.stl_25 { + letter-spacing: 0.0007em; +} + +.stl_ie .stl_25 { + letter-spacing: 0.0153px; +} +.stl_26 { + letter-spacing: 0.0011em; +} + +.stl_ie .stl_26 { + letter-spacing: 0.0242px; +} +.stl_27 { + letter-spacing: 0.0014em; +} + +.stl_ie .stl_27 { + letter-spacing: 0.0297px; +} +.stl_28 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #FF0000; +} +.stl_29 { + letter-spacing: 0.0039em; +} + +.stl_ie .stl_29 { + letter-spacing: 0.0821px; +} +@font-face { + font-family:"AMHITD+HYZhongHeiKW"; + src:url("1e3517ae-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_30 { + font-size: 1.329167em; + font-family: "AMHITD+HYZhongHeiKW", "Times New Roman"; + color: #000000; +} +.stl_31 { + letter-spacing: -0.004em; +} + +.stl_ie .stl_31 { + letter-spacing: -0.0847px; +} +.stl_32 { + letter-spacing: 0.0044em; +} + +.stl_ie .stl_32 { + letter-spacing: 0.0927px; +} +.stl_33 { + letter-spacing: 0.0075em; +} + +.stl_ie .stl_33 { + letter-spacing: 0.1585px; +} +@font-face { + font-family:"BVCSSD+Helvetica Neue"; + src:url("4878cb88-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_34 { + font-size: 1.329167em; + font-family: "BVCSSD+Helvetica Neue", "Times New Roman"; + color: #000000; +} +.stl_35 { + line-height: 1.165em; +} +.stl_36 { + letter-spacing: -0.002em; +} + +.stl_ie .stl_36 { + letter-spacing: -0.0418px; +} +.stl_37 { + letter-spacing: 0.0018em; +} + +.stl_ie .stl_37 { + letter-spacing: 0.039px; +} +@font-face { + font-family:"NRCLEP+Times New Roman Bold Italic"; + src:url("047adafb-0003-0000-0000-000000000000.woff") format("woff"); +} +.stl_38 { + font-size: 0.870833em; + font-family: "NRCLEP+Times New Roman Bold Italic", "Times New Roman"; + color: #FFFFFF; +} +.stl_39 { + line-height: 1.107422em; +} +@font-face { + font-family:"OIVIRS+FZDaBiaoSong-B06S"; + src:url("e3918027-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_40 { + font-size: 1em; + font-family: "OIVIRS+FZDaBiaoSong-B06S", "Times New Roman"; + color: #3F3F3F; +} +.stl_41 { + line-height: 1.132813em; +} +.stl_42 { + letter-spacing: 0.0035em; +} + +.stl_ie .stl_42 { + letter-spacing: 0.0735px; +} +.stl_43 { + letter-spacing: 0.0016em; +} + +.stl_ie .stl_43 { + letter-spacing: 0.035px; +} +.stl_44 { + letter-spacing: 0.0015em; +} + +.stl_ie .stl_44 { + letter-spacing: 0.031px; +} +.stl_45 { + letter-spacing: 0.0061em; +} + +.stl_ie .stl_45 { + letter-spacing: 0.1297px; +} +.stl_46 { + letter-spacing: 0.0021em; +} + +.stl_ie .stl_46 { + letter-spacing: 0.0439px; +} +.stl_47 { + letter-spacing: 0.0017em; +} + +.stl_ie .stl_47 { + letter-spacing: 0.037px; +} +.stl_48 { + letter-spacing: 0.0025em; +} + +.stl_ie .stl_48 { + letter-spacing: 0.0534px; +} +@font-face { + font-family:"ROIQLU+Wingdings"; + src:url("40bfa84e-0000-0000-0000-000000000000.woff") format("woff"); +} +.stl_49 { + font-size: 1.329167em; + font-family: "ROIQLU+Wingdings", "Times New Roman"; + color: #000000; +} +.stl_50 { + line-height: 1.109863em; +} +.stl_51 { + letter-spacing: 0.0019em; +} + +.stl_ie .stl_51 { + letter-spacing: 0.0402px; +} +.stl_52 { + letter-spacing: 0.0031em; +} + +.stl_ie .stl_52 { + letter-spacing: 0.0649px; +} +.stl_53 { + letter-spacing: -0.3755em; +} + +.stl_ie .stl_53 { + letter-spacing: -7.9867px; +} +.stl_54 { + letter-spacing: 0.0026em; +} + +.stl_ie .stl_54 { + letter-spacing: 0.0561px; +} +.stl_55 { + letter-spacing: 0.0028em; +} + +.stl_ie .stl_55 { + letter-spacing: 0.0589px; +} +.stl_56 { + letter-spacing: 0.0029em; +} + +.stl_ie .stl_56 { + letter-spacing: 0.0613px; +} +.stl_57 { + letter-spacing: 0.002em; +} + +.stl_ie .stl_57 { + letter-spacing: 0.0427px; +} +.stl_58 { + letter-spacing: 0.0023em; +} + +.stl_ie .stl_58 { + letter-spacing: 0.048px; +} +.stl_59 { + letter-spacing: 0.0024em; +} + +.stl_ie .stl_59 { + letter-spacing: 0.0513px; +} +.stl_60 { + letter-spacing: 0.0022em; +} + +.stl_ie .stl_60 { + letter-spacing: 0.0461px; +} +.stl_61 { + letter-spacing: 0.0036em; +} + +.stl_ie .stl_61 { + letter-spacing: 0.0772px; +} +.stl_62 { + letter-spacing: 0.0064em; +} + +.stl_ie .stl_62 { + letter-spacing: 0.1366px; +} +.stl_63 { + letter-spacing: 0.003em; +} + +.stl_ie .stl_63 { + letter-spacing: 0.0634px; +} +.stl_64 { + letter-spacing: -0.3379em; +} + +.stl_ie .stl_64 { + letter-spacing: -7.1867px; +} +.stl_65 { + letter-spacing: 0.0013em; +} + +.stl_ie .stl_65 { + letter-spacing: 0.0286px; +} +.stl_66 { + letter-spacing: 0.0093em; +} + +.stl_ie .stl_66 { + letter-spacing: 0.1984px; +} +.stl_67 { + letter-spacing: 0.0072em; +} + +.stl_ie .stl_67 { + letter-spacing: 0.1541px; +} +.stl_68 { + letter-spacing: -0.1119em; +} + +.stl_ie .stl_68 { + letter-spacing: -2.3805px; +} +.stl_69 { + letter-spacing: -0.2325em; +} + +.stl_ie .stl_69 { + letter-spacing: -4.9453px; +} +.stl_70 { + letter-spacing: 0.0033em; +} + +.stl_ie .stl_70 { + letter-spacing: 0.0709px; +} +.stl_71 { + letter-spacing: 0.0163em; +} + +.stl_ie .stl_71 { + letter-spacing: 0.3461px; +} +.stl_72 { + letter-spacing: 0.0032em; +} + +.stl_ie .stl_72 { + letter-spacing: 0.0687px; +} +.stl_73 { + letter-spacing: 0.004em; +} + +.stl_ie .stl_73 { + letter-spacing: 0.0841px; +} +.stl_74 { + letter-spacing: 0.0063em; +} + +.stl_ie .stl_74 { + letter-spacing: 0.1334px; +} +.stl_75 { + letter-spacing: 0.0069em; +} + +.stl_ie .stl_75 { + letter-spacing: 0.1464px; +} +.stl_76 { + font-size: 1.329167em; + font-family: "OSPLUE+HYKaiTiJ", "Times New Roman"; + color: #FF0000; +} +.stl_77 { + font-size: 1.329167em; + font-family: "AMHITD+HYZhongHeiKW", "Times New Roman"; + color: #FF0000; +} +.stl_78 { + letter-spacing: -0.0052em; +} + +.stl_ie .stl_78 { + letter-spacing: -0.1115px; +} +.stl_79 { + letter-spacing: 0.0086em; +} + +.stl_ie .stl_79 { + letter-spacing: 0.1824px; +} +.stl_80 { + letter-spacing: -0.0029em; +} + +.stl_ie .stl_80 { + letter-spacing: -0.0625px; +} +.stl_81 { + letter-spacing: 0.0134em; +} + +.stl_ie .stl_81 { + letter-spacing: 0.2846px; +} +.stl_82 { + letter-spacing: 0.0184em; +} + +.stl_ie .stl_82 { + letter-spacing: 0.3911px; +} +.stl_83 { + letter-spacing: 0.0138em; +} + +.stl_ie .stl_83 { + letter-spacing: 0.2929px; +} +.stl_84 { + letter-spacing: -0.0895em; +} + +.stl_ie .stl_84 { + letter-spacing: -1.9025px; +} +.stl_85 { + letter-spacing: 0.0082em; +} + +.stl_ie .stl_85 { + letter-spacing: 0.1733px; +} +.stl_86 { + letter-spacing: -0.0098em; +} + +.stl_ie .stl_86 { + letter-spacing: -0.2077px; +} +.stl_87 { + letter-spacing: 0.0127em; +} + +.stl_ie .stl_87 { + letter-spacing: 0.2697px; +} +.stl_88 { + letter-spacing: 0.0037em; +} + +.stl_ie .stl_88 { + letter-spacing: 0.0795px; +} +.stl_89 { + letter-spacing: -0.3605em; +} + +.stl_ie .stl_89 { + letter-spacing: -7.6667px; +} +.stl_90 { + letter-spacing: 0.0034em; +} + +.stl_ie .stl_90 { + letter-spacing: 0.0729px; +} +.stl_91 { + font-size: 1.329167em; + font-family: "MWFHCV+FZFangSong-Z02", "Times New Roman"; + color: #0000FF; +} diff --git a/web/src/views/valuation/audit/editor/index.vue b/web/src/views/valuation/audit/editor/index.vue index c98e245..2cb93eb 100644 --- a/web/src/views/valuation/audit/editor/index.vue +++ b/web/src/views/valuation/audit/editor/index.vue @@ -3,9 +3,6 @@ import { computed, nextTick, onMounted, ref } from 'vue' import { useRoute, useRouter } from 'vue-router' import { NButton, NSelect, NSpace, NSpin, NTag, useMessage } from 'naive-ui' import { saveAs } from 'file-saver' -import PizZip from 'pizzip' -import Docxtemplater from 'docxtemplater' -import { renderAsync } from 'docx-preview' import CommonPage from '@/components/page/CommonPage.vue' import api from '@/api' @@ -58,85 +55,177 @@ const ensureDetailData = async () => { detailData.value = data } catch (error) { console.error('获取详情数据失败', error) + message.warning('未获取到估值详情,占位符将无法替换') } } -const renderDocxWithPreview = async () => { - await ensureDetailData() +const formatDateVars = () => { + const now = new Date() + const yyyy = String(now.getFullYear()) + const mm = String(now.getMonth() + 1).padStart(2, '0') + const dd = String(now.getDate()).padStart(2, '0') + return { yyyy, mm, dd, yyyymmdd: `${yyyy}${mm}${dd}` } +} + +const applyTemplateVars = (html) => { + if (!html) return html + const vars = { + asset_name: detailData.value?.asset_name || detailData.value?.institution || '', + ...formatDateVars(), + ...detailData.value, + } + return html.replace(/\$\{([^}]+)\}/g, (_, key) => { + const val = vars[key] + return val !== undefined && val !== null ? String(val) : '' + }) +} + +// 导入模板和样式 +import templateHtmlRaw from '@/assets/report_template/report_template.html?raw' +import styleCssRaw from '@/assets/report_template/report_template/style.css?raw' + +// 导入所有资源文件,使用 eager 和 as: 'url' 来获取正确的 URL +const assetModules = import.meta.glob('../../../../assets/report_template/report_template/*.*', { + eager: true, + as: 'url' +}) + +// 构建文件名到 URL 的映射 +const assetMap = {} +Object.entries(assetModules).forEach(([path, url]) => { + const filename = path.split('/').pop() + if (filename) { + assetMap[filename] = url + } +}) + +console.log('Asset Map:', assetMap) + +// 将图片 URL 转换为 base64 data URL +const convertToDataURL = async (url) => { try { - const resp = await fetch('/report_template.docx') - if (!resp.ok) throw new Error('模板文件读取失败') - const arrayBuffer = await resp.arrayBuffer() - const zip = new PizZip(arrayBuffer) - const doc = new Docxtemplater(zip, { - paragraphLoop: true, - linebreaks: true, - delimiters: { start: '${', end: '}' }, - nullGetter: (part) => (!part.module ? '${' + part.value + '}' : ''), + const response = await fetch(url) + const blob = await response.blob() + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onloadend = () => resolve(reader.result) + reader.onerror = reject + reader.readAsDataURL(blob) }) - if (detailData.value) { - doc.render(detailData.value) - } - - const blob = doc.getZip().generate({ - type: 'blob', - mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - }) - - if (editorRef.value) { - editorRef.value.innerHTML = '' - await renderAsync(blob, editorRef.value, null, { - inWrapper: true, - ignoreWidth: false, - ignoreHeight: false, - className: 'docx-preview', - }) - // 允许直接编辑渲染结果 - editorRef.value.setAttribute('contenteditable', 'true') - htmlContent.value = editorRef.value.innerHTML - } } catch (error) { - console.error('Word 模板渲染失败', error) - message.error('Word 模板渲染失败,显示默认示例') - await syncEditorContent() + console.error('Failed to convert to data URL:', url, error) + return url } } -const renderFromBackendHtml = async () => { - let rendered = false - try { - const res = await api.renderReportTemplate({ - valuation_id: pageMeta.value.valuationId, - template_id: pageMeta.value.templateId, - }) - const payload = res?.data ?? res - const html = payload?.html ?? payload?.content ?? (typeof payload === 'string' ? payload : '') - const css = payload?.css - if (html && editorRef.value) { - const combined = css ? `${html}` : html - editorRef.value.innerHTML = combined - editorRef.value.setAttribute('contenteditable', 'true') - htmlContent.value = combined - rendered = true +// 将所有图片转换为 base64 +const convertAssetsToDataURLs = async () => { + const dataURLMap = {} + console.log('开始转换图片为 base64...') + + const promises = Object.entries(assetMap).map(async ([filename, url]) => { + // 只转换图片文件 + if (filename.match(/\.(png|jpg|jpeg|svg|gif)$/i)) { + console.log(`转换图片: ${filename}`) + const dataURL = await convertToDataURL(url) + dataURLMap[filename] = dataURL + console.log(`✓ ${filename} 转换完成,大小: ${(dataURL.length / 1024).toFixed(2)} KB`) + } else { + dataURLMap[filename] = url } - } catch (error) { - console.error('加载后端渲染模板失败', error) - } - - if (!rendered) { - await renderDocxWithPreview() - } + }) + + await Promise.all(promises) + console.log('所有图片转换完成:', Object.keys(dataURLMap).filter(k => k.match(/\.(png|jpg|jpeg|svg|gif)$/i))) + return dataURLMap } -const fetchTemplateHtml = async () => { +const processTemplate = async (html, css) => { + // 先转换所有图片为 base64 + const dataURLMap = await convertAssetsToDataURLs() + + console.log('dataURLMap keys:', Object.keys(dataURLMap)) + + // 1. 处理 CSS 中的字体和图片引用 + let processedCss = css.replace(/url\(['"]?([^'"()]+)['"]?\)/g, (match, url) => { + const filename = url.split('/').pop() + if (filename && dataURLMap[filename]) { + console.log(`CSS: 替换 ${filename}`) + return `url(${dataURLMap[filename]})` + } + return match + }) + + // 2. 处理 HTML 中的资源引用 (图片、对象等) + let processedHtml = html.replace(/(href|src|data)=["'](?:\.\/)?report_template\/([^"')]+)["']/g, (match, attr, filename) => { + const cleanFilename = filename.split(/[?#]/)[0] + if (dataURLMap[cleanFilename]) { + console.log(`HTML: 替换 ${attr}="${cleanFilename}" 为 base64`) + return `${attr}="${dataURLMap[cleanFilename]}"` + } + console.warn(`HTML: 未找到 ${cleanFilename}`) + return match + }) + + // 3. 将 object/embed 标签转换为 img 标签 + let objectCount = 0 + processedHtml = processedHtml.replace( + /]*?)>[\s\S]*?<\/object>/g, + (match, attrs) => { + const dataMatch = attrs.match(/data=["']([^"']+)["']/) + if (!dataMatch) return match + + const src = dataMatch[1] + const classMatch = attrs.match(/class=["']([^"']+)["']/) + const className = classMatch ? classMatch[1] : '' + const styleMatch = attrs.match(/style=["']([^"']+)["']/) + const style = styleMatch ? styleMatch[1] : '' + + objectCount++ + console.log(`转换 #${objectCount}: ${src}`) + + return `` + } + ) + + console.log(`总共转换了 ${objectCount} 个 标签`) + + // 4. 注入处理后的 CSS + processedHtml = processedHtml.replace(/]+href=["'].*?style\.css["'][^>]*>/, '') + processedHtml = processedHtml.replace('', ``) + + // 输出处理后 HTML 的前 500 个字符用于调试 + console.log('处理后的 HTML 预览:', processedHtml.substring(0, 500)) + + return processedHtml +} + +const loadTemplate = async () => { loading.value = true try { - await renderFromBackendHtml() + await ensureDetailData() + + let html = await processTemplate(templateHtmlRaw, styleCssRaw) + html = applyTemplateVars(html) + + if (html && editorRef.value) { + editorRef.value.innerHTML = html + editorRef.value.setAttribute('contenteditable', 'true') + htmlContent.value = html + } else { + await syncEditorContent() + } + } catch (error) { + console.error('加载模板失败', error) + message.error('加载模板失败') + await syncEditorContent() } finally { loading.value = false } } +onMounted(loadTemplate) + const handleInput = () => { if (!editorRef.value) return htmlContent.value = editorRef.value.innerHTML @@ -269,7 +358,7 @@ const handleBack = () => { router.back() } -onMounted(fetchTemplateHtml) +onMounted(loadTemplate)