commit 7eba89a1b04cac3dc474b7ddddbcde5dd99d5a79 Author: liangzai <2440983361@qq.com> Date: Mon Sep 29 12:44:45 2025 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..74ec941 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# hm-website + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). + +## Customize configuration + +See [Vite Configuration Reference](https://vite.dev/config/). + +## Project Setup + +```sh +pnpm install +``` + +### Compile and Hot-Reload for Development + +```sh +pnpm dev +``` + +### Compile and Minify for Production + +```sh +pnpm build +``` diff --git a/example.json b/example.json new file mode 100644 index 0000000..ada2adc --- /dev/null +++ b/example.json @@ -0,0 +1,5007 @@ +{ + "apiID": "QYGL3F8E", + "data": { + "items": [ + { + "abnormal_info": { + "items": [ + { + "putDate": "2022-12-01", + "putDepartment": "北京市朝阳区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "2023-08-15", + "removeDepartment": "北京市朝阳区市场监督管理局", + "removeReason": "已补报年度报告" + }, + { + "putDate": "2022-05-20", + "putDepartment": "北京市朝阳区市场监督管理局", + "putReason": "通过登记的住所或者经营场所无法联系的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + }, + { + "putDate": "2022-03-15", + "putDepartment": "北京市朝阳区市场监督管理局", + "putReason": "未按规定期限公示即时信息的", + "removeDate": "2022-11-30", + "removeDepartment": "北京市朝阳区市场监督管理局", + "removeReason": "已完成信息公示" + } + ], + "total": 3 + }, + "adminPenalty": [], + "basicInfo": { + "apprdate": "2020-05-15", + "base": "bj", + "candate": "", + "city": "北京市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91110108MA01******", + "district": "海淀区", + "estiblishTime": "2018-03-12", + "industry": "科技推广和应用服务业", + "industry_code": "M", + "legalPersonName": "张某", + "name": "北京****科技有限公司", + "nic_code": "M7510", + "nic_name": "科技推广和应用服务业-科技推广和应用服务业-技术推广服务-技术推广服务", + "opscope": "技术开发、技术推广、技术转让、技术咨询、技术服务;软件开发;计算机系统服务;数据处理;基础软件服务;应用软件服务;计算机维修;销售计算机、软件及辅助设备、电子产品、机械设备、通讯设备;货物进出口;技术进出口;代理进出口。", + "province": "北京市", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "500.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "11010801******", + "regStatus": "存续", + "regorg": "北京市海淀区市场监督管理局", + "revdate": "2020-05-15", + "staffList": { + "result": [ + { + "name": "张某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [], + "financing_history": { + "items": [ + { + "companyName": "北京创新科技有限公司", + "date": null, + "investorName": "红杉资本中国,IDG资本", + "money": "5000万人民币", + "newsTitle": "北京创新科技完成5000万元B轮融资", + "newsUrl": "https://example.com/news1", + "pubTime": 1672531200000, + "round": "B轮", + "share": "15%", + "value": "3.3亿人民币" + }, + { + "companyName": "北京创新科技有限公司", + "date": null, + "investorName": "经纬中国,真格基金", + "money": "2000万人民币", + "newsTitle": "北京创新科技获得2000万元A轮融资", + "newsUrl": "https://example.com/news2", + "pubTime": 1640995200000, + "round": "A轮", + "share": "20%", + "value": "1亿人民币" + }, + { + "companyName": "北京创新科技有限公司", + "date": null, + "investorName": "创新工场", + "money": "500万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1609459200000, + "round": "Pre-A轮", + "share": "10%", + "value": "5000万人民币" + }, + { + "companyName": "北京创新科技有限公司", + "date": null, + "investorName": "梅花创投", + "money": "200万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1577836800000, + "round": "天使轮", + "share": "8%", + "value": "2500万人民币" + } + ], + "total": 4 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "智慧数据", + "amount": null, + "base": "bj", + "business_scope": "技术开发;技术推广;技术转让;技术咨询;技术服务;计算机系统服务;基础软件服务;应用软件服务;软件开发;软件咨询;模型设计;包装装潢设计;教育咨询(中介服务除外);经济贸易咨询;文化咨询;体育咨询;公共关系服务;会议服务;工艺美术设计;电脑动画设计;项目投资;投资管理;资产管理;企业策划、设计;设计、制作、代理、发布广告;市场调查;企业管理咨询;组织文化艺术交流活动(不含营业性演出);文艺创作;承办展览展示活动;会议服务;影视策划;翻译服务。", + "category": "软件和信息技术服务业", + "creditCode": "91110105MA01A2B3C4", + "estiblishTime": 1640995200000, + "id": 35678901, + "legalPersonId": 2156789012, + "legalPersonName": "李明", + "logo": "https://img5.tianyancha.com/logo/lll/example1.png@!f_200x200", + "name": "北京智慧数据科技有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7856, + "percent": "60%", + "personType": 1, + "regCapital": "2000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "AI研究院", + "amount": null, + "base": "bj", + "business_scope": "人工智能应用软件开发;人工智能理论与算法软件开发;人工智能基础软件开发;人工智能基础资源与技术平台;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;互联网数据服务;云计算装备技术服务;网络技术服务;计算机系统服务;数字文化创意软件开发。", + "category": "科学研究和技术服务业", + "creditCode": "91110108MA01B3C4D5", + "estiblishTime": 1672531200000, + "id": 36789012, + "legalPersonId": 2167890123, + "legalPersonName": "王芳", + "logo": "https://img5.tianyancha.com/logo/lll/example2.png@!f_200x200", + "name": "北京人工智能研究院有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 6234, + "percent": "45%", + "personType": 1, + "regCapital": "1500万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 5 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2023)京01行初****号", + "c_dsrxx": [ + { + "c_mc": "北京****科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "北京市****区市场监督管理局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。委托代理人吴某,北京****律师事务所律师。被告北京市****区市场监督管理局,住所地北京市****区政府大楼。负责人陈某,局长。委托代理人刘某,该局工作人员。", + "c_gkws_pjjg": "驳回原告北京****科技有限公司的诉讼请求。案件受理费50元,由原告北京****科技有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于北京市高级人民法院。", + "c_id": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3", + "c_ssdy": "北京市", + "d_jarq": "2023-11-15", + "d_larq": "2023-09-10", + "n_ajbs": "f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 5678901234, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,工商行政管理,市场监督管理", + "n_jafs": "判决", + "n_jbfy": "北京市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "北京市(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2023(1)" + } + }, + "bankrupt": { + "cases": [ + { + "c_ah": "(2023)京01破申****号", + "c_dsrxx": [ + { + "c_mc": "北京****投资有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请人" + }, + { + "c_mc": "北京****科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人北京****投资有限公司,住所地北京市朝阳区****路x号。法定代表人黄某,董事长。委托代理人赵某,北京****律师事务所律师。被申请人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。", + "c_gkws_pjjg": "驳回申请人北京****投资有限公司对被申请人北京****科技有限公司的破产清算申请。申请费5000元,由申请人北京****投资有限公司负担。", + "c_id": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4", + "c_ssdy": "北京市", + "d_jarq": "2023-12-05", + "d_larq": "2023-10-25", + "n_ajbs": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3", + "n_ajjzjd": "已结案", + "n_ajlx": "破产清算", + "n_crc": 6789012345, + "n_jaay": "破产案件", + "n_jaay_tree": "破产案件,破产清算", + "n_jafs": "裁定", + "n_jbfy": "北京市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "破产案件", + "n_pj_victory": "胜诉", + "n_slcx": "破产", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "北京市(1)", + "ay_stat": "破产案件(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "裁定(1)", + "larq_stat": "2023(1)" + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2023)京01行初****号", + "case_type": 400, + "n_ajbs": "f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2", + "stage_type": 1 + } + ], + "bankrupt": [ + { + "c_ah": "(2023)京01破申****号", + "case_type": 600, + "n_ajbs": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3", + "stage_type": 1 + } + ], + "civil": [ + { + "c_ah": "(2023)京01民初****号", + "case_type": 300, + "n_ajbs": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", + "stage_type": 1 + } + ], + "criminal": [], + "implement": [ + { + "c_ah": "(2023)京01执****号", + "case_type": 500, + "n_ajbs": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)京01财保****号", + "case_type": 700, + "n_ajbs": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)京01民初****号", + "c_dsrxx": [ + { + "c_mc": "北京****科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "刘某", + "n_dsrlx": "自然人", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告刘某,男,1985年3月15日生,汉族,住北京市朝阳区****小区x号楼x单元x号。委托代理人李某,北京****律师事务所律师。被告北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。委托代理人王某,北京****律师事务所律师。", + "c_gkws_pjjg": "一、被告北京****科技有限公司于本判决生效之日起十日内向原告刘某支付服务费300000元及违约金50000元;二、驳回原告刘某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费8800元,由原告刘某负担3300元,被告北京****科技有限公司负担5500元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于北京市高级人民法院。", + "c_id": "b1c2d3e4f5g6h7i8j9k0l1m2n3o4p5q6", + "c_ssdy": "北京市", + "d_jarq": "2023-12-15", + "d_larq": "2023-10-20", + "n_ajbs": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 1234567890, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,服务合同纠纷", + "n_jafs": "判决", + "n_jbfy": "北京市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 500000, + "n_qsbdje_level": 19, + "n_slcx": "一审", + "n_ssdw": "被告" + } + ], + "count": { + "area_stat": "北京市(1)", + "ay_stat": "合同、准合同纠纷(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2023(1)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 1, + "money_total": 1 + } + }, + "count": { + "area_stat": "北京市(5)", + "ay_stat": "合同、准合同纠纷(1),行政管理(1),破产案件(1),执行案件(1),财产保全(1)", + "count_beigao": 3, + "count_jie_beigao": 3, + "count_jie_total": 5, + "count_total": 5, + "jafs_stat": "判决(2),裁定(2),执行(1)", + "larq_stat": "2023(5)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 1, + "money_total": 1 + }, + "crc": 1234567890, + "criminal": { + "cases": [], + "count": { + "area_stat": "北京市(0)", + "count_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)京01执****号", + "c_dsrxx": [ + { + "c_mc": "孙某", + "n_dsrlx": "自然人", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "北京****科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人孙某,男,1978年7月20日生,汉族,住北京市西城区****小区x号楼x号。委托代理人赵某,北京****律师事务所律师。被执行人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人北京****科技有限公司应向申请执行人孙某支付劳动报酬80000元;二、被执行人北京****科技有限公司应向申请执行人孙某支付迟延履行期间的债务利息;三、申请执行人孙某的其他申请执行请求不予支持。", + "c_id": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5", + "c_ssdy": "北京市", + "d_jarq": "2024-01-10", + "d_larq": "2023-11-20", + "n_ajbs": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 7890123456, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "北京市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "北京市(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)京01财保****号", + "c_dsrxx": [ + { + "c_mc": "周某", + "n_dsrlx": "自然人", + "n_ssdw": "申请人" + }, + { + "c_mc": "北京****科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人周某,男,1980年5月10日生,汉族,住北京市朝阳区****小区x号楼x号。委托代理人吴某,北京****律师事务所律师。被申请人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。", + "c_gkws_pjjg": "查封被申请人北京****科技有限公司名下位于北京市海淀区****路x号x栋x号的房产一处(房产证号:京****),查封期限为三年。", + "c_id": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6", + "c_ssdy": "北京市", + "d_jarq": "2023-11-30", + "d_larq": "2023-11-10", + "n_ajbs": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 8901234567, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "北京市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "北京市(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [ + { + "ah": "(2022)京0105执****号", + "fbrq": "2022-09-20", + "larq": "2022-09-15", + "lxqk": "全部未履行", + "pjje_gj": 350000, + "qyfr": "张某", + "sf": "北京市", + "xwqx": "有履行能力而拒不履行生效法律文书确定义务", + "yw": "向申请人支付服务费350000元及违约金", + "zxfy": "北京市朝阳区人民法院", + "zxyjdw": "北京市朝阳区人民法院", + "zxyjwh": "(2022)京0105民初****号", + "zzjgdm": "91110108MA0******" + }, + { + "ah": "(2023)京0108执****号", + "fbrq": "2023-04-25", + "larq": "2023-04-10", + "lxqk": "部分未履行", + "pjje_gj": 250000, + "qyfr": "张某", + "sf": "北京市", + "xwqx": "被执行人无正当理由拒不履行执行和解协议", + "yw": "向申请人支付货款450000元及利息", + "zxfy": "北京市海淀区人民法院", + "zxyjdw": "北京市海淀区人民法院", + "zxyjwh": "(2023)京0108民初****号", + "zzjgdm": "91110108MA0******" + } + ] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [ + { + "ah": "(2022)京0105执****号", + "fbrq": "2022-10-01", + "id": "BJ0105XG202200****", + "zxfy": "北京市朝阳区人民法院" + }, + { + "ah": "(2023)京0108执****号", + "fbrq": "2023-05-15", + "id": "BJ0108XG202300****", + "zxfy": "北京市海淀区人民法院" + } + ] + } + } + }, + "orgName": "北京****科技有限公司", + "pName": "张某", + "punishment_info": { + "items": [ + { + "content": "责令当事人停止发布违法广告,并处罚款人民币5万元", + "decisionDate": "2023-05-15", + "departmentName": "北京市朝阳区市场监督管理局", + "evidence": "当事人在其官网发布含有虚假内容的广告", + "legalPersonName": "张明", + "pecuniary": "50000", + "punishName": "北京创新科技有限公司", + "punishNumber": "京朝市监罚字〔2023〕第1205号", + "punishStatus": "已执行", + "reason": "违反《中华人民共和国广告法》第二十八条规定,发布虚假广告", + "remark": "", + "source": "市场监督管理局", + "type": "广告违法", + "typeSecond": "虚假广告" + }, + { + "content": "责令限期整改,并处罚款人民币3万元", + "decisionDate": "2023-08-20", + "departmentName": "北京市网信办", + "evidence": "网络安全检查中发现安全漏洞未及时修复", + "legalPersonName": "张明", + "pecuniary": "30000", + "punishName": "北京创新科技有限公司", + "punishNumber": "京网信罚〔2023〕第0856号", + "punishStatus": "已执行", + "reason": "违反《网络安全法》相关规定,未履行网络安全保护义务", + "remark": "", + "source": "网信办", + "type": "网络安全", + "typeSecond": "安全漏洞" + } + ], + "total": 2 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "张某", + "orgHolderType": "自然人", + "subscriptAmt": 500 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2023-07-10", + "putDepartment": "上海市浦东新区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + } + ], + "total": 1 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-08-20", + "departmentName": "上海市****市场监督管理局", + "legalPersonName": "王某", + "punishNumber": "沪市监罚字(2022)****号", + "reason": "未按规定公示年度报告", + "type": "警告" + } + ], + "basicInfo": { + "apprdate": "2022-08-20", + "base": "sh", + "candate": "", + "city": "上海市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91310115MA1******", + "district": "浦东新区", + "estiblishTime": "2019-05-18", + "industry": "批发和零售业", + "industry_code": "F", + "legalPersonName": "王某", + "name": "上海****贸易有限公司", + "nic_code": "F5191", + "nic_name": "批发和零售业-批发业-其他批发业-其他批发业", + "opscope": "从事货物及技术的进出口业务,五金交电、建筑材料、机械设备、电子产品、日用百货的销售。", + "province": "上海市", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "300.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "310115******", + "regStatus": "存续", + "regorg": "上海市浦东新区市场监督管理局", + "revdate": "2022-08-20", + "staffList": { + "result": [ + { + "name": "王某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [], + "financing_history": { + "items": [ + { + "companyName": "上海智能制造股份有限公司", + "date": null, + "investorName": "公开发行", + "money": "15.8亿人民币", + "newsTitle": "上海智能制造成功登陆科创板", + "newsUrl": "https://example.com/ipo1", + "pubTime": 1680307200000, + "round": "IPO上市", + "share": "", + "value": "" + }, + { + "companyName": "上海智能制造股份有限公司", + "date": null, + "investorName": "高瓴资本,腾讯投资", + "money": "3亿人民币", + "newsTitle": "上海智能制造完成3亿元C轮融资", + "newsUrl": "https://example.com/news3", + "pubTime": 1651363200000, + "round": "C轮", + "share": "12%", + "value": "25亿人民币" + }, + { + "companyName": "上海智能制造股份有限公司", + "date": null, + "investorName": "软银中国,金沙江创投", + "money": "1.5亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1619827200000, + "round": "B轮", + "share": "18%", + "value": "8.3亿人民币" + }, + { + "companyName": "上海智能制造股份有限公司", + "date": null, + "investorName": "启明创投,GGV纪源资本", + "money": "8000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1588291200000, + "round": "A轮", + "share": "25%", + "value": "3.2亿人民币" + }, + { + "companyName": "上海智能制造股份有限公司", + "date": null, + "investorName": "真格基金,险峰长青", + "money": "1500万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1556668800000, + "round": "天使轮", + "share": "15%", + "value": "1亿人民币" + } + ], + "total": 5 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "智能机器人", + "amount": null, + "base": "sh", + "business_scope": "智能制造装备、工业机器人、数控机床的研发、生产、销售;自动化控制系统集成;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;货物进出口;技术进出口。", + "category": "通用设备制造业", + "creditCode": "91310115MA01F7G8H9", + "estiblishTime": 1609459200000, + "id": 40123456, + "legalPersonId": 2201234567, + "legalPersonName": "陈刚", + "logo": "https://img5.tianyancha.com/logo/lll/example6.png@!f_200x200", + "name": "上海智能机器人制造有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 8912, + "percent": "35%", + "personType": 1, + "regCapital": "5000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "工业自动化", + "amount": null, + "base": "sh", + "business_scope": "工业自动化设备的研发、生产、销售;工业软件开发;系统集成;技术服务;设备租赁;机械设备销售;电子产品销售;计算机软硬件及辅助设备销售。", + "category": "专用设备制造业", + "creditCode": "91310114MA01G8H9I0", + "estiblishTime": 1625097600000, + "id": 41234567, + "legalPersonId": 2212345678, + "legalPersonName": "张伟", + "logo": "https://img5.tianyancha.com/logo/lll/example7.png@!f_200x200", + "name": "上海工业自动化设备有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7234, + "percent": "50%", + "personType": 1, + "regCapital": "3000万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 8 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)沪01行初****号", + "c_dsrxx": [ + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "上海市****市场监督管理局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人田某,上海****律师事务所律师。被告上海市****市场监督管理局,住所地上海市****区政府大楼。负责人杨某,局长。委托代理人郑某,该局工作人员。", + "c_gkws_pjjg": "一、撤销被告上海市****市场监督管理局于2022年8月10日作出的沪市监罚字(2022)****号《行政处罚决定书》;二、被告上海市****市场监督管理局于本判决生效之日起六十日内重新作出处理决定。案件受理费100元,由被告上海市****市场监督管理局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于上海市高级人民法院。", + "c_id": "k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7", + "c_ssdy": "上海市", + "d_jarq": "2022-12-20", + "d_larq": "2022-10-15", + "n_ajbs": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 9012345678, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,工商行政管理,行政处罚", + "n_jafs": "判决", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "胜诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "上海市(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "上海市(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)沪01行初****号", + "case_type": 400, + "n_ajbs": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2023)沪01民初****号", + "case_type": 300, + "n_ajbs": "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7", + "stage_type": 1 + }, + { + "c_ah": "(2023)沪01民终****号", + "case_type": 300, + "n_ajbs": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8", + "stage_type": 2 + } + ], + "criminal": [ + { + "c_ah": "(2023)沪01刑初****号", + "case_type": 200, + "n_ajbs": "l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2024)沪01执****号", + "case_type": 500, + "n_ajbs": "m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)沪01财保****号", + "case_type": 700, + "n_ajbs": "n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)沪01民初****号", + "c_dsrxx": [ + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "李某", + "n_dsrlx": "自然人", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被告上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人陈某,上海****律师事务所律师。", + "c_gkws_pjjg": "一、被告上海****贸易有限公司于本判决生效之日起十日内向原告李某支付货款200000元及违约金30000元;二、驳回原告李某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费5500元,由原告李某负担2000元,被告上海****贸易有限公司负担3500元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于上海市高级人民法院。", + "c_id": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8", + "c_ssdy": "上海市", + "d_jarq": "2023-11-20", + "d_larq": "2023-09-15", + "n_ajbs": "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 2345678901, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷", + "n_jafs": "判决", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 300000, + "n_qsbdje_level": 18, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2023)沪01民终****号", + "c_dsrxx": [ + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + }, + { + "c_mc": "李某", + "n_dsrlx": "自然人", + "n_ssdw": "被上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人陈某,上海****律师事务所律师。被上诉人(原审原告)李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费5500元,由上诉人上海****贸易有限公司负担。本判决为终审判决。", + "c_id": "d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9", + "c_ssdy": "上海市", + "d_jarq": "2024-01-15", + "d_larq": "2023-12-10", + "n_ajbs": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 3456789012, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷", + "n_jafs": "维持", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 300000, + "n_qsbdje_level": 18, + "n_slcx": "二审", + "n_ssdw": "上诉人" + } + ], + "count": { + "area_stat": "上海市(2)", + "ay_stat": "合同、准合同纠纷(2)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 2, + "count_total": 2, + "jafs_stat": "判决(1),维持(1)", + "larq_stat": "2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 2, + "money_total": 2 + } + }, + "count": { + "area_stat": "上海市(6)", + "ay_stat": "合同、准合同纠纷(2),行政管理(1),破坏社会主义市场经济秩序罪(1),执行案件(1),财产保全(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 6, + "count_total": 6, + "jafs_stat": "判决(3),维持(1),裁定(1),执行(1)", + "larq_stat": "2022(1),2023(4),2024(1)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 2, + "money_total": 2 + }, + "crc": 2345678901, + "criminal": { + "cases": [ + { + "c_ah": "(2023)沪01刑初****号", + "c_dsrxx": [ + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告单位" + }, + { + "c_mc": "王某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关上海市****区人民检察院。被告单位上海****贸易有限公司,住所地上海市浦东新区****路x号。被告人王某,男,1975年4月8日生,汉族,上海市人,大学文化,系上海****贸易有限公司法定代表人。因涉嫌犯走私普通货物罪,于2023年8月15日被上海市公安局刑事拘留,同年9月20日被逮捕,现羁押于上海市第一看守所。辩护人张某,上海****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位上海****贸易有限公司犯走私普通货物罪,处罚金人民币五十万元;二、被告人王某犯走私普通货物罪,判处有期徒刑二年,缓刑三年,并处罚金人民币十万元。(缓刑考验期限,从判决确定之日起计算)。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向上海市高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。", + "c_id": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1", + "c_ssdy": "上海市", + "d_jarq": "2023-12-15", + "d_larq": "2023-10-20", + "n_ajbs": "l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 1234567890, + "n_jaay": "破坏社会主义市场经济秩序罪", + "n_jaay_tree": "破坏社会主义市场经济秩序罪,走私、贩卖、运输、制造毒品罪,走私普通货物、物品罪", + "n_jafs": "有期徒刑", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "破坏社会主义市场经济秩序罪", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "被告单位" + } + ], + "count": { + "area_stat": "上海市(1)", + "ay_stat": "破坏社会主义市场经济秩序罪(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "有期徒刑(1)", + "larq_stat": "2023(1)", + "money_beigao": 0, + "money_jie_beigao": 0, + "money_jie_total": 0, + "money_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2024)沪01执****号", + "c_dsrxx": [ + { + "c_mc": "李某", + "n_dsrlx": "自然人", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被执行人上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人上海****贸易有限公司应向申请执行人李某支付货款230000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2", + "c_ssdy": "上海市", + "d_jarq": "2024-02-20", + "d_larq": "2024-01-15", + "n_ajbs": "m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 2345678901, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "上海市(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)沪01财保****号", + "c_dsrxx": [ + { + "c_mc": "李某", + "n_dsrlx": "自然人", + "n_ssdw": "申请人" + }, + { + "c_mc": "上海****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被申请人上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。", + "c_gkws_pjjg": "冻结被申请人上海****贸易有限公司名下银行账户(账号:****)中的存款230000元,冻结期限为一年。", + "c_id": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3", + "c_ssdy": "上海市", + "d_jarq": "2023-09-10", + "d_larq": "2023-09-05", + "n_ajbs": "n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 3456789012, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "上海市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "上海市(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [ + { + "ah": "(2021)沪0115执****号", + "fbrq": "2021-12-01", + "larq": "2021-11-10", + "lxqk": "全部未履行", + "pjje_gj": 900000, + "qyfr": "李某", + "sf": "上海市", + "xwqx": "有履行能力而拒不履行生效法律文书确定义务", + "yw": "向申请人支付货款900000元及违约金", + "zxfy": "上海市浦东新区人民法院", + "zxyjdw": "上海市浦东新区人民法院", + "zxyjwh": "(2021)沪0115民初****号", + "zzjgdm": "91310115MA0******" + }, + { + "ah": "(2022)沪0104执****号", + "fbrq": "2022-06-15", + "larq": "2022-05-20", + "lxqk": "部分未履行", + "pjje_gj": 250000, + "qyfr": "李某", + "sf": "上海市", + "xwqx": "被执行人无正当理由拒不履行执行和解协议", + "yw": "向申请人支付货款550000元及利息", + "zxfy": "上海市徐汇区人民法院", + "zxyjdw": "上海市徐汇区人民法院", + "zxyjwh": "(2022)沪0104民初****号", + "zzjgdm": "91310115MA0******" + }, + { + "ah": "(2023)沪0106执****号", + "fbrq": "2023-03-10", + "larq": "2023-02-25", + "lxqk": "全部未履行", + "pjje_gj": 700000, + "qyfr": "李某", + "sf": "上海市", + "xwqx": "有履行能力而拒不履行生效法律文书确定义务", + "yw": "向申请人支付服务费700000元及违约金", + "zxfy": "上海市静安区人民法院", + "zxyjdw": "上海市静安区人民法院", + "zxyjwh": "(2023)沪0106民初****号", + "zzjgdm": "91310115MA0******" + } + ] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [ + { + "ah": "(2021)沪0115执****号", + "fbrq": "2021-12-15", + "id": "SH0115XG202100****", + "zxfy": "上海市浦东新区人民法院" + }, + { + "ah": "(2022)沪0104执****号", + "fbrq": "2022-07-01", + "id": "SH0104XG202200****", + "zxfy": "上海市徐汇区人民法院" + }, + { + "ah": "(2023)沪0106执****号", + "fbrq": "2023-03-25", + "id": "SH0106XG202300****", + "zxfy": "上海市静安区人民法院" + } + ] + } + } + }, + "orgName": "上海****贸易有限公司", + "pName": "王某", + "punishment_info": { + "items": [ + { + "content": "责令停止违法行为,并处罚款人民币20万元", + "decisionDate": "2023-03-10", + "departmentName": "上海市生态环境局", + "evidence": "环境监测数据显示废水排放超出国家标准", + "legalPersonName": "李华", + "pecuniary": "200000", + "punishName": "上海智能制造股份有限公司", + "punishNumber": "沪环罚〔2023〕第0312号", + "punishStatus": "已执行", + "reason": "违反《中华人民共和国环境保护法》,超标排放污染物", + "remark": "", + "source": "生态环境局", + "type": "环境违法", + "typeSecond": "超标排放" + }, + { + "content": "责令停产整顿,并处罚款人民币15万元", + "decisionDate": "2023-07-25", + "departmentName": "上海市应急管理局", + "evidence": "安全检查发现生产设备存在安全隐患", + "legalPersonName": "李华", + "pecuniary": "150000", + "punishName": "上海智能制造股份有限公司", + "punishNumber": "沪应急罚〔2023〕第0728号", + "punishStatus": "已执行", + "reason": "违反《安全生产法》相关规定,存在重大安全隐患", + "remark": "", + "source": "应急管理局", + "type": "安全生产", + "typeSecond": "安全隐患" + }, + { + "content": "追缴税款并加收滞纳金,处罚款人民币8万元", + "decisionDate": "2023-11-12", + "departmentName": "上海市税务局", + "evidence": "税务稽查发现少申报收入", + "legalPersonName": "李华", + "pecuniary": "80000", + "punishName": "上海智能制造股份有限公司", + "punishNumber": "沪税稽罚〔2023〕第1115号", + "punishStatus": "已执行", + "reason": "违反《中华人民共和国税收征收管理法》,偷逃税款", + "remark": "", + "source": "税务局", + "type": "税务违法", + "typeSecond": "偷逃税款" + } + ], + "total": 3 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "王某", + "orgHolderType": "自然人", + "subscriptAmt": 300 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2023-09-05", + "putDepartment": "深圳市南山区市场监督管理局", + "putReason": "通过登记的住所或者经营场所无法联系的", + "removeDate": "2024-01-20", + "removeDepartment": "深圳市南山区市场监督管理局", + "removeReason": "已变更注册地址" + }, + { + "putDate": "2023-11-12", + "putDepartment": "深圳市南山区市场监督管理局", + "putReason": "未按规定期限公示股权变更信息的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + } + ], + "total": 2 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-05-18", + "departmentName": "广州市****市场监督管理局", + "legalPersonName": "赵某", + "punishNumber": "穗市监罚字(2022)****号", + "reason": "生产不符合国家安全标准的产品", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2021-06-10", + "base": "gd", + "candate": "", + "city": "广州市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91440100MA5******", + "district": "天河区", + "estiblishTime": "2018-09-25", + "industry": "制造业", + "industry_code": "C", + "legalPersonName": "赵某", + "name": "广州****制造有限公司", + "nic_code": "C3381", + "nic_name": "制造业-金属制品业-金属制品业-金属制品业", + "opscope": "金属制品、机械设备、五金产品的研发、生产、销售;货物进出口、技术进出口。", + "province": "广东省", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "800.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "440106******", + "regStatus": "存续", + "regorg": "广州市天河区市场监督管理局", + "revdate": "2021-06-10", + "staffList": { + "result": [ + { + "name": "赵某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [], + "financing_history": { + "items": [ + { + "companyName": "深圳新能源技术有限公司", + "date": null, + "investorName": "国投创新,中金资本", + "money": "8亿人民币", + "newsTitle": "深圳新能源完成8亿元D轮融资", + "newsUrl": "https://example.com/news4", + "pubTime": 1693497600000, + "round": "D轮", + "share": "10%", + "value": "80亿人民币" + }, + { + "companyName": "深圳新能源技术有限公司", + "date": null, + "investorName": "比亚迪,宁德时代", + "money": "3.5亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1661961600000, + "round": "C轮", + "share": "15%", + "value": "23.3亿人民币" + }, + { + "companyName": "深圳新能源技术有限公司", + "date": null, + "investorName": "深创投,达晨创投", + "money": "1.2亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1630425600000, + "round": "B轮", + "share": "20%", + "value": "6亿人民币" + } + ], + "total": 3 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "新能源汽车", + "amount": null, + "base": "sz", + "business_scope": "新能源汽车整车制造;新能源汽车电附件销售;新能源汽车换电设施销售;充电桩销售;新能源汽车生产测试设备销售;汽车零配件批发;汽车零配件零售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "汽车制造业", + "creditCode": "91440300MA01I0J1K2", + "estiblishTime": 1614556800000, + "id": 43456789, + "legalPersonId": 2234567890, + "legalPersonName": "林峰", + "logo": "https://img5.tianyancha.com/logo/lll/example9.png@!f_200x200", + "name": "深圳新能源汽车制造有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 9123, + "percent": "40%", + "personType": 1, + "regCapital": "8000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "储能电池", + "amount": null, + "base": "sz", + "business_scope": "电池制造;电池销售;新能源原动设备制造;新能源原动设备销售;储能技术服务;电力电子元器件制造;电力电子元器件销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "电气机械和器材制造业", + "creditCode": "91440300MA01J1K2L3", + "estiblishTime": 1630425600000, + "id": 44567890, + "legalPersonId": 2245678901, + "legalPersonName": "周杰", + "logo": "https://img5.tianyancha.com/logo/lll/example10.png@!f_200x200", + "name": "深圳储能电池技术有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 8456, + "percent": "30%", + "personType": 1, + "regCapital": "5000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "清洁能源", + "amount": null, + "base": "sz", + "business_scope": "太阳能发电技术服务;风力发电技术服务;生物质能技术服务;新兴能源技术研发;节能管理服务;合同能源管理;环保咨询服务;碳减排、碳转化、碳捕捉、碳封存技术研发。", + "category": "电力、热力、燃气及水生产和供应业", + "creditCode": "91440300MA01K2L3M4", + "estiblishTime": 1646092800000, + "id": 45678901, + "legalPersonId": 2256789012, + "legalPersonName": "吴涛", + "logo": "https://img5.tianyancha.com/logo/lll/example11.png@!f_200x200", + "name": "深圳清洁能源服务有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7123, + "percent": "55%", + "personType": 1, + "regCapital": "2000万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 6 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)粤01行初****号", + "c_dsrxx": [ + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "广州市****市场监督管理局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人陆某,广东****律师事务所律师。被告广州市****市场监督管理局,住所地广州市****区政府大楼。负责人张某,局长。委托代理人廖某,该局工作人员。", + "c_gkws_pjjg": "驳回原告广州****制造有限公司的诉讼请求。案件受理费50元,由原告广州****制造有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。", + "c_id": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4", + "c_ssdy": "广东省", + "d_jarq": "2022-07-15", + "d_larq": "2022-06-10", + "n_ajbs": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 4567890123, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,工商行政管理,市场监督管理", + "n_jafs": "判决", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [ + { + "c_ah": "(2023)粤01破申****号", + "c_dsrxx": [ + { + "c_mc": "广州****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请人" + }, + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人广州****贸易有限公司,住所地广州市海珠区****路x号。法定代表人林某,董事长。委托代理人叶某,广东****律师事务所律师。被申请人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人何某,广东****律师事务所律师。", + "c_gkws_pjjg": "驳回申请人广州****贸易有限公司对被申请人广州****制造有限公司的破产清算申请。申请费5000元,由申请人广州****贸易有限公司负担。", + "c_id": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5", + "c_ssdy": "广东省", + "d_jarq": "2023-08-15", + "d_larq": "2023-06-20", + "n_ajbs": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2", + "n_ajjzjd": "已结案", + "n_ajlx": "破产清算", + "n_crc": 5678901234, + "n_jaay": "破产案件", + "n_jaay_tree": "破产案件,破产清算", + "n_jafs": "裁定", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "破产案件", + "n_pj_victory": "胜诉", + "n_slcx": "破产", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "破产案件(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "裁定(1)", + "larq_stat": "2023(1)" + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)粤01行初****号", + "case_type": 400, + "n_ajbs": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1", + "stage_type": 1 + } + ], + "bankrupt": [ + { + "c_ah": "(2023)粤01破申****号", + "case_type": 600, + "n_ajbs": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2", + "stage_type": 1 + } + ], + "civil": [ + { + "c_ah": "(2023)粤01民初****号", + "case_type": 300, + "n_ajbs": "d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0", + "stage_type": 1 + } + ], + "criminal": [ + { + "c_ah": "(2023)粤01刑初****号", + "case_type": 200, + "n_ajbs": "e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2023)粤01执****号", + "case_type": 500, + "n_ajbs": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)粤01财保****号", + "case_type": 700, + "n_ajbs": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)粤01民初****号", + "c_dsrxx": [ + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "钱某", + "n_dsrlx": "自然人", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被告广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人周某,广东****律师事务所律师。", + "c_gkws_pjjg": "一、被告广州****制造有限公司于本判决生效之日起十日内向原告钱某支付承揽费250000元及违约金80000元;二、驳回原告钱某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费7800元,由原告钱某负担2800元,被告广州****制造有限公司负担5000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。", + "c_id": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8", + "c_ssdy": "广东省", + "d_jarq": "2023-11-25", + "d_larq": "2023-09-30", + "n_ajbs": "d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 2345678901, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,承揽合同纠纷", + "n_jafs": "判决", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 300000, + "n_qsbdje_level": 18, + "n_slcx": "一审", + "n_ssdw": "被告" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "合同、准合同纠纷(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2023(1)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 1, + "money_total": 1 + } + }, + "count": { + "area_stat": "广东省(6)", + "ay_stat": "合同、准合同纠纷(1),破坏社会主义市场经济秩序罪(1),行政管理(1),破产案件(1),执行案件(1),财产保全(1)", + "count_beigao": 3, + "count_jie_beigao": 3, + "count_jie_total": 6, + "count_total": 6, + "jafs_stat": "判决(2),有期徒刑(1),裁定(2),执行(1)", + "larq_stat": "2022(1),2023(5)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 1, + "money_total": 1 + }, + "crc": 3456789012, + "criminal": { + "cases": [ + { + "c_ah": "(2023)粤01刑初****号", + "c_dsrxx": [ + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告单位" + }, + { + "c_mc": "赵某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关广州市****区人民检察院。被告单位广州****制造有限公司,住所地广州市天河区****路x号。被告人赵某,男,1976年5月15日生,汉族,广东省人,大学文化,系广州****制造有限公司法定代表人。因涉嫌犯合同诈骗罪,于2023年9月10日被广州市公安局刑事拘留,同年10月15日被逮捕,现羁押于广州市第一看守所。辩护人冯某,广东****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位广州****制造有限公司犯合同诈骗罪,处罚金人民币六十万元;二、被告人赵某犯合同诈骗罪,判处有期徒刑三年,并处罚金人民币十五万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向广东省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。", + "c_id": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1", + "c_ssdy": "广东省", + "d_jarq": "2023-12-15", + "d_larq": "2023-10-20", + "n_ajbs": "e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 4567890123, + "n_jaay": "破坏社会主义市场经济秩序罪", + "n_jaay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪", + "n_jafs": "有期徒刑", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "破坏社会主义市场经济秩序罪", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "被告单位" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "破坏社会主义市场经济秩序罪(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "有期徒刑(1)", + "larq_stat": "2023(1)", + "money_beigao": 0, + "money_jie_beigao": 0, + "money_jie_total": 0, + "money_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)粤01执****号", + "c_dsrxx": [ + { + "c_mc": "钱某", + "n_dsrlx": "自然人", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被执行人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人广州****制造有限公司应向申请执行人钱某支付承揽费250000元、违约金80000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6", + "c_ssdy": "广东省", + "d_jarq": "2023-12-22", + "d_larq": "2023-12-10", + "n_ajbs": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 6789012345, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "广东省(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)粤01财保****号", + "c_dsrxx": [ + { + "c_mc": "钱某", + "n_dsrlx": "自然人", + "n_ssdw": "申请人" + }, + { + "c_mc": "广州****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被申请人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。", + "c_gkws_pjjg": "冻结被申请人广州****制造有限公司名下银行账户(账号:****)中的存款350000元,冻结期限为一年。", + "c_id": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7", + "c_ssdy": "广东省", + "d_jarq": "2023-09-20", + "d_larq": "2023-09-15", + "n_ajbs": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 7890123456, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "广州市****人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "广东省(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [] + } + } + }, + "orgName": "广州****制造有限公司", + "pName": "赵某", + "punishment_info": { + "items": [ + { + "content": "责令召回不合格产品,并处罚款人民币12万元", + "decisionDate": "2024-02-18", + "departmentName": "深圳市市场监督管理局", + "evidence": "产品质量抽检不合格", + "legalPersonName": "王强", + "pecuniary": "120000", + "punishName": "深圳新能源技术有限公司", + "punishNumber": "深市监罚〔2024〕第0220号", + "punishStatus": "已执行", + "reason": "违反《产品质量法》,生产销售不合格产品", + "remark": "", + "source": "市场监督管理局", + "type": "产品质量", + "typeSecond": "产品不合格" + } + ], + "total": 1 + }, + "relationship": [ + "sh", + "lp" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "赵某", + "orgHolderType": "自然人", + "subscriptAmt": 800 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2024-06-30", + "putDepartment": "广州市天河区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + }, + { + "putDate": "2023-12-20", + "putDepartment": "广州市天河区市场监督管理局", + "putReason": "通过登记的住所或者经营场所无法联系的", + "removeDate": "2024-05-15", + "removeDepartment": "广州市天河区市场监督管理局", + "removeReason": "已更新联系方式" + }, + { + "putDate": "2024-02-28", + "putDepartment": "广州市天河区市场监督管理局", + "putReason": "未按规定期限公示即时信息的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + }, + { + "putDate": "2023-05-18", + "putDepartment": "广州市天河区市场监督管理局", + "putReason": "未按规定期限公示企业投资信息的", + "removeDate": "2023-10-10", + "removeDepartment": "广州市天河区市场监督管理局", + "removeReason": "已补充公示投资信息" + } + ], + "total": 4 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2023-03-15", + "departmentName": "深圳市****市场监督管理局", + "legalPersonName": "陈某", + "punishNumber": "深市监罚字(2023)****号", + "reason": "产品质量不合格", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2023-04-10", + "base": "gd", + "candate": "", + "city": "深圳市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91440300MA5******", + "district": "南山区", + "estiblishTime": "2017-11-08", + "industry": "计算机、通信和其他电子设备制造业", + "industry_code": "C", + "legalPersonName": "陈某", + "name": "深圳****电子科技有限公司", + "nic_code": "C3969", + "nic_name": "计算机、通信和其他电子设备制造业-其他电子设备制造-其他电子设备制造", + "opscope": "电子产品、计算机软硬件、通信设备的研发、生产与销售;电子元器件、集成电路的设计、研发、销售;国内贸易;经营进出口业务。", + "province": "广东省", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "1000.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "440301******", + "regStatus": "存续", + "regorg": "深圳市市场监督管理局", + "revdate": "2023-04-10", + "staffList": { + "result": [ + { + "name": "陈某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + }, + { + "name": "林某", + "type": "3", + "typeJoin": [ + "总经理" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [ + { + "courtName": "深圳市南山区人民法院", + "dishonestExeUnperformPart": "全部未履行", + "exeDuty": "向申请人支付货款1200000元及逾期付款损失", + "gistId": "(2023)粤0305执恢****号", + "gistUnit": "深圳市南山区人民法院", + "iname": "深圳****电子科技有限公司", + "performedPart": "暂无", + "province": "广东", + "publicDate": "2023-10-15", + "regDate": "2023-10-10", + "unperformedPart": "全部未履行" + } + ], + "executedPerson": [ + { + "caseCode": "(2023)粤0305执****号", + "courtName": "深圳市南山区人民法院", + "execMoney": 1200000, + "iname": "深圳****电子科技有限公司", + "orgNo": "91440300MA5******", + "province": "广东", + "publishDate": "2023-09-20" + } + ], + "financing_history": { + "items": [ + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "公开发行", + "money": "12亿人民币", + "newsTitle": "广州生物医药成功在港上市", + "newsUrl": "https://example.com/ipo2", + "pubTime": 1698768000000, + "round": "IPO上市", + "share": "", + "value": "" + }, + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "高瓴资本,云锋基金", + "money": "5亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1667232000000, + "round": "C轮", + "share": "12%", + "value": "41.7亿人民币" + }, + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "君联资本,联想之星", + "money": "2.8亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1635696000000, + "round": "B轮", + "share": "18%", + "value": "15.6亿人民币" + }, + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "礼来亚洲基金,药明康德", + "money": "1.5亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1604160000000, + "round": "A轮", + "share": "25%", + "value": "6亿人民币" + }, + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "奥博资本", + "money": "6000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1572624000000, + "round": "Pre-A轮", + "share": "20%", + "value": "3亿人民币" + }, + { + "companyName": "广州生物医药有限公司", + "date": null, + "investorName": "广州科技创投", + "money": "1000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1541088000000, + "round": "天使轮", + "share": "12%", + "value": "8333万人民币" + } + ], + "total": 6 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "康复医疗", + "amount": null, + "base": "gz", + "business_scope": "医药制造;药品生产;药品批发;药品零售;医疗器械生产;医疗器械经营;第二类医疗器械销售;第三类医疗器械经营;保健食品生产;保健食品销售;食品生产;食品销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "医药制造业", + "creditCode": "91440101MA01L3M4N5", + "estiblishTime": 1622505600000, + "id": 46789012, + "legalPersonId": 2267890123, + "legalPersonName": "黄医生", + "logo": "https://img5.tianyancha.com/logo/lll/example12.png@!f_200x200", + "name": "广州康复医疗器械有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 9567, + "percent": "60%", + "personType": 1, + "regCapital": "1亿人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "生物研发", + "amount": null, + "base": "gz", + "business_scope": "生物技术推广服务;生物技术开发服务;医学研究和试验发展;生物药品制造;化学药品制剂制造;中成药生产;保健食品制造;医疗器械技术推广服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "医药制造业", + "creditCode": "91440101MA01M4N5O6", + "estiblishTime": 1638316800000, + "id": 47890123, + "legalPersonId": 2278901234, + "legalPersonName": "邓研究员", + "logo": "https://img5.tianyancha.com/logo/lll/example13.png@!f_200x200", + "name": "广州生物技术研发中心有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 8234, + "percent": "45%", + "personType": 1, + "regCapital": "6000万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 4 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2023)粤03行初****号", + "c_dsrxx": [ + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "深圳市****市场监督管理局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人谢某,广东****律师事务所律师。被告深圳市****市场监督管理局,住所地深圳市福田区****路x号。负责人王某,局长。委托代理人梁某,该局工作人员。", + "c_gkws_pjjg": "一、确认被告深圳市****市场监督管理局于2023年3月15日作出的深市监罚字(2023)****号《行政处罚决定书》违法;二、被告深圳市****市场监督管理局于本判决生效之日起六十日内重新作出处理决定。案件受理费100元,由被告深圳市****市场监督管理局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。", + "c_id": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8", + "c_ssdy": "广东省", + "d_jarq": "2023-05-20", + "d_larq": "2023-04-15", + "n_ajbs": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 8901234567, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,工商行政管理,产品质量监督管理", + "n_jafs": "判决", + "n_jbfy": "深圳市南山区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "行政管理", + "n_pj_victory": "胜诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2023(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "广东省(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2023)粤03行初****号", + "case_type": 400, + "n_ajbs": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2023)粤0305民初****号", + "case_type": 300, + "n_ajbs": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6", + "stage_type": 1 + }, + { + "c_ah": "(2023)粤03民终****号", + "case_type": 300, + "n_ajbs": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7", + "stage_type": 2 + } + ], + "criminal": [ + { + "c_ah": "(2023)粤03刑初****号", + "case_type": 200, + "n_ajbs": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2023)粤0305执****号", + "case_type": 500, + "n_ajbs": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9", + "stage_type": 1 + }, + { + "c_ah": "(2023)粤0305执恢****号", + "case_type": 500, + "n_ajbs": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)粤0305财保****号", + "case_type": 700, + "n_ajbs": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)粤0305民初****号", + "c_dsrxx": [ + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "广州****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被告深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人黄某,广东****律师事务所律师。", + "c_gkws_pjjg": "一、被告深圳****电子科技有限公司于本判决生效之日起十日内向原告广州****电子科技有限公司支付货款1200000元;二、被告深圳****电子科技有限公司于本判决生效之日起十日内向原告广州****电子科技有限公司支付逾期付款损失(以未付货款1200000元为基数,按照全国银行间同业拆借中心公布的一年期贷款市场报价利率自2023年1月15日起计算至实际付清之日止);三、驳回原告广州****电子科技有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费16800元,由原告广州****电子科技有限公司负担3800元,被告深圳****电子科技有限公司负担13000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于深圳市中级人民法院。", + "c_id": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9", + "c_ssdy": "广东省", + "d_jarq": "2023-07-25", + "d_larq": "2023-05-20", + "n_ajbs": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 9012345678, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷", + "n_jafs": "判决", + "n_jbfy": "深圳市南山区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 1200000, + "n_qsbdje_level": 20, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2023)粤03民终****号", + "c_dsrxx": [ + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + }, + { + "c_mc": "广州****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人黄某,广东****律师事务所律师。被上诉人(原审原告)广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费16800元,由上诉人深圳****电子科技有限公司负担。本判决为终审判决。", + "c_id": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0", + "c_ssdy": "广东省", + "d_jarq": "2023-09-10", + "d_larq": "2023-08-15", + "n_ajbs": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 1234567890, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷", + "n_jafs": "维持", + "n_jbfy": "深圳市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 1200000, + "n_qsbdje_level": 20, + "n_slcx": "二审", + "n_ssdw": "上诉人" + } + ], + "count": { + "area_stat": "广东省(2)", + "ay_stat": "合同、准合同纠纷(2)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 2, + "count_total": 2, + "jafs_stat": "判决(1),维持(1)", + "larq_stat": "2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 2, + "money_total": 2 + } + }, + "count": { + "area_stat": "广东省(7)", + "ay_stat": "合同、准合同纠纷(2),行政管理(1),生产、销售伪劣产品罪(1),执行案件(2),财产保全(1)", + "count_beigao": 2, + "count_jie_beigao": 2, + "count_jie_total": 7, + "count_total": 7, + "jafs_stat": "判决(2),维持(1),有期徒刑(1),执行(2),裁定(1)", + "larq_stat": "2023(7)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 2, + "money_total": 2 + }, + "crc": 9012345678, + "criminal": { + "cases": [ + { + "c_ah": "(2023)粤03刑初****号", + "c_dsrxx": [ + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告单位" + }, + { + "c_mc": "陈某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + }, + { + "c_mc": "林某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关深圳市****区人民检察院。被告单位深圳****电子科技有限公司,住所地深圳市南山区****路x号。被告人陈某,男,1978年3月25日生,汉族,广东省人,大学文化,系深圳****电子科技有限公司法定代表人。因涉嫌犯生产、销售伪劣产品罪,于2023年6月10日被深圳市公安局刑事拘留,同年7月15日被逮捕,现羁押于深圳市第二看守所。辩护人孙某,广东****律师事务所律师。被告人林某,男,1980年5月18日生,汉族,广东省人,大学文化,系深圳****电子科技有限公司总经理。因涉嫌犯生产、销售伪劣产品罪,于2023年6月10日被深圳市公安局刑事拘留,同年7月15日被逮捕,现羁押于深圳市第二看守所。辩护人钟某,广东****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位深圳****电子科技有限公司犯生产、销售伪劣产品罪,处罚金人民币一百万元;二、被告人陈某犯生产、销售伪劣产品罪,判处有期徒刑四年,并处罚金人民币二十万元;三、被告人林某犯生产、销售伪劣产品罪,判处有期徒刑三年,并处罚金人民币十万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向广东省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。", + "c_id": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1", + "c_ssdy": "广东省", + "d_jarq": "2023-10-25", + "d_larq": "2023-08-20", + "n_ajbs": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 2345678901, + "n_jaay": "生产、销售伪劣产品罪", + "n_jaay_tree": "破坏社会主义市场经济秩序罪,生产、销售伪劣产品罪", + "n_jafs": "有期徒刑", + "n_jbfy": "深圳市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "生产、销售伪劣产品罪", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "被告单位" + } + ], + "count": { + "area_stat": "广东省(1)", + "ay_stat": "生产、销售伪劣产品罪(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "有期徒刑(1)", + "larq_stat": "2023(1)", + "money_beigao": 0, + "money_jie_beigao": 0, + "money_jie_total": 0, + "money_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)粤0305执****号", + "c_dsrxx": [ + { + "c_mc": "广州****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被执行人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。", + "c_gkws_pjjg": "一、被执行人深圳****电子科技有限公司应向申请执行人广州****电子科技有限公司支付货款1200000元及逾期付款损失;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2", + "c_ssdy": "广东省", + "d_jarq": "2023-10-10", + "d_larq": "2023-09-20", + "n_ajbs": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 3456789012, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "深圳市南山区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + }, + { + "c_ah": "(2023)粤0305执恢****号", + "c_dsrxx": [ + { + "c_mc": "广州****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被执行人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。", + "c_gkws_pjjg": "将被执行人深圳****电子科技有限公司纳入失信被执行人名单,期限为三年,自本决定生效之日起至2026年10月15日止。", + "c_id": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3", + "c_ssdy": "广东省", + "d_jarq": "2023-10-15", + "d_larq": "2023-10-10", + "n_ajbs": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 4567890123, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "深圳市南山区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "广东省(2)", + "count_total": 2 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)粤0305财保****号", + "c_dsrxx": [ + { + "c_mc": "广州****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请人" + }, + { + "c_mc": "深圳****电子科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被申请人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。", + "c_gkws_pjjg": "冻结被申请人深圳****电子科技有限公司名下银行账户(账号:****)中的存款1200000元,冻结期限为一年。", + "c_id": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4", + "c_ssdy": "广东省", + "d_jarq": "2023-05-15", + "d_larq": "2023-05-10", + "n_ajbs": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 5678901234, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "深圳市南山区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "广东省(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [ + { + "caseCode": "(2023)粤0305执恢****号", + "disruptTypeName": "被执行人无正当理由拒不履行执行和解协议", + "duty": "向申请人支付货款1200000元及逾期付款损失", + "gistId": "(2023)粤03民终****号", + "gistUnit": "深圳市中级人民法院", + "iname": "深圳****电子科技有限公司", + "orgNo": "91440300MA5******", + "performance": "全部未履行", + "publishDate": "2023-10-15", + "regDate": "2023-10-10" + } + ] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [] + } + } + }, + "orgName": "深圳****电子科技有限公司", + "pName": "陈某", + "punishment_info": { + "items": [ + { + "content": "没收违法生产的药品和违法所得,并处罚款人民币50万元", + "decisionDate": "2023-09-08", + "departmentName": "广州市药品监督管理局", + "evidence": "药品检验不合格", + "legalPersonName": "陈丽", + "pecuniary": "500000", + "punishName": "广州生物医药有限公司", + "punishNumber": "穗药监罚〔2023〕第0910号", + "punishStatus": "已执行", + "reason": "违反《药品管理法》相关规定,生产劣药", + "remark": "", + "source": "药品监督管理局", + "type": "药品违法", + "typeSecond": "生产劣药" + }, + { + "content": "没收违法销售的医疗器械和违法所得,并处罚款人民币25万元", + "decisionDate": "2023-12-15", + "departmentName": "广州市卫生健康委员会", + "evidence": "销售记录显示销售未注册医疗器械", + "legalPersonName": "陈丽", + "pecuniary": "250000", + "punishName": "广州生物医药有限公司", + "punishNumber": "穗卫健罚〔2023〕第1218号", + "punishStatus": "已执行", + "reason": "违反《医疗器械监督管理条例》,销售未经注册的医疗器械", + "remark": "", + "source": "卫生健康委员会", + "type": "医疗器械", + "typeSecond": "未注册器械" + }, + { + "content": "责令停止发布违法广告,并处罚款人民币10万元", + "decisionDate": "2024-01-22", + "departmentName": "广州市市场监督管理局", + "evidence": "广告内容与实际效果不符", + "legalPersonName": "陈丽", + "pecuniary": "100000", + "punishName": "广州生物医药有限公司", + "punishNumber": "穗市监罚〔2024〕第0125号", + "punishStatus": "已执行", + "reason": "违反《广告法》规定,发布医疗广告含有不实内容", + "remark": "", + "source": "市场监督管理局", + "type": "广告违法", + "typeSecond": "虚假医疗广告" + }, + { + "content": "责令改正违法行为,并处罚款人民币6万元", + "decisionDate": "2024-04-10", + "departmentName": "广州市环保局", + "evidence": "现场检查发现医疗废物处理不当", + "legalPersonName": "陈丽", + "pecuniary": "60000", + "punishName": "广州生物医药有限公司", + "punishNumber": "穗环罚〔2024〕第0412号", + "punishStatus": "已执行", + "reason": "违反《环境保护法》,未按规定处理医疗废物", + "remark": "", + "source": "环保局", + "type": "环境违法", + "typeSecond": "废物处理" + } + ], + "total": 4 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "陈某", + "orgHolderType": "自然人", + "subscriptAmt": 1000 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2023-08-25", + "putDepartment": "杭州市西湖区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "2024-03-01", + "removeDepartment": "杭州市西湖区市场监督管理局", + "removeReason": "已按期补报年度报告" + } + ], + "total": 1 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-06-25", + "departmentName": "重庆市****住房和城乡建设委员会", + "legalPersonName": "周某", + "punishNumber": "渝建罚字(2022)****号", + "reason": "未按照建筑工程设计标准施工", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2022-07-20", + "base": "cq", + "candate": "", + "city": "重庆市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91500000MA6******", + "district": "渝中区", + "estiblishTime": "2015-08-12", + "industry": "建筑业", + "industry_code": "E", + "legalPersonName": "周某", + "name": "重庆****建设工程有限公司", + "nic_code": "E4700", + "nic_name": "建筑业-建筑装饰、装修和其他建筑业-建筑装饰和装修业", + "opscope": "建筑工程施工;建筑装饰工程设计与施工;市政公用工程施工;公路工程施工;水利水电工程施工;钢结构工程施工;土石方工程施工;园林绿化工程施工;建筑劳务分包;建筑材料销售。", + "province": "重庆市", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "2000.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "500103******", + "regStatus": "存续", + "regorg": "重庆市市场监督管理局", + "revdate": "2022-07-20", + "staffList": { + "result": [ + { + "name": "周某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + }, + { + "name": "李某", + "type": "3", + "typeJoin": [ + "总经理" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [ + { + "caseCode": "(2023)渝01执****号", + "courtName": "重庆市第一中级人民法院", + "execMoney": 850000, + "iname": "重庆****建设工程有限公司", + "orgNo": "91500000MA6******", + "province": "重庆", + "publishDate": "2023-08-10" + } + ], + "financing_history": { + "items": [ + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "阿里巴巴,蚂蚁集团", + "money": "2亿人民币", + "newsTitle": "杭州互联网服务获得2亿元C轮融资", + "newsUrl": "https://example.com/news5", + "pubTime": 1685577600000, + "round": "C轮", + "share": "15%", + "value": "13.3亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "经纬中国,GGV纪源资本", + "money": "8000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1654041600000, + "round": "B轮", + "share": "20%", + "value": "4亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "DCM中国,晨兴资本", + "money": "3000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1622505600000, + "round": "A轮", + "share": "25%", + "value": "1.2亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "真格基金", + "money": "800万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1590969600000, + "round": "天使轮", + "share": "18%", + "value": "4444万人民币" + } + ], + "total": 4 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "云计算", + "amount": null, + "base": "hz", + "business_scope": "互联网信息服务;第二类增值电信业务;软件开发;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;人工智能应用软件开发;区块链技术相关软件和服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91330108MA01N5O6P7", + "estiblishTime": 1635696000000, + "id": 48901234, + "legalPersonId": 2289012345, + "legalPersonName": "马云飞", + "logo": "https://img5.tianyancha.com/logo/lll/example14.png@!f_200x200", + "name": "杭州云计算服务有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7890, + "percent": "50%", + "personType": 1, + "regCapital": "3000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "游戏娱乐", + "amount": null, + "base": "hz", + "business_scope": "网络游戏服务;互联网信息服务;软件开发;动漫游戏开发;数字内容制作服务;广告设计、代理;广告制作;文艺创作;组织文化艺术交流活动;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91330108MA01O6P7Q8", + "estiblishTime": 1651363200000, + "id": 49012345, + "legalPersonId": 2290123456, + "legalPersonName": "许晓明", + "logo": "https://img5.tianyancha.com/logo/lll/example15.png@!f_200x200", + "name": "杭州游戏娱乐科技有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 6789, + "percent": "40%", + "personType": 1, + "regCapital": "2500万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 3 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)渝01行初****号", + "c_dsrxx": [ + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "重庆市****住房和城乡建设委员会", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人黄某,重庆****律师事务所律师。被告重庆市****住房和城乡建设委员会,住所地重庆市渝北区****路x号。负责人张某,主任。委托代理人谢某,该委工作人员。", + "c_gkws_pjjg": "驳回原告重庆****建设工程有限公司的诉讼请求。案件受理费100元,由原告重庆****建设工程有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市高级人民法院。", + "c_id": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5", + "c_ssdy": "重庆市", + "d_jarq": "2022-09-15", + "d_larq": "2022-07-20", + "n_ajbs": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 6789012345, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,城乡建设管理,建筑市场管理", + "n_jafs": "判决", + "n_jbfy": "重庆市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "重庆市(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "重庆市(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)渝01行初****号", + "case_type": 400, + "n_ajbs": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2023)渝0103民初****号", + "case_type": 300, + "n_ajbs": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3", + "stage_type": 1 + }, + { + "c_ah": "(2023)渝01民终****号", + "case_type": 300, + "n_ajbs": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4", + "stage_type": 2 + }, + { + "c_ah": "(2022)渝01民初****号", + "case_type": 300, + "n_ajbs": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5", + "stage_type": 1 + } + ], + "criminal": [ + { + "c_ah": "(2023)渝01刑初****号", + "case_type": 200, + "n_ajbs": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2023)渝01执****号", + "case_type": 500, + "n_ajbs": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)渝0103财保****号", + "case_type": 700, + "n_ajbs": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)渝0103民初****号", + "c_dsrxx": [ + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "重庆****房地产开发有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人孙某,重庆****律师事务所律师。", + "c_gkws_pjjg": "一、被告重庆****建设工程有限公司于本判决生效之日起十日内向原告重庆****房地产开发有限公司支付工程质量违约金850000元;二、被告重庆****建设工程有限公司于本判决生效之日起十日内向原告重庆****房地产开发有限公司返还超额支付的工程款150000元;三、驳回原告重庆****房地产开发有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费15000元,由原告重庆****房地产开发有限公司负担5000元,被告重庆****建设工程有限公司负担10000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市第一中级人民法院。", + "c_id": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6", + "c_ssdy": "重庆市", + "d_jarq": "2023-06-15", + "d_larq": "2023-04-10", + "n_ajbs": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 7890123456, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷", + "n_jafs": "判决", + "n_jbfy": "重庆市渝中区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 1000000, + "n_qsbdje_level": 20, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2023)渝01民终****号", + "c_dsrxx": [ + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + }, + { + "c_mc": "重庆****房地产开发有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人孙某,重庆****律师事务所律师。被上诉人(原审原告)重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费15000元,由上诉人重庆****建设工程有限公司负担。本判决为终审判决。", + "c_id": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7", + "c_ssdy": "重庆市", + "d_jarq": "2023-08-05", + "d_larq": "2023-07-10", + "n_ajbs": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 8901234567, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷", + "n_jafs": "维持", + "n_jbfy": "重庆市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 1000000, + "n_qsbdje_level": 20, + "n_slcx": "二审", + "n_ssdw": "上诉人" + }, + { + "c_ah": "(2022)渝01民初****号", + "c_dsrxx": [ + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "重庆****投资有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人王某,重庆****律师事务所律师。被告重庆****投资有限公司,住所地重庆市渝北区****路x号。法定代表人谢某,董事长。委托代理人钱某,重庆****律师事务所律师。", + "c_gkws_pjjg": "一、被告重庆****投资有限公司于本判决生效之日起十日内向原告重庆****建设工程有限公司支付工程款500000元及违约金50000元;二、驳回原告重庆****建设工程有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费9500元,由原告重庆****建设工程有限公司负担3500元,被告重庆****投资有限公司负担6000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市高级人民法院。", + "c_id": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8", + "c_ssdy": "重庆市", + "d_jarq": "2022-12-20", + "d_larq": "2022-10-15", + "n_ajbs": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 9012345678, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷", + "n_jafs": "判决", + "n_jbfy": "重庆市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 600000, + "n_qsbdje_level": 19, + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "重庆市(3)", + "ay_stat": "合同、准合同纠纷(3)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 3, + "count_total": 3, + "jafs_stat": "判决(2),维持(1)", + "larq_stat": "2022(1),2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + } + }, + "count": { + "area_stat": "重庆市(7)", + "ay_stat": "合同、准合同纠纷(3),行政管理(1),重大责任事故罪(1),执行案件(1),财产保全(1)", + "count_beigao": 2, + "count_jie_beigao": 2, + "count_jie_total": 7, + "count_total": 7, + "jafs_stat": "判决(4),维持(1),有期徒刑(1),执行(1)", + "larq_stat": "2022(2),2023(5)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + }, + "crc": 6789012345, + "criminal": { + "cases": [ + { + "c_ah": "(2023)渝01刑初****号", + "c_dsrxx": [ + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告单位" + }, + { + "c_mc": "周某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + }, + { + "c_mc": "李某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关重庆市****区人民检察院。被告单位重庆****建设工程有限公司,住所地重庆市渝中区****路x号。被告人周某,男,1970年5月8日生,汉族,重庆市人,大学文化,系重庆****建设工程有限公司法定代表人。因涉嫌犯重大责任事故罪,于2023年2月15日被重庆市公安局刑事拘留,同年3月20日被逮捕,现羁押于重庆市第一看守所。辩护人赵某,重庆****律师事务所律师。被告人李某,男,1975年8月12日生,汉族,四川省人,大学文化,系重庆****建设工程有限公司项目经理。因涉嫌犯重大责任事故罪,于2023年2月15日被重庆市公安局刑事拘留,同年3月20日被逮捕,现羁押于重庆市第一看守所。辩护人钟某,重庆****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位重庆****建设工程有限公司犯重大责任事故罪,处罚金人民币三百万元;二、被告人周某犯重大责任事故罪,判处有期徒刑四年;三、被告人李某犯重大责任事故罪,判处有期徒刑三年六个月。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向重庆市高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。", + "c_id": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9", + "c_ssdy": "重庆市", + "d_jarq": "2023-07-10", + "d_larq": "2023-05-15", + "n_ajbs": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 1234567890, + "n_jaay": "重大责任事故罪", + "n_jaay_tree": "危害公共安全罪,重大责任事故罪", + "n_jafs": "有期徒刑", + "n_jbfy": "重庆市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "重大责任事故罪", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "被告单位" + } + ], + "count": { + "area_stat": "重庆市(1)", + "ay_stat": "重大责任事故罪(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "有期徒刑(1)", + "larq_stat": "2023(1)", + "money_beigao": 0, + "money_jie_beigao": 0, + "money_jie_total": 0, + "money_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)渝01执****号", + "c_dsrxx": [ + { + "c_mc": "重庆****房地产开发有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被执行人重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人重庆****建设工程有限公司应向申请执行人重庆****房地产开发有限公司支付工程质量违约金850000元、超额支付的工程款150000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0", + "c_ssdy": "重庆市", + "d_jarq": "2023-08-10", + "d_larq": "2023-08-05", + "n_ajbs": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 2345678901, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "重庆市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "重庆市(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)渝0103财保****号", + "c_dsrxx": [ + { + "c_mc": "重庆****房地产开发有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请人" + }, + { + "c_mc": "重庆****建设工程有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被申请人重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。", + "c_gkws_pjjg": "冻结被申请人重庆****建设工程有限公司名下银行账户(账号:****)中的存款1000000元,冻结期限为一年。", + "c_id": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1", + "c_ssdy": "重庆市", + "d_jarq": "2023-04-05", + "d_larq": "2023-03-30", + "n_ajbs": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 3456789012, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "重庆市渝中区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "重庆市(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [] + } + } + }, + "orgName": "重庆****建设工程有限公司", + "pName": "周某", + "punishment_info": { + "items": [ + { + "content": "责令整改并加强用户信息保护,处罚款人民币8万元", + "decisionDate": "2023-06-30", + "departmentName": "杭州市网信办", + "evidence": "用户投诉个人信息泄露", + "legalPersonName": "刘刚", + "pecuniary": "80000", + "punishName": "杭州互联网服务有限公司", + "punishNumber": "杭网信罚〔2023〕第0702号", + "punishStatus": "已执行", + "reason": "违反《网络安全法》,用户个人信息保护不当", + "remark": "", + "source": "网信办", + "type": "信息安全", + "typeSecond": "信息泄露" + }, + { + "content": "责令完善商家信息公示,并处罚款人民币4万元", + "decisionDate": "2023-10-18", + "departmentName": "杭州市市场监督管理局", + "evidence": "平台商家资质信息缺失", + "legalPersonName": "刘刚", + "pecuniary": "40000", + "punishName": "杭州互联网服务有限公司", + "punishNumber": "杭市监罚〔2023〕第1020号", + "punishStatus": "已执行", + "reason": "违反《电子商务法》,平台内经营者信息公示不完整", + "remark": "", + "source": "市场监督管理局", + "type": "电商违法", + "typeSecond": "信息公示" + } + ], + "total": 2 + }, + "relationship": [ + "sh", + "lp" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "周某", + "orgHolderType": "自然人", + "subscriptAmt": 2000 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2023-08-25", + "putDepartment": "杭州市西湖区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "2024-03-01", + "removeDepartment": "杭州市西湖区市场监督管理局", + "removeReason": "已按期补报年度报告" + } + ], + "total": 1 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-09-18", + "departmentName": "杭州市****市场监督管理局", + "legalPersonName": "吴某", + "punishNumber": "杭市监罚字(2022)****号", + "reason": "生产的食品中检出超标添加剂", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2022-10-20", + "base": "zj", + "candate": "", + "city": "杭州市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91330100MA2******", + "district": "余杭区", + "estiblishTime": "2016-05-20", + "industry": "食品制造业", + "industry_code": "C", + "legalPersonName": "吴某", + "name": "杭州****食品有限公司", + "nic_code": "C1492", + "nic_name": "食品制造业-其他食品制造-保健食品制造", + "opscope": "食品生产;食品经营;保健食品生产;保健食品销售;货物进出口;技术进出口;食品互联网销售;食品添加剂生产;食品添加剂销售。", + "province": "浙江省", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "1500.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "330110******", + "regStatus": "存续", + "regorg": "杭州市市场监督管理局", + "revdate": "2022-10-20", + "staffList": { + "result": [ + { + "name": "吴某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + }, + { + "name": "章某", + "type": "3", + "typeJoin": [ + "总经理" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [], + "financing_history": { + "items": [ + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "阿里巴巴,蚂蚁集团", + "money": "2亿人民币", + "newsTitle": "杭州互联网服务获得2亿元C轮融资", + "newsUrl": "https://example.com/news5", + "pubTime": 1685577600000, + "round": "C轮", + "share": "15%", + "value": "13.3亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "经纬中国,GGV纪源资本", + "money": "8000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1654041600000, + "round": "B轮", + "share": "20%", + "value": "4亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "DCM中国,晨兴资本", + "money": "3000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1622505600000, + "round": "A轮", + "share": "25%", + "value": "1.2亿人民币" + }, + { + "companyName": "杭州互联网服务有限公司", + "date": null, + "investorName": "真格基金", + "money": "800万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1590969600000, + "round": "天使轮", + "share": "18%", + "value": "4444万人民币" + } + ], + "total": 4 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "云计算", + "amount": null, + "base": "hz", + "business_scope": "互联网信息服务;第二类增值电信业务;软件开发;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;人工智能应用软件开发;区块链技术相关软件和服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91330108MA01N5O6P7", + "estiblishTime": 1635696000000, + "id": 48901234, + "legalPersonId": 2289012345, + "legalPersonName": "马云飞", + "logo": "https://img5.tianyancha.com/logo/lll/example14.png@!f_200x200", + "name": "杭州云计算服务有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7890, + "percent": "50%", + "personType": 1, + "regCapital": "3000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "游戏娱乐", + "amount": null, + "base": "hz", + "business_scope": "网络游戏服务;互联网信息服务;软件开发;动漫游戏开发;数字内容制作服务;广告设计、代理;广告制作;文艺创作;组织文化艺术交流活动;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91330108MA01O6P7Q8", + "estiblishTime": 1651363200000, + "id": 49012345, + "legalPersonId": 2290123456, + "legalPersonName": "许晓明", + "logo": "https://img5.tianyancha.com/logo/lll/example15.png@!f_200x200", + "name": "杭州游戏娱乐科技有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 6789, + "percent": "40%", + "personType": 1, + "regCapital": "2500万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 3 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)浙01行初****号", + "c_dsrxx": [ + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "杭州市****市场监督管理局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人杨某,浙江****律师事务所律师。被告杭州市****市场监督管理局,住所地杭州市拱墅区****路x号。负责人刘某,局长。委托代理人郭某,该局工作人员。", + "c_gkws_pjjg": "驳回原告杭州****食品有限公司的诉讼请求。案件受理费100元,由原告杭州****食品有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于浙江省高级人民法院。", + "c_id": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2", + "c_ssdy": "浙江省", + "d_jarq": "2022-12-15", + "d_larq": "2022-10-20", + "n_ajbs": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 4567890123, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,工商行政管理,食品药品监督管理", + "n_jafs": "判决", + "n_jbfy": "杭州市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "浙江省(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "浙江省(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)浙01行初****号", + "case_type": 400, + "n_ajbs": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2023)浙0110民初****号", + "case_type": 300, + "n_ajbs": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0", + "stage_type": 1 + }, + { + "c_ah": "(2022)浙0110民初****号", + "case_type": 300, + "n_ajbs": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1", + "stage_type": 1 + }, + { + "c_ah": "(2023)浙01民终****号", + "case_type": 300, + "n_ajbs": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2", + "stage_type": 2 + } + ], + "criminal": [ + { + "c_ah": "(2023)浙01刑初****号", + "case_type": 200, + "n_ajbs": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2023)浙0110执****号", + "case_type": 500, + "n_ajbs": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4", + "stage_type": 1 + } + ], + "preservation": [ + { + "c_ah": "(2023)浙0110财保****号", + "case_type": 700, + "n_ajbs": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5", + "stage_type": 1 + } + ] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)浙0110民初****号", + "c_dsrxx": [ + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "王某", + "n_dsrlx": "自然人", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。", + "c_gkws_pjjg": "一、被告杭州****食品有限公司于本判决生效之日起十日内向原告王某支付产品质量损害赔偿金200000元;二、被告杭州****食品有限公司于本判决生效之日起十日内向原告王某支付精神损害抚慰金50000元;三、驳回原告王某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费8500元,由原告王某负担3500元,被告杭州****食品有限公司负担5000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于杭州市中级人民法院。", + "c_id": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3", + "c_ssdy": "浙江省", + "d_jarq": "2023-04-15", + "d_larq": "2023-02-20", + "n_ajbs": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 5678901234, + "n_jaay": "产品责任纠纷", + "n_jaay_tree": "侵权责任纠纷,产品责任纠纷", + "n_jafs": "判决", + "n_jbfy": "杭州市余杭区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "产品责任纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 350000, + "n_qsbdje_level": 18, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2022)浙0110民初****号", + "c_dsrxx": [ + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "杭州****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。被告杭州****贸易有限公司,住所地杭州市江干区****路x号。法定代表人赵某,董事长。委托代理人陆某,浙江****律师事务所律师。", + "c_gkws_pjjg": "一、被告杭州****贸易有限公司于本判决生效之日起十日内向原告杭州****食品有限公司支付货款450000元及违约金67500元;二、驳回原告杭州****食品有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费9175元,由原告杭州****食品有限公司负担2175元,被告杭州****贸易有限公司负担7000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于杭州市中级人民法院。", + "c_id": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4", + "c_ssdy": "浙江省", + "d_jarq": "2022-11-25", + "d_larq": "2022-09-20", + "n_ajbs": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 6789012345, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷", + "n_jafs": "判决", + "n_jbfy": "杭州市余杭区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 550000, + "n_qsbdje_level": 19, + "n_slcx": "一审", + "n_ssdw": "原告" + }, + { + "c_ah": "(2023)浙01民终****号", + "c_dsrxx": [ + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + }, + { + "c_mc": "王某", + "n_dsrlx": "自然人", + "n_ssdw": "被上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。被上诉人(原审原告)王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费8500元,由上诉人杭州****食品有限公司负担。本判决为终审判决。", + "c_id": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5", + "c_ssdy": "浙江省", + "d_jarq": "2023-06-10", + "d_larq": "2023-05-15", + "n_ajbs": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 7890123456, + "n_jaay": "产品责任纠纷", + "n_jaay_tree": "侵权责任纠纷,产品责任纠纷", + "n_jafs": "维持", + "n_jbfy": "杭州市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "产品责任纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 350000, + "n_qsbdje_level": 18, + "n_slcx": "二审", + "n_ssdw": "上诉人" + } + ], + "count": { + "area_stat": "浙江省(3)", + "ay_stat": "产品责任纠纷(2),合同、准合同纠纷(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 3, + "count_total": 3, + "jafs_stat": "判决(2),维持(1)", + "larq_stat": "2022(1),2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + } + }, + "count": { + "area_stat": "浙江省(7)", + "ay_stat": "产品责任纠纷(2),合同、准合同纠纷(1),行政管理(1),生产、销售有毒、有害食品罪(1),执行案件(1),财产保全(1)", + "count_beigao": 2, + "count_jie_beigao": 2, + "count_jie_total": 7, + "count_total": 7, + "jafs_stat": "判决(3),维持(1),有期徒刑(1),执行(1),裁定(1)", + "larq_stat": "2022(2),2023(5)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + }, + "crc": 3456789012, + "criminal": { + "cases": [ + { + "c_ah": "(2023)浙01刑初****号", + "c_dsrxx": [ + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告单位" + }, + { + "c_mc": "吴某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + }, + { + "c_mc": "章某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关杭州市****区人民检察院。被告单位杭州****食品有限公司,住所地杭州市余杭区****路x号。被告人吴某,男,1972年9月20日生,汉族,浙江省人,大学文化,系杭州****食品有限公司法定代表人。因涉嫌犯生产、销售有毒、有害食品罪,于2023年3月10日被杭州市公安局刑事拘留,同年4月15日被逮捕,现羁押于杭州市第一看守所。辩护人梁某,浙江****律师事务所律师。被告人章某,男,1975年11月5日生,汉族,浙江省人,大学文化,系杭州****食品有限公司总经理。因涉嫌犯生产、销售有毒、有害食品罪,于2023年3月10日被杭州市公安局刑事拘留,同年4月15日被逮捕,现羁押于杭州市第一看守所。辩护人张某,浙江****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位杭州****食品有限公司犯生产、销售有毒、有害食品罪,处罚金人民币二百万元;二、被告人吴某犯生产、销售有毒、有害食品罪,判处有期徒刑五年,并处罚金人民币二十万元;三、被告人章某犯生产、销售有毒、有害食品罪,判处有期徒刑四年,并处罚金人民币十五万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向浙江省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。", + "c_id": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6", + "c_ssdy": "浙江省", + "d_jarq": "2023-07-20", + "d_larq": "2023-05-25", + "n_ajbs": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 8901234567, + "n_jaay": "生产、销售有毒、有害食品罪", + "n_jaay_tree": "危害公共安全罪,危害公共安全罪,生产、销售有毒、有害食品罪", + "n_jafs": "有期徒刑", + "n_jbfy": "杭州市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "生产、销售有毒、有害食品罪", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "被告单位" + } + ], + "count": { + "area_stat": "浙江省(1)", + "ay_stat": "生产、销售有毒、有害食品罪(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "有期徒刑(1)", + "larq_stat": "2023(1)", + "money_beigao": 0, + "money_jie_beigao": 0, + "money_jie_total": 0, + "money_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)浙0110执****号", + "c_dsrxx": [ + { + "c_mc": "王某", + "n_dsrlx": "自然人", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被执行人杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人杭州****食品有限公司应向申请执行人王某支付产品质量损害赔偿金200000元、精神损害抚慰金50000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7", + "c_ssdy": "浙江省", + "d_jarq": "2023-06-25", + "d_larq": "2023-06-15", + "n_ajbs": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 9012345678, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "杭州市余杭区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "浙江省(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [ + { + "c_ah": "(2023)浙0110财保****号", + "c_dsrxx": [ + { + "c_mc": "王某", + "n_dsrlx": "自然人", + "n_ssdw": "申请人" + }, + { + "c_mc": "杭州****食品有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被申请人" + } + ], + "c_gkws_dsr": "申请人王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被申请人杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。", + "c_gkws_pjjg": "冻结被申请人杭州****食品有限公司名下银行账户(账号:****)中的存款350000元,冻结期限为一年。", + "c_id": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8", + "c_ssdy": "浙江省", + "d_jarq": "2023-02-15", + "d_larq": "2023-02-10", + "n_ajbs": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5", + "n_ajjzjd": "已结案", + "n_ajlx": "财产保全", + "n_crc": 1234567890, + "n_jaay": "财产保全", + "n_jaay_tree": "财产保全,诉前财产保全", + "n_jafs": "裁定", + "n_jbfy": "杭州市余杭区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "财产保全", + "n_slcx": "保全", + "n_ssdw": "被申请人" + } + ], + "count": { + "area_stat": "浙江省(1)", + "count_total": 1 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [] + } + } + }, + "orgName": "杭州****食品有限公司", + "pName": "吴某", + "punishment_info": { + "items": [ + { + "content": "责令整改并加强用户信息保护,处罚款人民币8万元", + "decisionDate": "2023-06-30", + "departmentName": "杭州市网信办", + "evidence": "用户投诉个人信息泄露", + "legalPersonName": "刘刚", + "pecuniary": "80000", + "punishName": "杭州互联网服务有限公司", + "punishNumber": "杭网信罚〔2023〕第0702号", + "punishStatus": "已执行", + "reason": "违反《网络安全法》,用户个人信息保护不当", + "remark": "", + "source": "网信办", + "type": "信息安全", + "typeSecond": "信息泄露" + }, + { + "content": "责令完善商家信息公示,并处罚款人民币4万元", + "decisionDate": "2023-10-18", + "departmentName": "杭州市市场监督管理局", + "evidence": "平台商家资质信息缺失", + "legalPersonName": "刘刚", + "pecuniary": "40000", + "punishName": "杭州互联网服务有限公司", + "punishNumber": "杭市监罚〔2023〕第1020号", + "punishStatus": "已执行", + "reason": "违反《电子商务法》,平台内经营者信息公示不完整", + "remark": "", + "source": "市场监督管理局", + "type": "电商违法", + "typeSecond": "信息公示" + } + ], + "total": 2 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "吴某", + "orgHolderType": "自然人", + "subscriptAmt": 1500 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2024-04-12", + "putDepartment": "成都市高新区市场监督管理局", + "putReason": "通过登记的住所或者经营场所无法联系的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + }, + { + "putDate": "2023-11-08", + "putDepartment": "成都市高新区市场监督管理局", + "putReason": "未按规定期限公示即时信息的", + "removeDate": "2024-02-20", + "removeDepartment": "成都市高新区市场监督管理局", + "removeReason": "已完成信息更新" + }, + { + "putDate": "2024-01-15", + "putDepartment": "成都市高新区市场监督管理局", + "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + } + ], + "total": 3 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-11-10", + "departmentName": "成都市****教育局", + "legalPersonName": "刘某", + "punishNumber": "成教罚字(2022)****号", + "reason": "未经批准增设培训项目", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2022-12-15", + "base": "sc", + "candate": "", + "city": "成都市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91510100MA6******", + "district": "武侯区", + "estiblishTime": "2017-03-18", + "industry": "教育", + "industry_code": "P", + "legalPersonName": "刘某", + "name": "成都****教育科技有限公司", + "nic_code": "P8294", + "nic_name": "教育-教育-教育辅助服务-教育辅助服务", + "opscope": "教育软件开发;教育咨询服务;教育辅助服务;文化艺术培训;语言培训;技能培训;网络技术服务;互联网数据服务;教育教学检测和评价活动。", + "province": "四川省", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "1000.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "510107******", + "regStatus": "存续", + "regorg": "成都市市场监督管理局", + "revdate": "2022-12-15", + "staffList": { + "result": [ + { + "name": "刘某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + }, + { + "name": "杨某", + "type": "3", + "typeJoin": [ + "总经理" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [], + "executedPerson": [], + "financing_history": { + "items": [ + { + "companyName": "成都物流运输有限公司", + "date": null, + "investorName": "顺丰投资,普洛斯", + "money": "1.5亿人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1675180800000, + "round": "B轮", + "share": "22%", + "value": "6.8亿人民币" + }, + { + "companyName": "成都物流运输有限公司", + "date": null, + "investorName": "钟鼎资本,华创资本", + "money": "5000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1643644800000, + "round": "A轮", + "share": "28%", + "value": "1.8亿人民币" + } + ], + "total": 2 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "智慧物流", + "amount": null, + "base": "cd", + "business_scope": "智慧物流技术研发;物流信息服务;供应链管理服务;仓储服务;装卸搬运服务;运输代理服务;货物运输代理;国际货物运输代理;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91510100MA01P7Q8R9", + "estiblishTime": 1667232000000, + "id": 50123456, + "legalPersonId": 2301234567, + "legalPersonName": "唐经理", + "logo": "https://img5.tianyancha.com/logo/lll/example16.png@!f_200x200", + "name": "成都智慧物流科技有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 7456, + "percent": "60%", + "personType": 1, + "regCapital": "4000万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 2 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)川01行初****号", + "c_dsrxx": [ + { + "c_mc": "成都****教育科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "成都市****教育局", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人王某,四川****律师事务所律师。被告成都市****教育局,住所地成都市锦江区****路x号。负责人张某,局长。委托代理人周某,该局工作人员。", + "c_gkws_pjjg": "撤销被告成都市****教育局于2022年11月10日作出的成教罚字(2022)****号《行政处罚决定书》。案件受理费50元,由被告成都市****教育局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于四川省高级人民法院。", + "c_id": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9", + "c_ssdy": "四川省", + "d_jarq": "2023-02-10", + "d_larq": "2022-12-15", + "n_ajbs": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 2345678901, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,教育行政管理,教育培训机构管理", + "n_jafs": "判决", + "n_jbfy": "成都市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "胜诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "四川省(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "四川省(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)川01行初****号", + "case_type": 400, + "n_ajbs": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2023)川0107民初****号", + "case_type": 300, + "n_ajbs": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7", + "stage_type": 1 + }, + { + "c_ah": "(2022)川0107民初****号", + "case_type": 300, + "n_ajbs": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8", + "stage_type": 1 + }, + { + "c_ah": "(2023)川01民终****号", + "case_type": 300, + "n_ajbs": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9", + "stage_type": 2 + } + ], + "criminal": [], + "implement": [ + { + "c_ah": "(2022)川0107执****号", + "case_type": 500, + "n_ajbs": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0", + "stage_type": 1 + } + ], + "preservation": [] + }, + "civil": { + "cases": [ + { + "c_ah": "(2023)川0107民初****号", + "c_dsrxx": [ + { + "c_mc": "成都****教育科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "赵某", + "n_dsrlx": "自然人", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告赵某,男,1988年4月5日生,汉族,住成都市高新区****小区x号楼x号。委托代理人李某,四川****律师事务所律师。被告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。", + "c_gkws_pjjg": "一、被告成都****教育科技有限公司于本判决生效之日起十日内向原告赵某返还培训费用15000元;二、被告成都****教育科技有限公司于本判决生效之日起十日内向原告赵某支付违约金3000元;三、驳回原告赵某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费400元,由原告赵某负担100元,被告成都****教育科技有限公司负担300元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于成都市中级人民法院。", + "c_id": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0", + "c_ssdy": "四川省", + "d_jarq": "2023-04-20", + "d_larq": "2023-03-15", + "n_ajbs": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 3456789012, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷", + "n_jafs": "判决", + "n_jbfy": "成都市武侯区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 25000, + "n_qsbdje_level": 15, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2022)川0107民初****号", + "c_dsrxx": [ + { + "c_mc": "成都****教育科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "钟某", + "n_dsrlx": "自然人", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被告钟某,男,1982年7月12日生,汉族,住成都市青羊区****小区x号楼x号。", + "c_gkws_pjjg": "一、被告钟某于本判决生效之日起十日内向原告成都****教育科技有限公司支付教育培训费用25000元;二、驳回原告成都****教育科技有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费500元,由原告成都****教育科技有限公司负担200元,被告钟某负担300元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于成都市中级人民法院。", + "c_id": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1", + "c_ssdy": "四川省", + "d_jarq": "2022-11-15", + "d_larq": "2022-09-20", + "n_ajbs": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 4567890123, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷", + "n_jafs": "判决", + "n_jbfy": "成都市武侯区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 30000, + "n_qsbdje_level": 15, + "n_slcx": "一审", + "n_ssdw": "原告" + }, + { + "c_ah": "(2023)川01民终****号", + "c_dsrxx": [ + { + "c_mc": "成都****教育科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + }, + { + "c_mc": "赵某", + "n_dsrlx": "自然人", + "n_ssdw": "被上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被上诉人(原审原告)赵某,男,1988年4月5日生,汉族,住成都市高新区****小区x号楼x号。委托代理人李某,四川****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费400元,由上诉人成都****教育科技有限公司负担。本判决为终审判决。", + "c_id": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2", + "c_ssdy": "四川省", + "d_jarq": "2023-06-15", + "d_larq": "2023-05-20", + "n_ajbs": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 5678901234, + "n_jaay": "合同、准合同纠纷", + "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷", + "n_jafs": "维持", + "n_jbfy": "成都市中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、准合同纠纷", + "n_pj_victory": "败诉", + "n_qsbdje": 25000, + "n_qsbdje_level": 15, + "n_slcx": "二审", + "n_ssdw": "上诉人" + } + ], + "count": { + "area_stat": "四川省(3)", + "ay_stat": "合同、准合同纠纷(3)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 3, + "count_total": 3, + "jafs_stat": "判决(2),维持(1)", + "larq_stat": "2022(1),2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + } + }, + "count": { + "area_stat": "四川省(5)", + "ay_stat": "合同、准合同纠纷(3),行政管理(1),执行案件(1)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 5, + "count_total": 5, + "jafs_stat": "判决(3),维持(1),执行(1)", + "larq_stat": "2022(2),2023(3)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + }, + "crc": 1234567890, + "criminal": { + "cases": [], + "count": { + "area_stat": "四川省(0)", + "count_total": 0 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2022)川0107执****号", + "c_dsrxx": [ + { + "c_mc": "成都****教育科技有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请执行人" + }, + { + "c_mc": "钟某", + "n_dsrlx": "自然人", + "n_ssdw": "被执行人" + } + ], + "c_gkws_dsr": "申请执行人成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被执行人钟某,男,1982年7月12日生,汉族,住成都市青羊区****小区x号楼x号。", + "c_gkws_pjjg": "一、被执行人钟某应向申请执行人成都****教育科技有限公司支付教育培训费用25000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3", + "c_ssdy": "四川省", + "d_jarq": "2022-12-10", + "d_larq": "2022-11-20", + "n_ajbs": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 6789012345, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "成都市武侯区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "申请执行人" + } + ], + "count": { + "area_stat": "四川省(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [], + "count": { + "area_stat": "四川省(0)", + "count_total": 0 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [] + } + } + }, + "orgName": "成都****教育科技有限公司", + "pName": "刘某", + "punishment_info": { + "items": [ + { + "content": "责令卸载超载货物,并处罚款人民币2万元", + "decisionDate": "2023-04-25", + "departmentName": "成都市交通运输局", + "evidence": "路政检查发现车辆超载", + "legalPersonName": "赵军", + "pecuniary": "20000", + "punishName": "成都物流运输有限公司", + "punishNumber": "蓉交罚〔2023〕第0427号", + "punishStatus": "已执行", + "reason": "违反《道路运输条例》,超载运输", + "remark": "", + "source": "交通运输局", + "type": "运输违法", + "typeSecond": "超载运输" + }, + { + "content": "责令维修车辆达到排放标准,并处罚款人民币1.5万元", + "decisionDate": "2023-08-12", + "departmentName": "成都市环保局", + "evidence": "环保检测尾气排放不达标", + "legalPersonName": "赵军", + "pecuniary": "15000", + "punishName": "成都物流运输有限公司", + "punishNumber": "蓉环罚〔2023〕第0815号", + "punishStatus": "已执行", + "reason": "违反《大气污染防治法》,车辆尾气排放超标", + "remark": "", + "source": "环保局", + "type": "环境违法", + "typeSecond": "尾气超标" + }, + { + "content": "责令停业整顿,并处罚款人民币10万元", + "decisionDate": "2024-01-08", + "departmentName": "成都市应急管理局", + "evidence": "安全检查发现危险品运输违规", + "legalPersonName": "赵军", + "pecuniary": "100000", + "punishName": "成都物流运输有限公司", + "punishNumber": "蓉应急罚〔2024〕第0110号", + "punishStatus": "已执行", + "reason": "违反《安全生产法》,危险品运输安全措施不到位", + "remark": "", + "source": "应急管理局", + "type": "安全生产", + "typeSecond": "危险品运输" + } + ], + "total": 3 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "刘某", + "orgHolderType": "自然人", + "subscriptAmt": 1000 + } + }, + { + "abnormal_info": { + "items": [ + { + "putDate": "2023-06-20", + "putDepartment": "武汉市洪山区市场监督管理局", + "putReason": "未按规定期限公示股权变更信息的", + "removeDate": "2023-12-05", + "removeDepartment": "武汉市洪山区市场监督管理局", + "removeReason": "已公示股权变更信息" + }, + { + "putDate": "2024-05-08", + "putDepartment": "武汉市洪山区市场监督管理局", + "putReason": "通过登记的住所或者经营场所无法联系的", + "removeDate": "", + "removeDepartment": "", + "removeReason": "" + } + ], + "total": 2 + }, + "adminPenalty": [ + { + "content": "", + "decisionDate": "2022-05-18", + "departmentName": "天津市****交通委员会", + "legalPersonName": "吴某", + "punishNumber": "津交罚字(2022)****号", + "reason": "超限运输违规", + "type": "罚款" + }, + { + "content": "", + "decisionDate": "2021-09-05", + "departmentName": "天津市****税务局", + "legalPersonName": "吴某", + "punishNumber": "津税罚字(2021)****号", + "reason": "未按期申报纳税", + "type": "罚款" + } + ], + "basicInfo": { + "apprdate": "2022-08-10", + "base": "tj", + "candate": "", + "city": "天津市", + "companyOrgType": "有限责任公司(自然人投资或控股)", + "creditCode": "91120100MA7******", + "district": "东丽区", + "estiblishTime": "2015-06-25", + "industry": "交通运输、仓储和邮政业", + "industry_code": "G", + "legalPersonName": "吴某", + "name": "天津****物流有限公司", + "nic_code": "G5320", + "nic_name": "交通运输、仓储和邮政业-道路运输业-道路货物运输", + "opscope": "普通货物运输;仓储服务(危险化学品除外);物流信息咨询;供应链管理;运输代理服务;汽车租赁;货物装卸服务;货运信息咨询服务;国内货运代理;国际货运代理服务。", + "province": "天津市", + "reccap": 0, + "reccapcur": "人民币", + "regCapital": "2000.000000万人民币", + "regCapitalCurrency": "人民币", + "regNumber": "120113******", + "regStatus": "存续", + "regorg": "天津市市场监督管理局", + "revdate": "2022-08-10", + "staffList": { + "result": [ + { + "name": "吴某", + "type": "2", + "typeJoin": [ + "执行董事" + ] + }, + { + "name": "林某", + "type": "3", + "typeJoin": [ + "总经理" + ] + }, + { + "name": "石某", + "type": "4", + "typeJoin": [ + "监事" + ] + } + ] + }, + "type": "1" + }, + "dishonestExecutedPerson": [ + { + "c_ah": "(2023)津0113执****号", + "c_fymc": "天津市东丽区人民法院", + "c_wfss": "有履行能力而拒不履行生效法律文书确定义务", + "c_zxbd": "(2023)津0113执****号", + "d_fbsj": "2023-08-15", + "d_lrsj": "2023-08-10", + "n_fbrw": "1" + } + ], + "executedPerson": [ + { + "c_ah": "(2023)津0113执****号", + "c_beizhu": "全部未履行", + "c_bzxqk": "全部未履行", + "c_zxbd": "(2023)津0113执****号", + "d_lrsj": "2023-07-20", + "d_zxsj": "", + "n_bddqje": 850000 + } + ], + "financing_history": { + "items": [ + { + "companyName": "武汉教育科技有限公司", + "date": null, + "investorName": "新东方,好未来", + "money": "8000万人民币", + "newsTitle": "武汉教育科技获得8000万元B轮融资", + "newsUrl": "https://example.com/news6", + "pubTime": 1683648000000, + "round": "B轮", + "share": "18%", + "value": "4.4亿人民币" + }, + { + "companyName": "武汉教育科技有限公司", + "date": null, + "investorName": "立思辰,拓维信息", + "money": "3000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1652112000000, + "round": "A轮", + "share": "25%", + "value": "1.2亿人民币" + }, + { + "companyName": "武汉教育科技有限公司", + "date": null, + "investorName": "华中科技大学基金", + "money": "1000万人民币", + "newsTitle": "", + "newsUrl": "", + "pubTime": 1620576000000, + "round": "天使轮", + "share": "15%", + "value": "6667万人民币" + } + ], + "total": 3 + }, + "fsource": "1", + "invest_history": { + "items": [ + { + "alias": "在线教育", + "amount": null, + "base": "wh", + "business_scope": "在线教育软件开发;教育咨询服务;职业技能培训;计算机技术培训;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;文化艺术交流活动组织;会议及展览服务。", + "category": "软件和信息技术服务业", + "creditCode": "91420100MA01Q8R9S0", + "estiblishTime": 1640995200000, + "id": 51234567, + "legalPersonId": 2312345678, + "legalPersonName": "教授王", + "logo": "https://img5.tianyancha.com/logo/lll/example17.png@!f_200x200", + "name": "武汉在线教育平台有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 6234, + "percent": "35%", + "personType": 1, + "regCapital": "2000万人民币", + "regStatus": "存续", + "withdrawalTime": null + }, + { + "alias": "智能教育", + "amount": null, + "base": "wh", + "business_scope": "教育软件开发;人工智能在教育领域的应用;虚拟现实软件开发;增强现实软件开发;教学设备制造;教学设备销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。", + "category": "软件和信息技术服务业", + "creditCode": "91420100MA01R9S0T1", + "estiblishTime": 1656633600000, + "id": 52345678, + "legalPersonId": 2323456789, + "legalPersonName": "刘教授", + "logo": "https://img5.tianyancha.com/logo/lll/example18.png@!f_200x200", + "name": "武汉智能教育装备有限公司", + "orgType": "有限责任公司(自然人投资或控股)", + "pencertileScore": 5678, + "percent": "45%", + "personType": 1, + "regCapital": "1500万人民币", + "regStatus": "存续", + "withdrawalTime": null + } + ], + "total": 3 + }, + "lawsuitInfo": { + "entout": { + "data": { + "administrative": { + "cases": [ + { + "c_ah": "(2022)津01行初****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "天津市****交通委员会", + "n_dsrlx": "机关团体", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人王某,天津****律师事务所律师。被告天津市****交通委员会,住所地天津市和平区****路x号。负责人陈某,主任。委托代理人马某,该委员会工作人员。", + "c_gkws_pjjg": "驳回原告天津****物流有限公司的诉讼请求。案件受理费50元,由原告天津****物流有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市高级人民法院。", + "c_id": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4", + "c_ssdy": "天津市", + "d_jarq": "2022-07-25", + "d_larq": "2022-06-10", + "n_ajbs": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1", + "n_ajjzjd": "已结案", + "n_ajlx": "行政一审", + "n_crc": 7890123456, + "n_jaay": "行政管理", + "n_jaay_tree": "行政管理,道路交通管理,道路运输管理", + "n_jafs": "判决", + "n_jbfy": "天津市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "行政管理", + "n_pj_victory": "败诉", + "n_slcx": "一审", + "n_ssdw": "原告" + } + ], + "count": { + "area_stat": "天津市(1)", + "ay_stat": "行政管理(1)", + "count_beigao": 0, + "count_jie_beigao": 0, + "count_jie_total": 1, + "count_total": 1, + "jafs_stat": "判决(1)", + "larq_stat": "2022(1)" + } + }, + "bankrupt": { + "cases": [], + "count": { + "area_stat": "天津市(0)", + "count_total": 0 + } + }, + "cases_tree": { + "administrative": [ + { + "c_ah": "(2022)津01行初****号", + "case_type": 400, + "n_ajbs": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1", + "stage_type": 1 + } + ], + "bankrupt": [], + "civil": [ + { + "c_ah": "(2022)津0113民初****号", + "case_type": 300, + "n_ajbs": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2", + "stage_type": 1 + }, + { + "c_ah": "(2023)津0113民初****号", + "case_type": 300, + "n_ajbs": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3", + "stage_type": 1 + }, + { + "c_ah": "(2023)津01民终****号", + "case_type": 300, + "n_ajbs": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4", + "stage_type": 2 + } + ], + "criminal": [ + { + "c_ah": "(2023)津0113刑初****号", + "case_type": 200, + "n_ajbs": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5", + "stage_type": 1 + } + ], + "implement": [ + { + "c_ah": "(2023)津0113执****号", + "case_type": 500, + "n_ajbs": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6", + "stage_type": 1 + } + ], + "preservation": [] + }, + "civil": { + "cases": [ + { + "c_ah": "(2022)津0113民初****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + }, + { + "c_mc": "北京****贸易有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + } + ], + "c_gkws_dsr": "原告北京****贸易有限公司,住所地北京市朝阳区****路x号。法定代表人张某,总经理。委托代理人赵某,北京****律师事务所律师。被告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。", + "c_gkws_pjjg": "一、被告天津****物流有限公司于本判决生效之日起十日内向原告北京****贸易有限公司支付货物损失赔偿金200000元及运费80000元;二、驳回原告北京****贸易有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费12800元,由原告北京****贸易有限公司负担3800元,被告天津****物流有限公司负担9000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。", + "c_id": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5", + "c_ssdy": "天津市", + "d_jarq": "2022-11-15", + "d_larq": "2022-09-05", + "n_ajbs": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 8901234567, + "n_jaay": "合同、无因管理、不当得利", + "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷", + "n_jafs": "判决", + "n_jbfy": "天津市东丽区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、无因管理、不当得利", + "n_pj_victory": "败诉", + "n_qsbdje": 350000, + "n_qsbdje_level": 16, + "n_slcx": "一审", + "n_ssdw": "被告" + }, + { + "c_ah": "(2023)津0113民初****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "原告" + }, + { + "c_mc": "河北****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被告" + } + ], + "c_gkws_dsr": "原告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。被告河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。", + "c_gkws_pjjg": "一、被告河北****制造有限公司于本判决生效之日起十日内向原告天津****物流有限公司支付运输服务费850000元;二、驳回原告天津****物流有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费14900元,由原告天津****物流有限公司负担3900元,被告河北****制造有限公司负担11000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。", + "c_id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6", + "c_ssdy": "天津市", + "d_jarq": "2023-05-25", + "d_larq": "2023-03-15", + "n_ajbs": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3", + "n_ajjzjd": "已结案", + "n_ajlx": "民事一审", + "n_crc": 9012345678, + "n_jaay": "合同、无因管理、不当得利", + "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷", + "n_jafs": "判决", + "n_jbfy": "天津市东丽区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "合同、无因管理、不当得利", + "n_pj_victory": "部分胜诉", + "n_qsbdje": 950000, + "n_qsbdje_level": 16, + "n_slcx": "一审", + "n_ssdw": "原告" + }, + { + "c_ah": "(2023)津01民终****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被上诉人" + }, + { + "c_mc": "河北****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "上诉人" + } + ], + "c_gkws_dsr": "上诉人(原审被告)河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。被上诉人(原审原告)天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。", + "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费14900元,由上诉人河北****制造有限公司负担。本判决为终审判决。", + "c_id": "y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6n7", + "c_ssdy": "天津市", + "d_jarq": "2023-07-10", + "d_larq": "2023-06-15", + "n_ajbs": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4", + "n_ajjzjd": "已结案", + "n_ajlx": "民事二审", + "n_crc": 123456789, + "n_jaay": "合同、无因管理、不当得利", + "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷", + "n_jafs": "维持", + "n_jbfy": "天津市第一中级人民法院", + "n_jbfy_cj": "中级人民法院", + "n_laay": "合同、无因管理、不当得利", + "n_pj_victory": "胜诉", + "n_qsbdje": 950000, + "n_qsbdje_level": 16, + "n_slcx": "二审", + "n_ssdw": "被上诉人" + } + ], + "count": { + "area_stat": "天津市(3)", + "ay_stat": "合同、无因管理、不当得利(3)", + "count_beigao": 1, + "count_jie_beigao": 1, + "count_jie_total": 3, + "count_total": 3, + "jafs_stat": "判决(2),维持(1)", + "larq_stat": "2022(1),2023(2)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + } + }, + "count": { + "area_stat": "天津市(6)", + "ay_stat": "刑事犯罪(1),合同、无因管理、不当得利(3),执行案件(1),行政管理(1)", + "count_beigao": 2, + "count_jie_beigao": 2, + "count_jie_total": 6, + "count_total": 6, + "jafs_stat": "判决(4),维持(1),执行(1)", + "larq_stat": "2022(2),2023(4)", + "money_beigao": 1, + "money_jie_beigao": 1, + "money_jie_total": 3, + "money_total": 3 + }, + "crc": 234567890, + "criminal": { + "cases": [ + { + "c_ah": "(2023)津0113刑初****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "单位犯罪" + }, + { + "c_mc": "吴某", + "n_dsrlx": "自然人", + "n_ssdw": "被告人" + } + ], + "c_gkws_dsr": "公诉机关天津市东丽区人民检察院。被告人吴某,男,1975年8月15日生,汉族,住天津市河西区****小区x号楼x号,系天津****物流有限公司法定代表人。被告单位天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。辩护人黄某,天津****律师事务所律师。", + "c_gkws_pjjg": "一、被告单位天津****物流有限公司犯危险驾驶罪,判处罚金人民币二十万元;二、被告人吴某犯危险驾驶罪,判处拘役三个月,缓刑六个月,并处罚金人民币五千元。如不服本判决,可在判决书送达之日起十日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。", + "c_id": "z3a4b5c6d7e8f9g0h1i2j3k4l5m6n7o8", + "c_ssdy": "天津市", + "d_jarq": "2023-04-20", + "d_larq": "2023-03-10", + "n_ajbs": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5", + "n_ajjzjd": "已结案", + "n_ajlx": "刑事一审", + "n_crc": 345678901, + "n_jaay": "刑事犯罪", + "n_jaay_tree": "刑事犯罪,危害公共安全罪,危险驾驶罪", + "n_jafs": "判决", + "n_jbfy": "天津市东丽区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "刑事犯罪", + "n_slcx": "一审", + "n_ssdw": "单位犯罪" + } + ], + "count": { + "area_stat": "天津市(1)", + "ay_stat": "刑事犯罪(1)", + "count_total": 1 + } + }, + "implement": { + "cases": [ + { + "c_ah": "(2023)津0113执****号", + "c_dsrxx": [ + { + "c_mc": "天津****物流有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "被执行人" + }, + { + "c_mc": "河北****制造有限公司", + "n_dsrlx": "企业组织", + "n_ssdw": "申请执行人" + } + ], + "c_gkws_dsr": "申请执行人河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。被执行人天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。", + "c_gkws_pjjg": "一、被执行人天津****物流有限公司应向申请执行人河北****制造有限公司支付运输服务费850000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。", + "c_id": "a4b5c6d7e8f9g0h1i2j3k4l5m6n7o8p9", + "c_ssdy": "天津市", + "d_jarq": "2023-07-20", + "d_larq": "2023-07-15", + "n_ajbs": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6", + "n_ajjzjd": "已结案", + "n_ajlx": "执行案件", + "n_crc": 456789012, + "n_jaay": "执行案件", + "n_jaay_tree": "执行案件,执行实施类", + "n_jafs": "执行", + "n_jbfy": "天津市东丽区人民法院", + "n_jbfy_cj": "基层人民法院", + "n_laay": "执行案件", + "n_slcx": "执行", + "n_ssdw": "被执行人" + } + ], + "count": { + "area_stat": "天津市(1)", + "count_total": 1 + } + }, + "preservation": { + "cases": [], + "count": { + "area_stat": "天津市(0)", + "count_total": 0 + } + } + } + }, + "sxbzxr": { + "data": { + "sxbzxr": [ + { + "c_ah": "(2023)津0113执****号", + "c_fymc": "天津市东丽区人民法院", + "c_wfss": "有履行能力而拒不履行生效法律文书确定义务", + "c_zxbd": "(2023)津0113执****号", + "d_fbsj": "2023-08-15", + "d_lrsj": "2023-08-10", + "n_fbrw": "1" + } + ] + } + }, + "xgbzxr": { + "data": { + "xgbzxr": [ + { + "c_ah": "(2023)津0113执****号", + "c_beizhu": "全部未履行", + "c_bzxqk": "全部未履行", + "c_zxbd": "(2023)津0113执****号", + "d_lrsj": "2023-07-20", + "d_zxsj": "", + "n_bddqje": 850000 + } + ] + } + } + }, + "orgName": "天津****物流有限公司", + "pName": "吴某", + "punishment_info": { + "items": [ + { + "content": "责令停止超范围培训,并处罚款人民币5万元", + "decisionDate": "2023-09-20", + "departmentName": "武汉市教育局", + "evidence": "现场检查发现超出许可范围培训", + "legalPersonName": "孙磊", + "pecuniary": "50000", + "punishName": "武汉教育科技有限公司", + "punishNumber": "汉教罚〔2023〕第0922号", + "punishStatus": "已执行", + "reason": "违反《民办教育促进法》,超范围开展教育培训业务", + "remark": "", + "source": "教育局", + "type": "教育违法", + "typeSecond": "超范围培训" + }, + { + "content": "责令规范收费标准公示,并处罚款人民币2万元", + "decisionDate": "2024-03-15", + "departmentName": "武汉市市场监督管理局", + "evidence": "价格检查发现收费标准不透明", + "legalPersonName": "孙磊", + "pecuniary": "20000", + "punishName": "武汉教育科技有限公司", + "punishNumber": "汉市监罚〔2024〕第0318号", + "punishStatus": "已执行", + "reason": "违反《价格法》,教育培训收费未明码标价", + "remark": "", + "source": "市场监督管理局", + "type": "价格违法", + "typeSecond": "价格违法" + } + ], + "total": 2 + }, + "relationship": [ + "sh", + "lp", + "tm" + ], + "stockHolderItem": { + "investDate": "", + "investRate": "100.0%", + "orgHolderName": "吴某", + "orgHolderType": "自然人", + "subscriptAmt": 2000 + } + } + ], + "total": 8 + }, + "success": true, + "timestamp": "2024-03-19 17:00:59" +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..486b819 --- /dev/null +++ b/index.html @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + 天远数据 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
加载中
+
+
+ + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f8628a7 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "hm-website", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@vant/area-data": "^2.0.0", + "@vueuse/core": "^11.3.0", + "axios": "^1.7.7", + "crypto-js": "^4.2.0", + "echarts": "^5.5.1", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "pinia": "^2.2.6", + "qrcode": "^1.5.4", + "vant": "^4.9.9", + "vue": "^3.5.12", + "vue-echarts": "^7.0.3", + "vue-router": "^4.4.5" + }, + "devDependencies": { + "@vant/auto-import-resolver": "^1.2.1", + "@vitejs/plugin-vue": "^5.1.4", + "@vitejs/plugin-vue-jsx": "^4.0.1", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", + "sass-embedded": "^1.81.0", + "tailwindcss": "^3.4.15", + "terser": "^5.43.1", + "unplugin-auto-import": "^0.18.5", + "unplugin-vue-components": "^0.27.5", + "vite": "^5.4.10", + "vite-plugin-vue-devtools": "^7.5.4" + }, + "packageManager": "pnpm@10.9.0+sha512.0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a4e40ee --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3394 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@vant/area-data': + specifier: ^2.0.0 + version: 2.0.0 + '@vueuse/core': + specifier: ^11.3.0 + version: 11.3.0(vue@3.5.13) + axios: + specifier: ^1.7.7 + version: 1.7.7 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + echarts: + specifier: ^5.5.1 + version: 5.5.1 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + nprogress: + specifier: ^0.2.0 + version: 0.2.0 + pinia: + specifier: ^2.2.6 + version: 2.2.6(vue@3.5.13) + qrcode: + specifier: ^1.5.4 + version: 1.5.4 + vant: + specifier: ^4.9.9 + version: 4.9.9(vue@3.5.13) + vue: + specifier: ^3.5.12 + version: 3.5.13 + vue-echarts: + specifier: ^7.0.3 + version: 7.0.3(@vue/runtime-core@3.5.13)(echarts@5.5.1)(vue@3.5.13) + vue-router: + specifier: ^4.4.5 + version: 4.4.5(vue@3.5.13) + devDependencies: + '@vant/auto-import-resolver': + specifier: ^1.2.1 + version: 1.2.1 + '@vitejs/plugin-vue': + specifier: ^5.1.4 + version: 5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + '@vitejs/plugin-vue-jsx': + specifier: ^4.0.1 + version: 4.1.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + postcss: + specifier: ^8.4.49 + version: 8.4.49 + sass-embedded: + specifier: ^1.81.0 + version: 1.81.0 + tailwindcss: + specifier: ^3.4.15 + version: 3.4.15 + terser: + specifier: ^5.43.1 + version: 5.43.1 + unplugin-auto-import: + specifier: ^0.18.5 + version: 0.18.5(@vueuse/core@11.3.0(vue@3.5.13))(rollup@4.27.3) + unplugin-vue-components: + specifier: ^0.27.5 + version: 0.27.5(@babel/parser@7.26.2)(rollup@4.27.3)(vue@3.5.13) + vite: + specifier: ^5.4.10 + version: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vite-plugin-vue-devtools: + specifier: ^7.5.4 + version: 7.6.4(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + +packages: + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@bufbuild/protobuf@2.2.2': + resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.27.3': + resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.27.3': + resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.27.3': + resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.27.3': + resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.27.3': + resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.27.3': + resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.27.3': + resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.27.3': + resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.27.3': + resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.27.3': + resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@vant/area-data@2.0.0': + resolution: {integrity: sha512-zgP4AA8z09S9QTNgVCCHo9cHjcybrv22RJDYPjuCkecn4SB98T5EoPQh2TwqbQXmUhbaOGgiZGy3OUaUxnY7qg==} + + '@vant/auto-import-resolver@1.2.1': + resolution: {integrity: sha512-czGWW4UolNITkF3qQSQlpHDHAsI3/GHVKbRMmEEpry7NWdnU4p5a5jBi0VApbaLa5g80Hy10XVs3IB+UozoSUw==} + + '@vant/popperjs@1.3.0': + resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} + + '@vant/use@1.6.0': + resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==} + peerDependencies: + vue: ^3.0.0 + + '@vitejs/plugin-vue-jsx@4.1.0': + resolution: {integrity: sha512-KuRejz7KAFvhXDzOudlaS2IyygAwoAEEMtHAdcRSy/8cA5iKH043Qudcz48zsC0M0vvN5iKwIwNMuWbBYn6/Yg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.0.0 + + '@vitejs/plugin-vue@5.2.0': + resolution: {integrity: sha512-7n7KdUEtx/7Yl7I/WVAMZ1bEb0eVvXF3ummWTeLcs/9gvo9pJhuLdouSXGjdZ/MKD1acf1I272+X0RMua4/R3g==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@vue/babel-helper-vue-transform-on@1.2.5': + resolution: {integrity: sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==} + + '@vue/babel-plugin-jsx@1.2.5': + resolution: {integrity: sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + + '@vue/babel-plugin-resolve-type@1.2.5': + resolution: {integrity: sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/devtools-core@7.6.4': + resolution: {integrity: sha512-blSwGVYpb7b5TALMjjoBiAl5imuBF7WEOAtaJaBMNikR8SQkm6mkUt4YlIKh9874/qoimwmpDOm+GHBZ4Y5m+g==} + peerDependencies: + vue: ^3.0.0 + + '@vue/devtools-kit@7.6.4': + resolution: {integrity: sha512-Zs86qIXXM9icU0PiGY09PQCle4TI750IPLmAJzW5Kf9n9t5HzSYf6Rz6fyzSwmfMPiR51SUKJh9sXVZu78h2QA==} + + '@vue/devtools-shared@7.6.4': + resolution: {integrity: sha512-nD6CUvBEel+y7zpyorjiUocy0nh77DThZJ0k1GRnJeOmY3ATq2fWijEp7wk37gb023Cb0R396uYh5qMSBQ5WFg==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vueuse/core@11.3.0': + resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==} + + '@vueuse/metadata@11.3.0': + resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==} + + '@vueuse/shared@11.3.0': + resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + birpc@0.2.19: + resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + echarts@5.5.1: + resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==} + + electron-to-chromium@1.5.63: + resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-stack-parser-es@0.1.5: + resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.30.13: + resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + + magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mlly@1.7.3: + resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.2.6: + resolution: {integrity: sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: '>=4.4.4' + vue: ^2.6.14 || ^3.5.11 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-types@1.2.1: + resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rollup@4.27.3: + resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + sass-embedded-android-arm64@1.81.0: + resolution: {integrity: sha512-I36P77/PKAHx6sqOmexO2iEY5kpsmQ1VxcgITZSOxPMQhdB6m4t3bTabfDuWQQmCrqqiNFtLQHeytB65bUqwiw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.81.0: + resolution: {integrity: sha512-NWEmIuaIEsGFNsIRa+5JpIpPJyZ32H15E85CNZqEIhhwWlk9UNw7vlOCmTH8MtabtnACwC/2NG8VyNa3nxKzUQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.81.0: + resolution: {integrity: sha512-k8V1usXw30w1GVxvrteG1RzgYJzYQ9PfL2aeOqGdroBN7zYTD9VGJXTGcxA4IeeRxmRd7szVW2mKXXS472fh8g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.81.0: + resolution: {integrity: sha512-RXlanyLXEpN/DEehXgLuKPsqT//GYlsGFxKXgRiCc8hIPAueFLQXKJmLWlL3BEtHgmFdbsStIu4aZCcb1hOFlQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.81.0: + resolution: {integrity: sha512-RQG0FxGQ1DERNyUDED8+BDVaLIjI+BNg8lVcyqlLZUrWY6NhzjwYEeiN/DNZmMmHtqDucAPNDcsdVUNQqsBy2A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.81.0: + resolution: {integrity: sha512-gLKbsfII9Ppua76N41ODFnKGutla9qv0OGAas8gxe0jYBeAQFi/1iKQYdNtQtKi4mA9n5TQTqz+HHCKszZCoyA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.81.0: + resolution: {integrity: sha512-7uMOlT9hD2KUJCbTN2XcfghDxt/rc50ujjfSjSHjX1SYj7mGplkINUXvVbbvvaV2wt6t9vkGkCo5qNbeBhfwBg==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.81.0: + resolution: {integrity: sha512-jy4bvhdUmqbyw1jv1f3Uxl+MF8EU/Y/GDx4w6XPJm4Ds+mwH/TwnyAwsxxoBhWfnBnW8q2ADy039DlS5p+9csQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.81.0: + resolution: {integrity: sha512-REqR9qM4RchCE3cKqzRy9Q4zigIV82SbSpCi/O4O3oK3pg2I1z7vkb3TiJsivusG/li7aqKZGmYOtAXjruGQDA==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.81.0: + resolution: {integrity: sha512-ga/Jk4q5Bn1aC+iHJteDZuLSKnmBUiS3dEg1fnl/Z7GaHIChceKDJOw0zNaILRXI0qT2E1at9MwzoRaRA5Nn/g==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.81.0: + resolution: {integrity: sha512-hpntWf5kjkoxncA1Vh8vhsUOquZ8AROZKx0rQh7ZjSRs4JrYZASz1cfevPKaEM3wIim/nYa6TJqm0VqWsrERlA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.81.0: + resolution: {integrity: sha512-oWVUvQ4d5Kx1Md75YXZl5z1WBjc+uOhfRRqzkJ3nWc8tjszxJN+y/5EOJavhsNI3/2yoTt6eMXRTqDD9b0tWSQ==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.81.0: + resolution: {integrity: sha512-UEXUYkBuqTSwg5JNWiNlfMZ1Jx6SJkaEdx+fsL3Tk099L8cKSoJWH2EPz4ZJjNbyIMymrSdVfymheTeZ8u24xA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.81.0: + resolution: {integrity: sha512-1D7OznytbIhx2XDHWi1nuQ8d/uCVR7FGGzELgaU//T8A9DapVTUgPKvB70AF1k4GzChR9IXU/WvFZs2hDTbaJg==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.81.0: + resolution: {integrity: sha512-ia6VCTeVDQtBSMktXRFza1AZCt8/6aUoujot6Ugf4KmdytQqPJIHxkHaGftm5xwi9WdrMGYS7zgolToPijR11A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.81.0: + resolution: {integrity: sha512-KbxSsqu4tT1XbhZfJV/5NfW0VtJIGlD58RjqJqJBi8Rnjrx29/upBsuwoDWtsPV/LhoGwwU1XkSa9Q1ifCz4fQ==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.81.0: + resolution: {integrity: sha512-AMDeVY2T9WAnSFkuQcsOn5c29GRs/TuqnCiblKeXfxCSKym5uKdBl/N7GnTV6OjzoxiJBbkYKdVIaS5By7Gj4g==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.81.0: + resolution: {integrity: sha512-YOmBRYnygwWUmCoH14QbMRHjcvCJufeJBAp0m61tOJXIQh64ziwV4mjdqjS/Rx3zhTT4T+nulDUw4d3kLiMncA==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.81.0: + resolution: {integrity: sha512-HFfr/C+uLJGGTENdnssuNTmXI/xnIasUuEHEKqI+2J0FHCWT5cpz3PGAOHymPyJcZVYGUG/7gIxIx/d7t0LFYw==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.81.0: + resolution: {integrity: sha512-wxj52jDcIAwWcXb7ShZ7vQYKcVUkJ+04YM9l46jDY+qwHzliGuorAUyujLyKTE9heGD3gShJ3wPPC1lXzq6v9A==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.81.0: + resolution: {integrity: sha512-uZQ2Faxb1oWBHpeSSzjxnhClbMb3QadN0ql0ZFNuqWOLUxwaVhrMlMhPq6TDPbbfDUjihuwrMCuy695Bgna5RA==} + engines: {node: '>=16.0.0'} + hasBin: true + + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + superjson@2.2.1: + resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} + engines: {node: '>=16'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + + tailwindcss@3.4.15: + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} + engines: {node: '>=14.0.0'} + hasBin: true + + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + engines: {node: '>=10'} + hasBin: true + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + unimport@3.13.2: + resolution: {integrity: sha512-VKAepeIb6BWLtBl4tmyHY1/7rJgz3ynmZrWf8cU1a+v5Uv/k1gyyAEeGBnYcrwy8bxG5sflxEx4a9VQUqOVHUA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unplugin-auto-import@0.18.5: + resolution: {integrity: sha512-ZUnayBRlOwNuN9hrM1PymSZK5qDEI8heDD0E3U8Tq4FS6bUxd9VMfJ8tCwWTG5ir6g1yThe/4SVHbFUZQwplOw==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 + '@vueuse/core': '*' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@vueuse/core': + optional: true + + unplugin-vue-components@0.27.5: + resolution: {integrity: sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + engines: {node: '>=14.0.0'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vant@4.9.9: + resolution: {integrity: sha512-sEw3ljwCza5dazpJqh04b38vCjNr2Id8vb7LOkYQQR/94iERDIm5jcQinhmwlRnwoGCa+JkNwm0jrCafzZJiwA==} + peerDependencies: + vue: ^3.0.0 + + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + + vite-hot-client@0.2.3: + resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==} + peerDependencies: + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 + + vite-plugin-inspect@0.8.8: + resolution: {integrity: sha512-aZlBuXsWUPJFmMK92GIv6lH7LrwG2POu4KJ+aEdcqnu92OAf+rhBnfMDQvxIJPEB7hE2t5EyY/PMgf5aDLT8EA==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': '*' + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + vite-plugin-vue-devtools@7.6.4: + resolution: {integrity: sha512-jxSsLyuETfmZ1OSrmnDp28BG6rmURrP7lkeyHW2gBFDyo+4dUcqVeQNMhbV7uKZn80mDdv06Mysw/5AdGxDvJQ==} + engines: {node: '>=v14.21.3'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 + + vite-plugin-vue-inspector@5.2.0: + resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==} + peerDependencies: + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vue-demi@0.13.11: + resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-echarts@7.0.3: + resolution: {integrity: sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==} + peerDependencies: + '@vue/runtime-core': ^3.0.0 + echarts: ^5.5.1 + vue: ^2.7.0 || ^3.1.1 + peerDependenciesMeta: + '@vue/runtime-core': + optional: true + + vue-router@4.4.5: + resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + zrender@5.6.0: + resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@antfu/utils@0.7.10': {} + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.2': {} + + '@babel/core@7.26.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.2': + dependencies: + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.0 + + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.0 + + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helpers@7.26.0': + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bufbuild/protobuf@2.2.2': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@polka/url@1.0.0-next.28': {} + + '@rollup/pluginutils@5.1.3(rollup@4.27.3)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.27.3 + + '@rollup/rollup-android-arm-eabi@4.27.3': + optional: true + + '@rollup/rollup-android-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.27.3': + optional: true + + '@rollup/rollup-darwin-x64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.27.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.27.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.27.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.27.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.27.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.27.3': + optional: true + + '@types/estree@1.0.6': {} + + '@types/web-bluetooth@0.0.20': {} + + '@vant/area-data@2.0.0': {} + + '@vant/auto-import-resolver@1.2.1': {} + + '@vant/popperjs@1.3.0': {} + + '@vant/use@1.6.0(vue@3.5.13)': + dependencies: + vue: 3.5.13 + + '@vitejs/plugin-vue-jsx@4.1.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vue: 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vue: 3.5.13 + + '@vue/babel-helper-vue-transform-on@1.2.5': {} + + '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + '@vue/babel-helper-vue-transform-on': 1.2.5 + '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.26.0) + html-tags: 3.3.1 + svg-tags: 1.0.0 + optionalDependencies: + '@babel/core': 7.26.0 + transitivePeerDependencies: + - supports-color + + '@vue/babel-plugin-resolve-type@1.2.5(@babel/core@7.26.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/parser': 7.26.2 + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.13 + postcss: 8.4.49 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/devtools-core@7.6.4(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13)': + dependencies: + '@vue/devtools-kit': 7.6.4 + '@vue/devtools-shared': 7.6.4 + mitt: 3.0.1 + nanoid: 3.3.7 + pathe: 1.1.2 + vite-hot-client: 0.2.3(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + vue: 3.5.13 + transitivePeerDependencies: + - vite + + '@vue/devtools-kit@7.6.4': + dependencies: + '@vue/devtools-shared': 7.6.4 + birpc: 0.2.19 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.1 + + '@vue/devtools-shared@7.6.4': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13)': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13 + + '@vue/shared@3.5.13': {} + + '@vueuse/core@11.3.0(vue@3.5.13)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 11.3.0 + '@vueuse/shared': 11.3.0(vue@3.5.13) + vue-demi: 0.14.10(vue@3.5.13) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@11.3.0': {} + + '@vueuse/shared@11.3.0(vue@3.5.13)': + dependencies: + vue-demi: 0.14.10(vue@3.5.13) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + acorn@8.14.0: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + asynckit@0.4.0: {} + + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001680 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + birpc@0.2.19: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.63 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + + buffer-builder@0.2.0: {} + + buffer-from@1.1.2: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + caniuse-lite@1.0.30001680: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorjs.io@0.5.2: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + confbox@0.1.8: {} + + convert-source-map@2.0.0: {} + + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypto-js@4.2.0: {} + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + decamelize@1.2.0: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + define-lazy-prop@3.0.0: {} + + delayed-stream@1.0.0: {} + + didyoumean@1.2.2: {} + + dijkstrajs@1.0.3: {} + + dlv@1.1.3: {} + + eastasianwidth@0.2.0: {} + + echarts@5.5.1: + dependencies: + tslib: 2.3.0 + zrender: 5.6.0 + + electron-to-chromium@1.5.63: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-stack-parser-es@0.1.5: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@5.0.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + follow-redirects@1.15.9: {} + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-stream@8.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hookable@5.5.3: {} + + html-tags@3.3.1: {} + + human-signals@5.0.0: {} + + immutable@5.0.3: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-stream@3.0.0: {} + + is-what@4.1.16: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.6: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.0: {} + + jsesc@3.0.2: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + kolorist@1.8.0: {} + + lilconfig@2.1.0: {} + + lilconfig@3.1.2: {} + + lines-and-columns@1.2.4: {} + + local-pkg@0.5.1: + dependencies: + mlly: 1.7.3 + pkg-types: 1.2.1 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + lodash@4.17.21: {} + + lru-cache@10.4.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.30.13: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magic-string@0.30.14: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mitt@3.0.1: {} + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.2.1 + ufo: 1.5.4 + + mrmime@2.0.0: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.7: {} + + node-releases@2.0.18: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nprogress@0.2.0: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + pathe@1.1.2: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@2.3.0: {} + + pinia@2.2.6(vue@3.5.13): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13 + vue-demi: 0.14.10(vue@3.5.13) + + pirates@4.0.6: {} + + pkg-types@1.2.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + pngjs@5.0.0: {} + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.1 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + proxy-from-env@1.1.0: {} + + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + + queue-microtask@1.2.3: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + require-directory@2.1.1: {} + + require-main-filename@2.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + + rollup@4.27.3: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.27.3 + '@rollup/rollup-android-arm64': 4.27.3 + '@rollup/rollup-darwin-arm64': 4.27.3 + '@rollup/rollup-darwin-x64': 4.27.3 + '@rollup/rollup-freebsd-arm64': 4.27.3 + '@rollup/rollup-freebsd-x64': 4.27.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.3 + '@rollup/rollup-linux-arm-musleabihf': 4.27.3 + '@rollup/rollup-linux-arm64-gnu': 4.27.3 + '@rollup/rollup-linux-arm64-musl': 4.27.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3 + '@rollup/rollup-linux-riscv64-gnu': 4.27.3 + '@rollup/rollup-linux-s390x-gnu': 4.27.3 + '@rollup/rollup-linux-x64-gnu': 4.27.3 + '@rollup/rollup-linux-x64-musl': 4.27.3 + '@rollup/rollup-win32-arm64-msvc': 4.27.3 + '@rollup/rollup-win32-ia32-msvc': 4.27.3 + '@rollup/rollup-win32-x64-msvc': 4.27.3 + fsevents: 2.3.3 + + run-applescript@7.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + sass-embedded-android-arm64@1.81.0: + optional: true + + sass-embedded-android-arm@1.81.0: + optional: true + + sass-embedded-android-ia32@1.81.0: + optional: true + + sass-embedded-android-riscv64@1.81.0: + optional: true + + sass-embedded-android-x64@1.81.0: + optional: true + + sass-embedded-darwin-arm64@1.81.0: + optional: true + + sass-embedded-darwin-x64@1.81.0: + optional: true + + sass-embedded-linux-arm64@1.81.0: + optional: true + + sass-embedded-linux-arm@1.81.0: + optional: true + + sass-embedded-linux-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-arm64@1.81.0: + optional: true + + sass-embedded-linux-musl-arm@1.81.0: + optional: true + + sass-embedded-linux-musl-ia32@1.81.0: + optional: true + + sass-embedded-linux-musl-riscv64@1.81.0: + optional: true + + sass-embedded-linux-musl-x64@1.81.0: + optional: true + + sass-embedded-linux-riscv64@1.81.0: + optional: true + + sass-embedded-linux-x64@1.81.0: + optional: true + + sass-embedded-win32-arm64@1.81.0: + optional: true + + sass-embedded-win32-ia32@1.81.0: + optional: true + + sass-embedded-win32-x64@1.81.0: + optional: true + + sass-embedded@1.81.0: + dependencies: + '@bufbuild/protobuf': 2.2.2 + buffer-builder: 0.2.0 + colorjs.io: 0.5.2 + immutable: 5.0.3 + rxjs: 7.8.1 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.81.0 + sass-embedded-android-arm64: 1.81.0 + sass-embedded-android-ia32: 1.81.0 + sass-embedded-android-riscv64: 1.81.0 + sass-embedded-android-x64: 1.81.0 + sass-embedded-darwin-arm64: 1.81.0 + sass-embedded-darwin-x64: 1.81.0 + sass-embedded-linux-arm: 1.81.0 + sass-embedded-linux-arm64: 1.81.0 + sass-embedded-linux-ia32: 1.81.0 + sass-embedded-linux-musl-arm: 1.81.0 + sass-embedded-linux-musl-arm64: 1.81.0 + sass-embedded-linux-musl-ia32: 1.81.0 + sass-embedded-linux-musl-riscv64: 1.81.0 + sass-embedded-linux-musl-x64: 1.81.0 + sass-embedded-linux-riscv64: 1.81.0 + sass-embedded-linux-x64: 1.81.0 + sass-embedded-win32-arm64: 1.81.0 + sass-embedded-win32-ia32: 1.81.0 + sass-embedded-win32-x64: 1.81.0 + + scule@1.3.0: {} + + semver@6.3.1: {} + + set-blocking@2.0.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + speakingurl@14.0.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + strip-literal@2.1.0: + dependencies: + js-tokens: 9.0.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + superjson@2.2.1: + dependencies: + copy-anything: 3.0.5 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.1.3 + + sync-message-port@1.1.3: {} + + tailwindcss@3.4.15: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + terser@5.43.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-interface-checker@0.1.13: {} + + tslib@2.3.0: {} + + tslib@2.8.1: {} + + ufo@1.5.4: {} + + unimport@3.13.2(rollup@4.27.3): + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + acorn: 8.14.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.13 + mlly: 1.7.3 + pathe: 1.1.2 + pkg-types: 1.2.1 + scule: 1.3.0 + strip-literal: 2.1.0 + unplugin: 1.16.0 + transitivePeerDependencies: + - rollup + + universalify@2.0.1: {} + + unplugin-auto-import@0.18.5(@vueuse/core@11.3.0(vue@3.5.13))(rollup@4.27.3): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.13 + minimatch: 9.0.5 + unimport: 3.13.2(rollup@4.27.3) + unplugin: 1.16.0 + optionalDependencies: + '@vueuse/core': 11.3.0(vue@3.5.13) + transitivePeerDependencies: + - rollup + + unplugin-vue-components@0.27.5(@babel/parser@7.26.2)(rollup@4.27.3)(vue@3.5.13): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + chokidar: 3.6.0 + debug: 4.3.7 + fast-glob: 3.3.2 + local-pkg: 0.5.1 + magic-string: 0.30.14 + minimatch: 9.0.5 + mlly: 1.7.3 + unplugin: 1.16.0 + vue: 3.5.13 + optionalDependencies: + '@babel/parser': 7.26.2 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin@1.16.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + util-deprecate@1.0.2: {} + + vant@4.9.9(vue@3.5.13): + dependencies: + '@vant/popperjs': 1.3.0 + '@vant/use': 1.6.0(vue@3.5.13) + '@vue/shared': 3.5.13 + vue: 3.5.13 + + varint@6.0.0: {} + + vite-hot-client@0.2.3(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + + vite-plugin-inspect@0.8.8(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.3(rollup@4.27.3) + debug: 4.3.7 + error-stack-parser-es: 0.1.5 + fs-extra: 11.2.0 + open: 10.1.0 + perfect-debounce: 1.0.0 + picocolors: 1.1.1 + sirv: 3.0.0 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + transitivePeerDependencies: + - rollup + - supports-color + + vite-plugin-vue-devtools@7.6.4(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13): + dependencies: + '@vue/devtools-core': 7.6.4(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1))(vue@3.5.13) + '@vue/devtools-kit': 7.6.4 + '@vue/devtools-shared': 7.6.4 + execa: 8.0.1 + sirv: 3.0.0 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + vite-plugin-inspect: 0.8.8(rollup@4.27.3)(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + vite-plugin-vue-inspector: 5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)) + transitivePeerDependencies: + - '@nuxt/kit' + - rollup + - supports-color + - vue + + vite-plugin-vue-inspector@5.2.0(vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1)): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0) + '@vue/compiler-dom': 3.5.13 + kolorist: 1.8.0 + magic-string: 0.30.13 + vite: 5.4.11(sass-embedded@1.81.0)(terser@5.43.1) + transitivePeerDependencies: + - supports-color + + vite@5.4.11(sass-embedded@1.81.0)(terser@5.43.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.27.3 + optionalDependencies: + fsevents: 2.3.3 + sass-embedded: 1.81.0 + terser: 5.43.1 + + vue-demi@0.13.11(vue@3.5.13): + dependencies: + vue: 3.5.13 + + vue-demi@0.14.10(vue@3.5.13): + dependencies: + vue: 3.5.13 + + vue-echarts@7.0.3(@vue/runtime-core@3.5.13)(echarts@5.5.1)(vue@3.5.13): + dependencies: + echarts: 5.5.1 + vue: 3.5.13 + vue-demi: 0.13.11(vue@3.5.13) + optionalDependencies: + '@vue/runtime-core': 3.5.13 + transitivePeerDependencies: + - '@vue/composition-api' + + vue-router@4.4.5(vue@3.5.13): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13 + + vue@3.5.13: + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13) + '@vue/shared': 3.5.13 + + webpack-virtual-modules@0.6.2: {} + + which-module@2.0.1: {} + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + y18n@4.0.3: {} + + yallist@3.1.1: {} + + yaml@2.6.1: {} + + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + zrender@5.6.0: + dependencies: + tslib: 2.3.0 diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/image/clickCaptcha.jpg b/public/image/clickCaptcha.jpg new file mode 100644 index 0000000..8846f9a Binary files /dev/null and b/public/image/clickCaptcha.jpg differ diff --git a/public/image/help/13.jpg b/public/image/help/13.jpg new file mode 100644 index 0000000..6241387 Binary files /dev/null and b/public/image/help/13.jpg differ diff --git a/public/image/help/14.jpg b/public/image/help/14.jpg new file mode 100644 index 0000000..7f26b0c Binary files /dev/null and b/public/image/help/14.jpg differ diff --git a/public/image/help/15.jpg b/public/image/help/15.jpg new file mode 100644 index 0000000..1bae74d Binary files /dev/null and b/public/image/help/15.jpg differ diff --git a/public/image/help/18.jpg b/public/image/help/18.jpg new file mode 100644 index 0000000..7e6b530 Binary files /dev/null and b/public/image/help/18.jpg differ diff --git a/public/image/help/19.jpg b/public/image/help/19.jpg new file mode 100644 index 0000000..070d849 Binary files /dev/null and b/public/image/help/19.jpg differ diff --git a/public/image/help/20.jpg b/public/image/help/20.jpg new file mode 100644 index 0000000..2c296cb Binary files /dev/null and b/public/image/help/20.jpg differ diff --git a/public/image/help/21.jpg b/public/image/help/21.jpg new file mode 100644 index 0000000..9615b9d Binary files /dev/null and b/public/image/help/21.jpg differ diff --git a/public/image/help/22.jpg b/public/image/help/22.jpg new file mode 100644 index 0000000..753a147 Binary files /dev/null and b/public/image/help/22.jpg differ diff --git a/public/image/help/23.jpg b/public/image/help/23.jpg new file mode 100644 index 0000000..e093d19 Binary files /dev/null and b/public/image/help/23.jpg differ diff --git a/public/image/help/24.jpg b/public/image/help/24.jpg new file mode 100644 index 0000000..0a53d17 Binary files /dev/null and b/public/image/help/24.jpg differ diff --git a/public/image/help/25.jpg b/public/image/help/25.jpg new file mode 100644 index 0000000..142d87a Binary files /dev/null and b/public/image/help/25.jpg differ diff --git a/public/image/help/direct_earnings.jpg b/public/image/help/direct_earnings.jpg new file mode 100644 index 0000000..853b971 Binary files /dev/null and b/public/image/help/direct_earnings.jpg differ diff --git a/public/image/help/invite-earnings.jpg b/public/image/help/invite-earnings.jpg new file mode 100644 index 0000000..280ef09 Binary files /dev/null and b/public/image/help/invite-earnings.jpg differ diff --git a/public/image/help/invite-step1.jpg b/public/image/help/invite-step1.jpg new file mode 100644 index 0000000..8c5d608 Binary files /dev/null and b/public/image/help/invite-step1.jpg differ diff --git a/public/image/help/invite-step2.jpg b/public/image/help/invite-step2.jpg new file mode 100644 index 0000000..43eaa78 Binary files /dev/null and b/public/image/help/invite-step2.jpg differ diff --git a/public/image/help/invite-step3.jpg b/public/image/help/invite-step3.jpg new file mode 100644 index 0000000..4d965f3 Binary files /dev/null and b/public/image/help/invite-step3.jpg differ diff --git a/public/image/help/report-calculation.jpg b/public/image/help/report-calculation.jpg new file mode 100644 index 0000000..5ddb0e4 Binary files /dev/null and b/public/image/help/report-calculation.jpg differ diff --git a/public/image/help/report-cost.jpg b/public/image/help/report-cost.jpg new file mode 100644 index 0000000..03e3438 Binary files /dev/null and b/public/image/help/report-cost.jpg differ diff --git a/public/image/help/report-efficiency.jpg b/public/image/help/report-efficiency.jpg new file mode 100644 index 0000000..67ac4d5 Binary files /dev/null and b/public/image/help/report-efficiency.jpg differ diff --git a/public/image/help/report-push.jpg b/public/image/help/report-push.jpg new file mode 100644 index 0000000..67b17dd Binary files /dev/null and b/public/image/help/report-push.jpg differ diff --git a/public/image/help/report-secret-1.jpg b/public/image/help/report-secret-1.jpg new file mode 100644 index 0000000..571889f Binary files /dev/null and b/public/image/help/report-secret-1.jpg differ diff --git a/public/image/help/report-secret-2.jpg b/public/image/help/report-secret-2.jpg new file mode 100644 index 0000000..c147691 Binary files /dev/null and b/public/image/help/report-secret-2.jpg differ diff --git a/public/image/help/report-step1.jpg b/public/image/help/report-step1.jpg new file mode 100644 index 0000000..7ae6521 Binary files /dev/null and b/public/image/help/report-step1.jpg differ diff --git a/public/image/help/report-step2.jpg b/public/image/help/report-step2.jpg new file mode 100644 index 0000000..4895c10 Binary files /dev/null and b/public/image/help/report-step2.jpg differ diff --git a/public/image/help/report-step3.jpg b/public/image/help/report-step3.jpg new file mode 100644 index 0000000..32595f7 Binary files /dev/null and b/public/image/help/report-step3.jpg differ diff --git a/public/image/help/report-step4.jpg b/public/image/help/report-step4.jpg new file mode 100644 index 0000000..7200a29 Binary files /dev/null and b/public/image/help/report-step4.jpg differ diff --git a/public/image/help/report-step5.jpg b/public/image/help/report-step5.jpg new file mode 100644 index 0000000..163c528 Binary files /dev/null and b/public/image/help/report-step5.jpg differ diff --git a/public/image/help/report-types.jpg b/public/image/help/report-types.jpg new file mode 100644 index 0000000..e715acc Binary files /dev/null and b/public/image/help/report-types.jpg differ diff --git a/public/image/help/vip-guide.jpg b/public/image/help/vip-guide.jpg new file mode 100644 index 0000000..aac5868 Binary files /dev/null and b/public/image/help/vip-guide.jpg differ diff --git a/public/image/shot_nonal.png b/public/image/shot_nonal.png new file mode 100644 index 0000000..5265a90 Binary files /dev/null and b/public/image/shot_nonal.png differ diff --git a/public/image/shot_svip.png b/public/image/shot_svip.png new file mode 100644 index 0000000..f636ea0 Binary files /dev/null and b/public/image/shot_svip.png differ diff --git a/public/image/shot_vip.png b/public/image/shot_vip.png new file mode 100644 index 0000000..0c15cb3 Binary files /dev/null and b/public/image/shot_vip.png differ diff --git a/public/inquire_icons/beijianguanrenyuan.svg b/public/inquire_icons/beijianguanrenyuan.svg new file mode 100644 index 0000000..5d5f873 --- /dev/null +++ b/public/inquire_icons/beijianguanrenyuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/default.svg b/public/inquire_icons/default.svg new file mode 100644 index 0000000..8ac7949 --- /dev/null +++ b/public/inquire_icons/default.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/public/inquire_icons/fengxianxingwei.svg b/public/inquire_icons/fengxianxingwei.svg new file mode 100644 index 0000000..e2cb3ef --- /dev/null +++ b/public/inquire_icons/fengxianxingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/huankuanyali.svg b/public/inquire_icons/huankuanyali.svg new file mode 100644 index 0000000..31146ab --- /dev/null +++ b/public/inquire_icons/huankuanyali.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/hunyinzhuangtai.svg b/public/inquire_icons/hunyinzhuangtai.svg new file mode 100644 index 0000000..eb1a3d1 --- /dev/null +++ b/public/inquire_icons/hunyinzhuangtai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaishenqing.svg b/public/inquire_icons/jiedaishenqing.svg new file mode 100644 index 0000000..4e1224c --- /dev/null +++ b/public/inquire_icons/jiedaishenqing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaiweiyue.svg b/public/inquire_icons/jiedaiweiyue.svg new file mode 100644 index 0000000..7a218f4 --- /dev/null +++ b/public/inquire_icons/jiedaiweiyue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/jiedaixingwei.svg b/public/inquire_icons/jiedaixingwei.svg new file mode 100644 index 0000000..948860f --- /dev/null +++ b/public/inquire_icons/jiedaixingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/mingxiacheliang.svg b/public/inquire_icons/mingxiacheliang.svg new file mode 100644 index 0000000..7b37237 --- /dev/null +++ b/public/inquire_icons/mingxiacheliang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/minshianjianguanli.svg b/public/inquire_icons/minshianjianguanli.svg new file mode 100644 index 0000000..da8fbf1 --- /dev/null +++ b/public/inquire_icons/minshianjianguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/renqiguanxi.svg b/public/inquire_icons/renqiguanxi.svg new file mode 100644 index 0000000..24b3bb5 --- /dev/null +++ b/public/inquire_icons/renqiguanxi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/shixinren.svg b/public/inquire_icons/shixinren.svg new file mode 100644 index 0000000..6d1c734 --- /dev/null +++ b/public/inquire_icons/shixinren.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/sifasheyu.svg b/public/inquire_icons/sifasheyu.svg new file mode 100644 index 0000000..31392f3 --- /dev/null +++ b/public/inquire_icons/sifasheyu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xianzhigaoxiaofei.svg b/public/inquire_icons/xianzhigaoxiaofei.svg new file mode 100644 index 0000000..8e2d6e3 --- /dev/null +++ b/public/inquire_icons/xianzhigaoxiaofei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xingshi.svg b/public/inquire_icons/xingshi.svg new file mode 100644 index 0000000..60f2e06 --- /dev/null +++ b/public/inquire_icons/xingshi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/xingzhengfuwu.svg b/public/inquire_icons/xingzhengfuwu.svg new file mode 100644 index 0000000..4c31393 --- /dev/null +++ b/public/inquire_icons/xingzhengfuwu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/yuepeichang.svg b/public/inquire_icons/yuepeichang.svg new file mode 100644 index 0000000..740d0f3 --- /dev/null +++ b/public/inquire_icons/yuepeichang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/inquire_icons/zhixinganjian.svg b/public/inquire_icons/zhixinganjian.svg new file mode 100644 index 0000000..be32352 --- /dev/null +++ b/public/inquire_icons/zhixinganjian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/logo.jpg b/public/logo.jpg new file mode 100644 index 0000000..517584e Binary files /dev/null and b/public/logo.jpg differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..def87e1 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,50 @@ +User-agent: * +Allow: / + +# 允许访问主要页面 +Allow: /agent +Allow: /help +Allow: /help/guide +Allow: /example +Allow: /service +Allow: /privacyPolicy +Allow: /userAgreement +Allow: /agentManageAgreement +Allow: /agentSerivceAgreement +Allow: /authorization + +# 禁止访问私有页面 +Disallow: /login +Disallow: /me +Disallow: /historyQuery +Disallow: /promote +Disallow: /withdraw +Disallow: /report +Disallow: /inquire/ +Disallow: /payment/ +Disallow: /agent/promoteDetails +Disallow: /agent/rewardsDetails +Disallow: /agent/promote +Disallow: /agent/invitation +Disallow: /agent/agentVip +Disallow: /agent/vipApply +Disallow: /agent/vipConfig +Disallow: /agent/withdraw +Disallow: /agent/withdrawDetails +Disallow: /agent/invitationAgentApply/ +Disallow: /agent/subordinateList +Disallow: /agent/subordinateDetail/ + +# 禁止访问API接口 +Disallow: /api/ + +# 禁止访问静态资源目录(可选) +Disallow: /assets/ +Disallow: /js/ +Disallow: /css/ + +# 网站地图 +Sitemap: https://www.zhinengcha.cn/sitemap.xml + +# 爬取延迟(毫秒) +Crawl-delay: 1 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..2938d05 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,40 @@ +{ + "name": "天远数据 - 大数据风险报告查询与代理管理平台", + "short_name": "天远数据", + "description": "大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#3498db", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/favicon-16x16.png", + "sizes": "16x16", + "type": "image/png" + }, + { + "src": "/favicon-32x32.png", + "sizes": "32x32", + "type": "image/png" + }, + { + "src": "/apple-touch-icon.png", + "sizes": "180x180", + "type": "image/png" + }, + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "categories": ["business", "finance", "utilities"], + "lang": "zh-CN", + "dir": "ltr" +} diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..261c820 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,69 @@ + + + + https://www.zhinengcha.cn/ + 2025-08-01 + daily + 1.0 + + + https://www.zhinengcha.cn/agent + 2025-08-01 + weekly + 0.8 + + + https://www.zhinengcha.cn/help + 2025-08-01 + monthly + 0.7 + + + https://www.zhinengcha.cn/help/guide + 2025-08-01 + monthly + 0.6 + + + https://www.zhinengcha.cn/example + 2025-08-01 + monthly + 0.6 + + + https://www.zhinengcha.cn/service + 2025-08-01 + monthly + 0.5 + + + https://www.zhinengcha.cn/privacyPolicy + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/userAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/agentManageAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/agentSerivceAgreement + 2025-08-01 + yearly + 0.3 + + + https://www.zhinengcha.cn/authorization + 2025-08-01 + yearly + 0.3 + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..c360fd0 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..860ee29 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,15 @@ +import axios from "axios"; + +// 获取API基础URL +const baseURL = import.meta.env.VITE_API_BASE_URL || ""; + +// 注销账号API +export function cancelAccount() { + return axios({ + method: "post", + url: `${baseURL}/api/user/cancel`, + headers: { + Authorization: `Bearer ${localStorage.getItem("token")}`, + }, + }); +} diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..cdad13a --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,26 @@ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} +html { + margin: auto !important; + @apply max-w-lg; + /* 确保在缩放时保持响应式 */ + min-width: 320px; +} +body { + background-color: #f8f8f8; + min-height: 100vh; + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/images/banner.png b/src/assets/images/banner.png new file mode 100644 index 0000000..9c1f1dd Binary files /dev/null and b/src/assets/images/banner.png differ diff --git a/src/assets/images/bg_2.png b/src/assets/images/bg_2.png new file mode 100644 index 0000000..9b3befe Binary files /dev/null and b/src/assets/images/bg_2.png differ diff --git a/src/assets/images/bg_icon.png b/src/assets/images/bg_icon.png new file mode 100644 index 0000000..44bd467 Binary files /dev/null and b/src/assets/images/bg_icon.png differ diff --git a/src/assets/images/company_bg.png b/src/assets/images/company_bg.png new file mode 100644 index 0000000..cc76599 Binary files /dev/null and b/src/assets/images/company_bg.png differ diff --git a/src/assets/images/empty.svg b/src/assets/images/empty.svg new file mode 100644 index 0000000..fbecc14 --- /dev/null +++ b/src/assets/images/empty.svg @@ -0,0 +1,75 @@ + + 空空如也 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/images/gdrqgx_icon.svg b/src/assets/images/gdrqgx_icon.svg new file mode 100644 index 0000000..fa64f1a --- /dev/null +++ b/src/assets/images/gdrqgx_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/grbl_icon.svg b/src/assets/images/grbl_icon.svg new file mode 100644 index 0000000..09f3a67 --- /dev/null +++ b/src/assets/images/grbl_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/grss_icon.svg b/src/assets/images/grss_icon.svg new file mode 100644 index 0000000..2c5296e --- /dev/null +++ b/src/assets/images/grss_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/head_shot.webp b/src/assets/images/head_shot.webp new file mode 100644 index 0000000..50a540e Binary files /dev/null and b/src/assets/images/head_shot.webp differ diff --git a/src/assets/images/homelayout/ts.png b/src/assets/images/homelayout/ts.png new file mode 100644 index 0000000..ea73a67 Binary files /dev/null and b/src/assets/images/homelayout/ts.png differ diff --git a/src/assets/images/icon_1.png b/src/assets/images/icon_1.png new file mode 100644 index 0000000..7298238 Binary files /dev/null and b/src/assets/images/icon_1.png differ diff --git a/src/assets/images/icon_2.png b/src/assets/images/icon_2.png new file mode 100644 index 0000000..964afe8 Binary files /dev/null and b/src/assets/images/icon_2.png differ diff --git a/src/assets/images/icon_3.png b/src/assets/images/icon_3.png new file mode 100644 index 0000000..e1419b2 Binary files /dev/null and b/src/assets/images/icon_3.png differ diff --git a/src/assets/images/icon_4.png b/src/assets/images/icon_4.png new file mode 100644 index 0000000..ff225f2 Binary files /dev/null and b/src/assets/images/icon_4.png differ diff --git a/src/assets/images/icon_bg.svg b/src/assets/images/icon_bg.svg new file mode 100644 index 0000000..fcd561c --- /dev/null +++ b/src/assets/images/icon_bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_bz.svg b/src/assets/images/icon_bz.svg new file mode 100644 index 0000000..4daa201 --- /dev/null +++ b/src/assets/images/icon_bz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_cwhy.svg b/src/assets/images/icon_cwhy.svg new file mode 100644 index 0000000..71bb55f --- /dev/null +++ b/src/assets/images/icon_cwhy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_index_apistore.svg b/src/assets/images/icon_index_apistore.svg new file mode 100644 index 0000000..da95d6e --- /dev/null +++ b/src/assets/images/icon_index_apistore.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_index_chacheliang.svg b/src/assets/images/icon_index_chacheliang.svg new file mode 100644 index 0000000..2bff239 --- /dev/null +++ b/src/assets/images/icon_index_chacheliang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_lxkf.svg b/src/assets/images/icon_lxkf.svg new file mode 100644 index 0000000..75f0724 --- /dev/null +++ b/src/assets/images/icon_lxkf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_friends.svg b/src/assets/images/icon_share_friends.svg new file mode 100644 index 0000000..8e8ccb9 --- /dev/null +++ b/src/assets/images/icon_share_friends.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_img.svg b/src/assets/images/icon_share_img.svg new file mode 100644 index 0000000..e71bc1f --- /dev/null +++ b/src/assets/images/icon_share_img.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_url.svg b/src/assets/images/icon_share_url.svg new file mode 100644 index 0000000..0469cfa --- /dev/null +++ b/src/assets/images/icon_share_url.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_share_wechat.svg b/src/assets/images/icon_share_wechat.svg new file mode 100644 index 0000000..ecbc839 --- /dev/null +++ b/src/assets/images/icon_share_wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_srmx.svg b/src/assets/images/icon_srmx.svg new file mode 100644 index 0000000..f29166b --- /dev/null +++ b/src/assets/images/icon_srmx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_tg.svg b/src/assets/images/icon_tg.svg new file mode 100644 index 0000000..7e39ed9 --- /dev/null +++ b/src/assets/images/icon_tg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_wytx.svg b/src/assets/images/icon_wytx.svg new file mode 100644 index 0000000..33ef556 --- /dev/null +++ b/src/assets/images/icon_wytx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/icon_xj.svg b/src/assets/images/icon_xj.svg new file mode 100644 index 0000000..bb43ad0 --- /dev/null +++ b/src/assets/images/icon_xj.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/index/Frame (1).png b/src/assets/images/index/Frame (1).png new file mode 100644 index 0000000..c2d5212 Binary files /dev/null and b/src/assets/images/index/Frame (1).png differ diff --git a/src/assets/images/index/Frame.png b/src/assets/images/index/Frame.png new file mode 100644 index 0000000..fbd1202 Binary files /dev/null and b/src/assets/images/index/Frame.png differ diff --git a/src/assets/images/index/banner.png b/src/assets/images/index/banner.png new file mode 100644 index 0000000..be948a0 Binary files /dev/null and b/src/assets/images/index/banner.png differ diff --git a/src/assets/images/index/bg_icon.png b/src/assets/images/index/bg_icon.png new file mode 100644 index 0000000..f482f23 Binary files /dev/null and b/src/assets/images/index/bg_icon.png differ diff --git a/src/assets/images/index/bzzx.png b/src/assets/images/index/bzzx.png new file mode 100644 index 0000000..8a615dd Binary files /dev/null and b/src/assets/images/index/bzzx.png differ diff --git a/src/assets/images/index/company_bg.png b/src/assets/images/index/company_bg.png new file mode 100644 index 0000000..ea3e401 Binary files /dev/null and b/src/assets/images/index/company_bg.png differ diff --git a/src/assets/images/index/cwhy.png b/src/assets/images/index/cwhy.png new file mode 100644 index 0000000..e39b62b Binary files /dev/null and b/src/assets/images/index/cwhy.png differ diff --git a/src/assets/images/index/loan_check_bg.png b/src/assets/images/index/loan_check_bg.png new file mode 100644 index 0000000..1b8af6d Binary files /dev/null and b/src/assets/images/index/loan_check_bg.png differ diff --git a/src/assets/images/index/lxkf.png b/src/assets/images/index/lxkf.png new file mode 100644 index 0000000..50ecb80 Binary files /dev/null and b/src/assets/images/index/lxkf.png differ diff --git a/src/assets/images/index/personal_data_bg.png b/src/assets/images/index/personal_data_bg.png new file mode 100644 index 0000000..3b08d2d Binary files /dev/null and b/src/assets/images/index/personal_data_bg.png differ diff --git a/src/assets/images/index/right.png b/src/assets/images/index/right.png new file mode 100644 index 0000000..fbd1202 Binary files /dev/null and b/src/assets/images/index/right.png differ diff --git a/src/assets/images/index/srmx.png b/src/assets/images/index/srmx.png new file mode 100644 index 0000000..5d7f883 Binary files /dev/null and b/src/assets/images/index/srmx.png differ diff --git a/src/assets/images/index/tgbg.png b/src/assets/images/index/tgbg.png new file mode 100644 index 0000000..ae0017d Binary files /dev/null and b/src/assets/images/index/tgbg.png differ diff --git a/src/assets/images/index/wdbg.png b/src/assets/images/index/wdbg.png new file mode 100644 index 0000000..b97beaa Binary files /dev/null and b/src/assets/images/index/wdbg.png differ diff --git a/src/assets/images/index/wytx.png b/src/assets/images/index/wytx.png new file mode 100644 index 0000000..1f06ada Binary files /dev/null and b/src/assets/images/index/wytx.png differ diff --git a/src/assets/images/index/yqhy.png b/src/assets/images/index/yqhy.png new file mode 100644 index 0000000..e50f1fc Binary files /dev/null and b/src/assets/images/index/yqhy.png differ diff --git a/src/assets/images/index_icon_1.png b/src/assets/images/index_icon_1.png new file mode 100644 index 0000000..a0e3ef9 Binary files /dev/null and b/src/assets/images/index_icon_1.png differ diff --git a/src/assets/images/index_icon_2.png b/src/assets/images/index_icon_2.png new file mode 100644 index 0000000..63d9d00 Binary files /dev/null and b/src/assets/images/index_icon_2.png differ diff --git a/src/assets/images/index_icon_3.png b/src/assets/images/index_icon_3.png new file mode 100644 index 0000000..537c24f Binary files /dev/null and b/src/assets/images/index_icon_3.png differ diff --git a/src/assets/images/index_icon_4.png b/src/assets/images/index_icon_4.png new file mode 100644 index 0000000..e4fde09 Binary files /dev/null and b/src/assets/images/index_icon_4.png differ diff --git a/src/assets/images/index_icon_4_1.png b/src/assets/images/index_icon_4_1.png new file mode 100644 index 0000000..cd62356 Binary files /dev/null and b/src/assets/images/index_icon_4_1.png differ diff --git a/src/assets/images/index_icon_6.png b/src/assets/images/index_icon_6.png new file mode 100644 index 0000000..bd7f950 Binary files /dev/null and b/src/assets/images/index_icon_6.png differ diff --git a/src/assets/images/invitation.png b/src/assets/images/invitation.png new file mode 100644 index 0000000..183a516 Binary files /dev/null and b/src/assets/images/invitation.png differ diff --git a/src/assets/images/invitation_agent_apply.png b/src/assets/images/invitation_agent_apply.png new file mode 100644 index 0000000..63fff5c Binary files /dev/null and b/src/assets/images/invitation_agent_apply.png differ diff --git a/src/assets/images/llqdk.jpg b/src/assets/images/llqdk.jpg new file mode 100644 index 0000000..2966112 Binary files /dev/null and b/src/assets/images/llqdk.jpg differ diff --git a/src/assets/images/loan_check_bg.png b/src/assets/images/loan_check_bg.png new file mode 100644 index 0000000..9df947d Binary files /dev/null and b/src/assets/images/loan_check_bg.png differ diff --git a/src/assets/images/login_bg.png b/src/assets/images/login_bg.png new file mode 100644 index 0000000..977de0e Binary files /dev/null and b/src/assets/images/login_bg.png differ diff --git a/src/assets/images/logo.png b/src/assets/images/logo.png new file mode 100644 index 0000000..af1fe9c Binary files /dev/null and b/src/assets/images/logo.png differ diff --git a/src/assets/images/mxcl_icon.svg b/src/assets/images/mxcl_icon.svg new file mode 100644 index 0000000..c21e26a --- /dev/null +++ b/src/assets/images/mxcl_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/pendding.svg b/src/assets/images/pendding.svg new file mode 100644 index 0000000..2a182b1 --- /dev/null +++ b/src/assets/images/pendding.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/personal_data_bg.png b/src/assets/images/personal_data_bg.png new file mode 100644 index 0000000..d353b87 Binary files /dev/null and b/src/assets/images/personal_data_bg.png differ diff --git a/src/assets/images/promote_bg.png b/src/assets/images/promote_bg.png new file mode 100644 index 0000000..9087024 Binary files /dev/null and b/src/assets/images/promote_bg.png differ diff --git a/src/assets/images/public_security_record_icon.png b/src/assets/images/public_security_record_icon.png new file mode 100644 index 0000000..6fe667f Binary files /dev/null and b/src/assets/images/public_security_record_icon.png differ diff --git a/src/assets/images/qyss_icon.svg b/src/assets/images/qyss_icon.svg new file mode 100644 index 0000000..d460c08 --- /dev/null +++ b/src/assets/images/qyss_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/rchy_icon.svg b/src/assets/images/rchy_icon.svg new file mode 100644 index 0000000..4c67a50 --- /dev/null +++ b/src/assets/images/rchy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sfzeys_icon.svg b/src/assets/images/sfzeys_icon.svg new file mode 100644 index 0000000..284a11b --- /dev/null +++ b/src/assets/images/sfzeys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjeck_icon.svg b/src/assets/images/sjeck_icon.svg new file mode 100644 index 0000000..55ceaef --- /dev/null +++ b/src/assets/images/sjeck_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjeys_icon.svg b/src/assets/images/sjeys_icon.svg new file mode 100644 index 0000000..c4b56a4 --- /dev/null +++ b/src/assets/images/sjeys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjhmfx_icon.svg b/src/assets/images/sjhmfx_icon.svg new file mode 100644 index 0000000..836f8c2 --- /dev/null +++ b/src/assets/images/sjhmfx_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjsys_icon.svg b/src/assets/images/sjsys_icon.svg new file mode 100644 index 0000000..3cd4a58 --- /dev/null +++ b/src/assets/images/sjsys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/sjzwsc_icon.svg b/src/assets/images/sjzwsc_icon.svg new file mode 100644 index 0000000..8fd2103 --- /dev/null +++ b/src/assets/images/sjzwsc_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/srhy_icon.svg b/src/assets/images/srhy_icon.svg new file mode 100644 index 0000000..1588794 --- /dev/null +++ b/src/assets/images/srhy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/tg_qrcode_1.png b/src/assets/images/tg_qrcode_1.png new file mode 100644 index 0000000..1157bb4 Binary files /dev/null and b/src/assets/images/tg_qrcode_1.png differ diff --git a/src/assets/images/tg_qrcode_2.jpg b/src/assets/images/tg_qrcode_2.jpg new file mode 100644 index 0000000..070d849 Binary files /dev/null and b/src/assets/images/tg_qrcode_2.jpg differ diff --git a/src/assets/images/tg_qrcode_3.jpg b/src/assets/images/tg_qrcode_3.jpg new file mode 100644 index 0000000..2c296cb Binary files /dev/null and b/src/assets/images/tg_qrcode_3.jpg differ diff --git a/src/assets/images/tg_qrcode_4.jpg b/src/assets/images/tg_qrcode_4.jpg new file mode 100644 index 0000000..9615b9d Binary files /dev/null and b/src/assets/images/tg_qrcode_4.jpg differ diff --git a/src/assets/images/tg_qrcode_5.jpg b/src/assets/images/tg_qrcode_5.jpg new file mode 100644 index 0000000..753a147 Binary files /dev/null and b/src/assets/images/tg_qrcode_5.jpg differ diff --git a/src/assets/images/tg_qrcode_6.jpg b/src/assets/images/tg_qrcode_6.jpg new file mode 100644 index 0000000..e093d19 Binary files /dev/null and b/src/assets/images/tg_qrcode_6.jpg differ diff --git a/src/assets/images/tg_qrcode_7.jpg b/src/assets/images/tg_qrcode_7.jpg new file mode 100644 index 0000000..0a53d17 Binary files /dev/null and b/src/assets/images/tg_qrcode_7.jpg differ diff --git a/src/assets/images/tg_qrcode_8.jpg b/src/assets/images/tg_qrcode_8.jpg new file mode 100644 index 0000000..142d87a Binary files /dev/null and b/src/assets/images/tg_qrcode_8.jpg differ diff --git a/src/assets/images/vip_banner.png b/src/assets/images/vip_banner.png new file mode 100644 index 0000000..5de629d Binary files /dev/null and b/src/assets/images/vip_banner.png differ diff --git a/src/assets/images/vip_bg.png b/src/assets/images/vip_bg.png new file mode 100644 index 0000000..0a30280 Binary files /dev/null and b/src/assets/images/vip_bg.png differ diff --git a/src/assets/images/xlhy_icon.svg b/src/assets/images/xlhy_icon.svg new file mode 100644 index 0000000..e0d7292 --- /dev/null +++ b/src/assets/images/xlhy_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/xunihaoma_icon.svg b/src/assets/images/xunihaoma_icon.svg new file mode 100644 index 0000000..55ceaef --- /dev/null +++ b/src/assets/images/xunihaoma_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhk4ys_icon.svg b/src/assets/images/yhk4ys_icon.svg new file mode 100644 index 0000000..7c7549f --- /dev/null +++ b/src/assets/images/yhk4ys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhkhmd_icon.svg b/src/assets/images/yhkhmd_icon.svg new file mode 100644 index 0000000..a9707df --- /dev/null +++ b/src/assets/images/yhkhmd_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yhksys_icon.svg b/src/assets/images/yhksys_icon.svg new file mode 100644 index 0000000..bbfbc02 --- /dev/null +++ b/src/assets/images/yhksys_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/yq_qrcode_1.png b/src/assets/images/yq_qrcode_1.png new file mode 100644 index 0000000..d8d4fcc Binary files /dev/null and b/src/assets/images/yq_qrcode_1.png differ diff --git a/src/assets/images/zrrsczt_icon.svg b/src/assets/images/zrrsczt_icon.svg new file mode 100644 index 0000000..64d75cb --- /dev/null +++ b/src/assets/images/zrrsczt_icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..aa49276 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,30 @@ +@import "./base.css"; +@import "./nprogress.css"; +@import "./vant-theme.css"; +@tailwind base; +@tailwind components; +@tailwind utilities; +#app { + margin: 0 auto; + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; + padding: 3px; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} +.card { + @apply shadow rounded-xl bg-white p-6; +} +.ltitle { + @apply mx-auto mt-2 w-64 border rounded-3xl bg-gradient-to-r from-blue-400 via-green-500 to-teal-500 py-2 text-center text-white font-bold; +} diff --git a/src/assets/nprogress.css b/src/assets/nprogress.css new file mode 100644 index 0000000..5c49dc2 --- /dev/null +++ b/src/assets/nprogress.css @@ -0,0 +1,10 @@ +/* 进度条颜色 */ +#nprogress .bar { + background: #a22525; /* 主题色 */ + height: 4px; /* 修改高度 */ +} + +/* 圆圈颜色 */ +#nprogress .peg { + box-shadow: 0 0 10px #a22525, 0 0 5px #a22525; +} diff --git a/src/assets/uni-webview.js b/src/assets/uni-webview.js new file mode 100644 index 0000000..a3ae2b9 --- /dev/null +++ b/src/assets/uni-webview.js @@ -0,0 +1 @@ +!function (e, n) { "object" == typeof exports && "undefined" != typeof module ? module.exports = n() : "function" == typeof define && define.amd ? define(n) : (e = e || self).uni = n() }(this, (function () { "use strict"; try { var e = {}; Object.defineProperty(e, "passive", { get: function () { !0 } }), window.addEventListener("test-passive", null, e) } catch (e) { } var n = Object.prototype.hasOwnProperty; function i(e, i) { return n.call(e, i) } var t = []; function r() { return window.__dcloud_weex_postMessage || window.__dcloud_weex_ } var o = function (e, n) { var i = { options: { timestamp: +new Date }, name: e, arg: n }; if (r()) { if ("postMessage" === e) { var o = { data: [n] }; return window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessage(o) : window.__dcloud_weex_.postMessage(JSON.stringify(o)) } var a = { type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } }; window.__dcloud_weex_postMessage ? window.__dcloud_weex_postMessageToService(a) : window.__dcloud_weex_.postMessageToService(JSON.stringify(a)) } if (!window.plus) return window.parent.postMessage({ type: "WEB_INVOKE_APPSERVICE", data: i, pageId: "" }, "*"); if (0 === t.length) { var d = plus.webview.currentWebview(); if (!d) throw new Error("plus.webview.currentWebview() is undefined"); var s = d.parent(), w = ""; w = s ? s.id : d.id, t.push(w) } if (plus.webview.getWebviewById("__uniapp__service")) plus.webview.postMessageToUniNView({ type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } }, "__uniapp__service"); else { var u = JSON.stringify(i); plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE", '",').concat(u, ",").concat(JSON.stringify(t), ");")) } }, a = { navigateTo: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("navigateTo", { url: encodeURI(n) }) }, navigateBack: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.delta; o("navigateBack", { delta: parseInt(n) || 1 }) }, switchTab: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("switchTab", { url: encodeURI(n) }) }, reLaunch: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("reLaunch", { url: encodeURI(n) }) }, redirectTo: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n = e.url; o("redirectTo", { url: encodeURI(n) }) }, getEnv: function (e) { r() ? e({ nvue: !0 }) : window.plus ? e({ plus: !0 }) : e({ h5: !0 }) }, postMessage: function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; o("postMessage", e.data || {}) } }, d = /uni-app/i.test(navigator.userAgent), s = /Html5Plus/i.test(navigator.userAgent), w = /complete|loaded|interactive/; var u = window.my && navigator.userAgent.indexOf(["t", "n", "e", "i", "l", "C", "y", "a", "p", "i", "l", "A"].reverse().join("")) > -1; var g = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent); var v = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var c = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent); var m = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var p = window.qa && /quickapp/i.test(navigator.userAgent); var f = window.ks && window.ks.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var l = window.tt && window.tt.miniProgram && /Lark|Feishu/i.test(navigator.userAgent); var _ = window.jd && window.jd.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/i.test(navigator.userAgent); var E = window.xhs && window.xhs.miniProgram && /xhsminiapp/i.test(navigator.userAgent); for (var h, P = function () { window.UniAppJSBridge = !0, document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady", { bubbles: !0, cancelable: !0 })) }, b = [function (e) { if (d || s) return window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document.addEventListener("DOMContentLoaded", e) : window.plus && w.test(document.readyState) ? setTimeout(e, 0) : document.addEventListener("plusready", e), a }, function (e) { if (m) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram }, function (e) { if (v) return window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram }, function (e) { if (u) { document.addEventListener("DOMContentLoaded", e); var n = window.my; return { navigateTo: n.navigateTo, navigateBack: n.navigateBack, switchTab: n.switchTab, reLaunch: n.reLaunch, redirectTo: n.redirectTo, postMessage: n.postMessage, getEnv: n.getEnv } } }, function (e) { if (g) return document.addEventListener("DOMContentLoaded", e), window.swan.webView }, function (e) { if (c) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram }, function (e) { if (p) { window.QaJSBridge && window.QaJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("QaJSBridgeReady", e); var n = window.qa; return { navigateTo: n.navigateTo, navigateBack: n.navigateBack, switchTab: n.switchTab, reLaunch: n.reLaunch, redirectTo: n.redirectTo, postMessage: n.postMessage, getEnv: n.getEnv } } }, function (e) { if (f) return window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, 0) : document.addEventListener("WeixinJSBridgeReady", e), window.ks.miniProgram }, function (e) { if (l) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram }, function (e) { if (_) return window.JDJSBridgeReady && window.JDJSBridgeReady.invoke ? setTimeout(e, 0) : document.addEventListener("JDJSBridgeReady", e), window.jd.miniProgram }, function (e) { if (E) return window.xhs.miniProgram }, function (e) { return document.addEventListener("DOMContentLoaded", e), a }], y = 0; y < b.length && !(h = b[y](P)); y++); h || (h = {}); var B = "undefined" != typeof uni ? uni : {}; if (!B.navigateTo) for (var S in h) i(h, S) && (B[S] = h[S]); return B.webView = h, B })); \ No newline at end of file diff --git a/src/assets/vant-theme.css b/src/assets/vant-theme.css new file mode 100644 index 0000000..8763d89 --- /dev/null +++ b/src/assets/vant-theme.css @@ -0,0 +1,434 @@ +/* Vant 主题色配置 - 使用 CSS 变量统一管理主题色 */ + +/* 定义主题色变量 */ +:root { + /* 主色调 - 可以根据需要修改这个变量来改变整个主题 */ + --van-theme-primary: #a22525; + --van-theme-primary-light: rgba(162, 37, 37, 0.1); + --van-theme-primary-dark: rgba(162, 37, 37, 0.8); + --van-theme-primary-alpha: rgba(162, 37, 37, 0.15); + + /* 覆盖 Vant 默认的主色调变量 */ + --van-primary-color: var(--van-theme-primary); + --van-success-color: #07c160; + --van-warning-color: #ff976a; + --van-danger-color: #ee0a24; + + /* 文本颜色 */ + --van-text-color: #323233; + --van-text-color-2: #646566; + --van-text-color-3: #969799; + + /* 背景色 */ + --van-background-color: #ffffff; + --van-background-color-light: #fafafa; + + /* 边框色 */ + --van-border-color: #ebedf0; + + /* 活跃状态颜色 */ + --van-active-color: #f2f3f5; +} + +/* 使用 CSS 变量覆盖组件样式 */ + +/* 按钮组件 */ +.van-button--primary { + background-color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +.van-button--primary:active { + background-color: var(--van-theme-primary-dark) !important; +} + +/* 导航栏组件 */ +.van-nav-bar { + background-color: #ffffff !important; +} + +.van-nav-bar__title { + color: var(--van-theme-primary) !important; +} + +.van-nav-bar__left, +.van-nav-bar__right { + color: var(--van-theme-primary) !important; +} + +.van-nav-bar__arrow { + color: var(--van-theme-primary) !important; +} +.van-nav-bar__text { + color: var(--van-theme-primary) !important; +} +/* 标签栏组件 */ +.van-tabbar-item--active { + color: var(--van-theme-primary) !important; +} + +/* 标签页组件 */ +.van-tabs__line { + background-color: var(--van-theme-primary) !important; +} + +.van-tab--active { + color: var(--van-theme-primary) !important; +} + +.van-tabs__wrap { + background-color: #ffffff !important; +} + +/* 开关组件 */ +.van-switch--on { + background-color: var(--van-theme-primary) !important; +} + +/* 复选框组件 */ +/* 取消复选框主题色配置,使用默认样式 */ + +/* 单选框组件 */ +/* 取消单选框主题色配置,使用默认样式 */ + +/* 滑动条组件 */ +.van-slider__bar { + background-color: var(--van-theme-primary) !important; +} + +.van-slider__button { + background-color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +/* 进度条组件 */ +.van-progress__portion { + background-color: var(--van-theme-primary) !important; +} + +/* 评分组件 */ +.van-rate__icon--full { + color: var(--van-theme-primary) !important; +} + +/* 步进器组件 */ +.van-stepper__plus, +.van-stepper__minus { + color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +/* 步骤条组件 */ +.van-steps__item--active .van-steps__item__circle { + background-color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +/* 标签组件 */ +.van-tag--primary { + background-color: var(--van-theme-primary) !important; + color: #ffffff !important; +} + +/* 徽章组件 */ +.van-badge--primary { + background-color: var(--van-theme-primary) !important; +} + +/* 通知栏组件 */ +.van-notice-bar--primary { + background-color: var(--van-theme-primary-light) !important; + color: var(--van-theme-primary) !important; +} + +/* 轮播图指示器 */ +.van-swipe__indicator--active { + background-color: var(--van-theme-primary) !important; +} + +/* 加载组件 */ +.van-loading__spinner { + color: var(--van-theme-primary) !important; +} + +/* 弹窗组件 */ +.van-popup { + background-color: var(--van-background-color) !important; +} + +/* 选择器组件 */ +.van-picker { + background-color: var(--van-background-color) !important; +} + +.van-picker__toolbar { + background-color: var(--van-background-color) !important; +} + +.van-picker__confirm { + color: var(--van-theme-primary) !important; +} + +.van-picker__cancel { + color: var(--van-text-color-2) !important; +} + +/* 日期选择器组件 */ +.van-date-picker { + background-color: var(--van-background-color) !important; +} + +.van-date-picker__toolbar { + background-color: var(--van-background-color) !important; +} + +.van-date-picker__confirm { + color: var(--van-theme-primary) !important; +} + +.van-date-picker__cancel { + color: var(--van-text-color-2) !important; +} + +/* 字段组件 */ +.van-field__control { + color: var(--van-text-color) !important; +} + +.van-field__placeholder { + color: var(--van-text-color-3) !important; +} + +.van-field__right-icon { + color: var(--van-theme-primary) !important; +} + +/* 动作面板组件 */ +.van-action-sheet__item--active { + color: var(--van-theme-primary) !important; +} + +/* 选择器组件 */ +.van-picker__confirm { + color: var(--van-theme-primary) !important; +} + +/* 日期选择器组件 */ +.van-datetime-picker__confirm { + color: var(--van-theme-primary) !important; +} + +/* 地区选择器组件 */ +.van-area__confirm { + color: var(--van-theme-primary) !important; +} + +/* 搜索组件 */ +.van-search__action { + color: var(--van-theme-primary) !important; +} + +/* 日历组件 */ +.van-calendar__day--selected { + background-color: var(--van-theme-primary) !important; + color: #ffffff !important; +} + +.van-calendar__day--start, +.van-calendar__day--end { + background-color: var(--van-theme-primary) !important; + color: #ffffff !important; +} + +/* 时间选择器组件 */ +.van-time-picker__confirm { + color: var(--van-theme-primary) !important; +} + +/* 商品卡片组件 */ +.van-card__price { + color: var(--van-theme-primary) !important; +} + +/* 优惠券组件 */ +.van-coupon__discount { + color: var(--van-theme-primary) !important; +} + +/* 地址编辑组件 */ +.van-address-edit__default { + color: var(--van-theme-primary) !important; +} + +/* 商品规格选择器组件 */ +.van-sku-item--active { + color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +/* 购物车组件 */ +.van-submit-bar__price { + color: var(--van-theme-primary) !important; +} + +/* 提交订单栏组件 */ +.van-submit-bar__button--primary { + background-color: var(--van-theme-primary) !important; +} + +/* 侧边栏组件 */ +.van-sidebar-item--select { + color: var(--van-theme-primary) !important; + border-color: var(--van-theme-primary) !important; +} + +/* 树形选择器组件 */ +.van-tree-select__item--active { + color: var(--van-theme-primary) !important; +} + +/* 联系人列表组件 */ +.van-contact-list__item--active { + color: var(--van-theme-primary) !important; +} + +/* 密码输入框组件 */ +.van-password-input__item--focus { + border-color: var(--van-theme-primary) !important; +} + +/* 下拉菜单组件 */ +.van-dropdown-menu__title--active { + color: var(--van-theme-primary) !important; +} + +.van-dropdown-menu__option--active { + color: var(--van-theme-primary) !important; +} + +/* 索引组件 */ +.van-index-anchor--active { + background-color: var(--van-background-color) !important; + color: var(--van-theme-primary) !important; +} + +/* 水印组件 */ +.van-water-mark { + color: var(--van-theme-primary-alpha) !important; +} + +/* 分割线组件 */ +.van-divider { + color: var(--van-text-color-3) !important; +} + +/* 分享组件 */ +.van-share-sheet__option-name { + color: var(--van-text-color) !important; +} + +/* 骨架屏组件 */ +.van-skeleton__content { + background-color: var(--van-background-color-light) !important; +} + +/* 空状态组件 */ +.van-empty__description { + color: var(--van-text-color-2) !important; +} + +/* 倒计时组件 */ +.van-count-down { + color: var(--van-text-color) !important; +} + +/* 签名组件 */ +.van-signature { + background-color: var(--van-background-color) !important; + border-color: var(--van-border-color) !important; +} + +/* 上传组件 */ +.van-uploader__upload { + background-color: var(--van-background-color-light) !important; +} + +/* 列表组件 */ +.van-list__loading, +.van-list__finished-text { + color: var(--van-text-color-2) !important; +} + +/* 下拉刷新组件 */ +.van-pull-refresh__text { + color: var(--van-text-color-2) !important; +} + +/* 懒加载组件 */ +.van-lazyload { + background-color: var(--van-background-color-light) !important; +} + +/* 图片预览组件 */ +.van-image-preview__index { + color: #ffffff !important; +} + +/* 索引组件 */ +.van-index-anchor { + background-color: var(--van-background-color-light) !important; + color: var(--van-text-color-2) !important; +} + +/* 弹出层遮罩 */ +.van-overlay { + background-color: rgba(0, 0, 0, 0.5) !important; +} + +/* Toast 组件 */ +.van-toast { + background-color: rgba(0, 0, 0, 0.8) !important; + color: #ffffff !important; +} + +.van-toast--success { + background-color: rgba(0, 0, 0, 0.8) !important; + color: #ffffff !important; +} + +.van-toast--fail { + background-color: rgba(0, 0, 0, 0.8) !important; + color: #ffffff !important; +} + +.van-toast--loading { + background-color: rgba(0, 0, 0, 0.8) !important; + color: #ffffff !important; +} + +.van-toast__text { + color: #ffffff !important; +} + +.van-toast__icon { + color: #ffffff !important; +} + +/* Loading Toast 特殊处理 */ +.van-loading-toast { + background-color: rgba(0, 0, 0, 0.8) !important; + color: #ffffff !important; +} + +.van-loading-toast .van-loading__spinner { + color: #ffffff !important; +} + +.van-loading-toast .van-toast__text { + color: #ffffff !important; +} + +/* 数字键盘组件 */ +.van-number-keyboard__key--active { + background-color: var(--van-active-color) !important; +} \ No newline at end of file diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts new file mode 100644 index 0000000..ff20f3a --- /dev/null +++ b/src/auto-imports.d.ts @@ -0,0 +1,315 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const VanTabbar: typeof import('vant/es')['Tabbar'] + const VanTabbarItem: typeof import('vant/es')['TabbarItem'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const closeToast: typeof import('vant/es')['closeToast'] + const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const showLoadingToast: typeof import('vant/es')['showLoadingToast'] + const showToast: typeof import('vant/es')['showToast'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAgent: typeof import('./composables/useAgent.js')['useAgent'] + const useAgentStore: typeof import('./stores/agentStore.js')['useAgentStore'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useApiFetch: typeof import('./composables/useApiFetch.js')['default'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCounterStore: typeof import('./stores/counter.js')['useCounterStore'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDialogStore: typeof import('./stores/dialogStore.js')['useDialogStore'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEnv: typeof import('./composables/useEnv.js')['useEnv'] + const useEnvironment: typeof import('./composables/useEnvironment.js')['useEnvironment'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useHttp: typeof import('./composables/useHttp.js')['useHttp'] + const useId: typeof import('vue')['useId'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useModel: typeof import('vue')['useModel'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useSEO: typeof import('./composables/useSEO.js')['useSEO'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUni: typeof import('./composables/useUni.js')['useUni'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useUserStore: typeof import('./stores/userStore.js')['useUserStore'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebView: typeof import('./composables/useWebView.js')['useWebView'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const useZoomAdapter: typeof import('./composables/useZoomAdapter.js')['useZoomAdapter'] + const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/src/components/AgentApplicationForm.vue b/src/components/AgentApplicationForm.vue new file mode 100644 index 0000000..ded74b0 --- /dev/null +++ b/src/components/AgentApplicationForm.vue @@ -0,0 +1,263 @@ + + + diff --git a/src/components/Authorization.vue b/src/components/Authorization.vue new file mode 100644 index 0000000..d9cc012 --- /dev/null +++ b/src/components/Authorization.vue @@ -0,0 +1,175 @@ + + + + diff --git a/src/components/BaseReport.vue b/src/components/BaseReport.vue new file mode 100644 index 0000000..a48ce44 --- /dev/null +++ b/src/components/BaseReport.vue @@ -0,0 +1,947 @@ + + + + + diff --git a/src/components/BindPhoneDialog.vue b/src/components/BindPhoneDialog.vue new file mode 100644 index 0000000..9dcb808 --- /dev/null +++ b/src/components/BindPhoneDialog.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/components/CarNumberInput.vue b/src/components/CarNumberInput.vue new file mode 100644 index 0000000..6a8b173 --- /dev/null +++ b/src/components/CarNumberInput.vue @@ -0,0 +1,333 @@ + + + + + \ No newline at end of file diff --git a/src/components/ClickCaptcha.vue b/src/components/ClickCaptcha.vue new file mode 100644 index 0000000..89d64e4 --- /dev/null +++ b/src/components/ClickCaptcha.vue @@ -0,0 +1,391 @@ + + + + + diff --git a/src/components/GaugeChart.vue b/src/components/GaugeChart.vue new file mode 100644 index 0000000..8a5a3ed --- /dev/null +++ b/src/components/GaugeChart.vue @@ -0,0 +1,255 @@ + + + + + \ No newline at end of file diff --git a/src/components/InquireForm.vue b/src/components/InquireForm.vue new file mode 100644 index 0000000..a04557e --- /dev/null +++ b/src/components/InquireForm.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/src/components/LButtonGroup.vue b/src/components/LButtonGroup.vue new file mode 100644 index 0000000..212d75c --- /dev/null +++ b/src/components/LButtonGroup.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/LEmpty.vue b/src/components/LEmpty.vue new file mode 100644 index 0000000..20f22fc --- /dev/null +++ b/src/components/LEmpty.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/src/components/LExpandCollapse.vue b/src/components/LExpandCollapse.vue new file mode 100644 index 0000000..d9f72d3 --- /dev/null +++ b/src/components/LExpandCollapse.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/components/LPendding.vue b/src/components/LPendding.vue new file mode 100644 index 0000000..0c01abb --- /dev/null +++ b/src/components/LPendding.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/components/LRemark.vue b/src/components/LRemark.vue new file mode 100644 index 0000000..9401581 --- /dev/null +++ b/src/components/LRemark.vue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/src/components/LTable.vue b/src/components/LTable.vue new file mode 100644 index 0000000..6a2d6ad --- /dev/null +++ b/src/components/LTable.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/components/LTitle.vue b/src/components/LTitle.vue new file mode 100644 index 0000000..303f84b --- /dev/null +++ b/src/components/LTitle.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/Payment.vue b/src/components/Payment.vue new file mode 100644 index 0000000..ebeadf3 --- /dev/null +++ b/src/components/Payment.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/components/PriceInputPopup.vue b/src/components/PriceInputPopup.vue new file mode 100644 index 0000000..839c856 --- /dev/null +++ b/src/components/PriceInputPopup.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/components/QRcode.vue b/src/components/QRcode.vue new file mode 100644 index 0000000..15595ba --- /dev/null +++ b/src/components/QRcode.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/src/components/QrcodePop.vue b/src/components/QrcodePop.vue new file mode 100644 index 0000000..885f978 --- /dev/null +++ b/src/components/QrcodePop.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/src/components/RealNameAuthDialog.vue b/src/components/RealNameAuthDialog.vue new file mode 100644 index 0000000..8f8cd43 --- /dev/null +++ b/src/components/RealNameAuthDialog.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/src/components/ShareReportButton.vue b/src/components/ShareReportButton.vue new file mode 100644 index 0000000..9ae9eab --- /dev/null +++ b/src/components/ShareReportButton.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/components/VipBanner.vue b/src/components/VipBanner.vue new file mode 100644 index 0000000..750526e --- /dev/null +++ b/src/components/VipBanner.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/WechatOverlay.vue b/src/components/WechatOverlay.vue new file mode 100644 index 0000000..5a6c6c5 --- /dev/null +++ b/src/components/WechatOverlay.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/composables/useApiFetch.js b/src/composables/useApiFetch.js new file mode 100644 index 0000000..0e8c604 --- /dev/null +++ b/src/composables/useApiFetch.js @@ -0,0 +1,95 @@ +// src/plugins/fetch.js +import { createFetch } from "@vueuse/core"; +import router from "@/router"; // 假设你使用 Vue Router +import { useUserStore } from "@/stores/userStore"; +import { useAgentStore } from "@/stores/agentStore"; +// 创建全局的 fetch 实例 +const useApiFetch = createFetch({ + baseUrl: "/api/v1", // 你的 API 基础路径 + options: { + async beforeFetch({ url, options }) { + showLoadingToast({ + message: "加载中...", + forbidClick: true, + duration: 0, // 设置为 0 表示不会自动关闭 + loadingType: "spinner", + }); + + const timestamp = Date.now(); + const separator = url.includes("?") ? "&" : "?"; // 判断是否已有参数 + url += `${separator}t=${timestamp}`; // 追加时间戳 + + // 在请求前添加通用的 Header,例如 Authorization + const token = localStorage.getItem("token"); + let platform = "h5"; + const userAgent = navigator.userAgent.toLowerCase(); + const isWechat = /micromessenger/.test(userAgent); + if (isWechat) { + platform = "wxh5"; + } + options.headers['X-Platform'] = platform + + if (token) { + options.headers = { + ...options.headers, + Authorization: `${token}`, + }; + } + return { url, options }; + }, + async afterFetch({ data, response }) { + closeToast(); + // 全局处理响应 + if (response.status === 401) { + // 清除本地存储的 token + localStorage.removeItem("token"); + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + // 跳转到登录页 + router.replace("/login"); + } + + if (data.code !== 200) { + if (data.code === 100009) { + // 改进的存储管理 + localStorage.removeItem('token') + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + localStorage.removeItem('userInfo') + localStorage.removeItem('agentInfo') + + // 重置状态 + const userStore = useUserStore(); + const agentStore = useAgentStore(); + userStore.resetUser() + agentStore.resetAgent() + location.reload() + + } + if (data.code !== 200002 && data.code !== 200003 && data.code !== 200004 && data.code !== 100009) { + showToast({ message: data.msg }); + } + } + return { data, response }; + }, + async onFetchError({ error, response }) { + console.log("error", error); + closeToast(); + if (response.status === 401) { + // 清除本地存储的 token + localStorage.removeItem("token"); + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + // 跳转到登录页 + router.replace("/login"); + } else { + if (typeof error === "string") { + showToast({ message: error }); + } + } + return { error }; + }, + }, +}); + +export default useApiFetch; diff --git a/src/composables/useEnv.js b/src/composables/useEnv.js new file mode 100644 index 0000000..10c96c7 --- /dev/null +++ b/src/composables/useEnv.js @@ -0,0 +1,16 @@ +// src/composables/useEnv.js +import { ref, onMounted } from 'vue' + +// 创建一个全局的 ref +const isWeChat = ref(false) + +// 立即执行检测 +const userAgent = navigator.userAgent.toLowerCase() +const keywords = ['micromessenger', 'wechat'].map(key => key.toLowerCase()) +isWeChat.value = keywords.some(keyword => userAgent.includes(keyword)) + +export function useEnv() { + return { + isWeChat, + } +} diff --git a/src/composables/useHttp.js b/src/composables/useHttp.js new file mode 100644 index 0000000..78f455f --- /dev/null +++ b/src/composables/useHttp.js @@ -0,0 +1,27 @@ +import { useFetch, createFetch } from '@vueuse/core'; + +export function useHttp(url, options = {}, token) { + const fetch = createFetch(url, { + baseUrl: '/api/v1', + options: { + async beforeFetch({ url, options, cancel }) { + console.log("asdasd", options) + options.headers = { + ...options.headers, + Authorization: `${token}`, + } + return { + options, + } + }, + async afterFetch(ctx) { + console.log("ctx", ctx) + // if (ctx.data.code !== 200) { + // throw new Error(ctx.data.message || '请求失败'); + // } + return ctx; + }, + } + }) + return fetch(url) +} diff --git a/src/composables/useSEO.js b/src/composables/useSEO.js new file mode 100644 index 0000000..9c2ebae --- /dev/null +++ b/src/composables/useSEO.js @@ -0,0 +1,197 @@ +import { ref, watch } from 'vue' +import { useRoute } from 'vue-router' + +export function useSEO() { + const route = useRoute() + + // 默认SEO信息 + const defaultSEO = { + title: '天远数据 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理', + description: '天远数据,大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务,支持免费开通代理,助力个人与企业全方位风险管理。', + keywords: '大数据风险报告, 婚姻状况查询, 个人信用, 企业风险, 信贷风控, 人事背调, 大数据分析, 免费代理, 风险管控', + url: 'https://www.zhinengcha.cn' + } + + // 页面SEO配置 + const pageSEO = ref({ + title: '', + description: '', + keywords: '', + url: '' + }) + + // 更新页面SEO信息 + const updateSEO = (seoConfig) => { + const config = { ...defaultSEO, ...seoConfig } + + // 更新页面标题 + document.title = config.title + + // 更新meta描述 + let metaDescription = document.querySelector('meta[name="description"]') + if (!metaDescription) { + metaDescription = document.createElement('meta') + metaDescription.name = 'description' + document.head.appendChild(metaDescription) + } + metaDescription.content = config.description + + // 更新meta关键词 + let metaKeywords = document.querySelector('meta[name="keywords"]') + if (!metaKeywords) { + metaKeywords = document.createElement('meta') + metaKeywords.name = 'keywords' + document.head.appendChild(metaKeywords) + } + metaKeywords.content = config.keywords + + // 更新Open Graph标签 + updateOpenGraph(config) + + // 更新Twitter Cards + updateTwitterCards(config) + + // 更新canonical URL + updateCanonicalURL(config.url) + + // 更新结构化数据 + updateStructuredData(config) + } + + // 更新Open Graph标签 + const updateOpenGraph = (config) => { + const ogTags = { + 'og:title': config.title, + 'og:description': config.description, + 'og:url': config.url, + 'og:type': 'website', + 'og:site_name': '天远数据', + 'og:locale': 'zh_CN' + } + + Object.entries(ogTags).forEach(([property, content]) => { + let meta = document.querySelector(`meta[property="${property}"]`) + if (!meta) { + meta = document.createElement('meta') + meta.setAttribute('property', property) + document.head.appendChild(meta) + } + meta.content = content + }) + } + + // 更新Twitter Cards + const updateTwitterCards = (config) => { + const twitterTags = { + 'twitter:card': 'summary', + 'twitter:title': config.title, + 'twitter:description': config.description, + 'twitter:url': config.url + } + + Object.entries(twitterTags).forEach(([name, content]) => { + let meta = document.querySelector(`meta[name="${name}"]`) + if (!meta) { + meta = document.createElement('meta') + meta.name = name + document.head.appendChild(meta) + } + meta.content = content + }) + } + + // 更新canonical URL + const updateCanonicalURL = (url) => { + let canonical = document.querySelector('link[rel="canonical"]') + if (!canonical) { + canonical = document.createElement('link') + canonical.rel = 'canonical' + document.head.appendChild(canonical) + } + canonical.href = url + } + + // 更新结构化数据 + const updateStructuredData = (config) => { + // 移除现有的结构化数据 + const existingScripts = document.querySelectorAll('script[type="application/ld+json"]') + existingScripts.forEach(script => { + if (script.textContent.includes('"@type":"WebPage"')) { + script.remove() + } + }) + + // 添加新的结构化数据 + const structuredData = { + "@context": "https://schema.org", + "@type": "WebPage", + "name": config.title, + "description": config.description, + "url": config.url, + "mainEntity": { + "@type": "Organization", + "name": "天远数据", + "url": "https://www.zhinengcha.cn/", + "description": "大数据风险报告查询与代理管理平台" + } + } + + const script = document.createElement('script') + script.type = 'application/ld+json' + script.textContent = JSON.stringify(structuredData) + document.head.appendChild(script) + } + + // 根据路由自动更新SEO + const updateSEOByRoute = () => { + const routeConfigs = { + '/': { + title: '天远数据 - 大数据风险报告 | 婚姻状况查询 | 个人信用 | 企业风险 | 免费代理', + description: '天远数据,大数据风险报告查询与代理管理平台,提供婚姻状况查询、个人信用评估、人事背调、信贷风控、企业风险监测等服务,支持免费开通代理,助力个人与企业全方位风险管理。', + keywords: '大数据风险报告, 婚姻状况查询, 个人信用, 企业风险, 信贷风控, 人事背调, 大数据分析, 免费代理, 风险管控' + }, + '/agent': { + title: '天远数据代理 - 免费开通代理权限 | 大数据风险报告代理', + description: '天远数据代理平台,免费开通代理权限,享受大数据风险报告查询服务代理收益。专业的大数据风险报告、婚姻查询、个人信用评估等服务的代理合作。', + keywords: '天远数据代理, 免费代理, 大数据风险报告代理, 代理权限, 代理收益' + }, + '/help': { + title: '帮助中心 - 天远数据使用指南 | 常见问题解答', + description: '天远数据帮助中心,提供详细的使用指南、常见问题解答、操作教程等,帮助用户更好地使用大数据风险报告查询服务。', + keywords: '天远数据帮助, 使用指南, 常见问题, 操作教程, 客服支持' + }, + '/help/guide': { + title: '使用指南 - 天远数据操作教程 | 功能说明', + description: '天远数据详细使用指南,包含各功能模块的操作教程、功能说明、注意事项等,让用户快速上手使用。', + keywords: '使用指南, 操作教程, 功能说明, 快速上手, 天远数据教程' + }, + '/example': { + title: '示例报告 - 天远数据报告展示 | 大数据风险报告样例', + description: '天远数据示例报告展示,包含大数据风险报告、婚姻状况查询、个人信用评估等服务的报告样例,让用户了解报告内容和格式。', + keywords: '示例报告, 报告展示, 报告样例, 大数据风险报告, 婚姻查询报告' + }, + '/service': { + title: '客服中心 - 天远数据在线客服 | 技术支持', + description: '天远数据客服中心,提供在线客服支持、技术咨询、问题反馈等服务,确保用户获得及时有效的帮助。', + keywords: '客服中心, 在线客服, 技术支持, 问题反馈, 天远数据客服' + } + } + + const currentPath = route?.path || '/' + const config = routeConfigs[currentPath] || defaultSEO + + updateSEO({ + ...config, + url: `https://www.zhinengcha.cn${currentPath}` + }) + } + + // 监听路由变化 + watch(() => route?.path, updateSEOByRoute, { immediate: true }) + + return { + updateSEO, + updateSEOByRoute, + pageSEO + } +} diff --git a/src/composables/useWebView.js b/src/composables/useWebView.js new file mode 100644 index 0000000..318791f --- /dev/null +++ b/src/composables/useWebView.js @@ -0,0 +1,130 @@ +import { ref, onMounted } from "vue"; +import "@/assets/uni-webview" + +export function useWebView() { + const platform = ref(""); + const token = ref(""); + // 检测环境并通知父窗口加载完毕 + const handleBridgeReady = () => { + if (platform.value) { + h5PostMessage("loaded", true); + } + }; + + + // 获取 Token(从 URL 中解析) + const getTokenFromUrl = () => { + const urlParams = new URLSearchParams(window.location.search); + const tokenFromUrl = urlParams.get("token"); + token.value = tokenFromUrl || ""; // 如果 URL 没有 token,返回空字符串 + if (token.value) { + localStorage.setItem("token", token.value); + } + return tokenFromUrl; + }; + + // 封装 postMessage 方法 + const postMessage = (data) => { + if (platform.value === "h5") { + h5PostMessage("postMessage", data); + } else if (uni && uni.webView.postMessage) { + uni.webView.postMessage(data); + } else { + console.error("uni.webView.postMessage is not available."); + } + }; + + const redirectTo = (data) => { + if (platform.value === "h5") { + h5PostMessage("redirectTo", data) + } else if (uni && uni.webView.redirectTo) { + // 非 H5 环境,调用 uni.webView.redirectTo + uni.webView.redirectTo(data); + } else { + console.error("uni.webView.redirectTo is not available."); + } + }; + + // 封装 navigateBack 方法 + const navigateBack = (data) => { + if (platform.value === "h5") { + window.top.history.back(); + // h5PostMessage("navigateBack", data) + } else if (uni && uni.webView.navigateBack) { + // 非 H5 环境,调用 uni.webView.navigateBack + uni.webView.navigateBack(data); + } else { + console.error("uni.webView.navigateBack is not available."); + } + }; + + // 封装 navigateTo 方法 + const navigateTo = (data) => { + if (platform.value === "h5") { + // h5PostMessage("navigateTo", data) + window.top.location.href = "/app" + data.url + } else if (uni && uni.webView.navigateTo) { + uni.webView.navigateTo(data); + } else { + console.error("uni.webView.navigateTo is not available."); + } + }; + const payment = (data) => { + if (platform.value === "h5") { + h5PostMessage("payment", data) + } else if (uni && uni.webView.navigateTo) { + // 非 H5 环境,调用 uni.webView.navigateTo + uni.webView.navigateTo(data); + } else { + console.error("uni.webView.navigateTo is not available."); + } + } + const getEnv = () => { + return new Promise((resolve, reject) => { + let env = localStorage.getItem(platform) + if (env) { + platform.value = env + resolve(env); + } else { + uni.webView.getEnv((env) => { + // 遍历 env 对象,找到值为 true 的键 + const platformKey = Object.keys(env).find(key => env[key] === true); + platform.value = platformKey; + if (platformKey) { + resolve(platformKey); // 返回键名(如 'h5', 'mp-weixin' 等) + } else { + reject('未知平台'); + } + }); + } + }); + }; + + onMounted(async () => { + try { + const envValue = await getEnv(); + console.log("当前环境", envValue) + // 将返回的键名(如 'h5', 'mp-weixin')存储到 platform + handleBridgeReady(); + } catch (error) { + console.error(error); + } + // 获取 Token + getTokenFromUrl(); + }); + + return { + platform, + token, + getEnv, + redirectTo, + postMessage, + navigateTo, + navigateBack, + payment + }; +} +const h5PostMessage = (action, data) => { + window.parent.postMessage({ action, data, messageId: generateUniqueId(action) }, "*"); +} +const generateUniqueId = (action) => `msg_${action}_${new Date().getTime()}`; diff --git a/src/composables/useZoomAdapter.js b/src/composables/useZoomAdapter.js new file mode 100644 index 0000000..beb8d21 --- /dev/null +++ b/src/composables/useZoomAdapter.js @@ -0,0 +1,32 @@ +import { ref, onMounted } from 'vue'; +import zoomAdapter from '../utils/zoomAdapter.js'; + +/** + * 简化版缩放适配组合式函数 + */ +export function useZoomAdapter() { + const currentZoom = ref(1); + const isTooHighZoom = ref(false); + + const handleZoomChange = (event) => { + const { zoom } = event.detail; + currentZoom.value = zoom; + isTooHighZoom.value = zoom > 3; + }; + + onMounted(() => { + if (!zoomAdapter.isInitialized) { + zoomAdapter.init(); + } + window.addEventListener('zoomChanged', handleZoomChange); + }); + + return { + currentZoom, + isTooHighZoom, + getZoomAdaptiveClass: () => ({ + 'zoom-adaptive': true, + 'too-high-zoom': isTooHighZoom.value + }) + }; +} \ No newline at end of file diff --git a/src/layouts/GlobalLayout.vue b/src/layouts/GlobalLayout.vue new file mode 100644 index 0000000..f98df9f --- /dev/null +++ b/src/layouts/GlobalLayout.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/layouts/HomeLayout.vue b/src/layouts/HomeLayout.vue new file mode 100644 index 0000000..8beee64 --- /dev/null +++ b/src/layouts/HomeLayout.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/layouts/PageLayout.vue b/src/layouts/PageLayout.vue new file mode 100644 index 0000000..920f7f2 --- /dev/null +++ b/src/layouts/PageLayout.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..de3950e --- /dev/null +++ b/src/main.js @@ -0,0 +1,29 @@ +import 'nprogress/nprogress.css'; // 默认样式,可根据需要自定义样式 +import './assets/main.css' +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import App from './App.vue' +import router from './router' +import 'vant/lib/index.css'; +import { useSEO } from './composables/useSEO' + +const app = createApp(App) +app.use(createPinia()) +app.use(router) + +app.mount('#app') + +// 在应用挂载后初始化SEO功能,确保路由已准备好 +router.isReady().then(() => { + const { updateSEOByRoute } = useSEO() +}) + +document.addEventListener('DOMContentLoaded', () => { + const loadingElement = document.getElementById('app-loading'); + if (loadingElement) { + loadingElement.style.opacity = '0'; + setTimeout(() => { + loadingElement.parentNode.removeChild(loadingElement); + }, 500); // 动画过渡时间 + } +}); \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..ab94bfa --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,421 @@ +import { createRouter, createWebHistory } from 'vue-router' +import NProgress from 'nprogress' +import GlobalLayout from '@/layouts/GlobalLayout.vue' +import HomeLayout from '@/layouts/HomeLayout.vue' +import PageLayout from '@/layouts/PageLayout.vue' +import index from '@/views/index.vue' +import Promote from '@/views/Promote.vue' +import { useAgentStore } from '@/stores/agentStore' +import { useUserStore } from '@/stores/userStore' +import { useDialogStore } from '@/stores/dialogStore' +import { useEnv } from '@/composables/useEnv' +import { storeToRefs } from 'pinia' +import { useSEO } from '@/composables/useSEO' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + component: GlobalLayout, // 使用 Layout 作为父组件 + children: [ + { + path: '', + component: HomeLayout, // 使用 Layout 作为父组件 + children: [ + { + path: '', + name: 'index', + component: index, + }, + { + path: '/agent/promote', + name: 'promote', + component: Promote, + meta: { + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: '/agent', + name: 'agent', + component: () => import('@/views/Agent.vue'), + }, + { + path: 'me', + name: 'me', + component: () => import('@/views/Me.vue'), + }, + ], + }, + { + path: '', + component: PageLayout, + children: [ + { + path: '/historyQuery', + name: 'history', + component: () => import('@/views/HistoryQuery.vue'), + meta: { title: '历史报告', requiresAuth: true }, + }, + { + path: '/help', + name: 'help', + component: () => import('@/views/Help.vue'), + meta: { title: '帮助中心' }, + }, + { + path: '/help/detail', + name: 'helpDetail', + component: () => import('@/views/HelpDetail.vue'), + meta: { title: '帮助中心' }, + }, + { + path: '/help/guide', + name: 'helpGuide', + component: () => import('@/views/HelpGuide.vue'), + meta: { title: '引导指南' }, + }, + { + path: '/withdraw', + name: 'withdraw', + component: () => import('@/views/Withdraw.vue'), + meta: { title: '提现', requiresAuth: true }, + }, + { + path: '/service', + name: 'service', + component: () => import('@/views/Service.vue'), + meta: { title: '客服' }, + }, + { + path: '/complaint', + name: 'complaint', + component: () => import('@/views/Complaint.vue'), + meta: { title: '投诉' }, + }, + { + path: '/report', + name: 'report', + component: () => import('@/views/Report.vue'), + meta: { + title: '报告结果', requiresAuth: true, notNeedBindPhone: true + }, + }, + { + path: '/example', + name: 'example', + component: () => import('@/views/Example.vue'), + meta: { title: '示例报告', notNeedBindPhone: true }, + }, + { + path: '/vant-theme-test', + name: 'vantThemeTest', + component: () => import('@/views/VantThemeTest.vue'), + meta: { title: 'Vant主题色测试' }, + }, + { + path: '/privacyPolicy', + name: 'privacyPolicy', + component: () => import('@/views/PrivacyPolicy.vue'), + meta: { title: '隐私政策' }, + }, + { + path: '/userAgreement', + name: 'userAgreement', + component: () => import('@/views/UserAgreement.vue'), + meta: { title: '用户协议' }, + }, + { + path: '/agentManageAgreement', + name: 'agentManageAgreement', + component: () => import('@/views/AgentManageAgreement.vue'), + meta: { title: '代理管理协议' }, + }, + { + path: '/agentSerivceAgreement', + name: 'agentSerivceAgreement', + component: () => import('@/views/AgentServiceAgreement.vue'), + meta: { title: '信息技术服务合同' }, + }, + { + path: '/inquire/:feature', + name: 'inquire', + component: () => import('@/views/Inquire.vue'), + meta: { title: '查询报告' }, + }, + { + path: '/authorization', + name: 'authorization', + component: () => import('@/views/Authorization.vue'), + meta: { title: '授权书' }, + }, + { + path: '/payment/result', + name: 'paymentResult', + component: () => import('@/views/PaymentResult.vue'), + meta: { title: '支付结果', requiresAuth: true }, + }, + ], + }, + { + path: 'agent', + component: PageLayout, + children: [ + { + path: 'promoteDetails', + name: 'promoteDetails', + component: () => import('@/views/AgentPromoteDetails.vue'), + meta: { + title: '直推报告收益明细', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'rewardsDetails', + name: 'rewardsDetails', + component: () => import('@/views/AgentRewardsDetails.vue'), + meta: { + title: '代理奖励收益明细', + requiresAuth: true, + requiresAgent: true, + }, + }, + + { + path: 'invitation', + name: 'invitation', + component: () => import('@/views/Invitation.vue'), + meta: { + title: '邀请下级', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'agentVip', + name: 'agentVip', + component: () => import('@/views/AgentVip.vue'), + meta: { + title: '代理会员', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'vipApply', + name: 'agentVipApply', + component: () => import('@/views/AgentVipApply.vue'), + meta: { + title: 'VIP代理申请', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'vipConfig', + name: 'agentVipConfig', + component: () => import('@/views/AgentVipConfig.vue'), + meta: { + title: '代理会员报告配置', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'withdraw', + name: 'withdraw', + component: () => import('@/views/Withdraw.vue'), + meta: { + title: '提现', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'withdrawDetails', + name: 'withdrawDetails', + component: () => import('@/views/WithdrawDetails.vue'), + meta: { + title: '提现记录', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'invitationAgentApply/self', + name: 'invitationAgentApplySelf', + component: () => import('@/views/InvitationAgentApply.vue'), + meta: { title: '代理申请', requiresAuth: true }, + }, + { + path: 'subordinateList', + name: 'subordinateList', + component: () => import('@/views/SubordinateList.vue'), + meta: { + title: '我的下级', + requiresAuth: true, + requiresAgent: true, + }, + }, + { + path: 'subordinateDetail/:id', + name: 'subordinateDetail', + component: () => import('@/views/SubordinateDetail.vue'), + meta: { + title: '下级贡献详情', + requiresAuth: true, + requiresAgent: true, + }, + }, + ], + }, + { + path: 'app', + children: [ + { + path: 'authorization', + name: 'appAuthorization', + component: () => import('@/views/Authorization.vue'), + meta: { title: '授权书' }, + }, + { + path: 'privacyPolicy', + name: 'appPrivacyPolicy', + component: () => import('@/views/PrivacyPolicy.vue'), + meta: { title: '隐私政策' }, + }, + { + path: 'userAgreement', + name: 'appUserAgreement', + component: () => import('@/views/UserAgreement.vue'), + meta: { title: '用户协议' }, + }, + { + path: 'agentManageAgreement', + name: 'appAgentManageAgreement', + component: () => import('@/views/AgentManageAgreement.vue'), + meta: { title: '代理管理协议' }, + }, + { + path: 'agentSerivceAgreement', + name: 'appAgentSerivceAgreement', + component: () => import('@/views/AgentServiceAgreement.vue'), + meta: { title: '信息技术服务合同' }, + }, + ], + }, + ], + }, + + { + path: '/login', + name: 'login', + component: () => import('@/views/Login.vue'), + }, + { + path: '/agent/promotionInquire/:linkIdentifier', + name: 'promotionInquire', + component: () => import('@/views/PromotionInquire.vue'), + meta: { notNeedBindPhone: true }, + }, + { + path: '/agent/invitationAgentApply/:linkIdentifier', + name: 'invitationAgentApply', + component: () => import('@/views/InvitationAgentApply.vue'), + meta: { title: '代理申请' }, + }, + { + path: '/report/share/:linkIdentifier', + name: 'reportShare', + component: () => import('@/views/ReportShare.vue'), + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('@/views/NotFound.vue'), + }, + ], +}) +NProgress.configure({ + easing: 'ease', // 动画方式 + speed: 500, // 递增进度条的速度(毫秒) + showSpinner: false, // 是否显示加载的圆圈 + trickleSpeed: 200, // 自动递增间隔 + minimum: 0.3, // 初始化最小百分比 +}) + +// 路由导航守卫 +router.beforeEach(async (to, from, next) => { + NProgress.start() // 启动进度条 + const isAuthenticated = localStorage.getItem('token') + const agentStore = useAgentStore() + const userStore = useUserStore() + const dialogStore = useDialogStore() + const { isWeChat } = useEnv() + const { isAgent, isLoaded } = storeToRefs(agentStore) + const { mobile, isLoggedIn } = storeToRefs(userStore) + + // 处理需要登录的页面 + if (to.meta.requiresAuth && !isAuthenticated) { + if (isWeChat.value) { + next('/') + location.reload() + } else { + next('/login') + } + return + } + + // 已登录状态下的处理 + if (isAuthenticated) { + // 确保用户信息已加载 + if (!isLoggedIn.value) { + await userStore.fetchUserInfo() + } + + // 检查手机号绑定状态 + // 只有在未绑定手机号,且目标路由需要登录并且没有设置notNeedBindPhone时,才弹出绑定手机号弹窗 + if (!mobile.value && to.meta.requiresAuth && !to.meta.notNeedBindPhone) { + dialogStore.openBindPhone() + next(false) + return + } + + // 检查代理权限 + if (to.meta.requiresAgent) { + if (!isLoaded.value) { + await agentStore.fetchAgentStatus() + } + if (!isAgent.value) { + next('/agent/invitationAgentApply/self') + return + } + } + } + + // 其他情况正常通过 + next() + +}) + +router.afterEach((to) => { + NProgress.done() // 结束进度条 + + // SEO优化:更新页面标题和meta信息 + const { updateSEO } = useSEO() + + // 根据路由meta信息更新SEO + if (to.meta.title) { + const seoConfig = { + title: `${to.meta.title} - 天远数据`, + description: `天远数据${to.meta.title}页面,提供专业的大数据风险管控服务。`, + url: `https://www.zhinengcha.cn${to.path}` + } + updateSEO(seoConfig) + } +}) + +export default router diff --git a/src/stores/agentStore.js b/src/stores/agentStore.js new file mode 100644 index 0000000..f31a786 --- /dev/null +++ b/src/stores/agentStore.js @@ -0,0 +1,76 @@ +import { defineStore } from 'pinia' + +export const useAgentStore = defineStore('agent', { + state: () => ({ + isLoaded: false, + level: '', + status: 3, // 0=待审核,1=审核通过,2=审核未通过,3=未申请 + isAgent: false, + ancestorID: null, + agentID: null, + mobile: '', + ExpiryTime: '', + isRealName: false, + }), + actions: { + async fetchAgentStatus() { + const { data, error } = await useApiFetch('/agent/info').get().json() + + if (data.value && !error.value) { + if (data.value.code === 200) { + this.level = data.value.data.level + this.isAgent = data.value.data.is_agent // 判断是否是代理 + this.status = data.value.data.status // 获取代理状态 0=待审核,1=审核通过,2=审核未通过,3=未申请 + this.agentID = data.value.data.agent_id + this.mobile = data.value.data.mobile + this.ExpiryTime = data.value.data.expiry_time + this.isRealName = data.value.data.is_real_name + + // 保存到localStorage + localStorage.setItem( + 'agentInfo', + JSON.stringify({ + isAgent: this.isAgent, + level: this.level, + status: this.status, + agentID: this.agentID, + mobile: this.mobile, + ExpiryTime: this.ExpiryTime, + isRealName: this.isRealName, + + }) + ) + } else { + console.log('Error fetching agent info', data.value) + } + } + this.isLoaded = true + }, + + // 更新代理信息 + updateAgentInfo(agentInfo) { + if (agentInfo) { + this.isAgent = agentInfo.isAgent || false + this.level = agentInfo.level || '' + this.status = agentInfo.status || 3 + this.agentID = agentInfo.agentID || null + this.mobile = agentInfo.mobile || '' + this.isLoaded = true + this.isRealName = agentInfo.isRealName || false + + } + }, + + // 重置代理信息 + resetAgent() { + this.isLoaded = false + this.level = '' + this.status = 3 + this.isAgent = false + this.ancestorID = null + this.agentID = null + this.mobile = '' + this.isRealName = false + }, + }, +}) diff --git a/src/stores/dialogStore.js b/src/stores/dialogStore.js new file mode 100644 index 0000000..3f90016 --- /dev/null +++ b/src/stores/dialogStore.js @@ -0,0 +1,32 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + +export const useDialogStore = defineStore('dialog', () => { + const showBindPhone = ref(false) + const showRealNameAuth = ref(false) + + function openBindPhone() { + showBindPhone.value = true + } + + function closeBindPhone() { + showBindPhone.value = false + } + + function openRealNameAuth() { + showRealNameAuth.value = true + } + + function closeRealNameAuth() { + showRealNameAuth.value = false + } + + return { + showBindPhone, + openBindPhone, + closeBindPhone, + showRealNameAuth, + openRealNameAuth, + closeRealNameAuth, + } +}) diff --git a/src/stores/userStore.js b/src/stores/userStore.js new file mode 100644 index 0000000..0ec9a6c --- /dev/null +++ b/src/stores/userStore.js @@ -0,0 +1,59 @@ +import { defineStore } from 'pinia' + +export const useUserStore = defineStore('user', { + state: () => ({ + userName: '', + mobile: '', + userAvatar: '', + isLoggedIn: false, + }), + actions: { + async fetchUserInfo() { + const { data, error } = await useApiFetch('/user/detail').get().json() + if (data.value && !error.value) { + if (data.value.code === 200) { + const userinfo = data.value.data.userInfo + this.userName = userinfo.mobile || '' + this.mobile = userinfo.mobile || '' + this.userAvatar = userinfo.userAvatar + this.isLoggedIn = true + + // 保存到localStorage + localStorage.setItem( + 'userInfo', + JSON.stringify({ + nickName: this.userName, + avatar: this.userAvatar, + }) + ) + } else if (data.value.code === 100009) { + localStorage.removeItem('token') + localStorage.removeItem('refreshAfter') + localStorage.removeItem('accessExpire') + localStorage.removeItem('userInfo') + localStorage.removeItem('agentInfo') + + this.resetUser() + window.location.reload() + } + } else { + } + }, + + // 更新用户信息 + updateUserInfo(userInfo) { + if (userInfo) { + this.userName = userInfo.mobile || userInfo.nickName || '' + this.userAvatar = userInfo.avatar || '' + this.isLoggedIn = true + } + }, + + // 重置用户信息 + resetUser() { + this.userName = '' + this.userAvatar = '' + this.isLoggedIn = false + }, + }, +}) diff --git a/src/ui/CBehaviorRiskScan.vue b/src/ui/CBehaviorRiskScan.vue new file mode 100644 index 0000000..94f6ba7 --- /dev/null +++ b/src/ui/CBehaviorRiskScan.vue @@ -0,0 +1,709 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/ElementVerification.vue b/src/ui/CDWBG8B4D/components/ElementVerification.vue new file mode 100644 index 0000000..270adeb --- /dev/null +++ b/src/ui/CDWBG8B4D/components/ElementVerification.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/Identity.vue b/src/ui/CDWBG8B4D/components/Identity.vue new file mode 100644 index 0000000..5228d52 --- /dev/null +++ b/src/ui/CDWBG8B4D/components/Identity.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/LeasingRiskSection.vue b/src/ui/CDWBG8B4D/components/LeasingRiskSection.vue new file mode 100644 index 0000000..81d74aa --- /dev/null +++ b/src/ui/CDWBG8B4D/components/LeasingRiskSection.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/LoanEvaluationSection.vue b/src/ui/CDWBG8B4D/components/LoanEvaluationSection.vue new file mode 100644 index 0000000..502835e --- /dev/null +++ b/src/ui/CDWBG8B4D/components/LoanEvaluationSection.vue @@ -0,0 +1,414 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/MultCourtInfoSection.vue b/src/ui/CDWBG8B4D/components/MultCourtInfoSection.vue new file mode 100644 index 0000000..dcae160 --- /dev/null +++ b/src/ui/CDWBG8B4D/components/MultCourtInfoSection.vue @@ -0,0 +1,543 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CDWBG8B4D/components/OverdueRiskSection.vue b/src/ui/CDWBG8B4D/components/OverdueRiskSection.vue new file mode 100644 index 0000000..05191d4 --- /dev/null +++ b/src/ui/CDWBG8B4D/components/OverdueRiskSection.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/ReportOverview.vue b/src/ui/CDWBG8B4D/components/ReportOverview.vue new file mode 100644 index 0000000..4ec4c1f --- /dev/null +++ b/src/ui/CDWBG8B4D/components/ReportOverview.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/RiskSupervisionSection.vue b/src/ui/CDWBG8B4D/components/RiskSupervisionSection.vue new file mode 100644 index 0000000..6180e67 --- /dev/null +++ b/src/ui/CDWBG8B4D/components/RiskSupervisionSection.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/RiskWarning.vue b/src/ui/CDWBG8B4D/components/RiskWarning.vue new file mode 100644 index 0000000..9c3cc6f --- /dev/null +++ b/src/ui/CDWBG8B4D/components/RiskWarning.vue @@ -0,0 +1,388 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/components/RiskWarningSection.vue b/src/ui/CDWBG8B4D/components/RiskWarningSection.vue new file mode 100644 index 0000000..fea97b5 --- /dev/null +++ b/src/ui/CDWBG8B4D/components/RiskWarningSection.vue @@ -0,0 +1,691 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CDWBG8B4D/components/RiskWarningTab.vue b/src/ui/CDWBG8B4D/components/RiskWarningTab.vue new file mode 100644 index 0000000..8ea805a --- /dev/null +++ b/src/ui/CDWBG8B4D/components/RiskWarningTab.vue @@ -0,0 +1,1013 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CDWBG8B4D/index.vue b/src/ui/CDWBG8B4D/index.vue new file mode 100644 index 0000000..fbb9acf --- /dev/null +++ b/src/ui/CDWBG8B4D/index.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/ui/CDWBG8B4D/utils/intervalFormatter.js b/src/ui/CDWBG8B4D/utils/intervalFormatter.js new file mode 100644 index 0000000..9b88350 --- /dev/null +++ b/src/ui/CDWBG8B4D/utils/intervalFormatter.js @@ -0,0 +1,262 @@ +/** + * 区间表达式格式化工具 + * 将数学区间表达式转换为用户友好的文本描述 + */ + +/** + * 格式化区间表达式 + * @param {string} interval - 区间表达式,如 "(0,1000)", "[2000,30000)", "[17,+)" + * @param {string} unit - 单位,如 "元", "次", "个", "天" 等 + * @returns {string} 格式化后的文本,如果格式化失败则返回原数据 + */ +export function formatInterval(interval, unit = '') { + // 如果数据为空或无效,返回原数据 + if (!interval || interval === '-' || interval === '0') { + return interval || '-' + } + + try { + // 处理特殊格式,如 "3,6(个月)" + if (interval.includes('(') && interval.includes(')')) { + const match = interval.match(/^(\d+(?:,\d+)*)\((.+)\)$/) + if (match) { + const numbers = match[1].split(',').map(n => n.trim()) + const timeUnit = match[2] + if (numbers.length === 2) { + return `${numbers[0]}-${numbers[1]}${timeUnit}` + } + return `${numbers.join(', ')}${timeUnit}` + } + } + + // 处理区间表达式 + const intervalPattern = /^([\[\(])(\d+(?:\.\d+)?),(\d+(?:\.\d+)?|\+)([\]\)])$/ + const match = interval.match(intervalPattern) + + // 如果不是区间表达式,返回原数据 + if (!match) { + return interval + } + + const [, leftBracket, leftValue, rightValue, rightBracket] = match + const isLeftInclusive = leftBracket === '[' + const isRightInclusive = rightBracket === ']' + const isRightInfinity = rightValue === '+' + + let result = '' + + if (isRightInfinity) { + // 处理无穷大情况,如 "[17,+)" + if (isLeftInclusive) { + result = `≥${leftValue}${unit}` + } else { + result = `>${leftValue}${unit}` + } + } else { + // 处理有限区间 + const leftNum = parseFloat(leftValue) + const rightNum = parseFloat(rightValue) + + // 检查数值是否有效 + if (isNaN(leftNum) || isNaN(rightNum)) { + return interval + } + + if (leftNum === rightNum) { + // 单点值 + result = `${leftNum}${unit}` + } else { + // 区间值 - 简化为实际数值范围 + if (isLeftInclusive && isRightInclusive) { + result = `${leftNum}-${rightNum}${unit}` + } else if (isLeftInclusive && !isRightInclusive) { + // 右开区间,显示到 rightNum-1 + result = `${leftNum}-${rightNum - 1}${unit}` + } else if (!isLeftInclusive && isRightInclusive) { + // 左开区间,显示从 leftNum+1 + result = `${leftNum + 1}-${rightNum}${unit}` + } else { + // 两端都不包含,显示从 leftNum+1 到 rightNum-1 + result = `${leftNum + 1}-${rightNum - 1}${unit}` + } + } + } + + return result + } catch (error) { + // 如果格式化过程中出现错误,返回原数据 + console.warn('区间格式化失败:', error, '原数据:', interval) + return interval + } +} + +/** + * 格式化金额区间 + * @param {string} interval - 金额区间表达式 + * @returns {string} 格式化后的金额文本 + */ +export function formatAmountInterval(interval) { + return formatInterval(interval, '元') +} + +/** + * 格式化次数区间 + * @param {string} interval - 次数区间表达式 + * @returns {string} 格式化后的次数文本 + */ +export function formatCountInterval(interval) { + return formatInterval(interval, '次') +} + +/** + * 格式化天数区间 + * @param {string} interval - 天数区间表达式 + * @returns {string} 格式化后的天数文本 + */ +export function formatDaysInterval(interval) { + return formatInterval(interval, '天') +} + +/** + * 格式化机构数量区间 + * @param {string} interval - 机构数量区间表达式 + * @returns {string} 格式化后的机构数量文本 + */ +export function formatInstitutionInterval(interval) { + return formatInterval(interval, '家') +} + +/** + * 格式化时间区间 + * @param {string} interval - 时间区间表达式 + * @returns {string} 格式化后的时间文本 + */ +export function formatTimeInterval(interval) { + if (!interval || interval === '-') { + return '-' + } + + // 处理特殊格式,如 "3,6(个月)" + if (interval.includes('(') && interval.includes(')')) { + const match = interval.match(/^(\d+(?:,\d+)*)\((.+)\)$/) + if (match) { + const numbers = match[1].split(',').map(n => n.trim()) + const timeUnit = match[2] + if (numbers.length === 2) { + return `${numbers[0]}-${numbers[1]}${timeUnit}` + } + return `${numbers.join(', ')}${timeUnit}` + } + } + + return formatInterval(interval, '') +} + +/** + * 格式化申请次数区间 + * @param {string} interval - 申请次数区间表达式,格式如 "2/1" + * @returns {string} 格式化后的申请次数文本 + */ +export function formatApplicationInterval(interval) { + if (!interval || interval === '-') { + return '-' + } + + // 处理 "2/1" 格式,表示 申请次数/通过次数 + if (interval.includes('/')) { + const [applyCount, passCount] = interval.split('/') + if (applyCount === passCount) { + return `${applyCount}次(全部通过)` + } else { + return `${applyCount}次(通过${passCount}次)` + } + } + + return formatCountInterval(interval) +} + +/** + * 格式化风险等级文本 + * @param {string} level - 风险等级,如 "C2,C5" + * @returns {string} 格式化后的风险等级文本 + */ +export function formatRiskLevel(level) { + if (!level) return '-' + + const levelMap = { + '0': '正常人员', + 'A': '前科:侵犯公民人身权利,民主权利', + 'A1': '盗窃', + 'A2': '诈骗', + 'A3': '抢劫/夺', + 'A4': '故意伤害/杀人', + 'A5': '强奸/性侵/猥亵', + 'B': '经济类前科', + 'B1': '走私', + 'B2': '破坏金融管理秩序', + 'B3': '正常人员', + 'B4': '洗钱', + 'B5': '洗钱', + 'C': '妨害社会管理秩序', + 'C1': '扰乱公共秩序', + 'C2': '妨害司法', + 'C3': '涉毒', + 'C4': '涉黄刑案', + 'C5': '帮信/掩隐/侵公', + 'D': '重点', + 'D1': '危害国家、公共安全', + 'D2': '涉稳', + 'D3': '涉及境外', + 'D4': '涉恐、疆藏', + 'D5': '涉黑', + 'E': '涉交通案件', + 'F': '法院文书' + } + + return level.split(',').map(l => levelMap[l.trim()] || l.trim()).join('、') +} + +/** + * 格式化状态文本 + * @param {string} status - 状态值 + * @param {Object} statusMap - 状态映射对象 + * @returns {string} 格式化后的状态文本 + */ +export function formatStatus(status, statusMap = {}) { + if (status === undefined || status === null || status === '') { + return '-' + } + + return statusMap[status] || status +} + +/** + * 格式化风险标识 + * @param {number} flag - 风险标识,0=未查得,1=高风险,2=低风险 + * @returns {Object} 包含文本和样式的对象 + */ +export function formatRiskFlag(flag) { + const flagMap = { + 0: { text: '未查得', class: 'bg-gray-100 text-gray-700' }, + 1: { text: '高风险', class: 'bg-red-100 text-red-700' }, + 2: { text: '低风险', class: 'bg-green-100 text-green-700' } + } + + return flagMap[flag] || { text: '未知', class: 'bg-gray-100 text-gray-700' } +} + +/** + * 格式化验证结果 + * @param {string} result - 验证结果 + * @returns {Object} 包含文本和样式的对象 + */ +export function formatVerificationResult(result) { + const resultMap = { + '一致': { text: '一致', class: 'text-green-600' }, + '不一致': { text: '不一致', class: 'text-red-600' }, + '验证通过': { text: '验证通过', class: 'text-green-600' }, + '验证失败': { text: '验证失败', class: 'text-red-600' } + } + + return resultMap[result] || { text: result || '-', class: 'text-gray-600' } +} diff --git a/src/ui/CDWBG8B4D/utils/simpleSplitter.js b/src/ui/CDWBG8B4D/utils/simpleSplitter.js new file mode 100644 index 0000000..f20cb09 --- /dev/null +++ b/src/ui/CDWBG8B4D/utils/simpleSplitter.js @@ -0,0 +1,157 @@ +/** + * 简单的DWBG8B4D数据拆分演示 + * 直接在BaseReport.vue中处理 + */ + +// 在BaseReport.vue的script部分添加这个函数 +function splitDWBG8B4DForTabs(reportData) { + const result = [] + + reportData.forEach(item => { + if (item.data.apiID === 'DWBG8B4D') { + // 将DWBG8B4D拆分成多个独立的tab + const dwbgData = item.data.data + + // 报告概览 + result.push({ + data: { + apiID: 'DWBG8B4D_Overview', + data: { + baseInfo: dwbgData.baseInfo, + checkSuggest: dwbgData.checkSuggest, + fraudScore: dwbgData.fraudScore, + creditScore: dwbgData.creditScore, + verifyRule: dwbgData.verifyRule, + fraudRule: dwbgData.fraudRule, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 规则风险提示 + result.push({ + data: { + apiID: 'DWBG8B4D_RiskWarningTab', + data: { + riskWarning: dwbgData.riskWarning, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 要素核查 + result.push({ + data: { + apiID: 'DWBG8B4D_ElementVerification', + data: { + sfzeysFlag: dwbgData.elementVerificationDetail?.sfzeysFlag || 0, + personCheckDetails: dwbgData.elementVerificationDetail?.personCheckDetails || {}, + sjsysFlag: dwbgData.elementVerificationDetail?.sjsysFlag || 0, + phoneCheckDetails: dwbgData.elementVerificationDetail?.phoneCheckDetails || {}, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 运营商核验 + result.push({ + data: { + apiID: 'DWBG8B4D_Identity', + data: { + inTime: dwbgData.standLiveInfo?.inTime || '', + phoneVailRiskFlag: dwbgData.elementVerificationDetail?.phoneVailRiskFlag || 0, + phoneVailRisks: dwbgData.elementVerificationDetail?.phoneVailRisks || {}, + belongRiskFlag: dwbgData.elementVerificationDetail?.belongRiskFlag || 0, + belongRisks: dwbgData.elementVerificationDetail?.belongRisks || {}, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 公安重点人员检验 + result.push({ + data: { + apiID: 'DWBG8B4D_RiskWarning', + data: { + highRiskFlag: dwbgData.elementVerificationDetail?.highRiskFlag || 0, + keyPersonCheckList: dwbgData.elementVerificationDetail?.keyPersonCheckList || {}, + antiFraudInfo: dwbgData.elementVerificationDetail?.antiFraudInfo || {}, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 逾期风险产品 + result.push({ + data: { + apiID: 'DWBG8B4D_OverdueRisk', + data: { + overdueRiskProduct: dwbgData.overdueRiskProduct, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 法院曝光台信息 + result.push({ + data: { + apiID: 'DWBG8B4D_CourtInfo', + data: { + multCourtInfo: dwbgData.multCourtInfo, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 借贷评估 + result.push({ + data: { + apiID: 'DWBG8B4D_LoanEvaluation', + data: { + loanEvaluationVerificationDetail: dwbgData.loanEvaluationVerificationDetail, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 租赁风险评估 + result.push({ + data: { + apiID: 'DWBG8B4D_LeasingRisk', + data: { + leasingRiskAssessment: dwbgData.leasingRiskAssessment, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + + // 关联风险监督 + result.push({ + data: { + apiID: 'DWBG8B4D_RiskSupervision', + data: { + riskSupervision: dwbgData.riskSupervision, + success: dwbgData.success, + timestamp: dwbgData.timestamp + } + } + }) + } else { + // 其他数据直接添加 + result.push(item) + } + }) + + return result +} + +export { splitDWBG8B4DForTabs } diff --git a/src/ui/CFLXG0V4B/components/CaseDetail.vue b/src/ui/CFLXG0V4B/components/CaseDetail.vue new file mode 100644 index 0000000..73e1ca9 --- /dev/null +++ b/src/ui/CFLXG0V4B/components/CaseDetail.vue @@ -0,0 +1,641 @@ + + + \ No newline at end of file diff --git a/src/ui/CFLXG0V4B/components/StatisticsOverview.vue b/src/ui/CFLXG0V4B/components/StatisticsOverview.vue new file mode 100644 index 0000000..9d48834 --- /dev/null +++ b/src/ui/CFLXG0V4B/components/StatisticsOverview.vue @@ -0,0 +1,410 @@ + + + diff --git a/src/ui/CFLXG0V4B/index.vue b/src/ui/CFLXG0V4B/index.vue new file mode 100644 index 0000000..bfc2b2e --- /dev/null +++ b/src/ui/CFLXG0V4B/index.vue @@ -0,0 +1,441 @@ + + + + + diff --git a/src/ui/CFLXG0V4B/utils/lawsuitUtils.js b/src/ui/CFLXG0V4B/utils/lawsuitUtils.js new file mode 100644 index 0000000..8b225f0 --- /dev/null +++ b/src/ui/CFLXG0V4B/utils/lawsuitUtils.js @@ -0,0 +1,302 @@ +// 案件类型映射表 +export const lawsuitTypeMap = { + sxbzxr: { + text: '失信被执行', + color: 'text-red-600 bg-red-50', + darkColor: 'bg-red-500', + riskLevel: 'high', // 高风险 + }, + xgbzxr: { + text: '限高被执行', + color: 'text-orange-600 bg-orange-50', + darkColor: 'bg-orange-500', + riskLevel: 'high', // 高风险 + }, + criminal: { + text: '刑事案件', + color: 'text-red-600 bg-red-50', + darkColor: 'bg-red-500', + riskLevel: 'high', // 高风险 + }, + civil: { + text: '民事案件', + color: 'text-blue-600 bg-blue-50', + darkColor: 'bg-blue-500', + riskLevel: 'medium', // 中风险 + }, + administrative: { + text: '行政案件', + color: 'text-purple-600 bg-purple-50', + darkColor: 'bg-purple-500', + riskLevel: 'medium', // 中风险 + }, + implement: { + text: '执行案件', + color: 'text-orange-600 bg-orange-50', + darkColor: 'bg-orange-500', + riskLevel: 'medium', // 中风险 + }, + bankrupt: { + text: '强制清算与破产案件', + color: 'text-rose-600 bg-rose-50', + darkColor: 'bg-rose-500', + riskLevel: 'high', // 高风险 + }, + preservation: { + text: '非诉保全审查', + color: 'text-amber-600 bg-amber-50', + darkColor: 'bg-amber-500', + riskLevel: 'low', // 低风险 + }, +} + +// 案件类型文本 +export const getCaseTypeText = type => { + return lawsuitTypeMap[type]?.text || '其他案件' +} + +// 案件类型颜色 +export const getCaseTypeColor = type => { + return lawsuitTypeMap[type]?.color || 'text-gray-600 bg-gray-50' +} + +// 案件类型深色 +export const getCaseTypeDarkColor = type => { + return lawsuitTypeMap[type]?.darkColor || 'bg-gray-500' +} + +// 格式化日期显示 +export const formatDate = dateStr => { + if (!dateStr) return '—' + // 转换YYYY-MM-DD为年月日格式 + if (dateStr.includes('-')) { + const parts = dateStr.split('-') + if (parts.length === 3) { + return `${parts[0]}年${parts[1]}月${parts[2]}日` + } + } + return dateStr // 如果不是标准格式则返回原始字符串 +} + +// 格式化金额显示(单位:万元) +export const formatLawsuitMoney = money => { + if (!money) return '—' + + const value = parseFloat(money) + if (isNaN(value)) return '—' + + // 超过1亿显示亿元 + if (value >= 10000) { + return ( + (value / 10000).toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + ' 亿元' + ) + } + + // 否则显示万元 + return ( + value.toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + ' 万元' + ) +} + +// 获取案件状态样式 +export const getCaseStatusClass = status => { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('已结') || status.includes('已办结')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('执行中') || status.includes('审理中')) { + return 'bg-blue-50 text-blue-600' + } else if (status.includes('未执行')) { + return 'bg-amber-50 text-amber-600' + } else { + return 'bg-gray-100 text-gray-500' + } +} + +// 获取企业状态对应的样式 +export const getStatusClass = status => { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('注销') || status.includes('吊销')) { + return 'bg-red-50 text-red-600' + } else if (status.includes('存续') || status.includes('在营')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('筹建') || status.includes('新设')) { + return 'bg-blue-50 text-blue-600' + } else { + return 'bg-yellow-50 text-yellow-600' + } +} + +// 格式化资本金额显示 +export const formatCapital = (capital, currency) => { + if (!capital) return '—' + + // 检查是否包含"万"字或需要显示为万元 + let unit = '' + let value = parseFloat(capital) + + // 处理原始数据中可能带有的单位 + if (typeof capital === 'string' && capital.includes('万')) { + unit = '万' + // 提取数字部分 + const numMatch = capital.match(/[\d.]+/) + value = numMatch ? parseFloat(numMatch[0]) : 0 + } else if (value >= 10000) { + // 大额数字转换为万元显示 + value = value / 10000 + unit = '万' + } + + // 格式化数字,保留两位小数(如果有小数部分) + const formattedValue = value.toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + + return `${formattedValue}${unit} ${currency || '人民币'}` +} + +// 获取涉诉风险等级 +export const getRiskLevel = lawsuitInfo => { + if (!lawsuitInfo) { + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } + } + + // 失信被执行人是最高风险 + if (lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0) { + return { + level: 'high', + text: '高风险', + color: 'text-red-600 bg-red-50', + } + } + + // 限高被执行人是最高风险 + if (lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0) { + return { + level: 'high', + text: '高风险', + color: 'text-red-600 bg-red-50', + } + } + + // 有涉诉数据的风险级别 + if (lawsuitInfo.data && Object.keys(lawsuitInfo.data).length > 0) { + // 检查是否有未结案的案件 + const data = lawsuitInfo.data + if (data.count && data.count_wei_total && data.count_wei_total > 0) { + return { + level: 'medium', + text: '中风险', + color: 'text-amber-600 bg-amber-50', + } + } + + // 只有已结案的为低中风险 + return { + level: 'low-medium', + text: '低中风险', + color: 'text-yellow-600 bg-yellow-50', + } + } + + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } +} + +// 获取涉诉案件统计 +export const getLawsuitStats = lawsuitInfo => { + if (!lawsuitInfo) return null + + const stats = { + total: 0, + types: [], + } + + // 统计各类型案件数量 + Object.keys(lawsuitTypeMap).forEach(type => { + let count = 0 + + if (type === 'sxbzxr') { + count = lawsuitInfo.sxbzxr && lawsuitInfo.sxbzxr.length > 0 ? lawsuitInfo.sxbzxr.length : 0 + } else if (type === 'xgbzxr') { + count = lawsuitInfo.xgbzxr && lawsuitInfo.xgbzxr.length > 0 ? lawsuitInfo.xgbzxr.length : 0 + } else if (lawsuitInfo.data && lawsuitInfo.data[type] && Object.keys(lawsuitInfo.data[type]).length > 0) { + const typeData = lawsuitInfo.data[type] + count = typeData.cases && typeData.cases.length ? typeData.cases.length : 0 + } + + if (count > 0) { + stats.total += count + stats.types.push({ + type, + count, + name: getCaseTypeText(type), + color: getCaseTypeColor(type), + darkColor: getCaseTypeDarkColor(type), + }) + } + }) + + return stats +} + +// 获取案件类型优先级顺序 +export const getCaseTypePriority = () => { + return [ + 'sxbzxr', // 失信被执行人(最高风险) + 'xgbzxr', // 限高被执行人 + 'criminal', // 刑事案件 + 'civil', // 民事案件 + 'administrative', // 行政案件 + 'implement', // 执行案件 + 'bankrupt', // 强制清算与破产案件 + 'preservation', // 非诉保全审查 + ] +} + +// 根据案件类型获取风险等级 +export const getCaseTypeRiskLevel = caseType => { + const typeInfo = lawsuitTypeMap[caseType] + if (!typeInfo) { + return { + level: 'low', + text: '低风险', + color: 'text-green-600 bg-green-50', + } + } + + const riskLevelMap = { + high: { + text: '高风险', + color: 'text-red-600 bg-red-50', + }, + medium: { + text: '中风险', + color: 'text-amber-600 bg-amber-50', + }, + low: { + text: '低风险', + color: 'text-green-600 bg-green-50', + }, + } + + return { + level: typeInfo.riskLevel, + ...riskLevelMap[typeInfo.riskLevel], + } +} diff --git a/src/ui/CFLXG3D56.vue b/src/ui/CFLXG3D56.vue new file mode 100644 index 0000000..8a65730 --- /dev/null +++ b/src/ui/CFLXG3D56.vue @@ -0,0 +1,1048 @@ + + + + + diff --git a/src/ui/CIVYZ5733.vue b/src/ui/CIVYZ5733.vue new file mode 100644 index 0000000..35663d8 --- /dev/null +++ b/src/ui/CIVYZ5733.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/ui/CIVYZ9A2B.vue b/src/ui/CIVYZ9A2B.vue new file mode 100644 index 0000000..c6ce51a --- /dev/null +++ b/src/ui/CIVYZ9A2B.vue @@ -0,0 +1,931 @@ + + + + + diff --git a/src/ui/CJRZQ0A03.vue b/src/ui/CJRZQ0A03.vue new file mode 100644 index 0000000..b20cf7f --- /dev/null +++ b/src/ui/CJRZQ0A03.vue @@ -0,0 +1,1385 @@ + + + + + diff --git a/src/ui/CJRZQ4AA8.vue b/src/ui/CJRZQ4AA8.vue new file mode 100644 index 0000000..c6d7f51 --- /dev/null +++ b/src/ui/CJRZQ4AA8.vue @@ -0,0 +1,320 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/README.md b/src/ui/CJRZQ5E9F/README.md new file mode 100644 index 0000000..afe2154 --- /dev/null +++ b/src/ui/CJRZQ5E9F/README.md @@ -0,0 +1,246 @@ +# 贷款风险报告组件 (CJRZQ5E9F) - 模块化架构 + +## 概述 + +贷款风险报告组件采用模块化架构设计,将完整的贷款风险评估拆分成7个独立的模块,每个模块都可以作为独立的tab显示,具有独立的大标题。 + +## 数据结构 + +贷款风险报告的数据结构如下: + +```javascript +{ + "apiID": "CJRZQ5E9F", + "data": { + "xyp_cpl0001": "5", // 贷款总机构数 + "xyp_cpl0002": "3", // 已结清机构数 + "xyp_cpl0007": "2", // 消费金融类机构数 + "xyp_cpl0008": "1", // 网络贷款类机构数 + "xyp_cpl0009": "1", // 最近7天机构数 + "xyp_cpl0014": "15", // 历史成功还款笔数 + "xyp_cpl0015": "2", // 历史失败还款笔数 + "xyp_cpl0016": "1", // 最近1天失败笔数 + "xyp_cpl0017": "3", // 最近1天成功笔数 + "xyp_cpl0018": "1", // 最近7天失败笔数 + "xyp_cpl0019": "5", // 最近7天成功笔数 + "xyp_cpl0020": "1", // 最近14天失败笔数 + "xyp_cpl0021": "7", // 最近14天成功笔数 + "xyp_cpl0022": "2", // 最近30天失败笔数 + "xyp_cpl0023": "10", // 最近30天成功笔数 + "xyp_cpl0024": "2", // 最近90天失败笔数 + "xyp_cpl0025": "12", // 最近90天成功笔数 + "xyp_cpl0026": "2", // 最近180天失败笔数 + "xyp_cpl0027": "14", // 最近180天成功笔数 + "xyp_cpl0028": "0", // 最近1天逾期标识 + "xyp_cpl0029": "0", // 最近7天逾期标识 + "xyp_cpl0030": "0", // 最近14天逾期标识 + "xyp_cpl0031": "0", // 最近30天逾期标识 + "xyp_cpl0032": "1000", // 最近1天失败金额 + "xyp_cpl0033": "5000", // 最近1天成功金额 + "xyp_cpl0034": "2000", // 最近7天失败金额 + "xyp_cpl0035": "8000", // 最近7天成功金额 + "xyp_cpl0036": "1500", // 最近14天失败金额 + "xyp_cpl0037": "12000", // 最近14天成功金额 + "xyp_cpl0038": "3000", // 最近30天失败金额 + "xyp_cpl0039": "20000", // 最近30天成功金额 + "xyp_cpl0040": "4000", // 最近90天失败金额 + "xyp_cpl0041": "35000", // 最近90天成功金额 + "xyp_cpl0042": "5000", // 最近180天失败金额 + "xyp_cpl0043": "45000", // 最近180天成功金额 + "xyp_cpl0044": "0", // 当前逾期状态 + "xyp_cpl0045": "365", // 信用贷款时长 + "xyp_cpl0046": "30", // 最近一次交易距今天数 + "xyp_cpl0064": "1", // 最近21天成功笔数 + "xyp_cpl0065": "0", // 最近21天失败笔数 + "xyp_cpl0066": "1000", // 最近21天失败金额 + "xyp_cpl0067": "6000", // 最近21天成功金额 + "xyp_cpl0068": "15", // 最近一次还款距今天数 + "xyp_cpl0070": "1", // 最近1天机构数 + "xyp_cpl0071": "0", // 当前逾期机构数 + "xyp_cpl0072": "0", // 当前逾期金额 + "xyp_cpl0073": "0.85", // 近5次金额成功率 + "xyp_cpl0074": "0.80", // 近5次还款成功率 + "xyp_cpl0075": "0.75", // 近20次小贷成功率 + "xyp_cpl0079": "0.70", // 近90天金额成功率 + "xyp_cpl0080": "0.65", // 近90天还款成功率 + "xyp_cpl0081": "0.25", // 信用风险评分 + "xyp_cpl0082": "0.30", // 履约金额综合指数 + "xyp_cpl0083": "0.35", // 履约笔数综合指数 + "xyp_model_score_high": "750", // 小额网贷分 + "xyp_model_score_mid": "680", // 小额分期分 + "xyp_model_score_low": "720", // 中大额分期分 + "xyp_t0400002": "0.78", // 近20次还款成功率 + "xyp_t0400003": "0.82", // 近50次还款成功率 + "xyp_t0400004": "0.80" // 近100次还款成功率 + }, + "success": true, + "timestamp": "2025-01-20 21:19:58" +} +``` + +## 模块拆分 + +贷款风险报告被拆分成以下7个独立模块: + +| API ID | 模块名称 | 包含数据 | 组件文件 | +|--------|----------|----------|----------| +| `CJRZQ5E9F_RiskOverview` | 风险概览 | 综合风险等级、当前状态、关键指标 | RiskOverview.vue | +| `CJRZQ5E9F_CreditScores` | 信用评分 | 综合信用指数、专业模型评分、还款表现 | CreditScores.vue | +| `CJRZQ5E9F_LoanBehaviorAnalysis` | 贷款行为分析 | 机构类型分布、还款表现统计、时间维度分析 | LoanBehaviorAnalysis.vue | +| `CJRZQ5E9F_InstitutionAnalysis` | 机构分析 | 机构类型分析、合作机构详情 | InstitutionAnalysis.vue | +| `CJRZQ5E9F_TimeTrendAnalysis` | 时间趋势分析 | 历史趋势、周期性分析 | TimeTrendAnalysis.vue | +| `CJRZQ5E9F_RiskIndicators` | 风险指标详情 | 详细风险指标、风险因子分析 | RiskIndicators.vue | +| `CJRZQ5E9F_RiskAdvice` | 专业建议 | 风险评估建议、优化建议 | RiskAdvice.vue | + +## 使用方法 + +### 1. 前端自动拆分 + +BaseReport.vue 已自动配置支持贷款风险报告的模块化显示: + +```javascript +import { splitCJRZQ5E9FForTabs } from '@/ui/CJRZQ5E9F/utils/simpleSplitter.js'; + +// 处理数据拆分(支持DWBG8B4D、DWBG6A2C和CJRZQ5E9F) +const processedReportData = computed(() => { + let data = reportData.value; + + // 拆分DWBG8B4D数据 + data = splitDWBG8B4DForTabs(data); + + // 拆分DWBG6A2C数据 + data = splitDWBG6A2CForTabs(data); + + // 拆分CJRZQ5E9F数据 + data = splitCJRZQ5E9FForTabs(data); + + return data; +}); +``` + +### 2. 组件配置 + +BaseReport.vue 中已配置所有贷款风险报告模块: + +```javascript +// 贷款风险报告 +JRZQ5E9F: { + name: "贷款风险评估", + component: defineAsyncComponent(() => import("@/ui/CJRZQ5E9F/index.vue")), + remark: '贷款风险评估提供全面的个人贷款风险分析,包括风险概览、信用评分、贷款行为分析、机构分析等多维度评估。' +}, +// ... 其他模块配置 +``` + +## 组件结构 + +``` +src/ui/CJRZQ5E9F/ +├── index.vue # 原始完整组件(保留) +├── README.md # 文档说明 +├── components/ # 子组件目录 +│ ├── RiskOverview.vue # 风险概览 +│ ├── CreditScores.vue # 信用评分 +│ ├── LoanBehaviorAnalysis.vue # 贷款行为分析 +│ ├── InstitutionAnalysis.vue # 机构分析 +│ ├── TimeTrendAnalysis.vue # 时间趋势分析 +│ ├── RiskIndicators.vue # 风险指标详情 +│ └── RiskAdvice.vue # 专业建议 +└── utils/ + └── simpleSplitter.js # 数据拆分工具 +``` + +## 特色功能 + +### 1. 智能风险评估 +- 多维度风险等级计算 +- 智能颜色编码 +- 动态风险提示 + +### 2. 数据可视化 +- 渐变色彩设计 +- 图标化展示 +- 响应式布局 +- 交互式图表 + +### 3. 用户友好 +- 清晰的层次结构 +- 详细的说明文档 +- 直观的风险提示 +- 专业的建议指导 + +### 4. 模块化设计 +- 独立的模块组件 +- 可复用的工具函数 +- 灵活的数据拆分 +- 易于维护和扩展 + +## 工具函数 + +`utils/simpleSplitter.js` 提供了以下工具函数: + +- `splitCJRZQ5E9FForTabs()` - 数据拆分 +- `parseIntervalValue()` - 解析区间化数值 +- `formatMetricValue()` - 格式化指标值 +- `formatDays()` - 格式化天数显示 +- `formatAmount()` - 格式化金额显示 +- `calculateRiskLevel()` - 计算风险等级 +- `calculateCreditScore()` - 计算信用评分 +- `getCreditScoreLevel()` - 获取信用等级描述 +- `getCreditScoreBadgeClass()` - 获取信用等级样式 +- `getScoreClass()` - 获取评分样式 +- `getCircleStyle()` - 获取圆形进度样式 +- `hasRiskData()` - 检查是否有风险数据 + +## 使用示例 + +```javascript +// 在页面中使用 + +``` + +## 数据字段说明 + +### 主要指标字段 +- `xyp_cpl0001`: 贷款总机构数 +- `xyp_cpl0002`: 已结清机构数 +- `xyp_cpl0044`: 当前逾期状态 (0: 无逾期, 1: 有逾期) +- `xyp_cpl0081`: 信用风险评分 (0-1) +- `xyp_cpl0082`: 履约金额综合指数 (0-1) +- `xyp_cpl0083`: 履约笔数综合指数 (0-1) + +### 模型评分字段 +- `xyp_model_score_high`: 小额网贷分 (350-950) +- `xyp_model_score_mid`: 小额分期分 (350-950) +- `xyp_model_score_low`: 中大额分期分 (350-950) + +### 还款表现字段 +- `xyp_cpl0073`: 近5次金额成功率 +- `xyp_cpl0074`: 近5次还款成功率 +- `xyp_t0400002`: 近20次还款成功率 +- `xyp_t0400003`: 近50次还款成功率 +- `xyp_t0400004`: 近100次还款成功率 + +## 注意事项 + +1. 确保数据格式符合贷款风险报告的标准结构 +2. 所有模块都支持数据为空的情况 +3. 风险评估基于实际数据动态计算 +4. 组件采用 Tailwind CSS 进行样式设计 +5. 支持移动端响应式布局 +6. 区间化数值会自动解析为具体数值进行显示 + +## 更新日志 + +- v1.0.0: 初始版本,支持完整的贷款风险报告模块化显示 +- 包含7个独立模块 +- 支持自动数据拆分 +- 提供完整的风险评估功能 +- 支持多种数据可视化方式 diff --git a/src/ui/CJRZQ5E9F/components/CreditScores.vue b/src/ui/CJRZQ5E9F/components/CreditScores.vue new file mode 100644 index 0000000..c338e5d --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/CreditScores.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/InstitutionAnalysis.vue b/src/ui/CJRZQ5E9F/components/InstitutionAnalysis.vue new file mode 100644 index 0000000..ad928f1 --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/InstitutionAnalysis.vue @@ -0,0 +1,313 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/LoanBehaviorAnalysis.vue b/src/ui/CJRZQ5E9F/components/LoanBehaviorAnalysis.vue new file mode 100644 index 0000000..955e1e6 --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/LoanBehaviorAnalysis.vue @@ -0,0 +1,681 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/RiskAdvice.vue b/src/ui/CJRZQ5E9F/components/RiskAdvice.vue new file mode 100644 index 0000000..e52e6aa --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/RiskAdvice.vue @@ -0,0 +1,982 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/RiskIndicators.vue b/src/ui/CJRZQ5E9F/components/RiskIndicators.vue new file mode 100644 index 0000000..ae3faa7 --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/RiskIndicators.vue @@ -0,0 +1,717 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/RiskOverview.vue b/src/ui/CJRZQ5E9F/components/RiskOverview.vue new file mode 100644 index 0000000..f21adca --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/RiskOverview.vue @@ -0,0 +1,358 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/components/TimeTrendAnalysis.vue b/src/ui/CJRZQ5E9F/components/TimeTrendAnalysis.vue new file mode 100644 index 0000000..0cb008f --- /dev/null +++ b/src/ui/CJRZQ5E9F/components/TimeTrendAnalysis.vue @@ -0,0 +1,1354 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/index.vue b/src/ui/CJRZQ5E9F/index.vue new file mode 100644 index 0000000..c3b875b --- /dev/null +++ b/src/ui/CJRZQ5E9F/index.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/ui/CJRZQ5E9F/utils/simpleSplitter.js b/src/ui/CJRZQ5E9F/utils/simpleSplitter.js new file mode 100644 index 0000000..e01f1cf --- /dev/null +++ b/src/ui/CJRZQ5E9F/utils/simpleSplitter.js @@ -0,0 +1,301 @@ +/** + * 贷款风险报告(CJRZQ5E9F)数据拆分工具 + * 将完整的贷款风险报告数据拆分成多个独立的模块,用于在不同的tab中显示 + */ + +/** + * 将CJRZQ5E9F数据拆分为多个独立的tab模块 + * @param {Array} reportData - 原始报告数据数组 + * @returns {Array} 拆分后的模块数组 + */ +export function splitCJRZQ5E9FForTabs(reportData) { + // 查找CJRZQ5E9F数据 + const cjrzq5e9fData = reportData.find(item => item.data?.apiID === 'JRZQ5E9F'); + + if (!cjrzq5e9fData || !cjrzq5e9fData.data?.data) { + return reportData; // 如果没有找到CJRZQ5E9F数据,返回原数据 + } + + const originalData = cjrzq5e9fData.data.data; + const baseTimestamp = cjrzq5e9fData.data.timestamp; + + // 创建拆分后的模块数组 + const splitModules = []; + + // 1. 风险概览 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_RiskOverview', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 2. 信用评分 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_CreditScores', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 3. 贷款行为分析 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_LoanBehaviorAnalysis', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 4. 机构分析 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_InstitutionAnalysis', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 5. 时间趋势分析 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_TimeTrendAnalysis', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 6. 风险指标详情 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_RiskIndicators', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 7. 专业建议 + if (originalData && Object.keys(originalData).length > 0) { + splitModules.push({ + data: { + apiID: 'CJRZQ5E9F_RiskAdvice', + data: originalData, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 移除原始的CJRZQ5E9F数据,添加拆分后的模块 + const otherData = reportData.filter(item => item.data?.apiID !== 'CJRZQ5E9F'); + + return [...otherData, ...splitModules]; +} + +/** + * 解析区间化数值 + * @param {string|number} value - 原始值 + * @returns {number} 解析后的数值 + */ +export function parseIntervalValue(value) { + if (!value || value === '' || value === '-1') return 0; + const num = parseInt(value); + if (isNaN(num)) return 0; + + // 根据区间映射返回大致范围的中值 + switch (num) { + case 1: return 1; + case 2: return 3; + case 3: return 7; + case 4: return 15; + case 5: return 25; + default: return num; + } +} + +/** + * 格式化指标值显示 + * @param {number} value - 数值 + * @returns {string} 格式化后的显示文本 + */ +export function formatMetricValue(value) { + if (value === 0) return '0'; + if (value < 5) return `${value}`; + return `${value}+`; +} + +/** + * 格式化天数显示 + * @param {number} value - 天数 + * @returns {string} 格式化后的显示文本 + */ +export function formatDays(value) { + if (value === 0) return '无记录'; + if (value < 30) return `${value}天`; + if (value < 365) return `${Math.floor(value/30)}个月`; + return `${Math.floor(value/365)}年`; +} + +/** + * 格式化金额显示 + * @param {number} value - 金额 + * @returns {string} 格式化后的显示文本 + */ +export function formatAmount(value) { + if (value === 0) return '0元'; + if (value < 1000) return `${value}元`; + if (value < 10000) return `${(value / 1000).toFixed(1)}千元`; + return `${(value / 10000).toFixed(1)}万元`; +} + +/** + * 计算风险等级 + * @param {number} creditScore - 信用风险评分 + * @param {number} overdueIndex - 逾期指数 + * @param {boolean} currentOverdue - 当前是否逾期 + * @returns {object} 包含等级、颜色和描述的对象 + */ +export function calculateRiskLevel(creditScore, overdueIndex, currentOverdue) { + if (creditScore > 0.7 || overdueIndex > 0.7 || currentOverdue) { + return { + level: '高风险', + color: 'text-red-600', + bgColor: 'bg-red-100', + iconColor: 'bg-red-500', + description: '存在较高信用风险,建议谨慎放贷' + }; + } else if (creditScore > 0.4 || overdueIndex > 0.4) { + return { + level: '中风险', + color: 'text-yellow-600', + bgColor: 'bg-yellow-100', + iconColor: 'bg-yellow-500', + description: '信用风险适中,需要进一步评估' + }; + } else { + return { + level: '低风险', + color: 'text-green-600', + bgColor: 'bg-green-100', + iconColor: 'bg-green-500', + description: '信用风险较低,具备良好还款能力' + }; + } +} + +/** + * 计算信用评分显示 + * @param {number} creditRiskScore - 信用风险评分 + * @param {number} amountComplianceIndex - 履约金额综合指数 + * @param {number} countComplianceIndex - 履约笔数综合指数 + * @returns {object} 包含评分、进度和颜色的对象 + */ +export function calculateCreditScore(creditRiskScore, amountComplianceIndex, countComplianceIndex) { + const avgRisk = (creditRiskScore + amountComplianceIndex + countComplianceIndex) / 3; + // 风险越高,信用分越低 + const score = Math.round((1 - avgRisk) * 850 + 150); + const progress = (score / 1000) * 283; + + let color = '#ef4444'; + if (score >= 750) color = '#10b981'; + else if (score >= 650) color = '#f59e0b'; + + return { + score, + progress, + color + }; +} + +/** + * 获取信用等级描述 + * @param {number} score - 信用评分 + * @returns {string} 等级描述 + */ +export function getCreditScoreLevel(score) { + if (score >= 800) return '优秀'; + if (score >= 700) return '良好'; + if (score >= 600) return '一般'; + if (score >= 500) return '较差'; + return '很差'; +} + +/** + * 获取信用等级样式类 + * @param {number} score - 信用评分 + * @returns {string} 样式类名 + */ +export function getCreditScoreBadgeClass(score) { + if (score >= 800) return 'bg-green-100 text-green-800'; + if (score >= 700) return 'bg-blue-100 text-blue-800'; + if (score >= 600) return 'bg-yellow-100 text-yellow-800'; + if (score >= 500) return 'bg-orange-100 text-orange-800'; + return 'bg-red-100 text-red-800'; +} + +/** + * 获取评分样式类 + * @param {number} score - 评分 + * @returns {string} 样式类名 + */ +export function getScoreClass(score) { + if (score === null) return 'text-gray-400'; + if (score >= 750) return 'text-green-600'; + if (score >= 650) return 'text-yellow-600'; + return 'text-red-600'; +} + +/** + * 获取圆形进度样式 + * @param {number} ratio - 比例值 (0-1) + * @returns {object} 样式对象 + */ +export function getCircleStyle(ratio) { + let color = '#ef4444'; + if (ratio >= 0.8) color = '#10b981'; + else if (ratio >= 0.6) color = '#f59e0b'; + + // 确保至少显示10度,让用户知道是图表 + const minDegree = 10; + const actualDegree = Math.max(ratio * 360, minDegree); + + return { + background: `conic-gradient(${color} ${actualDegree}deg, #e5e7eb 0deg)` + }; +} + +/** + * 检查是否有风险数据 + * @param {Object} data - 数据对象 + * @returns {boolean} 是否有风险 + */ +export function hasRiskData(data) { + if (!data) return false; + + // 检查对象中是否有非0值 + return Object.values(data).some(value => { + if (typeof value === 'number') return value > 0; + if (typeof value === 'string') return value !== '0' && value !== '-' && value !== ''; + return false; + }); +} diff --git a/src/ui/CJRZQ8203.vue b/src/ui/CJRZQ8203.vue new file mode 100644 index 0000000..7a87806 --- /dev/null +++ b/src/ui/CJRZQ8203.vue @@ -0,0 +1,913 @@ + + + + + diff --git a/src/ui/CQCXG7A2B.vue b/src/ui/CQCXG7A2B.vue new file mode 100644 index 0000000..8801ac6 --- /dev/null +++ b/src/ui/CQCXG7A2B.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CQYGL3F8E/README.md b/src/ui/CQYGL3F8E/README.md new file mode 100644 index 0000000..88fb581 --- /dev/null +++ b/src/ui/CQYGL3F8E/README.md @@ -0,0 +1,238 @@ +# CQYGL3F8E 人企关系加强版模块 + +## 概述 + +CQYGL3F8E 是人企关系加强版模块,提供全面的企业关联分析功能。该模块通过拆分功能,将原本的单一组件分解为三个独立的子模块,每个子模块专注于特定类型的企业关联信息展示。 + +## 模块结构 + +### 主模块 +- **文件位置**: `src/ui/CQYGL3F8E/index.vue` +- **功能**: 整合三个子模块,提供完整的人企关系分析视图 +- **API ID**: `QYGL3F8E` + +### 子模块 + +#### 1. 投资企业记录 (Investment) +- **文件位置**: `src/ui/CQYGL3F8E/components/Investment.vue` +- **API ID**: `CQYGL3F8E_Investment` +- **功能**: 展示用户作为股东、历史股东、法人、历史法人的企业记录 +- **数据来源**: 过滤 `relationship` 字段包含 `["sh", "his_sh", "lp", "his_lp"]` 的企业 + +#### 2. 高管任职记录 (SeniorExecutive) +- **文件位置**: `src/ui/CQYGL3F8E/components/SeniorExecutive.vue` +- **API ID**: `CQYGL3F8E_SeniorExecutive` +- **功能**: 展示用户作为高管、历史高管的企业任职记录 +- **数据来源**: 过滤 `relationship` 字段包含 `["tm", "his_tm"]` 的企业 + +#### 3. 涉诉风险 (Lawsuit) +- **文件位置**: `src/ui/CQYGL3F8E/components/Lawsuit.vue` +- **API ID**: `CQYGL3F8E_Lawsuit` +- **功能**: 展示存在涉诉风险的企业信息 +- **数据来源**: 过滤 `lawsuitInfo` 字段包含有效涉诉数据的企业 + +#### 4. 对外投资历史 (InvestHistory) +- **文件位置**: `src/ui/CQYGL3F8E/components/InvestHistory.vue` +- **API ID**: `CQYGL3F8E_InvestHistory` +- **功能**: 展示企业的对外投资历史记录 +- **数据来源**: `invest_history` 字段 + +#### 5. 融资历史 (FinancingHistory) +- **文件位置**: `src/ui/CQYGL3F8E/components/FinancingHistory.vue` +- **API ID**: `CQYGL3F8E_FinancingHistory` +- **功能**: 展示企业的融资历史记录 +- **数据来源**: `financing_history` 字段 + +#### 6. 行政处罚 (Punishment) +- **文件位置**: `src/ui/CQYGL3F8E/components/Punishment.vue` +- **API ID**: `CQYGL3F8E_Punishment` +- **功能**: 展示企业的行政处罚记录 +- **数据来源**: `punishment_info` 字段 + +#### 7. 经营异常 (Abnormal) +- **文件位置**: `src/ui/CQYGL3F8E/components/Abnormal.vue` +- **API ID**: `CQYGL3F8E_Abnormal` +- **功能**: 展示企业的经营异常记录 +- **数据来源**: `abnormal_info` 字段 + +#### 8. 欠税公告 (OwnTax) +- **文件位置**: `src/ui/CQYGL3F8E/components/OwnTax.vue` +- **API ID**: `CQYGL3F8E_OwnTax` +- **功能**: 展示企业的欠税公告记录 +- **数据来源**: `own_tax` 字段 + +#### 9. 税收违法 (TaxContravention) +- **文件位置**: `src/ui/CQYGL3F8E/components/TaxContravention.vue` +- **API ID**: `CQYGL3F8E_TaxContravention` +- **功能**: 展示企业的税收违法记录 +- **数据来源**: `tax_contravention` 字段 + +## 数据拆分逻辑 + +### 数据源结构 +```javascript +{ + data: { + apiID: 'QYGL3F8E', + data: { + items: [ + { + orgName: '企业名称', + relationship: ['sh', 'tm'], // 关系类型 + lawsuitInfo: { ... }, // 涉诉信息 + basicInfo: { ... }, // 基本信息 + stockHolderItem: { ... }, // 持股信息 + staffList: { ... } // 人员列表 + } + ] + } + } +} +``` + +### 拆分规则 + +#### 投资企业记录 +- **过滤条件**: `relationship` 包含投资类关系 +- **关系类型**: `["sh", "his_sh", "lp", "his_lp"]` +- **包含字段**: 完整的企业信息,包括持股详情 + +#### 高管任职记录 +- **过滤条件**: `relationship` 包含高管类关系 +- **关系类型**: `["tm", "his_tm"]` +- **包含字段**: 完整的企业信息,重点关注任职信息 + +#### 涉诉风险 +- **过滤条件**: `lawsuitInfo` 包含有效涉诉数据 +- **检查字段**: + - `lawsuitInfo.entout.data` (非空对象) + - `lawsuitInfo.sxbzxr.data.sxbzxr` (非空数组) + - `lawsuitInfo.xgbzxr.data.xgbzxr` (非空数组) +- **包含字段**: 涉诉企业和总数统计 + +#### 对外投资历史 +- **数据来源**: `invest_history.items` 数组 +- **包含字段**: 投资企业信息、持股比例、注册资本等 + +#### 融资历史 +- **数据来源**: `financing_history.items` 数组 +- **包含字段**: 融资轮次、融资金额、投资者、新闻信息等 + +#### 行政处罚 +- **数据来源**: `punishment_info.items` 数组 +- **包含字段**: 处罚类型、处罚金额、处罚原因、处罚部门等 + +#### 经营异常 +- **数据来源**: `abnormal_info.items` 数组 +- **包含字段**: 异常原因、列入/移出日期、相关部门等 + +#### 欠税公告 +- **数据来源**: `own_tax.items` 数组 +- **包含字段**: 欠税金额、税务类型、欠税税种、纳税人信息、税务机关等 + +#### 税收违法 +- **数据来源**: `tax_contravention.items` 数组 +- **包含字段**: 案件性质、违法ID、税务机关、发布时间、纳税人名称等 + +## 工具函数 + +### simpleSplitter.js +位置: `src/ui/CQYGL3F8E/utils/simpleSplitter.js` + +#### 主要函数 +- `splitCQYGL3F8EForTabs(reportData)`: 数据拆分主函数 +- `getRelationshipText(relation)`: 获取关系文本描述 +- `getRelationshipClass(relation)`: 获取关系样式类 +- `getStatusClass(status)`: 获取企业状态样式类 +- `formatCapital(capital, currency)`: 格式化资本金额 +- `formatDate(dateStr)`: 格式化日期显示 + +## 集成配置 + +### BaseReport.vue 配置 +```javascript +// 导入拆分函数 +import { splitCQYGL3F8EForTabs } from '@/ui/CQYGL3F8E/utils/simpleSplitter.js'; + +// 数据处理 +const processedReportData = computed(() => { + let data = reportData.value; + // ... 其他拆分 + data = splitCQYGL3F8EForTabs(data); + return data; +}); + +// 功能映射 +const featureMap = { + QYGL3F8E: { + name: "人企关系加强版", + component: defineAsyncComponent(() => import("@/ui/CQYGL3F8E/index.vue")), + remark: '人企关系加强版提供全面的企业关联分析,包括投资企业记录、高管任职记录和涉诉风险等多维度信息。' + }, + CQYGL3F8E_Investment: { + name: "投资企业记录", + component: defineAsyncComponent(() => import("@/ui/CQYGL3F8E/components/Investment.vue")), + }, + CQYGL3F8E_SeniorExecutive: { + name: "高管任职记录", + component: defineAsyncComponent(() => import("@/ui/CQYGL3F8E/components/SeniorExecutive.vue")), + }, + CQYGL3F8E_Lawsuit: { + name: "涉诉风险", + component: defineAsyncComponent(() => import("@/ui/CQYGL3F8E/components/Lawsuit.vue")), + } +}; +``` + +## 使用方式 + +### 完整视图 +访问 `QYGL3F8E` 将显示完整的人企关系分析,包含所有九个子模块。 + +### 独立子模块 +- 访问 `CQYGL3F8E_Investment` 仅显示投资企业记录 +- 访问 `CQYGL3F8E_SeniorExecutive` 仅显示高管任职记录 +- 访问 `CQYGL3F8E_Lawsuit` 仅显示涉诉风险 +- 访问 `CQYGL3F8E_InvestHistory` 仅显示对外投资历史 +- 访问 `CQYGL3F8E_FinancingHistory` 仅显示融资历史 +- 访问 `CQYGL3F8E_Punishment` 仅显示行政处罚 +- 访问 `CQYGL3F8E_Abnormal` 仅显示经营异常 +- 访问 `CQYGL3F8E_OwnTax` 仅显示欠税公告 +- 访问 `CQYGL3F8E_TaxContravention` 仅显示税收违法 + +## 特性 + +### 1. 数据过滤 +- 基于关系类型智能过滤企业数据 +- 支持多种关系类型的组合展示 + +### 2. 展开式详情 +- 企业卡片支持点击展开查看详细信息 +- 包含持股信息、基本信息、联系方式等 + +### 3. 状态标识 +- 企业状态颜色编码(存续、注销、吊销等) +- 关系类型标签展示 + +### 4. 数据格式化 +- 资本金额自动转换为万元单位 +- 日期格式化显示 +- 持股比例可视化进度条 + +### 5. 响应式设计 +- 支持移动端和桌面端 +- 自适应布局和交互 + +## 注意事项 + +1. **数据完整性**: 拆分后的数据保持原始结构的完整性 +2. **性能优化**: 使用 `defineAsyncComponent` 实现组件懒加载 +3. **错误处理**: 对缺失数据进行安全处理,避免渲染错误 +4. **样式一致性**: 保持与整体设计系统的视觉一致性 + +## 更新历史 + +- **v1.0.0**: 初始版本,支持基本的企业关联信息展示 +- **v2.0.0**: 模块拆分重构,支持独立子模块访问 +- **v2.1.0**: 优化数据处理逻辑,增强错误处理能力 +- **v2.2.0**: 新增欠税公告和税收违法模块,完善企业风险分析功能 diff --git a/src/ui/CQYGL3F8E/components/Abnormal.vue b/src/ui/CQYGL3F8E/components/Abnormal.vue new file mode 100644 index 0000000..46116a5 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/Abnormal.vue @@ -0,0 +1,368 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CQYGL3F8E/components/FinancingHistory.vue b/src/ui/CQYGL3F8E/components/FinancingHistory.vue new file mode 100644 index 0000000..f519158 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/FinancingHistory.vue @@ -0,0 +1,345 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CQYGL3F8E/components/InvestHistory.vue b/src/ui/CQYGL3F8E/components/InvestHistory.vue new file mode 100644 index 0000000..e597026 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/InvestHistory.vue @@ -0,0 +1,410 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CQYGL3F8E/components/Investment.vue b/src/ui/CQYGL3F8E/components/Investment.vue new file mode 100644 index 0000000..9cda2c0 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/Investment.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/components/Lawsuit.vue b/src/ui/CQYGL3F8E/components/Lawsuit.vue new file mode 100644 index 0000000..469078c --- /dev/null +++ b/src/ui/CQYGL3F8E/components/Lawsuit.vue @@ -0,0 +1,3074 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/components/Punishment.vue b/src/ui/CQYGL3F8E/components/Punishment.vue new file mode 100644 index 0000000..adeb5da --- /dev/null +++ b/src/ui/CQYGL3F8E/components/Punishment.vue @@ -0,0 +1,367 @@ + + + + + \ No newline at end of file diff --git a/src/ui/CQYGL3F8E/components/SeniorExecutive.vue b/src/ui/CQYGL3F8E/components/SeniorExecutive.vue new file mode 100644 index 0000000..b904956 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/SeniorExecutive.vue @@ -0,0 +1,466 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/components/TaxRisk/OwnTax.vue b/src/ui/CQYGL3F8E/components/TaxRisk/OwnTax.vue new file mode 100644 index 0000000..6d343c7 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/TaxRisk/OwnTax.vue @@ -0,0 +1,350 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/components/TaxRisk/TaxContravention.vue b/src/ui/CQYGL3F8E/components/TaxRisk/TaxContravention.vue new file mode 100644 index 0000000..031ec93 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/TaxRisk/TaxContravention.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/components/TaxRisk/index.vue b/src/ui/CQYGL3F8E/components/TaxRisk/index.vue new file mode 100644 index 0000000..f497694 --- /dev/null +++ b/src/ui/CQYGL3F8E/components/TaxRisk/index.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/index.vue b/src/ui/CQYGL3F8E/index.vue new file mode 100644 index 0000000..8621098 --- /dev/null +++ b/src/ui/CQYGL3F8E/index.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/ui/CQYGL3F8E/utils/simpleSplitter.js b/src/ui/CQYGL3F8E/utils/simpleSplitter.js new file mode 100644 index 0000000..94e89da --- /dev/null +++ b/src/ui/CQYGL3F8E/utils/simpleSplitter.js @@ -0,0 +1,302 @@ +/** + * CQYGL3F8E企业关联数据拆分工具 + * 将企业关联数据拆分为投资企业记录、高管任职记录和涉诉风险三个独立模块 + */ + +/** + * 拆分CQYGL3F8E数据为多个独立的tab模块 + * @param {Array} reportData - 报告数据数组 + * @returns {Array} 拆分后的数据数组 + */ +export function splitCQYGL3F8EForTabs(reportData) { + const result = [] + + reportData.forEach(item => { + if (item.data?.apiID === 'QYGL3F8E') { + // 将QYGL3F8E拆分成多个独立的tab + const qyglData = item.data.data + const baseTimestamp = item.data.timestamp + + // 投资类关系 + const investRelations = ["sh", "his_sh", "lp", "his_lp"] + + // 高管类关系 + const managerRelations = ["tm", "his_tm"] + + // 获取投资企业记录(股东、历史股东、法人、历史法人) + const investCompanies = (qyglData?.items || []).filter((item) => { + const relationships = item?.relationship || [] + return relationships.some((r) => investRelations.includes(r)) + }) + + // 获取高管任职记录(高管、历史高管) + const managerPositions = (qyglData?.items || []).filter((item) => { + const relationships = item?.relationship || [] + return relationships.some((r) => managerRelations.includes(r)) + }) + + // 获取有涉诉风险的企业 + const lawsuitCompanies = (qyglData?.items || []).filter((item) => { + const lawsuit = item?.lawsuitInfo || {} + return ( + (lawsuit.entout && lawsuit.entout.data && Object.keys(lawsuit.entout.data).length > 0) || + (lawsuit.sxbzxr && lawsuit.sxbzxr.data && lawsuit.sxbzxr.data.sxbzxr && lawsuit.sxbzxr.data.sxbzxr.length > 0) || + (lawsuit.xgbzxr && lawsuit.xgbzxr.data && lawsuit.xgbzxr.data.xgbzxr && lawsuit.xgbzxr.data.xgbzxr.length > 0) + ) + }) + + // 1. 投资企业记录模块 + result.push({ + data: { + apiID: 'CQYGL3F8E_Investment', + data: investCompanies, + success: true, + timestamp: baseTimestamp + } + }) + + // 2. 高管任职记录模块 + result.push({ + data: { + apiID: 'CQYGL3F8E_SeniorExecutive', + data: managerPositions, + success: true, + timestamp: baseTimestamp + } + }) + // 3. 涉诉风险模块 + result.push({ + data: { + apiID: 'CQYGL3F8E_Lawsuit', + data: { + lawsuitCompanies: lawsuitCompanies, + totalCompanies: qyglData?.items?.length || 0 + }, + success: true, + timestamp: baseTimestamp + } + }) + // 4. 对外投资历史模块 - 从所有企业中收集投资历史 + const allInvestHistory = [] + qyglData?.items?.forEach(company => { + if (company.invest_history?.items) { + company.invest_history.items.forEach(investment => { + allInvestHistory.push({ + ...investment, + companyName: company.orgName, // 添加企业名称 + companyInfo: { + orgName: company.orgName, + relationship: company.relationship, + basicInfo: company.basicInfo + } + }) + }) + } + }) + result.push({ + data: { + apiID: 'CQYGL3F8E_InvestHistory', + data: { items: allInvestHistory, total: allInvestHistory.length }, + success: true, + timestamp: baseTimestamp + } + }) + + // 5. 融资历史模块 - 从所有企业中收集融资历史 + const allFinancingHistory = [] + qyglData?.items?.forEach(company => { + if (company.financing_history?.items) { + company.financing_history.items.forEach(financing => { + allFinancingHistory.push({ + ...financing, + companyName: company.orgName, // 添加企业名称 + companyInfo: { + orgName: company.orgName, + relationship: company.relationship, + basicInfo: company.basicInfo + } + }) + }) + } + }) + result.push({ + data: { + apiID: 'CQYGL3F8E_FinancingHistory', + data: { items: allFinancingHistory, total: allFinancingHistory.length }, + success: true, + timestamp: baseTimestamp + } + }) + + // 6. 行政处罚模块 - 从所有企业中收集行政处罚 + const allPunishmentInfo = [] + qyglData?.items?.forEach(company => { + if (company.punishment_info?.items) { + company.punishment_info.items.forEach(punishment => { + allPunishmentInfo.push({ + ...punishment, + companyName: company.orgName, // 添加企业名称 + companyInfo: { + orgName: company.orgName, + relationship: company.relationship, + basicInfo: company.basicInfo + } + }) + }) + } + }) + result.push({ + data: { + apiID: 'CQYGL3F8E_Punishment', + data: { items: allPunishmentInfo, total: allPunishmentInfo.length }, + success: true, + timestamp: baseTimestamp + } + }) + + // 7. 经营异常模块 - 从所有企业中收集经营异常 + const allAbnormalInfo = [] + qyglData?.items?.forEach(company => { + if (company.abnormal_info?.items) { + company.abnormal_info.items.forEach(abnormal => { + allAbnormalInfo.push({ + ...abnormal, + companyName: company.orgName, // 添加企业名称 + companyInfo: { + orgName: company.orgName, + relationship: company.relationship, + basicInfo: company.basicInfo + } + }) + }) + } + }) + result.push({ + data: { + apiID: 'CQYGL3F8E_Abnormal', + data: { items: allAbnormalInfo, total: allAbnormalInfo.length }, + success: true, + timestamp: baseTimestamp + } + }) + + // 8. 税务风险模块 - 包含欠税公告和税收违法 + const taxRiskCompanies = (qyglData?.items || []).filter((item) => { + const ownTax = item?.own_tax || {}; + const taxContravention = item?.tax_contravention || {}; + return (ownTax.total > 0 && ownTax.items && ownTax.items.length > 0) || + (taxContravention.total > 0 && taxContravention.items && taxContravention.items.length > 0); + }); + + result.push({ + data: { + apiID: 'CQYGL3F8E_TaxRisk', + data: { items: taxRiskCompanies }, + success: true, + timestamp: baseTimestamp + } + }) + + } else { + // 其他数据直接添加 + result.push(item) + } + }) + + return result +} + +/** + * 获取关系文本描述 + * @param {string} relation - 关系代码 + * @returns {string} 关系文本 + */ +export function getRelationshipText(relation) { + const relationshipMap = { + sh: '股东', + his_sh: '曾任股东', + lp: '法人', + his_lp: '曾任法人', + tm: '高管', + his_tm: '曾任高管' + } + return relationshipMap[relation] || relation +} + +/** + * 获取关系样式类 + * @param {string} relation - 关系代码 + * @returns {string} 样式类名 + */ +export function getRelationshipClass(relation) { + const relationshipMap = { + sh: 'bg-blue-100 text-blue-700', + his_sh: 'bg-blue-50 text-blue-600', + lp: 'bg-green-100 text-green-700', + his_lp: 'bg-green-50 text-green-600', + tm: 'bg-purple-100 text-purple-700', + his_tm: 'bg-purple-50 text-purple-600' + } + return relationshipMap[relation] || 'bg-gray-100 text-gray-600' +} + +/** + * 获取企业状态对应的样式类 + * @param {string} status - 企业状态 + * @returns {string} 样式类名 + */ +export function getStatusClass(status) { + if (!status) return 'bg-gray-100 text-gray-500' + + if (status.includes('注销') || status.includes('吊销')) { + return 'bg-red-50 text-red-600' + } else if (status.includes('存续') || status.includes('在营')) { + return 'bg-green-50 text-green-600' + } else if (status.includes('筹建') || status.includes('新设')) { + return 'bg-blue-50 text-blue-600' + } else { + return 'bg-yellow-50 text-yellow-600' + } +} + +/** + * 格式化资本金额显示 + * @param {string|number} capital - 资本金额 + * @param {string} currency - 货币类型 + * @returns {string} 格式化后的金额 + */ +export function formatCapital(capital, currency) { + if (!capital) return '—' + + let unit = '' + let value = parseFloat(capital) + + // 处理原始数据中可能带有的单位 + if (typeof capital === 'string' && capital.includes('万')) { + unit = '万' + const numMatch = capital.match(/[\d.]+/) + value = numMatch ? parseFloat(numMatch[0]) : 0 + } else if (value >= 10000) { + // 大额数字转换为万元显示 + value = value / 10000 + unit = '万' + } + + // 格式化数字,保留两位小数(如果有小数部分) + const formattedValue = value.toLocaleString('zh-CN', { + minimumFractionDigits: 0, + maximumFractionDigits: 2, + }) + + return `${formattedValue}${unit} ${currency || '人民币'}` +} + +/** + * 格式化日期显示 + * @param {string} dateStr - 日期字符串 + * @returns {string} 格式化后的日期 + */ +export function formatDate(dateStr) { + if (!dateStr) return '—' + return dateStr +} diff --git a/src/ui/DWBG6A2C/README.md b/src/ui/DWBG6A2C/README.md new file mode 100644 index 0000000..036c5dc --- /dev/null +++ b/src/ui/DWBG6A2C/README.md @@ -0,0 +1,178 @@ +# 司南报告组件 (DWBG6A2C) - 模块化架构 + +## 概述 + +司南报告组件采用模块化架构设计,将完整的司南报告拆分成13个独立的模块,每个模块都可以作为独立的tab显示,具有独立的大标题。 + +## 数据结构 + +司南报告的数据结构如下: + +```javascript +{ + "apiID": "DWBG6A2C", + "data": { + "baseInfo": {}, // 基本信息 + "standLiveInfo": {}, // 身份信息核验 + "riskPoint": {}, // 命中风险标注 + "securityInfo": {}, // 公安重点人员核验 + "antiFraudInfo": {}, // 涉赌涉诈人员核验 + "riskList": {}, // 风险名单 + "applicationStatistics": {}, // 历史借贷行为 + "lendingStatistics": {}, // 近24个月放款情况 + "performanceStatistics": {}, // 履约情况 + "overdueRecord": {}, // 历史逾期记录 + "creditDetail": {}, // 授信详情 + "rentalBehavior": {}, // 租赁行为 + "riskSupervision": {}, // 关联风险监督 + "judiciaRiskInfos": [] // 法院风险信息 + }, + "success": true, + "timestamp": "2025-01-20 21:19:58" +} +``` + +## 模块拆分 + +司南报告被拆分成以下14个独立模块: + +| API ID | 模块名称 | 包含数据 | 组件文件 | +|--------|----------|----------|----------| +| `DWBG6A2C_BaseInfo` | 基本信息 | baseInfo | BaseInfoSection.vue | +| `DWBG6A2C_StandLiveInfo` | 身份信息核验 | standLiveInfo | StandLiveInfoSection.vue | +| `DWBG6A2C_RiskPoint` | 命中风险标注 | riskPoint | RiskPointSection.vue | +| `DWBG6A2C_SecurityInfo` | 公安重点人员核验 | securityInfo | SecurityInfoSection.vue | +| `DWBG6A2C_AntiFraudInfo` | 涉赌涉诈人员核验 | antiFraudInfo | AntiFraudInfoSection.vue | +| `DWBG6A2C_RiskList` | 风险名单 | riskList | RiskListSection.vue | +| `DWBG6A2C_ApplicationStatistics` | 历史借贷行为 | applicationStatistics | ApplicationStatisticsSection.vue | +| `DWBG6A2C_LendingStatistics` | 近24个月放款情况 | lendingStatistics | LendingStatisticsSection.vue | +| `DWBG6A2C_PerformanceStatistics` | 履约情况 | performanceStatistics | PerformanceStatisticsSection.vue | +| `DWBG6A2C_OverdueRecord` | 历史逾期记录 | overdueRecord | OverdueRecordSection.vue | +| `DWBG6A2C_CreditDetail` | 授信详情 | creditDetail | CreditDetailSection.vue | +| `DWBG6A2C_RentalBehavior` | 租赁行为 | rentalBehavior | RentalBehaviorSection.vue | +| `DWBG6A2C_RiskSupervision` | 关联风险监督 | riskSupervision | RiskSupervisionSection.vue | +| `DWBG6A2C_CourtRiskInfo` | 法院风险信息 | judiciaRiskInfos | CourtRiskInfoSection.vue | + +## 使用方法 + +### 1. 前端自动拆分 + +BaseReport.vue 已自动配置支持司南报告的模块化显示: + +```javascript +import { splitDWBG6A2CForTabs } from '@/ui/DWBG6A2C/utils/simpleSplitter.js'; + +// 处理数据拆分(支持DWBG8B4D和DWBG6A2C) +const processedReportData = computed(() => { + let data = reportData.value; + + // 拆分DWBG8B4D数据 + data = splitDWBG8B4DForTabs(data); + + // 拆分DWBG6A2C数据 + data = splitDWBG6A2CForTabs(data); + + return data; +}); +``` + +### 2. 组件配置 + +BaseReport.vue 中已配置所有司南报告模块: + +```javascript +// 司南报告 +DWBG6A2C: { + name: "司南报告", + component: defineAsyncComponent(() => import("@/ui/DWBG6A2C/index.vue")), + remark: '司南报告提供全面的个人信用风险评估,包括身份核验、风险名单、借贷行为、履约情况等多维度分析。' +}, +// ... 其他模块配置 +``` + +## 组件结构 + +``` +src/ui/DWBG6A2C/ +├── index.vue # 原始完整组件(保留) +├── README.md # 文档说明 +├── components/ # 子组件目录 +│ ├── BaseInfoSection.vue # 基本信息 +│ ├── StandLiveInfoSection.vue # 身份信息核验 +│ ├── RiskPointSection.vue # 命中风险标注 +│ ├── SecurityInfoSection.vue # 公安重点人员核验 +│ ├── AntiFraudInfoSection.vue # 涉赌涉诈人员核验 +│ ├── RiskListSection.vue # 风险名单 +│ ├── ApplicationStatisticsSection.vue # 历史借贷行为 +│ ├── LendingStatisticsSection.vue # 近24个月放款情况 +│ ├── PerformanceStatisticsSection.vue # 履约情况 +│ ├── OverdueRecordSection.vue # 历史逾期记录 +│ ├── CreditDetailSection.vue # 授信详情 +│ ├── RentalBehaviorSection.vue # 租赁行为 +│ ├── RiskSupervisionSection.vue # 关联风险监督 +│ └── CourtRiskInfoSection.vue # 法院风险信息 +└── utils/ + └── simpleSplitter.js # 数据拆分工具 +``` + +## 特色功能 + +### 1. 智能风险评估 +- 多维度风险标注 +- 智能颜色编码 +- 风险等级自动判断 + +### 2. 数据可视化 +- 渐变色彩设计 +- 图标化展示 +- 响应式布局 + +### 3. 用户友好 +- 清晰的层次结构 +- 详细的说明文档 +- 直观的风险提示 + +### 4. 模块化设计 +- 独立的模块组件 +- 可复用的工具函数 +- 灵活的数据拆分 + +## 工具函数 + +`utils/simpleSplitter.js` 提供了以下工具函数: + +- `splitDWBG6A2CForTabs()` - 数据拆分 +- `formatRiskLevel()` - 格式化风险等级 +- `formatPhoneStatus()` - 格式化手机号状态 +- `formatVerificationResult()` - 格式化身份核验结果 +- `formatInTime()` - 格式化在网时长 +- `hasRiskData()` - 检查是否有风险数据 + +## 使用示例 + +```javascript +// 在页面中使用 + +``` + +## 注意事项 + +1. 确保数据格式符合司南报告的标准结构 +2. 所有模块都支持数据为空的情况 +3. 风险评估基于实际数据动态计算 +4. 组件采用 Tailwind CSS 进行样式设计 +5. 支持移动端响应式布局 + +## 更新日志 + +- v1.0.0: 初始版本,支持完整的司南报告模块化显示 +- 包含13个独立模块 +- 支持自动数据拆分 +- 提供完整的风险评估功能 diff --git a/src/ui/DWBG6A2C/components/AntiFraudInfoSection.vue b/src/ui/DWBG6A2C/components/AntiFraudInfoSection.vue new file mode 100644 index 0000000..7f68c75 --- /dev/null +++ b/src/ui/DWBG6A2C/components/AntiFraudInfoSection.vue @@ -0,0 +1,408 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/ApplicationStatisticsSection.vue b/src/ui/DWBG6A2C/components/ApplicationStatisticsSection.vue new file mode 100644 index 0000000..17fd032 --- /dev/null +++ b/src/ui/DWBG6A2C/components/ApplicationStatisticsSection.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/BaseInfoSection.vue b/src/ui/DWBG6A2C/components/BaseInfoSection.vue new file mode 100644 index 0000000..1c81277 --- /dev/null +++ b/src/ui/DWBG6A2C/components/BaseInfoSection.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/CourtRiskInfoSection.vue b/src/ui/DWBG6A2C/components/CourtRiskInfoSection.vue new file mode 100644 index 0000000..f014a0a --- /dev/null +++ b/src/ui/DWBG6A2C/components/CourtRiskInfoSection.vue @@ -0,0 +1,594 @@ + + + + + \ No newline at end of file diff --git a/src/ui/DWBG6A2C/components/CreditDetailSection.vue b/src/ui/DWBG6A2C/components/CreditDetailSection.vue new file mode 100644 index 0000000..fb67aac --- /dev/null +++ b/src/ui/DWBG6A2C/components/CreditDetailSection.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/LendingStatisticsSection.vue b/src/ui/DWBG6A2C/components/LendingStatisticsSection.vue new file mode 100644 index 0000000..37c418c --- /dev/null +++ b/src/ui/DWBG6A2C/components/LendingStatisticsSection.vue @@ -0,0 +1,600 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/OverdueRecordSection.vue b/src/ui/DWBG6A2C/components/OverdueRecordSection.vue new file mode 100644 index 0000000..cee2825 --- /dev/null +++ b/src/ui/DWBG6A2C/components/OverdueRecordSection.vue @@ -0,0 +1,528 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/PerformanceStatisticsSection.vue b/src/ui/DWBG6A2C/components/PerformanceStatisticsSection.vue new file mode 100644 index 0000000..e251b6b --- /dev/null +++ b/src/ui/DWBG6A2C/components/PerformanceStatisticsSection.vue @@ -0,0 +1,494 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/RentalBehaviorSection.vue b/src/ui/DWBG6A2C/components/RentalBehaviorSection.vue new file mode 100644 index 0000000..8e31473 --- /dev/null +++ b/src/ui/DWBG6A2C/components/RentalBehaviorSection.vue @@ -0,0 +1,787 @@ + + + + + \ No newline at end of file diff --git a/src/ui/DWBG6A2C/components/RiskListSection.vue b/src/ui/DWBG6A2C/components/RiskListSection.vue new file mode 100644 index 0000000..5840a0d --- /dev/null +++ b/src/ui/DWBG6A2C/components/RiskListSection.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/RiskPointSection.vue b/src/ui/DWBG6A2C/components/RiskPointSection.vue new file mode 100644 index 0000000..59f90e2 --- /dev/null +++ b/src/ui/DWBG6A2C/components/RiskPointSection.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/RiskSupervisionSection.vue b/src/ui/DWBG6A2C/components/RiskSupervisionSection.vue new file mode 100644 index 0000000..d3bf49c --- /dev/null +++ b/src/ui/DWBG6A2C/components/RiskSupervisionSection.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/SecurityInfoSection.vue b/src/ui/DWBG6A2C/components/SecurityInfoSection.vue new file mode 100644 index 0000000..10ca71e --- /dev/null +++ b/src/ui/DWBG6A2C/components/SecurityInfoSection.vue @@ -0,0 +1,353 @@ + + + + + diff --git a/src/ui/DWBG6A2C/components/StandLiveInfoSection.vue b/src/ui/DWBG6A2C/components/StandLiveInfoSection.vue new file mode 100644 index 0000000..cd828f0 --- /dev/null +++ b/src/ui/DWBG6A2C/components/StandLiveInfoSection.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/ui/DWBG6A2C/index.vue b/src/ui/DWBG6A2C/index.vue new file mode 100644 index 0000000..416e530 --- /dev/null +++ b/src/ui/DWBG6A2C/index.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/ui/DWBG6A2C/utils/intervalFormatter.js b/src/ui/DWBG6A2C/utils/intervalFormatter.js new file mode 100644 index 0000000..64a2cfc --- /dev/null +++ b/src/ui/DWBG6A2C/utils/intervalFormatter.js @@ -0,0 +1,302 @@ +/** + * 区间表达式格式化工具 + * 将数学区间表达式转换为用户友好的文本描述 + */ + +/** + * 格式化区间表达式 + * @param {string} interval - 区间表达式,如 "(0,1000)", "[2000,30000)", "[17,+)" + * @param {string} unit - 单位,如 "元", "次", "个", "天" 等 + * @returns {string} 格式化后的文本,如果格式化失败则返回原数据 + */ +export function formatInterval(interval, unit = '') { + // 如果数据为空或无效,返回原数据 + if (!interval || interval === '-' || interval === '0') { + return interval || '-' + } + + try { + // 处理特殊格式,如 "3,6(个月)" + if (interval.includes('(') && interval.includes(')')) { + const match = interval.match(/^(\d+(?:,\d+)*)\((.+)\)$/) + if (match) { + const numbers = match[1].split(',').map(n => n.trim()) + const timeUnit = match[2] + if (numbers.length === 2) { + return `${numbers[0]}-${numbers[1]}${timeUnit}` + } + return `${numbers.join(', ')}${timeUnit}` + } + } + + // 处理区间表达式 + const intervalPattern = /^([\[\(])(\d+(?:\.\d+)?),(\d+(?:\.\d+)?|\+)([\]\)])$/ + const match = interval.match(intervalPattern) + + // 如果不是区间表达式,返回原数据 + if (!match) { + return interval + } + + const [, leftBracket, leftValue, rightValue, rightBracket] = match + const isLeftInclusive = leftBracket === '[' + const isRightInclusive = rightBracket === ']' + const isRightInfinity = rightValue === '+' + + let result = '' + + if (isRightInfinity) { + // 处理无穷大情况,如 "[17,+)" + if (isLeftInclusive) { + result = `≥${leftValue}${unit}` + } else { + result = `>${leftValue}${unit}` + } + } else { + // 处理有限区间 + const leftNum = parseFloat(leftValue) + const rightNum = parseFloat(rightValue) + + // 检查数值是否有效 + if (isNaN(leftNum) || isNaN(rightNum)) { + return interval + } + + if (leftNum === rightNum) { + // 单点值 + result = `${leftNum}${unit}` + } else { + // 区间值 - 简化为实际数值范围 + if (isLeftInclusive && isRightInclusive) { + result = `${leftNum}-${rightNum}${unit}` + } else if (isLeftInclusive && !isRightInclusive) { + // 右开区间,显示到 rightNum-1 + result = `${leftNum}-${rightNum - 1}${unit}` + } else if (!isLeftInclusive && isRightInclusive) { + // 左开区间,显示从 leftNum+1 + result = `${leftNum + 1}-${rightNum}${unit}` + } else { + // 两端都不包含,显示从 leftNum+1 到 rightNum-1 + result = `${leftNum + 1}-${rightNum - 1}${unit}` + } + } + } + + return result + } catch (error) { + // 如果格式化过程中出现错误,返回原数据 + console.warn('区间格式化失败:', error, '原数据:', interval) + return interval + } +} + +/** + * 格式化金额区间 + * @param {string} interval - 金额区间表达式 + * @returns {string} 格式化后的金额文本 + */ +export function formatAmountInterval(interval) { + return formatInterval(interval, '元') +} + +/** + * 格式化次数区间 + * @param {string} interval - 次数区间表达式 + * @returns {string} 格式化后的次数文本 + */ +export function formatCountInterval(interval) { + return formatInterval(interval, '次') +} + +/** + * 格式化天数区间 + * @param {string} interval - 天数区间表达式 + * @returns {string} 格式化后的天数文本 + */ +export function formatDaysInterval(interval) { + return formatInterval(interval, '天') +} + +/** + * 格式化机构数量区间 + * @param {string} interval - 机构数量区间表达式 + * @returns {string} 格式化后的机构数量文本 + */ +export function formatInstitutionInterval(interval) { + return formatInterval(interval, '家') +} + +/** + * 格式化时间区间 + * @param {string} interval - 时间区间表达式 + * @returns {string} 格式化后的时间文本 + */ +export function formatTimeInterval(interval) { + if (!interval || interval === '-') { + return '-' + } + + // 处理特殊格式,如 "3,6(个月)" + if (interval.includes('(') && interval.includes(')')) { + const match = interval.match(/^(\d+(?:,\d+)*)\((.+)\)$/) + if (match) { + const numbers = match[1].split(',').map(n => n.trim()) + const timeUnit = match[2] + if (numbers.length === 2) { + return `${numbers[0]}-${numbers[1]}${timeUnit}` + } + return `${numbers.join(', ')}${timeUnit}` + } + } + + return formatInterval(interval, '') +} + +/** + * 格式化申请次数区间 + * @param {string} interval - 申请次数区间表达式,格式如 "2/1" + * @returns {string} 格式化后的申请次数文本 + */ +export function formatApplicationInterval(interval) { + if (!interval || interval === '-') { + return '-' + } + + // 处理 "2/1" 格式,表示 申请次数/通过次数 + if (interval.includes('/')) { + const [applyCount, passCount] = interval.split('/') + if (applyCount === passCount) { + return `${applyCount}次(全部通过)` + } else { + return `${applyCount}次(通过${passCount}次)` + } + } + + return formatCountInterval(interval) +} + +/** + * 格式化租赁申请数据 - 专门处理司南报告中的 "次数/机构数" 格式 + * @param {string} data - 租赁申请数据,格式如 "2/1" (次数/机构数) + * @returns {Object} 包含格式化后的次数和机构数的对象 + */ +export function formatRentalApplicationData(data) { + if (!data || data === '-' || data === '0/0') { + return { + count: 0, + institutions: 0, + countText: '0 次', + institutionsText: '0 家', + combinedText: '0 次 / 0 家' + } + } + + if (data.includes('/')) { + const [countStr, institutionsStr] = data.split('/') + const count = parseInt(countStr) || 0 + const institutions = parseInt(institutionsStr) || 0 + + return { + count, + institutions, + countText: `${count} 次`, + institutionsText: `${institutions} 家`, + combinedText: `${count} 次 / ${institutions} 家` + } + } + + // 如果不是标准格式,返回原数据 + return { + count: 0, + institutions: 0, + countText: data, + institutionsText: data, + combinedText: data + } +} + +/** + * 格式化风险等级文本 + * @param {string} level - 风险等级,如 "C2,C5" + * @returns {string} 格式化后的风险等级文本 + */ +export function formatRiskLevel(level) { + if (!level) return '-' + + const levelMap = { + '0': '正常人员', + 'A': '前科:侵犯公民人身权利,民主权利', + 'A1': '盗窃', + 'A2': '诈骗', + 'A3': '抢劫/夺', + 'A4': '故意伤害/杀人', + 'A5': '强奸/性侵/猥亵', + 'B': '经济类前科', + 'B1': '走私', + 'B2': '破坏金融管理秩序', + 'B3': '正常人员', + 'B4': '洗钱', + 'B5': '洗钱', + 'C': '妨害社会管理秩序', + 'C1': '扰乱公共秩序', + 'C2': '妨害司法', + 'C3': '涉毒', + 'C4': '涉黄刑案', + 'C5': '帮信/掩隐/侵公', + 'D': '重点', + 'D1': '危害国家、公共安全', + 'D2': '涉稳', + 'D3': '涉及境外', + 'D4': '涉恐、疆藏', + 'D5': '涉黑', + 'E': '涉交通案件', + 'F': '法院文书' + } + + return level.split(',').map(l => levelMap[l.trim()] || l.trim()).join('、') +} + +/** + * 格式化状态文本 + * @param {string} status - 状态值 + * @param {Object} statusMap - 状态映射对象 + * @returns {string} 格式化后的状态文本 + */ +export function formatStatus(status, statusMap = {}) { + if (status === undefined || status === null || status === '') { + return '-' + } + + return statusMap[status] || status +} + +/** + * 格式化风险标识 + * @param {number} flag - 风险标识,0=未查得,1=高风险,2=低风险 + * @returns {Object} 包含文本和样式的对象 + */ +export function formatRiskFlag(flag) { + const flagMap = { + 0: { text: '未查得', class: 'bg-gray-100 text-gray-700' }, + 1: { text: '高风险', class: 'bg-red-100 text-red-700' }, + 2: { text: '低风险', class: 'bg-green-100 text-green-700' } + } + + return flagMap[flag] || { text: '未知', class: 'bg-gray-100 text-gray-700' } +} + +/** + * 格式化验证结果 + * @param {string} result - 验证结果 + * @returns {Object} 包含文本和样式的对象 + */ +export function formatVerificationResult(result) { + const resultMap = { + '一致': { text: '一致', class: 'text-green-600' }, + '不一致': { text: '不一致', class: 'text-red-600' }, + '验证通过': { text: '验证通过', class: 'text-green-600' }, + '验证失败': { text: '验证失败', class: 'text-red-600' } + } + + return resultMap[result] || { text: result || '-', class: 'text-gray-600' } +} diff --git a/src/ui/DWBG6A2C/utils/simpleSplitter.js b/src/ui/DWBG6A2C/utils/simpleSplitter.js new file mode 100644 index 0000000..8dc05d1 --- /dev/null +++ b/src/ui/DWBG6A2C/utils/simpleSplitter.js @@ -0,0 +1,311 @@ +/** + * 司南报告(DWBG6A2C)数据拆分工具 + * 将完整的司南报告数据拆分成多个独立的模块,用于在不同的tab中显示 + */ + +/** + * 将DWBG6A2C数据拆分为多个独立的tab模块 + * @param {Array} reportData - 原始报告数据数组 + * @returns {Array} 拆分后的模块数组 + */ +export function splitDWBG6A2CForTabs(reportData) { + // 查找DWBG6A2C数据 + const dwbg6a2cData = reportData.find(item => item.data?.apiID === 'DWBG6A2C'); + + if (!dwbg6a2cData || !dwbg6a2cData.data?.data) { + return reportData; // 如果没有找到DWBG6A2C数据,返回原数据 + } + + const originalData = dwbg6a2cData.data.data; + const baseTimestamp = dwbg6a2cData.data.timestamp; + + // 创建拆分后的模块数组 + const splitModules = []; + + // 1. 基本信息 + // if (originalData.baseInfo) { + // splitModules.push({ + // data: { + // apiID: 'DWBG6A2C_BaseInfo', + // data: { + // baseInfo: originalData.baseInfo + // }, + // success: true, + // timestamp: baseTimestamp + // } + // }); + // } + + // 2. 身份信息核验 + if (originalData.standLiveInfo) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_StandLiveInfo', + data: { + standLiveInfo: originalData.standLiveInfo + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 3. 命中风险标注 + if (originalData.riskPoint) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_RiskPoint', + data: { + riskPoint: originalData.riskPoint + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 4. 公安重点人员核验 + if (originalData.securityInfo) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_SecurityInfo', + data: { + securityInfo: originalData.securityInfo + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 5. 涉赌涉诈人员核验 + if (originalData.antiFraudInfo) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_AntiFraudInfo', + data: { + antiFraudInfo: originalData.antiFraudInfo + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 6. 风险名单 + if (originalData.riskList) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_RiskList', + data: { + riskList: originalData.riskList + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 7. 历史借贷行为 + if (originalData.applicationStatistics) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_ApplicationStatistics', + data: { + applicationStatistics: originalData.applicationStatistics + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 8. 近24个月放款情况 + if (originalData.lendingStatistics) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_LendingStatistics', + data: { + lendingStatistics: originalData.lendingStatistics + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 9. 履约情况 + if (originalData.performanceStatistics) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_PerformanceStatistics', + data: { + performanceStatistics: originalData.performanceStatistics + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 10. 历史逾期记录 + if (originalData.overdueRecord) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_OverdueRecord', + data: { + overdueRecord: originalData.overdueRecord + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 11. 授信详情 + if (originalData.creditDetail && Object.keys(originalData.creditDetail).length > 0) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_CreditDetail', + data: { + creditDetail: originalData.creditDetail + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 12. 租赁行为 + if (originalData.rentalBehavior) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_RentalBehavior', + data: { + rentalBehavior: originalData.rentalBehavior + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 13. 关联风险监督 + if (originalData.riskSupervision) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_RiskSupervision', + data: { + riskSupervision: originalData.riskSupervision + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 14. 法院风险信息 + if (originalData.judiciaRiskInfos && originalData.judiciaRiskInfos.length > 0) { + splitModules.push({ + data: { + apiID: 'DWBG6A2C_CourtRiskInfo', + data: { + judiciaRiskInfos: originalData.judiciaRiskInfos + }, + success: true, + timestamp: baseTimestamp + } + }); + } + + // 移除原始的DWBG6A2C数据,添加拆分后的模块 + const otherData = reportData.filter(item => item.data?.apiID !== 'DWBG6A2C'); + + return [...otherData, ...splitModules]; +} + +/** + * 格式化风险等级描述 + * @param {string} level - 风险等级 + * @returns {object} 包含颜色和文本的对象 + */ +export function formatRiskLevel(level) { + const riskLevels = { + '0': { color: 'text-green-600', bg: 'bg-green-100', text: '无风险', icon: '✅' }, + '1': { color: 'text-red-600', bg: 'bg-red-100', text: '有风险', icon: '⚠️' }, + 'A': { color: 'text-yellow-600', bg: 'bg-yellow-100', text: '较低风险', icon: '⚠️' }, + 'B': { color: 'text-orange-600', bg: 'bg-orange-100', text: '低风险', icon: '⚠️' }, + 'C': { color: 'text-red-600', bg: 'bg-red-100', text: '中风险', icon: '🚨' }, + 'D': { color: 'text-red-700', bg: 'bg-red-200', text: '高风险', icon: '🚨' } + }; + + return riskLevels[level] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' }; +} + +/** + * 格式化手机号码状态 + * @param {number} status - 状态码 + * @returns {object} 包含颜色和文本的对象 + */ +export function formatPhoneStatus(status) { + const statusMap = { + '-1': { color: 'text-gray-600', bg: 'bg-gray-100', text: '未查得', icon: '❓' }, + '0': { color: 'text-red-600', bg: 'bg-red-100', text: '空号', icon: '❌' }, + '1': { color: 'text-green-600', bg: 'bg-green-100', text: '实号', icon: '✅' }, + '2': { color: 'text-orange-600', bg: 'bg-orange-100', text: '停机', icon: '⏸️' }, + '3': { color: 'text-gray-600', bg: 'bg-gray-100', text: '库无', icon: '❓' }, + '4': { color: 'text-yellow-600', bg: 'bg-yellow-100', text: '沉默号', icon: '😴' }, + '5': { color: 'text-red-600', bg: 'bg-red-100', text: '风险号', icon: '⚠️' } + }; + + return statusMap[status.toString()] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' }; +} + +/** + * 格式化身份核验结果 + * @param {string} result - 核验结果 + * @returns {object} 包含颜色和文本的对象 + */ +export function formatVerificationResult(result) { + const resultMap = { + '0': { color: 'text-green-600', bg: 'bg-green-100', text: '一致', icon: '✅' }, + '1': { color: 'text-red-600', bg: 'bg-red-100', text: '不一致或不存在', icon: '❌' } + }; + + return resultMap[result] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' }; +} + +/** + * 格式化在网时长 + * @param {string} inTime - 在网时长代码 + * @returns {object} 包含颜色和文本的对象 + */ +export function formatInTime(inTime) { + const timeMap = { + '0': { color: 'text-red-600', bg: 'bg-red-100', text: '0-3个月', icon: '📱' }, + '3': { color: 'text-orange-600', bg: 'bg-orange-100', text: '3-6个月', icon: '📱' }, + '6': { color: 'text-yellow-600', bg: 'bg-yellow-100', text: '6-12个月', icon: '📱' }, + '12': { color: 'text-blue-600', bg: 'bg-blue-100', text: '12-24个月', icon: '📱' }, + '24': { color: 'text-green-600', bg: 'bg-green-100', text: '24个月以上', icon: '📱' }, + '99': { color: 'text-gray-600', bg: 'bg-gray-100', text: '状态异常', icon: '⚠️' }, + '-1': { color: 'text-gray-600', bg: 'bg-gray-100', text: '查无记录', icon: '❓' } + }; + + return timeMap[inTime] || { color: 'text-gray-600', bg: 'bg-gray-100', text: '未知', icon: '❓' }; +} + +/** + * 检查是否有风险数据 + * @param {Object} data - 数据对象 + * @returns {boolean} 是否有风险 + */ +export function hasRiskData(data) { + if (!data) return false; + + // 检查对象中是否有非0值 + return Object.values(data).some(value => { + if (typeof value === 'number') return value > 0; + if (typeof value === 'string') return value !== '0' && value !== '-' && value !== ''; + return false; + }); +} diff --git a/src/ui/JRZQ09J8/README.md b/src/ui/JRZQ09J8/README.md new file mode 100644 index 0000000..ee245aa --- /dev/null +++ b/src/ui/JRZQ09J8/README.md @@ -0,0 +1,165 @@ +# 收入评估组件 (JRZQ09J8) + +## 组件概述 + +基于全国社会保险信息系统的缴费基数数据进行收入水平评估,为企业提供专业的收入分析和风险评估服务。 + +## 组件结构 + +``` +JRZQ09J8/ +├── index.vue # 主组件 +├── components/ # 子组件目录 +│ ├── IncomeOverview.vue # 华丽的收入评估概览 +│ ├── IncomeAnalysis.vue # 详细收入分析 +│ └── IncomeLevelGuide.vue # 社保评级对照表 +├── utils/ # 工具函数目录 +│ └── incomeUtils.js # 收入评估工具函数 +└── README.md # 说明文档 +``` + +## 使用方法 + +### 基本用法 + +```vue + + + +``` + +## 数据字段说明 + +| 字段名 | 类型 | 必填 | 描述 | 示例值 | +|-------|------|------|------|--------| +| level | String | 是 | 社保评级等级 | "G" | + +## 评级对照表 + +| level 值 | 社保评级 | 对应月收入范围 | 风险等级 | +|----------|----------|----------------|----------| +| - | **无记录** | 查询无社保记录 | 高风险 | +| A | **A级** | (2000, 4000)元 | 中高风险 | +| B | **B级** | (4000, 6000)元 | 中等风险 | +| C | **C级** | (6000, 8000)元 | 中低风险 | +| D | **D级** | (8000, 10000)元 | 低风险 | +| E | **E级** | (10000, 14000)元 | 很低风险 | +| F | **F级** | (14000, 18000)元 | 极低风险 | +| G | **G级** | (18000, 22000)元 | 极低风险 | +| H | **H级** | (22000, 26000)元 | 无风险 | +| I | **I级** | (26000, 30000)元 | 无风险 | +| J | **J级** | (30000+)元 | 零风险 | + +## 组件特性 + +### 1. 华丽的视觉展示 +- **渐变背景**:使用高级渐变色彩方案 +- **3D效果**:卡片阴影和浮动动画 +- **动态装饰**:浮动圆圈装饰元素 +- **响应式设计**:完美适配各种屏幕尺寸 + +### 2. 专业的数据分析 +- **收入等级可视化**:柱状图展示收入分布 +- **市场对比分析**:与市场平均水平对比 +- **信用风险评估**:基于收入的风险评级 +- **消费能力分析**:预测消费潜力 + +### 3. 详细的评级指南 +- **完整对照表**:所有等级的详细说明 +- **特性标签**:每个等级的关键特征 +- **数据可靠性**:展示数据准确率和覆盖范围 + +### 4. 智能风险评估 +- **动态评分**:根据收入等级自动计算风险分数 +- **个性化建议**:针对不同等级的专业建议 +- **市场定位**:精确的市场百分位排名 + +## 工具函数 + +### incomeUtils.js + +提供了以下核心功能: + +- `getIncomeLevelInfo(level)` - 获取收入等级详细信息 +- `getIncomeRange(level)` - 获取收入范围 +- `getRiskLevel(level)` - 获取风险等级 +- `getMarketComparison(level)` - 获取市场对比分析 +- `getCreditRiskAssessment(level)` - 获取信用风险评估 +- `getConsumptionCapacity(level)` - 获取消费能力分析 +- `generateIncomeAssessmentReport(level)` - 生成完整评估报告 + +## 视觉设计亮点 + +### 1. 色彩系统 +- 使用专业的收入等级色彩映射 +- 渐变背景营造高端感 +- 风险等级颜色区分清晰 + +### 2. 交互体验 +- 悬停效果增强用户体验 +- 平滑的动画过渡 +- 直观的视觉反馈 + +### 3. 信息架构 +- 层次分明的信息展示 +- 重点突出的核心数据 +- 完整的补充说明 + +## 数据说明 + +### 评估依据 +- 基于全国社会保险信息系统 +- 使用社保缴费基数推算收入水平 +- 数据准确率达95%以上 + +### 使用限制 +- 收入范围为税前月收入 +- 存在地区差异,仅供参考 +- 建议结合其他收入证明材料 + +### 更新频率 +- 数据实时更新 +- 全国范围覆盖 +- 持续优化算法模型 + +## 业务价值 + +### 1. 风险控制 +- 精确的收入评估降低信贷风险 +- 多维度风险分析提升决策质量 +- 智能化评分系统提高效率 + +### 2. 客户分层 +- 基于收入的客户分级管理 +- 个性化服务策略制定 +- 精准的市场定位分析 + +### 3. 合规要求 +- 符合金融监管要求 +- 数据来源权威可靠 +- 评估过程透明公开 + +## 注意事项 + +1. 确保传入正确的level值 +2. 组件会自动处理异常数据 +3. 建议在网络良好的环境下使用 +4. 定期更新评估标准以保持准确性 + +## 更新日志 + +- v1.0.0 - 初始版本,支持基础收入评估功能 +- 华丽的视觉展示效果 +- 完整的评级对照系统 +- 专业的风险分析功能 diff --git a/src/ui/JRZQ09J8/components/IncomeAnalysis.vue b/src/ui/JRZQ09J8/components/IncomeAnalysis.vue new file mode 100644 index 0000000..19660bc --- /dev/null +++ b/src/ui/JRZQ09J8/components/IncomeAnalysis.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/src/ui/JRZQ09J8/components/IncomeLevelGuide.vue b/src/ui/JRZQ09J8/components/IncomeLevelGuide.vue new file mode 100644 index 0000000..b4bdaad --- /dev/null +++ b/src/ui/JRZQ09J8/components/IncomeLevelGuide.vue @@ -0,0 +1,445 @@ + + + + + diff --git a/src/ui/JRZQ09J8/components/IncomeOverview.vue b/src/ui/JRZQ09J8/components/IncomeOverview.vue new file mode 100644 index 0000000..db6e3a7 --- /dev/null +++ b/src/ui/JRZQ09J8/components/IncomeOverview.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/src/ui/JRZQ09J8/index.vue b/src/ui/JRZQ09J8/index.vue new file mode 100644 index 0000000..21aea91 --- /dev/null +++ b/src/ui/JRZQ09J8/index.vue @@ -0,0 +1,537 @@ + + + + + diff --git a/src/ui/JRZQ09J8/utils/incomeUtils.js b/src/ui/JRZQ09J8/utils/incomeUtils.js new file mode 100644 index 0000000..7f97535 --- /dev/null +++ b/src/ui/JRZQ09J8/utils/incomeUtils.js @@ -0,0 +1,414 @@ +/** + * 收入评估工具函数 + */ + +/** + * 收入等级映射表 + */ +export const INCOME_LEVEL_MAP = { + '-': { + name: '无记录', + range: '查询无社保记录', + minAmount: 0, + maxAmount: 0, + color: '#94a3b8', + riskLevel: 'high', + description: '未发现社保缴费记录,无法进行收入评估' + }, + 'A': { + name: 'A级收入', + range: '2,000 - 4,000 元', + minAmount: 2000, + maxAmount: 4000, + color: '#ef4444', + riskLevel: 'medium-high', + description: '基础收入水平,消费能力有限' + }, + 'B': { + name: 'B级收入', + range: '4,000 - 6,000 元', + minAmount: 4000, + maxAmount: 6000, + color: '#f97316', + riskLevel: 'medium', + description: '普通收入水平,具备基础消费能力' + }, + 'C': { + name: 'C级收入', + range: '6,000 - 8,000 元', + minAmount: 6000, + maxAmount: 8000, + color: '#eab308', + riskLevel: 'medium-low', + description: '中等收入水平,消费能力良好' + }, + 'D': { + name: 'D级收入', + range: '8,000 - 10,000 元', + minAmount: 8000, + maxAmount: 10000, + color: '#84cc16', + riskLevel: 'low', + description: '中等偏上收入,消费能力较强' + }, + 'E': { + name: 'E级收入', + range: '10,000 - 14,000 元', + minAmount: 10000, + maxAmount: 14000, + color: '#22c55e', + riskLevel: 'very-low', + description: '良好收入水平,消费能力强劲' + }, + 'F': { + name: 'F级收入', + range: '14,000 - 18,000 元', + minAmount: 14000, + maxAmount: 18000, + color: '#10b981', + riskLevel: 'very-low', + description: '较高收入水平,消费能力很强' + }, + 'G': { + name: 'G级收入', + range: '18,000 - 22,000 元', + minAmount: 18000, + maxAmount: 22000, + color: '#06b6d4', + riskLevel: 'minimal', + description: '高收入水平,消费能力强大' + }, + 'H': { + name: 'H级收入', + range: '22,000 - 26,000 元', + minAmount: 22000, + maxAmount: 26000, + color: '#3b82f6', + riskLevel: 'minimal', + description: '很高收入水平,消费能力顶级' + }, + 'I': { + name: 'I级收入', + range: '26,000 - 30,000 元', + minAmount: 26000, + maxAmount: 30000, + color: '#8b5cf6', + riskLevel: 'none', + description: '优秀收入水平,消费能力超强' + }, + 'J': { + name: 'J级收入', + range: '30,000+ 元', + minAmount: 30000, + maxAmount: Infinity, + color: '#d946ef', + riskLevel: 'none', + description: '卓越收入水平,消费潜力无限' + } +} + +/** + * 获取收入等级信息 + * @param {string} level - 收入等级 + * @returns {object} 等级信息 + */ +export const getIncomeLevelInfo = (level) => { + return INCOME_LEVEL_MAP[level] || { + name: '未知等级', + range: '数据异常', + minAmount: 0, + maxAmount: 0, + color: '#94a3b8', + riskLevel: 'unknown', + description: '数据异常,无法进行准确评估' + } +} + +/** + * 获取收入等级显示名称 + * @param {string} level - 收入等级 + * @returns {string} 显示名称 + */ +export const getIncomeLevelName = (level) => { + const levelInfo = getIncomeLevelInfo(level) + return levelInfo.name +} + +/** + * 获取收入范围 + * @param {string} level - 收入等级 + * @returns {string} 收入范围 + */ +export const getIncomeRange = (level) => { + const levelInfo = getIncomeLevelInfo(level) + return levelInfo.range +} + +/** + * 获取收入等级颜色 + * @param {string} level - 收入等级 + * @returns {string} 颜色值 + */ +export const getIncomeLevelColor = (level) => { + const levelInfo = getIncomeLevelInfo(level) + return levelInfo.color +} + +/** + * 获取风险等级 + * @param {string} level - 收入等级 + * @returns {string} 风险等级 + */ +export const getRiskLevel = (level) => { + const levelInfo = getIncomeLevelInfo(level) + return levelInfo.riskLevel +} + +/** + * 格式化金额 + * @param {number} amount - 金额 + * @returns {string} 格式化后的金额 + */ +export const formatAmount = (amount) => { + if (!amount || amount === 0) return '0' + + return amount.toLocaleString('zh-CN', { + style: 'currency', + currency: 'CNY', + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }) +} + +/** + * 获取收入等级排名百分比 + * @param {string} level - 收入等级 + * @returns {number} 排名百分比 (0-100) + */ +export const getIncomePercentile = (level) => { + const percentileMap = { + '-': 0, + 'A': 10, + 'B': 25, + 'C': 40, + 'D': 55, + 'E': 70, + 'F': 80, + 'G': 85, + 'H': 90, + 'I': 95, + 'J': 99 + } + + return percentileMap[level] || 0 +} + +/** + * 获取市场对比描述 + * @param {string} level - 收入等级 + * @returns {string} 市场对比描述 + */ +export const getMarketComparison = (level) => { + const percentile = getIncomePercentile(level) + + if (percentile === 0) { + return '无社保记录,无法与市场平均水平进行对比' + } else if (percentile <= 20) { + return `低于市场平均收入水平,处于收入分布的底部${percentile}%区间` + } else if (percentile <= 40) { + return `略低于市场平均收入水平,处于收入分布的底部${percentile}%区间` + } else if (percentile <= 60) { + return `接近市场平均收入水平,处于收入分布的中等${percentile}%区间` + } else if (percentile <= 80) { + return `高于市场平均收入水平,处于收入分布的上层${percentile}%区间` + } else if (percentile <= 90) { + return `显著高于市场平均收入水平,处于收入分布的顶部${100-percentile}%区间` + } else { + return `远超市场绝大多数收入水平,处于收入分布的顶部${100-percentile}%区间` + } +} + +/** + * 获取信用风险评估 + * @param {string} level - 收入等级 + * @returns {object} 风险评估信息 + */ +export const getCreditRiskAssessment = (level) => { + const riskAssessments = { + '-': { + level: '高风险', + description: '缺乏社保记录,收入稳定性存在不确定性,信用风险较高', + score: 20, + recommendations: ['核实收入来源', '要求担保措施', '谨慎放贷'] + }, + 'A': { + level: '中高风险', + description: '收入水平较低,还款能力有限,需要谨慎评估信用风险', + score: 35, + recommendations: ['评估还款能力', '适当降低额度', '关注还款记录'] + }, + 'B': { + level: '中等风险', + description: '收入水平一般,具备基础还款能力,信用风险中等', + score: 50, + recommendations: ['正常业务流程', '定期跟踪', '建立信用档案'] + }, + 'C': { + level: '中低风险', + description: '收入稳定,还款能力良好,信用风险较低', + score: 65, + recommendations: ['可正常合作', '适度提升额度', '优化服务'] + }, + 'D': { + level: '低风险', + description: '收入较高,还款能力强,信用风险低', + score: 75, + recommendations: ['优质客户', '提升服务等级', '拓展业务'] + }, + 'E': { + level: '很低风险', + description: '收入良好,还款能力很强,信用风险很低', + score: 85, + recommendations: ['重点客户', '专享服务', '深度合作'] + }, + 'F': { + level: '极低风险', + description: '高收入群体,还款能力优秀,信用风险极低', + score: 90, + recommendations: ['VIP客户', '定制服务', '战略合作'] + }, + 'G': { + level: '极低风险', + description: '高收入群体,还款能力卓越,信用风险极低', + score: 92, + recommendations: ['顶级客户', '私人定制', '长期合作'] + }, + 'H': { + level: '无风险', + description: '高端收入群体,还款能力顶级,几乎无信用风险', + score: 95, + recommendations: ['钻石客户', '专属服务', '全面合作'] + }, + 'I': { + level: '无风险', + description: '精英收入群体,还款能力完美,无信用风险', + score: 97, + recommendations: ['白金客户', '尊享服务', '全方位合作'] + }, + 'J': { + level: '零风险', + description: '顶级收入群体,还款能力无限,零信用风险', + score: 99, + recommendations: ['至尊客户', '顶级服务', '战略伙伴'] + } + } + + return riskAssessments[level] || { + level: '未知风险', + description: '数据异常,无法进行风险评估', + score: 0, + recommendations: ['数据核实', '人工审核', '谨慎处理'] + } +} + +/** + * 获取消费能力分析 + * @param {string} level - 收入等级 + * @returns {object} 消费能力分析 + */ +export const getConsumptionCapacity = (level) => { + const capacityAnalysis = { + '-': { + level: '无法评估', + description: '缺乏收入数据,无法评估消费能力', + categories: [] + }, + 'A': { + level: '基础消费', + description: '主要满足基本生活需求,消费能力有限', + categories: ['基本生活用品', '必需品消费', '低价商品'] + }, + 'B': { + level: '一般消费', + description: '能够满足日常消费需求,偶有小额娱乐支出', + categories: ['日常用品', '基础娱乐', '小额投资'] + }, + 'C': { + level: '中等消费', + description: '具备良好的消费能力,可进行中档消费', + categories: ['品质商品', '休闲娱乐', '教育投资', '小额理财'] + }, + 'D': { + level: '较强消费', + description: '消费能力较强,可进行中高档消费', + categories: ['中高档商品', '旅游度假', '技能培训', '理财投资'] + }, + 'E': { + level: '强劲消费', + description: '消费能力强劲,可进行高档消费和投资', + categories: ['高档商品', '奢侈品', '高端服务', '投资理财'] + }, + 'F': { + level: '很强消费', + description: '消费能力很强,可进行奢侈消费和多元投资', + categories: ['奢侈品', '高端服务', '房产投资', '金融产品'] + }, + 'G': { + level: '强大消费', + description: '消费能力强大,属于高端消费群体', + categories: ['顶级奢侈品', '私人定制', '房产投资', '股权投资'] + }, + 'H': { + level: '顶级消费', + description: '消费能力顶级,属于超高端消费群体', + categories: ['超级奢侈品', '私人飞机', '豪华房产', '私募基金'] + }, + 'I': { + level: '超强消费', + description: '消费能力超强,属于精英消费群体', + categories: ['收藏品', '艺术品', '豪华游艇', '对冲基金'] + }, + 'J': { + level: '无限消费', + description: '消费潜力无限,属于顶级财富群体', + categories: ['任何商品', '私人岛屿', '慈善事业', '风险投资'] + } + } + + return capacityAnalysis[level] || { + level: '未知', + description: '数据异常,无法分析消费能力', + categories: [] + } +} + +/** + * 生成收入评估报告 + * @param {string} level - 收入等级 + * @returns {object} 完整的评估报告 + */ +export const generateIncomeAssessmentReport = (level) => { + const levelInfo = getIncomeLevelInfo(level) + const riskAssessment = getCreditRiskAssessment(level) + const consumptionCapacity = getConsumptionCapacity(level) + const marketComparison = getMarketComparison(level) + const percentile = getIncomePercentile(level) + + return { + level, + levelInfo, + riskAssessment, + consumptionCapacity, + marketComparison, + percentile, + timestamp: new Date().toISOString(), + summary: { + grade: levelInfo.name, + range: levelInfo.range, + riskLevel: riskAssessment.level, + riskScore: riskAssessment.score, + marketPosition: `超过${percentile}%的收入水平`, + recommendations: riskAssessment.recommendations + } + } +} diff --git a/src/ui/JRZQ4B6C/README.md b/src/ui/JRZQ4B6C/README.md new file mode 100644 index 0000000..383e825 --- /dev/null +++ b/src/ui/JRZQ4B6C/README.md @@ -0,0 +1,129 @@ +# 信贷表现组件 (JRZQ4B6C) + +## 组件概述 + +信贷表现主要为企业在背景调查过程中探查用户近期信贷表现时提供参考,帮助企业对其内部员工、外部业务进行个人信用过滤。 + +## 组件结构 + +``` +JRZQ4B6C/ +├── index.vue # 主组件 +├── components/ # 子组件目录 +│ ├── ProbeOverview.vue # 信贷表现概览组件 +│ ├── OverdueInfoSection.vue # 逾期信息组件 +│ ├── PerformanceInfoSection.vue # 履约信息组件 +│ └── InstitutionStatusSection.vue # 机构状态组件 +├── utils/ # 工具函数目录 +│ └── probeUtils.js # 信贷表现工具函数 +└── README.md # 说明文档 +``` + +## 使用方法 + +### 基本用法 + +```vue + + + +``` + +## 数据字段说明 + +| 字段名 | 类型 | 必填 | 描述 | 示例值 | +|-------|------|------|------|--------| +| result_code | String | 否 | 探查结果编码 | "1" | +| max_overdue_amt | String | 否 | 最大逾期金额 | "1000-2000" | +| max_overdue_days | String | 否 | 最长逾期天数 | "1-15" | +| latest_overdue_time | String | 否 | 最近逾期时间 | "2018-10" | +| max_performance_amt | String | 否 | 最大履约金额 | "1000-2000" | +| latest_performance_time | String | 否 | 最近履约时间 | "2018-10" | +| count_performance | String | 否 | 履约笔数 | "1" | +| currently_overdue | String | 否 | 当前逾期机构数 | "1" | +| currently_performance | String | 否 | 当前履约机构数 | "29" | +| acc_exc | String | 否 | 异常还款机构数 | "0" | +| acc_sleep | String | 否 | 睡眠机构数 | "39" | + +## 结果编码说明 + +| 编码 | 显示内容 | 探查明细说明 | 风险等级 | +|------|----------|-------------|----------| +| 1 | 用户最近一笔订单未结清 | 用户最近一笔订单未结清 | 高风险 | +| 2 | 用户订单结清情况良好 | 多笔订单用户最近一笔订单已结清且历史所有订单均已结清,或单笔订单用户该订单发生时间在3个月之内且该订单结清 | 低风险 | +| 3 | 用户最近订单已结清,历史存在未结清订单 | 用户最近一笔订单已结清,但历史存在未结清订单 | 中等风险 | +| 4 | 用户数据不充分 | 数据不充分 | 未知风险 | + +### 详细说明 + +**编码1**:通过模型计算展现该用户行为画像,用户最近一笔订单未结清 +**编码2**:通过模型计算展现该用户行为画像,用户订单结清情况良好 +**编码3**:通过模型计算展现该用户行为画像,用户最近订单已结清但历史存在未结清订单 +**编码4**:用户数据不充分无法展现该用户行为画像 + +## 金额区间说明 + +组件支持以下金额区间格式: +- 区间格式:`"1000-2000"`、`"(1000~2000]"` +- 大于格式:`">1000000"` +- 零值:`"0"` 表示无记录 + +## 组件特性 + +1. **响应式设计**:适配移动端和桌面端 +2. **数据格式化**:自动格式化金额、时间等数据 +3. **风险评估**:基于数据自动生成风险等级和建议 +4. **视觉反馈**:使用颜色区分不同风险等级 +5. **空数据处理**:优雅处理缺失或无效数据 + +## 工具函数 + +### probeUtils.js + +提供了以下工具函数: + +- `getResultCodeInfo(code)` - 获取结果编码信息 +- `formatAmountRange(amount)` - 格式化金额区间 +- `formatDaysRange(days)` - 格式化天数区间 +- `formatTime(time)` - 格式化时间 +- `generateRiskSummary(data)` - 生成风险评估总结 + +## 样式定制 + +组件使用 Tailwind CSS 构建,可以通过以下方式定制样式: + +1. 修改组件内的 CSS 类名 +2. 使用 CSS 变量覆盖默认样式 +3. 通过 props 传入自定义样式类名 + +## 注意事项 + +1. 确保传入的数据格式正确 +2. 所有字段都是可选的,组件会优雅处理缺失数据 +3. 时间格式建议使用 YYYY-MM 格式 +4. 金额和天数支持多种区间格式 + +## 更新日志 + +- v1.0.0 - 初始版本,支持信贷表现基本功能展示 diff --git a/src/ui/JRZQ4B6C/components/InstitutionStatusSection.vue b/src/ui/JRZQ4B6C/components/InstitutionStatusSection.vue new file mode 100644 index 0000000..eff6761 --- /dev/null +++ b/src/ui/JRZQ4B6C/components/InstitutionStatusSection.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/ui/JRZQ4B6C/components/OverdueInfoSection.vue b/src/ui/JRZQ4B6C/components/OverdueInfoSection.vue new file mode 100644 index 0000000..791bb6f --- /dev/null +++ b/src/ui/JRZQ4B6C/components/OverdueInfoSection.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/ui/JRZQ4B6C/components/PerformanceInfoSection.vue b/src/ui/JRZQ4B6C/components/PerformanceInfoSection.vue new file mode 100644 index 0000000..674cc7c --- /dev/null +++ b/src/ui/JRZQ4B6C/components/PerformanceInfoSection.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/ui/JRZQ4B6C/components/ProbeOverview.vue b/src/ui/JRZQ4B6C/components/ProbeOverview.vue new file mode 100644 index 0000000..339464c --- /dev/null +++ b/src/ui/JRZQ4B6C/components/ProbeOverview.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/ui/JRZQ4B6C/index.vue b/src/ui/JRZQ4B6C/index.vue new file mode 100644 index 0000000..3924601 --- /dev/null +++ b/src/ui/JRZQ4B6C/index.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/ui/JRZQ4B6C/utils/probeUtils.js b/src/ui/JRZQ4B6C/utils/probeUtils.js new file mode 100644 index 0000000..56d02af --- /dev/null +++ b/src/ui/JRZQ4B6C/utils/probeUtils.js @@ -0,0 +1,288 @@ +/** + * 信贷表现工具函数 + */ + +/** + * 结果编码映射 + */ +export const RESULT_CODE_MAP = { + '1': { + text: '用户最近一笔订单未结清', + description: '通过模型计算展现该用户行为画像,用户最近一笔订单未结清,建议谨慎评估其信用状况和还款能力。', + detail: '用户最近一笔订单未结清', + color: 'text-red-500', + level: 'high' + }, + '2': { + text: '用户订单结清情况良好', + description: '通过模型计算展现该用户行为画像,多笔订单用户最近一笔订单已结清且历史所有订单均已结清,或单笔订单用户该订单发生时间在3个月之内且该订单结清,信贷表现良好。', + detail: '多笔订单用户最近一笔订单已结清且历史所有订单均已结清,或单笔订单用户该订单发生时间在3个月之内且该订单结清', + color: 'text-green-500', + level: 'low' + }, + '3': { + text: '用户最近订单已结清,历史存在未结清订单', + description: '通过模型计算展现该用户行为画像,用户最近一笔订单已结清,但历史存在未结清订单,建议关注其历史还款记录。', + detail: '用户最近一笔订单已结清,但历史存在未结清订单', + color: 'text-yellow-500', + level: 'medium' + }, + '4': { + text: '用户数据不充分', + description: '用户数据不充分无法展现该用户行为画像。建议通过其他征信渠道补充信息进行综合评估。', + detail: '数据不充分', + color: 'text-gray-500', + level: 'unknown' + } +} + +/** + * 金额区间映射(根据文档提供的区间) + */ +export const AMOUNT_RANGES = [ + '(1~1000]', + '(1000~2000]', + '(2000~3000]', + '(3000~4000]', + '(4000~6000]', + '(6000~8000]', + '(8000~10000]', + '(10000~20000]', + '(20000~40000]', + '(40000~60000]', + '(60000~80000]', + '(80000~100000]', + '(100000~150000]', + '(150000~200000]', + '(200000~250000]', + '(250000~300000]', + '(300000~350000]', + '(350000~400000]', + '(400000~450000]', + '(450000~500000]', + '(500000~550000]', + '(550000~600000]', + '(600000~650000]', + '(650000~700000]', + '(700000~750000]', + '(750000~800000]', + '(800000~850000]', + '(850000~900000]', + '(900000~950000]', + '(950000~1000000]', + '>1000000' +] + +/** + * 获取结果编码信息 + * @param {string} code - 结果编码 + * @returns {object} 结果编码信息 + */ +export const getResultCodeInfo = (code) => { + return RESULT_CODE_MAP[code] || { + text: '未知状态', + description: '信贷表现主要为企业在背景调查过程中探查用户近期信贷表现时提供参考,帮助企业对其内部员工、外部业务进行个人信用过滤。', + color: 'text-gray-500', + level: 'unknown' + } +} + +/** + * 格式化金额区间 + * @param {string} amount - 金额区间字符串 + * @returns {string} 格式化后的金额区间 + */ +export const formatAmountRange = (amount) => { + if (!amount || amount === '0') { + return '无记录' + } + + // 处理标准区间格式,如 "1000-2000" + if (amount.includes('-')) { + const [min, max] = amount.split('-') + return `${formatNumber(min)}元 - ${formatNumber(max)}元` + } + + // 处理带括号的区间格式,如 "(1000~2000]" + if (amount.includes('~')) { + const cleanAmount = amount.replace(/[()[\]]/g, '') + const [min, max] = cleanAmount.split('~') + return `${formatNumber(min)}元 - ${formatNumber(max)}元` + } + + // 处理大于某个值的格式,如 ">1000000" + if (amount.startsWith('>')) { + const value = amount.substring(1) + return `大于 ${formatNumber(value)}元` + } + + // 其他格式直接返回 + return amount +} + +/** + * 格式化天数区间 + * @param {string} days - 天数区间字符串 + * @returns {string} 格式化后的天数区间 + */ +export const formatDaysRange = (days) => { + if (!days || days === '0') { + return '无记录' + } + + // 处理区间格式,如 "1-15" + if (days.includes('-')) { + const [min, max] = days.split('-') + return `${min}天 - ${max}天` + } + + // 处理带括号的区间格式,如 "[1~15]" + if (days.includes('~')) { + const cleanDays = days.replace(/[()[\]]/g, '') + const [min, max] = cleanDays.split('~') + return `${min}天 - ${max}天` + } + + return days + '天' +} + +/** + * 格式化时间 + * @param {string} time - 时间字符串 + * @returns {string} 格式化后的时间 + */ +export const formatTime = (time) => { + if (!time) { + return '无记录' + } + + // 处理 YYYY-MM 格式 + if (time.match(/^\d{4}-\d{2}$/)) { + return time.replace('-', '年') + '月' + } + + // 处理 YYYY-MM-DD 格式 + if (time.match(/^\d{4}-\d{2}-\d{2}$/)) { + const [year, month, day] = time.split('-') + return `${year}年${month}月${day}日` + } + + return time +} + +/** + * 格式化数字,添加千分位分隔符 + * @param {string|number} num - 数字 + * @returns {string} 格式化后的数字 + */ +export const formatNumber = (num) => { + if (!num) return '0' + + const number = typeof num === 'string' ? parseFloat(num) : num + + if (isNaN(number)) return num + + return number.toLocaleString('zh-CN') +} + +/** + * 获取风险等级颜色类名 + * @param {string} level - 风险等级 + * @returns {string} CSS类名 + */ +export const getRiskLevelClass = (level) => { + const levelMap = { + 'high': 'text-red-500', + 'medium': 'text-yellow-500', + 'low': 'text-green-500', + 'unknown': 'text-gray-500' + } + + return levelMap[level] || 'text-gray-500' +} + +/** + * 获取风险等级背景色类名 + * @param {string} level - 风险等级 + * @returns {string} CSS类名 + */ +export const getRiskLevelBgClass = (level) => { + const levelMap = { + 'high': 'bg-red-50 border-red-200', + 'medium': 'bg-yellow-50 border-yellow-200', + 'low': 'bg-green-50 border-green-200', + 'unknown': 'bg-gray-50 border-gray-200' + } + + return levelMap[level] || 'bg-gray-50 border-gray-200' +} + +/** + * 生成信贷表现总结 + * @param {object} data - 信贷表现数据 + * @returns {object} 风险评估总结 + */ +export const generateRiskSummary = (data) => { + if (!data) { + return { + level: 'unknown', + text: '无法获取数据进行风险评估', + recommendations: ['建议通过其他渠道获取更多信息'] + } + } + + const resultCode = data.result_code + const codeInfo = getResultCodeInfo(resultCode) + + const currentlyOverdue = parseInt(data.currently_overdue) || 0 + const accExc = parseInt(data.acc_exc) || 0 + const accSleep = parseInt(data.acc_sleep) || 0 + + let riskLevel = codeInfo.level + let recommendations = [] + + // 基于结果编码的建议 + switch (resultCode) { + case '1': // 用户最近一笔订单未结清 + recommendations.push('用户最近一笔订单未结清,存在风险') + recommendations.push('建议进一步核实原因和当前还款能力') + recommendations.push('考虑要求提供担保或抵押措施') + break + case '2': // 用户订单结清情况良好 + recommendations.push('用户订单结清情况良好,信贷表现正常') + recommendations.push('可以正常开展业务合作') + recommendations.push('建议定期跟踪信用状况变化') + break + case '3': // 用户最近订单已结清,历史存在未结清订单 + recommendations.push('用户最近订单已结清,但历史存在未结清订单') + recommendations.push('建议关注历史还款记录和还款意愿') + recommendations.push('可考虑适当降低授信额度或增加风控措施') + break + case '4': // 用户数据不充分 + recommendations.push('用户数据不充分,无法完整评估行为画像') + recommendations.push('建议通过其他征信渠道补充信息') + recommendations.push('谨慎开展高风险业务,建议人工审核') + break + } + + // 基于其他指标的额外风险评估 + if (currentlyOverdue > 0) { + riskLevel = 'high' + recommendations.push(`当前有${currentlyOverdue}个机构逾期,风险较高`) + } + + if (accExc > 2) { + if (riskLevel !== 'high') riskLevel = 'medium' + recommendations.push(`存在${accExc}个异常还款机构,需要关注`) + } + + if (accSleep > 10) { + recommendations.push(`有${accSleep}个睡眠机构,信贷活跃度偏低`) + } + + return { + level: riskLevel, + text: codeInfo.description, + recommendations: recommendations + } +} diff --git a/src/utils/chatCrypto.js b/src/utils/chatCrypto.js new file mode 100644 index 0000000..60ec6ef --- /dev/null +++ b/src/utils/chatCrypto.js @@ -0,0 +1,174 @@ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +var CryptoJS = CryptoJS || function (u, p) { + var d = {}, l = d.lib = {}, s = function () { }, t = l.Base = { extend: function (a) { s.prototype = this; var c = new s; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } }, + r = l.WordArray = t.extend({ + init: function (a, c) { a = this.words = a || []; this.sigBytes = c != p ? c : 4 * a.length }, toString: function (a) { return (a || v).stringify(this) }, concat: function (a) { var c = this.words, e = a.words, j = this.sigBytes; a = a.sigBytes; this.clamp(); if (j % 4) for (var k = 0; k < a; k++)c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4); else if (65535 < e.length) for (k = 0; k < a; k += 4)c[j + k >>> 2] = e[k >>> 2]; else c.push.apply(c, e); this.sigBytes += a; return this }, clamp: function () { + var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 << + 32 - 8 * (c % 4); a.length = u.ceil(c / 4) + }, clone: function () { var a = t.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], e = 0; e < a; e += 4)c.push(4294967296 * u.random() | 0); return new r.init(c, a) } + }), w = d.enc = {}, v = w.Hex = { + stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++) { var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255; e.push((k >>> 4).toString(16)); e.push((k & 15).toString(16)) } return e.join("") }, parse: function (a) { + for (var c = a.length, e = [], j = 0; j < c; j += 2)e[j >>> 3] |= parseInt(a.substr(j, + 2), 16) << 24 - 4 * (j % 8); return new r.init(e, c / 2) + } + }, b = w.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var e = [], j = 0; j < a; j++)e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255)); return e.join("") }, parse: function (a) { for (var c = a.length, e = [], j = 0; j < c; j++)e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4); return new r.init(e, c) } }, x = w.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(b.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return b.parse(unescape(encodeURIComponent(a))) } }, + q = l.BufferedBlockAlgorithm = t.extend({ + reset: function () { this._data = new r.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = x.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, e = c.words, j = c.sigBytes, k = this.blockSize, b = j / (4 * k), b = a ? u.ceil(b) : u.max((b | 0) - this._minBufferSize, 0); a = b * k; j = u.min(4 * a, j); if (a) { for (var q = 0; q < a; q += k)this._doProcessBlock(e, q); q = e.splice(0, a); c.sigBytes -= j } return new r.init(q, j) }, clone: function () { + var a = t.clone.call(this); + a._data = this._data.clone(); return a + }, _minBufferSize: 0 + }); l.Hasher = q.extend({ + cfg: t.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { q.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (b, e) { return (new a.init(e)).finalize(b) } }, _createHmacHelper: function (a) { + return function (b, e) { + return (new n.HMAC.init(a, + e)).finalize(b) + } + } + }); var n = d.algo = {}; return d +}(Math); +(function () { + var u = CryptoJS, p = u.lib.WordArray; u.enc.Base64 = { + stringify: function (d) { var l = d.words, p = d.sigBytes, t = this._map; d.clamp(); d = []; for (var r = 0; r < p; r += 3)for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + 0.75 * v < p; v++)d.push(t.charAt(w >>> 6 * (3 - v) & 63)); if (l = t.charAt(64)) for (; d.length % 4;)d.push(l); return d.join("") }, parse: function (d) { + var l = d.length, s = this._map, t = s.charAt(64); t && (t = d.indexOf(t), -1 != t && (l = t)); for (var t = [], r = 0, w = 0; w < + l; w++)if (w % 4) { var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4), b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4); t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4); r++ } return p.create(t, r) + }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } +})(); +(function (u) { + function p (b, n, a, c, e, j, k) { b = b + (n & a | ~n & c) + e + k; return (b << j | b >>> 32 - j) + n } function d (b, n, a, c, e, j, k) { b = b + (n & c | a & ~c) + e + k; return (b << j | b >>> 32 - j) + n } function l (b, n, a, c, e, j, k) { b = b + (n ^ a ^ c) + e + k; return (b << j | b >>> 32 - j) + n } function s (b, n, a, c, e, j, k) { b = b + (a ^ (n | ~c)) + e + k; return (b << j | b >>> 32 - j) + n } for (var t = CryptoJS, r = t.lib, w = r.WordArray, v = r.Hasher, r = t.algo, b = [], x = 0; 64 > x; x++)b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0; r = r.MD5 = v.extend({ + _doReset: function () { this._hash = new w.init([1732584193, 4023233417, 2562383102, 271733878]) }, + _doProcessBlock: function (q, n) { + for (var a = 0; 16 > a; a++) { var c = n + a, e = q[c]; q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360 } var a = this._hash.words, c = q[n + 0], e = q[n + 1], j = q[n + 2], k = q[n + 3], z = q[n + 4], r = q[n + 5], t = q[n + 6], w = q[n + 7], v = q[n + 8], A = q[n + 9], B = q[n + 10], C = q[n + 11], u = q[n + 12], D = q[n + 13], E = q[n + 14], x = q[n + 15], f = a[0], m = a[1], g = a[2], h = a[3], f = p(f, m, g, h, c, 7, b[0]), h = p(h, f, m, g, e, 12, b[1]), g = p(g, h, f, m, j, 17, b[2]), m = p(m, g, h, f, k, 22, b[3]), f = p(f, m, g, h, z, 7, b[4]), h = p(h, f, m, g, r, 12, b[5]), g = p(g, h, f, m, t, 17, b[6]), m = p(m, g, h, f, w, 22, b[7]), + f = p(f, m, g, h, v, 7, b[8]), h = p(h, f, m, g, A, 12, b[9]), g = p(g, h, f, m, B, 17, b[10]), m = p(m, g, h, f, C, 22, b[11]), f = p(f, m, g, h, u, 7, b[12]), h = p(h, f, m, g, D, 12, b[13]), g = p(g, h, f, m, E, 17, b[14]), m = p(m, g, h, f, x, 22, b[15]), f = d(f, m, g, h, e, 5, b[16]), h = d(h, f, m, g, t, 9, b[17]), g = d(g, h, f, m, C, 14, b[18]), m = d(m, g, h, f, c, 20, b[19]), f = d(f, m, g, h, r, 5, b[20]), h = d(h, f, m, g, B, 9, b[21]), g = d(g, h, f, m, x, 14, b[22]), m = d(m, g, h, f, z, 20, b[23]), f = d(f, m, g, h, A, 5, b[24]), h = d(h, f, m, g, E, 9, b[25]), g = d(g, h, f, m, k, 14, b[26]), m = d(m, g, h, f, v, 20, b[27]), f = d(f, m, g, h, D, 5, b[28]), h = d(h, f, + m, g, j, 9, b[29]), g = d(g, h, f, m, w, 14, b[30]), m = d(m, g, h, f, u, 20, b[31]), f = l(f, m, g, h, r, 4, b[32]), h = l(h, f, m, g, v, 11, b[33]), g = l(g, h, f, m, C, 16, b[34]), m = l(m, g, h, f, E, 23, b[35]), f = l(f, m, g, h, e, 4, b[36]), h = l(h, f, m, g, z, 11, b[37]), g = l(g, h, f, m, w, 16, b[38]), m = l(m, g, h, f, B, 23, b[39]), f = l(f, m, g, h, D, 4, b[40]), h = l(h, f, m, g, c, 11, b[41]), g = l(g, h, f, m, k, 16, b[42]), m = l(m, g, h, f, t, 23, b[43]), f = l(f, m, g, h, A, 4, b[44]), h = l(h, f, m, g, u, 11, b[45]), g = l(g, h, f, m, x, 16, b[46]), m = l(m, g, h, f, j, 23, b[47]), f = s(f, m, g, h, c, 6, b[48]), h = s(h, f, m, g, w, 10, b[49]), g = s(g, h, f, m, + E, 15, b[50]), m = s(m, g, h, f, r, 21, b[51]), f = s(f, m, g, h, u, 6, b[52]), h = s(h, f, m, g, k, 10, b[53]), g = s(g, h, f, m, B, 15, b[54]), m = s(m, g, h, f, e, 21, b[55]), f = s(f, m, g, h, v, 6, b[56]), h = s(h, f, m, g, x, 10, b[57]), g = s(g, h, f, m, t, 15, b[58]), m = s(m, g, h, f, D, 21, b[59]), f = s(f, m, g, h, z, 6, b[60]), h = s(h, f, m, g, C, 10, b[61]), g = s(g, h, f, m, j, 15, b[62]), m = s(m, g, h, f, A, 21, b[63]); a[0] = a[0] + f | 0; a[1] = a[1] + m | 0; a[2] = a[2] + g | 0; a[3] = a[3] + h | 0 + }, _doFinalize: function () { + var b = this._data, n = b.words, a = 8 * this._nDataBytes, c = 8 * b.sigBytes; n[c >>> 5] |= 128 << 24 - c % 32; var e = u.floor(a / + 4294967296); n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360; n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; b.sigBytes = 4 * (n.length + 1); this._process(); b = this._hash; n = b.words; for (a = 0; 4 > a; a++)c = n[a], n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360; return b + }, clone: function () { var b = v.clone.call(this); b._hash = this._hash.clone(); return b } + }); t.MD5 = v._createHelper(r); t.HmacMD5 = v._createHmacHelper(r) +})(Math); +(function () { + var u = CryptoJS, p = u.lib, d = p.Base, l = p.WordArray, p = u.algo, s = p.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: p.MD5, iterations: 1 }), init: function (d) { this.cfg = this.cfg.extend(d) }, compute: function (d, r) { for (var p = this.cfg, s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) { n && s.update(n); var n = s.update(d).finalize(r); s.reset(); for (var a = 1; a < p; a++)n = s.finalize(n), s.reset(); b.concat(n) } b.sigBytes = 4 * q; return b } }); u.EvpKDF = function (d, l, p) { + return s.create(p).compute(d, + l) + } +})(); +CryptoJS.lib.Cipher || function (u) { + var p = CryptoJS, d = p.lib, l = d.Base, s = d.WordArray, t = d.BufferedBlockAlgorithm, r = p.enc.Base64, w = p.algo.EvpKDF, v = d.Cipher = t.extend({ + cfg: l.extend(), createEncryptor: function (e, a) { return this.create(this._ENC_XFORM_MODE, e, a) }, createDecryptor: function (e, a) { return this.create(this._DEC_XFORM_MODE, e, a) }, init: function (e, a, b) { this.cfg = this.cfg.extend(b); this._xformMode = e; this._key = a; this.reset() }, reset: function () { t.reset.call(this); this._doReset() }, process: function (e) { this._append(e); return this._process() }, + finalize: function (e) { e && this._append(e); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function (e) { return { encrypt: function (b, k, d) { return ("string" == typeof k ? c : a).encrypt(e, b, k, d) }, decrypt: function (b, k, d) { return ("string" == typeof k ? c : a).decrypt(e, b, k, d) } } } + }); d.StreamCipher = v.extend({ _doFinalize: function () { return this._process(!0) }, blockSize: 1 }); var b = p.mode = {}, x = function (e, a, b) { + var c = this._iv; c ? this._iv = u : c = this._prevBlock; for (var d = 0; d < b; d++)e[a + d] ^= + c[d] + }, q = (d.BlockCipherMode = l.extend({ createEncryptor: function (e, a) { return this.Encryptor.create(e, a) }, createDecryptor: function (e, a) { return this.Decryptor.create(e, a) }, init: function (e, a) { this._cipher = e; this._iv = a } })).extend(); q.Encryptor = q.extend({ processBlock: function (e, a) { var b = this._cipher, c = b.blockSize; x.call(this, e, a, c); b.encryptBlock(e, a); this._prevBlock = e.slice(a, a + c) } }); q.Decryptor = q.extend({ + processBlock: function (e, a) { + var b = this._cipher, c = b.blockSize, d = e.slice(a, a + c); b.decryptBlock(e, a); x.call(this, + e, a, c); this._prevBlock = d + } + }); b = b.CBC = q; q = (p.pad = {}).Pkcs7 = { pad: function (a, b) { for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, l = [], n = 0; n < c; n += 4)l.push(d); c = s.create(l, c); a.concat(c) }, unpad: function (a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; d.BlockCipher = v.extend({ + cfg: v.cfg.extend({ mode: b, padding: q }), reset: function () { + v.reset.call(this); var a = this.cfg, b = a.iv, a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; else c = a.createDecryptor, this._minBufferSize = 1; this._mode = c.call(a, + this, b && b.words) + }, _doProcessBlock: function (a, b) { this._mode.processBlock(a, b) }, _doFinalize: function () { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var b = this._process(!0) } else b = this._process(!0), a.unpad(b); return b }, blockSize: 4 + }); var n = d.CipherParams = l.extend({ init: function (a) { this.mixIn(a) }, toString: function (a) { return (a || this.formatter).stringify(this) } }), b = (p.format = {}).OpenSSL = { + stringify: function (a) { + var b = a.ciphertext; a = a.salt; return (a ? s.create([1398893684, + 1701076831]).concat(a).concat(b) : b).toString(r) + }, parse: function (a) { a = r.parse(a); var b = a.words; if (1398893684 == b[0] && 1701076831 == b[1]) { var c = s.create(b.slice(2, 4)); b.splice(0, 4); a.sigBytes -= 16 } return n.create({ ciphertext: a, salt: c }) } + }, a = d.SerializableCipher = l.extend({ + cfg: l.extend({ format: b }), encrypt: function (a, b, c, d) { d = this.cfg.extend(d); var l = a.createEncryptor(c, d); b = l.finalize(b); l = l.cfg; return n.create({ ciphertext: b, key: c, iv: l.iv, algorithm: a, mode: l.mode, padding: l.padding, blockSize: a.blockSize, formatter: d.format }) }, + decrypt: function (a, b, c, d) { d = this.cfg.extend(d); b = this._parse(b, d.format); return a.createDecryptor(c, d).finalize(b.ciphertext) }, _parse: function (a, b) { return "string" == typeof a ? b.parse(a, this) : a } + }), p = (p.kdf = {}).OpenSSL = { execute: function (a, b, c, d) { d || (d = s.random(8)); a = w.create({ keySize: b + c }).compute(a, d); c = s.create(a.words.slice(b), 4 * c); a.sigBytes = 4 * b; return n.create({ key: a, iv: c, salt: d }) } }, c = d.PasswordBasedCipher = a.extend({ + cfg: a.cfg.extend({ kdf: p }), encrypt: function (b, c, d, l) { + l = this.cfg.extend(l); d = l.kdf.execute(d, + b.keySize, b.ivSize); l.iv = d.iv; b = a.encrypt.call(this, b, c, d.key, l); b.mixIn(d); return b + }, decrypt: function (b, c, d, l) { l = this.cfg.extend(l); c = this._parse(c, l.format); d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt); l.iv = d.iv; return a.decrypt.call(this, b, c, d.key, l) } + }) +}(); +(function () { + for (var u = CryptoJS, p = u.lib.BlockCipher, d = u.algo, l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++)a[c] = 128 > c ? c << 1 : c << 1 ^ 283; for (var e = 0, j = 0, c = 0; 256 > c; c++) { var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4, k = k >>> 8 ^ k & 255 ^ 99; l[e] = k; s[k] = e; var z = a[e], F = a[z], G = a[F], y = 257 * a[k] ^ 16843008 * k; t[e] = y << 24 | y >>> 8; r[e] = y << 16 | y >>> 16; w[e] = y << 8 | y >>> 24; v[e] = y; y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e; b[k] = y << 24 | y >>> 8; x[k] = y << 16 | y >>> 16; q[k] = y << 8 | y >>> 24; n[k] = y; e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1 } var H = [0, 1, 2, 4, 8, + 16, 32, 64, 128, 27, 54], d = d.AES = p.extend({ + _doReset: function () { + for (var a = this._key, c = a.words, d = a.sigBytes / 4, a = 4 * ((this._nRounds = d + 6) + 1), e = this._keySchedule = [], j = 0; j < a; j++)if (j < d) e[j] = c[j]; else { var k = e[j - 1]; j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24); e[j] = e[j - d] ^ k } c = this._invKeySchedule = []; for (d = 0; d < a; d++)j = a - d, k = d % 4 ? e[j] : e[j - 4], c[d] = 4 > d || 4 >= j ? k : b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> + 8 & 255]] ^ n[l[k & 255]] + }, encryptBlock: function (a, b) { this._doCryptBlock(a, b, this._keySchedule, t, r, w, v, l) }, decryptBlock: function (a, c) { var d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d; this._doCryptBlock(a, c, this._invKeySchedule, b, x, q, n, s); d = a[c + 1]; a[c + 1] = a[c + 3]; a[c + 3] = d }, _doCryptBlock: function (a, b, c, d, e, j, l, f) { + for (var m = this._nRounds, g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++)var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++], s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++], t = + d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++], n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++], g = q, h = s, k = t; q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++]; s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++]; t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++]; n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++]; a[b] = q; a[b + 1] = s; a[b + 2] = t; a[b + 3] = n + }, keySize: 8 + }); u.AES = p._createHelper(d) +})(); + +CryptoJS.encrypt = function (word, key, iv) { + return encrypt(word, key, iv) +} + +CryptoJS.decrypt = function (word, key, iv) { + return decrypt(word, key, iv) +} + +/** + * 加密 + * word:原密码 + * key :key + * iv : iv + */ +function encrypt (word, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + var encrypted = CryptoJS.AES.encrypt(word, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); +} + +/** + * 解密 + * word:加密后的密码 + * key :key + * iv : iv + */ +function decrypt (word, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + var decrypted = CryptoJS.AES.decrypt(word, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + decrypted = CryptoJS.enc.Utf8.stringify(decrypted); + return decrypted; +} +/** + * Electronic Codebook block mode. + */ +CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + return ECB; +}()); +/** + * @example + * var CryptoJS = require('./util/aes.js') + * var key = CryptoJS.enc.Utf8.parse("key"); + * var iv = CryptoJS.enc.Utf8.parse("iv"); + * var pwd = CryptoJS.encrypt(this.data.pwdVal, key, iv) + * var original = CryptoJS.encrypt(pwd, key, iv) + */ +export default CryptoJS; \ No newline at end of file diff --git a/src/utils/chatEncrypt.js b/src/utils/chatEncrypt.js new file mode 100644 index 0000000..89ca680 --- /dev/null +++ b/src/utils/chatEncrypt.js @@ -0,0 +1,19 @@ +import Crypto from '@/utils/chatCrypto' + +// 秘钥,转换成utf8格式字符串,用于加密解密,一般长度是16位(由后端提供) +const key = Crypto.enc.Utf8.parse('qw5w6SFE2D1jmxyd') +// 偏移量,转换成utf8格式字符串,一般长度是16位(由后端提供) +const iv = Crypto.enc.Utf8.parse('345GDFED433223DF') + +// 加密(使用CBC模式) +export default function Encrypt(value) { + // 使用外部包中的AES的加密方法 + // value(加密内容)、key(密钥) + let encrypt = Crypto.AES.encrypt(value, key, { + iv, // 偏移量 + mode: Crypto.mode.CBC, // 模式(五种加密模式) + padding: Crypto.pad.Pkcs7 // 填充 + }) + // 将加密的内容转成字符串返回出去 + return encrypt.toString() +} diff --git a/src/utils/crypto.js b/src/utils/crypto.js new file mode 100644 index 0000000..13eb7ae --- /dev/null +++ b/src/utils/crypto.js @@ -0,0 +1,53 @@ +import CryptoJS from 'crypto-js' + +// AES CBC 加密,IV 拼接在密文前面,并进行 Base64 编码// AES CBC 加密,IV 拼接在密文前面,并进行 Base64 编码 +export function aesEncrypt(plainText, hexKey) { + // 转换密钥为WordArray + const key = CryptoJS.enc.Hex.parse(hexKey) + + // 生成一个随机的IV + const iv = generateRandomIV() // 生成 16 字节的随机 IV + + // 加密 + const encrypted = CryptoJS.AES.encrypt(plainText, key, { + iv, + padding: CryptoJS.pad.Pkcs7, + mode: CryptoJS.mode.CBC, + }) + + // 拼接IV和密文,IV在前,密文在后,最后Base64编码 + const ivAndCipherText = iv.concat(encrypted.ciphertext) + return CryptoJS.enc.Base64.stringify(ivAndCipherText) +} + +// AES CBC 解密,IV 在密文前面,并且 Base64 解码 +export function aesDecrypt(base64CipherText, hexKey) { + // 转换密钥为WordArray + const key = CryptoJS.enc.Hex.parse(hexKey) + + // Base64解码并转换为WordArray + const cipherParams = CryptoJS.enc.Base64.parse(base64CipherText) + + // 提取 IV(前 16 字节) + const iv = cipherParams.clone().words.slice(0, 4) // 16 字节的 IV 对应 4 个字(每个字 4 字节) + + // 提取密文 + const cipherText = cipherParams.clone().words.slice(4) // 从第 4 个字开始到最后的密文 + + // 解密 + const decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.lib.WordArray.create(cipherText) }, key, { + iv: CryptoJS.lib.WordArray.create(iv), + padding: CryptoJS.pad.Pkcs7, + mode: CryptoJS.mode.CBC, + }) + + // 返回解密后的明文 + return decrypted.toString(CryptoJS.enc.Utf8) +} +function generateRandomIV() { + const iv = [] + for (let i = 0; i < 16; i++) { // 16 字节的 IV + iv.push(Math.floor(Math.random() * 256)) // 0-255 的随机数 + } + return CryptoJS.enc.Hex.parse(iv.map(b => b.toString(16).padStart(2, '0')).join('')) +} diff --git a/src/utils/zoomAdapter.js b/src/utils/zoomAdapter.js new file mode 100644 index 0000000..6098a76 --- /dev/null +++ b/src/utils/zoomAdapter.js @@ -0,0 +1,109 @@ +/** + * 简化版缩放适配工具 + */ +class ZoomAdapter { + constructor() { + // ===== 可调整的配置参数 ===== + this.maxZoom = 3; // 触发调整的缩放阈值(默认3倍) + this.targetZoom = 2; // 调整后的目标缩放(默认2倍) + this.isInitialized = false; + } + + init() { + if (this.isInitialized) return; + + // 绑定事件 + window.addEventListener('resize', () => this.checkZoom()); + window.addEventListener('orientationchange', () => { + setTimeout(() => this.checkZoom(), 500); + }); + + // 防止双击缩放 + let lastTouchEnd = 0; + document.addEventListener('touchend', (event) => { + const now = Date.now(); + if (now - lastTouchEnd <= 300) { + event.preventDefault(); + } + lastTouchEnd = now; + }, false); + + this.checkZoom(); + this.isInitialized = true; + } + + getCurrentZoom() { + return Math.max( + window.outerWidth / window.innerWidth, + window.devicePixelRatio, + window.screen.width / window.innerWidth + ); + } + + checkZoom() { + const zoom = this.getCurrentZoom(); + + if (zoom > this.maxZoom) { + this.adjust(zoom); + } else { + this.reset(); + } + } + + adjust(zoom) { + try { + // 计算调整比例:目标缩放 / 当前缩放 + const ratio = this.targetZoom / zoom; + + // 应用调整 + document.body.style.transform = `scale(${ratio})`; + document.body.style.transformOrigin = 'top left'; + document.body.style.width = `${100 / ratio}%`; + document.body.style.height = `${100 / ratio}%`; + } catch (e) { + console.warn('缩放调整失败:', e); + } + } + + reset() { + try { + document.body.style.transform = ''; + document.body.style.transformOrigin = ''; + document.body.style.width = ''; + document.body.style.height = ''; + } catch (e) { + console.warn('缩放重置失败:', e); + } + } + + addZoomStyles() { + const style = document.createElement('style'); + style.id = 'zoom-adapter-styles'; + style.textContent = ` + .zoom-adaptive { + font-size: 16px !important; + line-height: 1.5 !important; + } + .zoom-adaptive input, + .zoom-adaptive button, + .zoom-adaptive select, + .zoom-adaptive textarea { + font-size: 16px !important; + min-height: 44px !important; + padding: 8px 12px !important; + } + .zoom-adaptive img { + max-width: 100% !important; + height: auto !important; + } + .zoom-adaptive table { + max-width: 100% !important; + overflow-x: auto !important; + } + `; + document.head.appendChild(style); + } +} + +export default new ZoomAdapter(); +export { ZoomAdapter }; \ No newline at end of file diff --git a/src/views/Agent.vue b/src/views/Agent.vue new file mode 100644 index 0000000..d980923 --- /dev/null +++ b/src/views/Agent.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/src/views/AgentManageAgreement.vue b/src/views/AgentManageAgreement.vue new file mode 100644 index 0000000..c71ee5f --- /dev/null +++ b/src/views/AgentManageAgreement.vue @@ -0,0 +1,806 @@ + + + + + diff --git a/src/views/AgentPromoteDetails.vue b/src/views/AgentPromoteDetails.vue new file mode 100644 index 0000000..724b45d --- /dev/null +++ b/src/views/AgentPromoteDetails.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentRewardsDetails.vue b/src/views/AgentRewardsDetails.vue new file mode 100644 index 0000000..aa14113 --- /dev/null +++ b/src/views/AgentRewardsDetails.vue @@ -0,0 +1,137 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentServiceAgreement.vue b/src/views/AgentServiceAgreement.vue new file mode 100644 index 0000000..a8d0e01 --- /dev/null +++ b/src/views/AgentServiceAgreement.vue @@ -0,0 +1,277 @@ + + + + + \ No newline at end of file diff --git a/src/views/AgentVip.vue b/src/views/AgentVip.vue new file mode 100644 index 0000000..d9abe52 --- /dev/null +++ b/src/views/AgentVip.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/AgentVipApply.vue b/src/views/AgentVipApply.vue new file mode 100644 index 0000000..e3d95f7 --- /dev/null +++ b/src/views/AgentVipApply.vue @@ -0,0 +1,1067 @@ + + + + + diff --git a/src/views/AgentVipConfig.vue b/src/views/AgentVipConfig.vue new file mode 100644 index 0000000..1a811fa --- /dev/null +++ b/src/views/AgentVipConfig.vue @@ -0,0 +1,537 @@ + + + + + diff --git a/src/views/Authorization.vue b/src/views/Authorization.vue new file mode 100644 index 0000000..a9a9b1d --- /dev/null +++ b/src/views/Authorization.vue @@ -0,0 +1,198 @@ + + + + diff --git a/src/views/Complaint.vue b/src/views/Complaint.vue new file mode 100644 index 0000000..6c51d0c --- /dev/null +++ b/src/views/Complaint.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/views/Example.vue b/src/views/Example.vue new file mode 100644 index 0000000..dc5c92a --- /dev/null +++ b/src/views/Example.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/views/Help.vue b/src/views/Help.vue new file mode 100644 index 0000000..ff9014d --- /dev/null +++ b/src/views/Help.vue @@ -0,0 +1,115 @@ + + + + + \ No newline at end of file diff --git a/src/views/HelpDetail.vue b/src/views/HelpDetail.vue new file mode 100644 index 0000000..848b30f --- /dev/null +++ b/src/views/HelpDetail.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/src/views/HelpGuide.vue b/src/views/HelpGuide.vue new file mode 100644 index 0000000..d95b8cb --- /dev/null +++ b/src/views/HelpGuide.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/src/views/HistoryQuery.vue b/src/views/HistoryQuery.vue new file mode 100644 index 0000000..a8fba80 --- /dev/null +++ b/src/views/HistoryQuery.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/views/Inquire.vue b/src/views/Inquire.vue new file mode 100644 index 0000000..b749842 --- /dev/null +++ b/src/views/Inquire.vue @@ -0,0 +1,599 @@ + + + + + diff --git a/src/views/Invitation.vue b/src/views/Invitation.vue new file mode 100644 index 0000000..58dd280 --- /dev/null +++ b/src/views/Invitation.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/InvitationAgentApply.vue b/src/views/InvitationAgentApply.vue new file mode 100644 index 0000000..b8e09fe --- /dev/null +++ b/src/views/InvitationAgentApply.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/views/Login.vue b/src/views/Login.vue new file mode 100644 index 0000000..acbebf1 --- /dev/null +++ b/src/views/Login.vue @@ -0,0 +1,288 @@ + + + + + diff --git a/src/views/Me.vue b/src/views/Me.vue new file mode 100644 index 0000000..f357b00 --- /dev/null +++ b/src/views/Me.vue @@ -0,0 +1,387 @@ + + + + + diff --git a/src/views/NotFound.vue b/src/views/NotFound.vue new file mode 100644 index 0000000..28b313b --- /dev/null +++ b/src/views/NotFound.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/src/views/PaymentResult.vue b/src/views/PaymentResult.vue new file mode 100644 index 0000000..61c4005 --- /dev/null +++ b/src/views/PaymentResult.vue @@ -0,0 +1,520 @@ + + + + + diff --git a/src/views/PrivacyPolicy.vue b/src/views/PrivacyPolicy.vue new file mode 100644 index 0000000..da49572 --- /dev/null +++ b/src/views/PrivacyPolicy.vue @@ -0,0 +1,458 @@ + + + + + diff --git a/src/views/Promote.vue b/src/views/Promote.vue new file mode 100644 index 0000000..64235e1 --- /dev/null +++ b/src/views/Promote.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/src/views/PromotionInquire.vue b/src/views/PromotionInquire.vue new file mode 100644 index 0000000..0de33d6 --- /dev/null +++ b/src/views/PromotionInquire.vue @@ -0,0 +1,662 @@ + + + + + + diff --git a/src/views/Report.vue b/src/views/Report.vue new file mode 100644 index 0000000..4ddfcf5 --- /dev/null +++ b/src/views/Report.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/ReportShare.vue b/src/views/ReportShare.vue new file mode 100644 index 0000000..19baef5 --- /dev/null +++ b/src/views/ReportShare.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/src/views/Service.vue b/src/views/Service.vue new file mode 100644 index 0000000..e69d13a --- /dev/null +++ b/src/views/Service.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/SubordinateDetail.vue b/src/views/SubordinateDetail.vue new file mode 100644 index 0000000..3272c97 --- /dev/null +++ b/src/views/SubordinateDetail.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/src/views/SubordinateList.vue b/src/views/SubordinateList.vue new file mode 100644 index 0000000..e10d353 --- /dev/null +++ b/src/views/SubordinateList.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/views/UserAgreement.vue b/src/views/UserAgreement.vue new file mode 100644 index 0000000..3dbe7fe --- /dev/null +++ b/src/views/UserAgreement.vue @@ -0,0 +1,274 @@ + + + diff --git a/src/views/VantThemeTest.vue b/src/views/VantThemeTest.vue new file mode 100644 index 0000000..fd7bf88 --- /dev/null +++ b/src/views/VantThemeTest.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/src/views/Withdraw.vue b/src/views/Withdraw.vue new file mode 100644 index 0000000..5e30bef --- /dev/null +++ b/src/views/Withdraw.vue @@ -0,0 +1,525 @@ + + + + + diff --git a/src/views/WithdrawDetails.vue b/src/views/WithdrawDetails.vue new file mode 100644 index 0000000..9314162 --- /dev/null +++ b/src/views/WithdrawDetails.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/views/index.vue b/src/views/index.vue new file mode 100644 index 0000000..ab4f7b5 --- /dev/null +++ b/src/views/index.vue @@ -0,0 +1,189 @@ + + + + + + +{ + "layout": "home" +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..9348b41 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", // 如果是 Vite 项目 + "./src/**/*.{vue,js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..72d9ef8 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,84 @@ +import { fileURLToPath, URL } from "node:url"; +import AutoImport from "unplugin-auto-import/vite"; +import Components from "unplugin-vue-components/vite"; +import { VantResolver } from "@vant/auto-import-resolver"; +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import vueJsx from "@vitejs/plugin-vue-jsx"; +import vueDevTools from "vite-plugin-vue-devtools"; + +// https://vite.dev/config/ +export default defineConfig({ + server: { + host: "0.0.0.0", // 设置为 0.0.0.0 允许局域网访问 + port: 8979, // 自定义端口号,可选 + strictPort: true, // 如果端口被占用则抛出错误而不是使用下一个可用端口 + proxy: { + "/api/v1": { + target: "http://127.0.0.1:8888", // 本地接口地址 + changeOrigin: true, + }, + }, + }, + build: { + // 构建优化 + target: 'es2015', // 支持更多浏览器 + minify: 'terser', // 使用terser进行压缩 + terserOptions: { + compress: { + drop_console: true, // 移除console.log + drop_debugger: true, // 移除debugger + }, + }, + rollupOptions: { + output: { + // 代码分割策略 + manualChunks: { + vendor: ['vue', 'vue-router', 'pinia'], + vant: ['vant'], + utils: ['axios', 'lodash', 'crypto-js'], + charts: ['echarts', 'vue-echarts'], + }, + // 文件名策略 + chunkFileNames: 'assets/js/[name]-[hash].js', + entryFileNames: 'assets/js/[name]-[hash].js', + assetFileNames: 'assets/[ext]/[name]-[hash].[ext]', + }, + }, + // 启用CSS代码分割 + cssCodeSplit: true, + // 设置资源内联阈值 + assetsInlineLimit: 4096, + }, + plugins: [ + vue(), + AutoImport({ + imports: [ + "vue", // 自动引入 Vue Composition API,如 ref、computed、onMounted 等 + "vue-router", // 自动引入 vue-router 中的方法,如 useRoute、useRouter 等(可选) + "@vueuse/core", // 自动引入 VueUse 中的工具函数(可选) + ], + dts: "src/auto-imports.d.ts", // 生成类型定义文件(可选) + dirs: [ + "src/composables", + "src/stores", + "src/components", + ], + resolvers: [VantResolver()], + }), + Components({ + resolvers: [VantResolver()], + }), + vueJsx(), + // vueDevTools(), + ], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, + }, + // 优化依赖预构建 + optimizeDeps: { + include: ['vue', 'vue-router', 'pinia', 'vant', 'axios'], + }, +});