<template>
|
<div class="radar-container">
|
<!-- <div class="echarts-box"> -->
|
<div class="search-box">
|
<p class="tit">公司尽调画像</p>
|
<textarea v-model="message" placeholder="请输入公司名称(必填)"></textarea>
|
<button onclick="document.getElementById('file').click()">请上传尽调报告</button>
|
<input type="file" id="file" accept=".doc,.docx" @change="getFiles($event)" style="display: none" />
|
<p class="file-tit">已选择文件: <span v-if="selectedFile"> {{ selectedFile.name }}</span> <span v-else>暂无</span> </p>
|
<button @click="generateChart" :disabled="disableButton"
|
:class="{ 'disabled-button': disableButton }">一键生成</button>
|
<!-- <button style="margin-top: 20px;" @click="GetSaveExcel">下载excel</button> -->
|
</div>
|
<div class="echarts-box">
|
<div class="radar-box" v-show="!loadingSub">
|
<div class="ent-structure" ref="ent-structure">
|
<div class="ent-radar" ref="ent-radar"></div>
|
</div>
|
</div>
|
|
<div size="large" class="loading-box" v-if="loadingSub">
|
<div style="font-size: 32px;font-weight: 600;line-height: 32px;">生成中</div>
|
<Spin size="small" style="margin-top: 10px;margin-left: 20px" />
|
<Spin style="margin-top: 6px;margin-left: 20px" />
|
<Spin style="margin-left: 20px" size="large" />
|
</div>
|
<div class="xlsx-box" v-if="hasScores">
|
<table border="1" style="border-collapse: collapse; width: 100%;">
|
<thead>
|
<tr>
|
<th v-for="(header, index) in headers" :key="index" :style="{ width: headerWidths[index] ,textAlign: 'center'}">{{ header }}</th>
|
</tr>
|
</thead>
|
<tbody>
|
<tr v-for="(row, rowIndex) in tableData" :key="rowIndex">
|
<td v-for="(cell, cellIndex) in row" :key="cellIndex" :rowspan="cell.rowspan"
|
:colspan="cell.colspan">
|
<!-- 动态绑定得分 -->
|
<template v-if="cell.key === '得分'">
|
{{ getScore(cell.value) }}
|
</template>
|
<!-- 动态绑定大类评分 -->
|
<template v-else-if="cell.key === '大类评分'">
|
{{ getCategoryScore(cell.value) }}
|
</template>
|
<!-- 动态绑定总分 -->
|
<template v-else-if="cell.key === '总分'">
|
{{ totalScore }}
|
</template>
|
<!-- 动态绑定其他可变字段 -->
|
<template v-else-if="cell.dynamic">
|
{{ getDynamicValue(cell.dynamicKey) }}
|
</template>
|
<template v-else>
|
{{ cell.value }}
|
</template>
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
</div>
|
|
|
<!-- <div class="no-data" v-if="!hasRadarData && !loadingSub">
|
<img src="../../assets/images/less.png" alt="">
|
<p>暂无数据</p>
|
</div> -->
|
|
</div>
|
|
<!-- </div> -->
|
|
</template>
|
|
<script>
|
import * as echarts from 'echarts'
|
import axios from '@/libs/api.request'
|
|
export default {
|
data() {
|
return {
|
loadingSub: false,
|
// disableButton: false,
|
message: '',
|
hasRadarData: false,
|
hasScores: false,
|
radarData: [],
|
Echarts: null,
|
childLength: [],
|
selectedFile: null,
|
fileUrl: '',
|
excelData:'',
|
scores: {}, // 存储接口返回的得分数据
|
categoryScores: {}, // 存储大类评分
|
totalScore: 0, // 总分
|
dynamicData: {}, // 存储动态数据
|
headerWidths: ['113px', '150px', '150px', 'auto', '50px', '50px', '80px', '50px'], // 自定义宽度
|
headers: [
|
'企业评分',
|
'评价维度',
|
'评分细则',
|
'评分标准',
|
'满分',
|
'得分',
|
'大类评分',
|
'总分',
|
], // 表头
|
tableData: [
|
// 表格数据,包含 rowspan 和 colspan 属性
|
//企业活跃度
|
[
|
{ value: '企业活跃度(总分100分)', rowspan: 11, colspan: 1 }, // 跨 6 行
|
{ value: '经济效益维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '销售额', rowspan: 1, colspan: 1 },
|
{ value: '越多越好', rowspan: 1, colspan: 1 },
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '销售额', rowspan: 1, colspan: 1 }, // 动态得分
|
{ key: '得分', value: '大类评分1', rowspan: 11, colspan: 1 }, // 动态大类评分
|
{ key: '得分', value: '总分', rowspan: 38, colspan: 1 },
|
],
|
[
|
{ value: '市场份额', rowspan: 1, colspan: 1 },
|
{ value: '越多越好', rowspan: 1, colspan: 1 },
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '市场份额', rowspan: 1, colspan: 1 }, // 动态得分
|
],
|
[
|
{ value: '客户与市场扩展维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '客户增长率', rowspan: 1, colspan: 1 },
|
{ value: '越多越好', rowspan: 1, colspan: 1 },
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '客户增长率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '品牌知名度', rowspan: 1, colspan: 1 },
|
{ value: '越多越好', rowspan: 1, colspan: 1 },
|
{ value: '5', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '品牌知名度', rowspan: 1, colspan: 1 },
|
|
],
|
[
|
{ value: '社交媒体与互动维度', rowspan: 1, colspan: 1 },
|
{ value: '社交媒体参与度', rowspan: 1, colspan: 1 },
|
{ value: '越多越好', rowspan: 1, colspan: 1 },
|
{ value: '5', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '社交媒体参与度', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '创新与研发维度', rowspan: 1, colspan: 1 },
|
{ value: '企业活跃度创新能力', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'分析企业的研发成果,如专利数量、新产品推出速度等,评估企业的技术创新能力和成长潜力。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '企业活跃度创新能力', rowspan: 1, colspan: 1 },
|
],
|
// 运营与管理维度
|
[
|
{ value: '运营与管理维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '运营状态', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'包括企业的纳税状态、社保缴存状态、公积金缴存状态等,这些指标能够反映企业的合规性和经营稳定性,从而影响其市场活跃度。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '运营状态', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '企业变更备案次数', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'频繁的变更可能意味着企业在积极调整战略以适应市场变化。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '企业变更备案次数', rowspan: 1, colspan: 1 },
|
],
|
// 成长与扩张维度
|
[
|
{ value: '成长与扩张维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '分支机构开设数量', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'分支机构的开设是企业扩张和成长的重要标志,也是衡量企业活跃度的一个重要维度。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '分支机构开设数量', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '对外投资企业数', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'对外投资数量的增加表明企业正在积极寻求新的市场机会和增长点,这同样能够提升企业的市场活跃度。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '对外投资企业数', rowspan: 1, colspan: 1 },
|
],
|
// 外部支持与资源维度
|
[
|
{ value: '外部支持与资源维度', rowspan: 1, colspan: 1 },
|
{ value: '资本活跃度', rowspan: 1, colspan: 1 },
|
{
|
value: '融资次数、金额、以及投资机构含金量',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '资本活跃度', rowspan: 1, colspan: 1 },
|
],
|
// 企业合法合规
|
[
|
{ value: '企业合法合规', rowspan: 6, colspan: 1 }, // 跨 4 行
|
{ value: '合规管理体系的建立', rowspan: 4, colspan: 1 },
|
{ value: '法律法规遵守', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否遵守国家和地方的法律法规,包括商业法、劳动法、税法、环保法等。。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '法律法规遵守', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '大类评分2', rowspan: 6, colspan: 1 },
|
],
|
[
|
{ value: '公司章程和制度', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否制定并遵守自身的公司章程和内部管理制度,确保运营有序。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '公司章程和制度', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '内部监督和审计', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否建立内部监督和审计机制,定期检查和评估合规情况,及时发现和纠正问题。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '内部监督和审计', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '知识产权保护', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否尊重和保护知识产权,不侵犯他人的专利、商标、版权等权利。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '知识产权保护', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '外部合规认证与监管', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '外部认证', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否通过了相关机构的合规认证,如ISO 37301合规管理体系认证等,以证明其合规管理体系的有效性和可靠性。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '外部认证', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '监管配合', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'是否积极配合政府和相关监管机构的合规监管工作,及时响应监管要求,提供必要的合规信息和资料。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '监管配合', rowspan: 1, colspan: 1 },
|
],
|
// 企业发展力
|
[
|
{ value: '企业发展力', rowspan: 10, colspan: 1 }, // 跨 6 行
|
{ value: '财务维度', rowspan: 6, colspan: 1 }, // 跨 3 行
|
{ value: '盈利能力毛利率', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'毛利率:反映了企业产品或服务的初始获利能力。较高的毛利率意味着企业在扣除直接成本后有较大的利润空间,能够为企业的进一步发展提供资金支持。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '盈利能力毛利率', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '大类评分3', rowspan: 10, colspan: 1 },
|
],
|
[
|
{ value: '盈利能力净利率', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'净利率:体现了企业在扣除所有成本和费用后的最终获利水平。持续稳定且较高的净利率表明企业经营效率高,成本控制良好,有较强的盈利能力以支持未来的扩张和创新。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '盈利能力净利率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '盈利能力回报率', rowspan: 1, colspan: 1 },
|
{ value: '资产回报率(ROA)和净资产回报率(ROE)', rowspan: 1, colspan: 1 },
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '盈利能力回报率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '偿债能力流动比率', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'流动比率:反映企业短期偿债能力,即企业在短期内用流动资产偿还流动负债的能力。合适的流动比率表明企业能够及时偿还短期债务,避免资金链断裂,保障企业的持续运营。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '偿债能力流动比率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '偿债能力资产负债率', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'资产负债率:体现企业长期偿债能力,即企业总资产中有多少是通过负债筹集的。较低的资产负债率意味着企业财务风险相对较小,在经济环境变化时更具稳定性,有利于企业长期发展。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '偿债能力资产负债率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '偿债能力筹资活动现金流量', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'筹资活动现金流量:体现企业筹集资金的能力和方式。企业能够通过股权融资、债券发行等方式筹集到资金,为发展提供必要的资金支持。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '偿债能力筹资活动现金流量', rowspan: 1, colspan: 1 },
|
],
|
// 市场维度
|
[
|
{ value: '市场维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '客户满意度与忠诚度', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'品牌知名度:衡量企业品牌在市场中的知晓度。广泛的品牌知名度可以提高企业的市场影响力,吸引更多的客户和合作伙伴,为企业发展创造有利条件。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '客户满意度与忠诚度', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '客户忠诚度', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'客户重复购买、推荐给他人等行为。高客户忠诚度可以降低企业的营销成本,提高企业的市场份额和盈利能力,是企业长期发展的重要保障。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '客户忠诚度', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '人力资源维度', rowspan: 2, colspan: 1 }, // 跨 2 行
|
{ value: '人才结构', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'企业员工的学历、专业、技能等构成情况。合理的人才结构能够满足企业不同岗位的需求,为企业的发展提供有力的人才支持。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '人才结构', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '人才激励机制', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'企业对员工的激励措施,如薪酬福利、股权激励、职业发展规划等。有效的人才激励机制可以吸引和留住优秀人才,激发员工的工作积极性和创造力,为企业发展提供持续的动力。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '人才激励机制', rowspan: 1, colspan: 1 },
|
],
|
// 企业成长性
|
[
|
{ value: '企业成长性', rowspan: 6, colspan: 1 }, // 跨 6 行
|
{ value: '技术与创新维度', rowspan: 3, colspan: 1 },
|
{ value: '研发投入', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'关注企业的研发费用占营业收入的比例,以及研发投入的增长趋势。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '研发投入', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '大类评分4', rowspan: 6, colspan: 1 },
|
],
|
[
|
{ value: '技术进步', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'关注企业的技术升级换代情况,以及与同行业先进技术的差距,评估企业的技术发展水平。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '技术进步', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '企业成长性创新能力', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'关注企业的创新文化和创新机制,鼓励员工提出创新想法和解决方案,为企业成长提供持续动力',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '企业成长性创新能力', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '管理维度', rowspan: 3, colspan: 1 }, // 跨 2 行
|
{ value: '战略规划与执行', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'评估企业战略规划的合理性、适应性和执行力度,确保企业朝着正确的方向发展。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '战略规划与执行', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '组织架构优化', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'分析企业部门设置、职责分工、沟通协调机制等方面的变化,评估企业的组织适应性和成长潜力。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '组织架构优化', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '风险管理', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'分析企业在市场风险、财务风险、运营风险等方面的应对措施,评估企业的风险管理能力。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '10', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '风险管理', rowspan: 1, colspan: 1 },
|
],
|
// 企业就业带动
|
[
|
{ value: '企业就业带动', rowspan: 5, colspan: 1 }, // 跨 6 行
|
{ value: '直接就业维度', rowspan: 2, colspan: 1 },
|
{ value: '员工数量增长', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'可以对比企业近几年的员工数量,分析增长幅度和趋势',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '员工数量增长', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '大类评分5', rowspan: 5, colspan: 1 },
|
],
|
[
|
{ value: '招聘规模和频率', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'每年的招聘次数、每次招聘的人数以及招聘岗位的多样性。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '招聘规模和频率', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '产业关联维度', rowspan: 2, colspan: 1 },
|
{ value: '上下游企业带动', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'企业的发展会带动其上下游产业链上的企业发展,从而间接创造就业机会。例如,一家制造业企业的发展会促使原材料供应商扩大生产规模,增加员工;同时也会让销售渠道、物流企业等增加人手。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '上下游企业带动', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '产业集群效应', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'具有影响力的企业往往能够促进产业集群的形成,吸引更多企业入驻,共同推动地区经济发展,从而创造大量就业岗位。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '产业集群效应', rowspan: 1, colspan: 1 },
|
],
|
[
|
{ value: '技能提升维度', rowspan: 1, colspan: 1 },
|
{ value: '产学研合作', rowspan: 1, colspan: 1 },
|
{
|
value:
|
'企业与高校、科研机构合作,共同培养专业人才,为毕业生提供实习和就业机会。这种合作模式有助于提高人才的适用性,为社会输送更多符合产业需求的人才。',
|
rowspan: 1,
|
colspan: 1,
|
},
|
{ value: '20', rowspan: 1, colspan: 1 },
|
{ key: '得分', value: '产学研合作', rowspan: 1, colspan: 1 },
|
],
|
],
|
}
|
},
|
|
mounted() {
|
// this.formatData(this.radarData)
|
this.$nextTick(() => {
|
this.initRadar();
|
});
|
window.onresize = () => {
|
this.$nextTick(() => {
|
this.Echarts.resize()
|
})
|
}
|
},
|
computed: {
|
// 根据 message 和 selectedFile 动态计算按钮的 disabled 状态
|
disableButton() {
|
return !this.message || !this.fileUrl || this.loadingSub;
|
}
|
},
|
methods: {
|
// 调用接口获取得分数据
|
fetchScores(file) {
|
try {
|
this.loadingSub = true;
|
const apiUrl = 'https://api.coze.cn/v1/workflow/run';
|
const headers = {
|
'Authorization': 'Bearer pat_K4EofAr9htfEnfA6xtNphvDqAfblnIDZ8TAG4UAyHOJuhbNbfROuwmeQZ6bLUlkV',
|
'Content-Type': 'application/json'
|
};
|
const params = {
|
"workflow_id": "7449244379883061286",
|
"parameters": {
|
"BOT_USER_INPUT": "",
|
"E": "http://rczd.rensofter.com/HaoshuRobot/Enterprisedmensionscringcriteria.xlsx",
|
"D": `http://rczd.rensofter.com${file}`
|
}
|
}
|
axios.request({
|
url: apiUrl,
|
method: 'POST',
|
headers: headers,
|
data: params
|
}).then(response => {
|
console.log('Response2222:', response.data.data);
|
const res = response.data.data
|
let json = JSON.parse(res); // 解析为对象
|
// 去除前后的中文引号
|
// console.log('json2222:',json);
|
let outputValue = json.output.replace(/[\n]/g, "").replace(/ /g, ''); // 获取 "output" 的值
|
console.log('outputValue2222:',outputValue);
|
this.excelData=outputValue
|
// 解析字符串
|
const parsedData = outputValue.split(',').map(item => {
|
const [key, value] = item.split(':'); // 使用中文冒号分割
|
return { 评分细则: key, 得分: parseInt(value, 10) }; // 转换为整数
|
});
|
console.log(parsedData);
|
var total = 0;
|
var total1 = 0;
|
var total2 = 0;
|
var total3 = 0;
|
var total4 = 0;
|
var total5 = 0;
|
parsedData.forEach(item => {
|
// 计算总分
|
total += item.得分;
|
|
// 计算大类评分1(销售额到资本活跃度)
|
if (
|
item.评分细则 === '销售额' ||
|
item.评分细则 === '市场份额' ||
|
item.评分细则 === '客户增长率' ||
|
item.评分细则 === '品牌知名度' ||
|
item.评分细则 === '社交媒体参与度' ||
|
item.评分细则 === '企业活跃度创新能力' ||
|
item.评分细则 === '运营状态' ||
|
item.评分细则 === '企业变更备案次数' ||
|
item.评分细则 === '分支机构开设数量' ||
|
item.评分细则 === '对外投资企业数' ||
|
item.评分细则 === '资本活跃度'
|
) {
|
total1 += item.得分;
|
}
|
|
// 计算大类评分2(法律法规遵守到监管配合)
|
if (
|
item.评分细则 === '法律法规遵守' ||
|
item.评分细则 === '公司章程和制度' ||
|
item.评分细则 === '内部监督和审计' ||
|
item.评分细则 === '知识产权保护' ||
|
item.评分细则 === '外部认证' ||
|
item.评分细则 === '监管配合'
|
) {
|
total2 += item.得分;
|
}
|
// 计算大类评分3(企业发展力)
|
if (
|
item.评分细则 === '盈利能力毛利率' ||
|
item.评分细则 === '盈利能力净利率' ||
|
item.评分细则 === '盈利能力回报率' ||
|
item.评分细则 === '偿债能力流动比率' ||
|
item.评分细则 === '偿债能力资产负债率' ||
|
item.评分细则 === '偿债能力筹资活动现金流量' ||
|
item.评分细则 === '客户满意度与忠诚度' ||
|
item.评分细则 === '客户忠诚度' ||
|
item.评分细则 === '人才结构' ||
|
item.评分细则 === '人才激励机制'
|
) {
|
total3 += item.得分;
|
}
|
// 计算大类评分4(企业成长性)
|
if (
|
item.评分细则 === '研发投入' ||
|
item.评分细则 === '技术进步' ||
|
item.评分细则 === '企业成长性创新能力' ||
|
item.评分细则 === '战略规划与执行' ||
|
item.评分细则 === '组织架构优化' ||
|
item.评分细则 === '风险管理'
|
) {
|
total4 += item.得分;
|
}
|
// 计算大类评分5(企业就业带动)
|
if (
|
item.评分细则 === '员工数量增长' ||
|
item.评分细则 === '招聘规模和频率' ||
|
item.评分细则 === '上下游企业带动' ||
|
item.评分细则 === '产业集群效应' ||
|
item.评分细则 === '产学研合作'
|
) {
|
total5 += item.得分;
|
}
|
});
|
// 将大类评分和总分添加到评分细则中
|
var result111 = [
|
...parsedData,
|
{ 评分细则: '大类评分1', 得分: total1 },
|
{ 评分细则: '大类评分2', 得分: total2 },
|
{ 评分细则: '大类评分3', 得分: total3 },
|
{ 评分细则: '大类评分4', 得分: total4 },
|
{ 评分细则: '大类评分5', 得分: total5 },
|
{ 评分细则: '总分', 得分: total },
|
];
|
// 输出结果
|
console.log(JSON.stringify(result111, null, 2));
|
// 将得分数据存储到 scores 对象中
|
this.scores = result111.reduce((acc, item) => {
|
acc[item.评分细则] = item.得分;
|
return acc;
|
}, {});
|
this.renderRadar(this.radarData); // 重新渲染树图
|
this.loadingSub = false;
|
this.hasRadarData = true;
|
this.hasScores = true;
|
// 计算大类评分和总分
|
this.calculateCategoryScores();
|
this.calculateTotalScore();
|
}).catch(error => {
|
console.error('获取得分数据失败:', error);
|
});
|
|
} catch (error) {
|
console.error('获取得分数据失败:', error);
|
}
|
},
|
// 根据评分细则获取得分
|
getScore(key) {
|
return this.scores[key] || 0; // 如果接口未返回得分,默认显示 0
|
},
|
// 计算大类评分
|
calculateCategoryScores() {
|
const categoryMap = {
|
经济效益维度: ['销售额', '市场份额'],
|
客户与市场扩展维度: ['客户增长率', '品牌知名度'],
|
社交媒体与互动维度: ['社交媒体参与度'],
|
创新与研发维度: ['创新能力'],
|
};
|
for (const category in categoryMap) {
|
const items = categoryMap[category];
|
const score = items.reduce((sum, item) => sum + (this.scores[item] || 0), 0);
|
this.categoryScores[category] = score;
|
}
|
},
|
// 获取大类评分
|
getCategoryScore(category) {
|
return this.categoryScores[category] || 0;
|
},
|
// 计算总分
|
calculateTotalScore() {
|
this.totalScore = Object.values(this.categoryScores).reduce((sum, score) => sum + score, 0);
|
},
|
// 获取动态字段的值
|
getDynamicValue(key) {
|
return this.dynamicData[key] || 'N/A'; // 如果接口未返回动态数据,默认显示 N/A
|
},
|
initRadar() {
|
this.Echarts = echarts.init(this.$refs['ent-radar']);
|
this.renderRadar()
|
},
|
triggerFileInput() {
|
document.getElementById('file').click();
|
},
|
getFiles(e) {
|
const file = e.target.files[0];
|
if (file && (file.type === 'application/msword' || file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')) {
|
const aa = new FormData();
|
aa.append("file", file); // 文件
|
console.log(file, aa);
|
axios.request({
|
url: '/AgentData/UploadFileDocx',
|
method: 'post',
|
data: aa
|
}).then(res => {
|
console.log(res.data.fileUrl);
|
this.selectedFile = file;
|
this.fileUrl = res.data.fileUrl
|
// this.getRadarData(res.data.fileUrl)
|
})
|
} else {
|
alert('请选择有效的 Word 文件');
|
}
|
},
|
getRadarData(file) {
|
this.loadingSub = true;
|
const apiUrl = 'https://api.coze.cn/v1/workflow/run';
|
const headers = {
|
'Authorization': 'Bearer pat_K4EofAr9htfEnfA6xtNphvDqAfblnIDZ8TAG4UAyHOJuhbNbfROuwmeQZ6bLUlkV',
|
'Content-Type': 'application/json'
|
};
|
const params = {
|
"workflow_id": "7447476302736654377",
|
"parameters": {
|
"BOT_USER_INPUT": "",
|
"E": "http://rczd.rensofter.com/HaoshuRobot/EnterpriseDimensionScoring.xlsx",
|
"D": `http://rczd.rensofter.com${file}`
|
}
|
}
|
axios.request({
|
url: apiUrl,
|
method: 'POST',
|
headers: headers,
|
data: params
|
}).then(response => {
|
console.log('Response1111:', response.data.data);
|
const res = response.data.data
|
let json = JSON.parse(res); // 解析为对象
|
let outputValue = json.data; // 获取 "output" 的值
|
let result = JSON.stringify(outputValue); // 转换为字符串
|
console.log(result);
|
if (/[\u4e00-\u9fa5]/.test(result)) {
|
//判断字符串中是否含有汉字
|
this.radarData = JSON.parse(JSON.stringify(result.match(/\d+/g).map(Number)));
|
console.log('this.radarData:', this.radarData);
|
} else {
|
this.radarData = JSON.parse(JSON.stringify(result.slice(1, -1).split(",").map(Number)));
|
console.log('this.radarData:', this.radarData);
|
|
}
|
|
// const jsonString = result.replace(/json/g, "").replace(/```/g, '').replace(/[\n\t\r]/g, "").replace(/\\/g, '').replace(/[ ]/g, "").replace(/^\"|\"$/g, '').replace(/,$/, '')
|
// console.log('jsonString2:', jsonString);
|
|
// console.log('Response2222:', JSON.parse(jsonString));
|
|
// this.radarData = JSON.parse(jsonString).map(item => item.max);
|
// console.log('this.radarData:', this.radarData);
|
|
|
|
// this.renderRadar(this.radarData); // 重新渲染树图
|
// this.loadingSub = false;
|
// this.hasRadarData = true;
|
// 重新启用按钮
|
// this.disableButton = false;
|
}).catch(error => {
|
console.error('Error:', error);
|
this.loadingSub = false;
|
alert('提交时发生错误,请重试。');
|
// 重新启用按钮
|
// this.disableButton = false;
|
})
|
},
|
|
generateChart() {
|
if (!this.message) {
|
alert('请输入正确的公司名称!');
|
} else if (!this.fileUrl) {
|
alert('请上传尽调报告');
|
} else {
|
this.getRadarData(this.fileUrl)
|
// 调用接口获取得分数据
|
this.fetchScores(this.fileUrl);
|
}
|
},
|
//下载excel
|
GetSaveExcel(){
|
axios.request({
|
url: 'SubsidyData/GetSaveExcel',
|
method: 'post',
|
data: this.excelData
|
}).then(res => {
|
console.log(res);
|
})
|
},
|
|
// 绘制企业结构的echarts
|
renderRadar(data) {
|
this.childLength = []
|
this.Echarts = echarts.init(this.$refs['ent-radar'])
|
|
const option = {
|
// title: {
|
// text: 'Basic Radar Chart'
|
// },
|
tooltip: {
|
trigger: 'axis'
|
},
|
// legend: {
|
// data: ['Allocated Budget']
|
// },
|
radar: {
|
// shape: 'circle',
|
indicator: [
|
{ name: '企业活跃度', max: 100, min: 0 },
|
{ name: '企业合法合规', max: 100, min: 0 },
|
{ name: '企业发展力', max: 100, min: 0 },
|
{ name: '企业成长性', max: 100, min: 0 },
|
{ name: '企业就业带动', max: 100, min: 0 }
|
],
|
axisLabel: {
|
formatter: function (value) {
|
return value.toFixed(1); // 保留 1 位小数
|
}
|
}
|
},
|
series: [
|
{
|
name: '公司尽调画像',
|
type: 'radar',
|
tooltip: {
|
trigger: 'item'
|
},
|
areaStyle: {},
|
data: [
|
{
|
value: data,
|
name: '公司尽调画像'
|
}
|
]
|
}
|
]
|
};
|
this.Echarts.setOption(option, true)
|
},
|
}
|
}
|
</script>
|
|
<style lang="less" scoped>
|
.radar-container {
|
margin: 0;
|
padding: 0;
|
width: 100%;
|
min-height: 100%;
|
background-color: #f4f4f4;
|
display: flex;
|
}
|
|
.echarts-box {
|
flex: 1;
|
background: #fff;
|
}
|
|
.xlsx-box {
|
|
// background-color: #f4f4f4;
|
table {
|
margin: 20px 0;
|
width: 100%;
|
border-collapse: collapse;
|
}
|
|
th,
|
td {
|
padding: 8px;
|
text-align: left;
|
border: 1px solid #ddd;
|
}
|
|
th {
|
background-color: #f2f2f2;
|
}
|
}
|
|
.search-box {
|
width: 500px;
|
padding: 100px;
|
|
.tit {
|
font-size: 30px;
|
margin-bottom: 20px;
|
}
|
|
.file-tit {
|
font-size: 20px;
|
margin: 20px 0;
|
}
|
|
textarea,
|
input[type="text"] {
|
width: 100%;
|
|
resize: none;
|
/* 禁止用户调整大小 */
|
padding: 10px;
|
border: 1px solid #ccc;
|
border-radius: 4px;
|
font-family: Arial, sans-serif;
|
font-size: 14px;
|
box-sizing: border-box;
|
margin-bottom: 10px;
|
}
|
|
textarea {
|
height: 6em;
|
/* 设置高度为三行 */
|
}
|
|
textarea:focus,
|
input[type="text"]:focus {
|
outline: none;
|
border-color: #2d8cf0;
|
box-shadow: 0 0 5px rgba(108, 99, 255, 0.5);
|
}
|
|
button {
|
width: 100%;
|
padding: 10px;
|
background-color: #2d8cf0;
|
color: #fff;
|
border: none;
|
border-radius: 4px;
|
font-size: 16px;
|
cursor: pointer;
|
transition: background-color 0.3s ease;
|
}
|
|
button:hover {
|
background-color: #2d8cf0;
|
}
|
|
button:focus {
|
outline: none;
|
box-shadow: 0 0 5px rgba(108, 99, 255, 0.5);
|
}
|
|
.disabled-button {
|
background-color: #ccc;
|
cursor: not-allowed;
|
}
|
|
|
}
|
|
.loading-box {
|
width: calc(100vw - 500px);
|
height: 100%;
|
position: absolute;
|
left: 500px;
|
line-height: 20%;
|
display: flex;
|
padding-left: calc(50% - 250px);
|
padding-top: 50vh;
|
background: white;
|
color: #2d8cf0;
|
|
/deep/ .ivu-spin-dot {
|
background-color: #2d8cf0;
|
}
|
}
|
|
.no-data {
|
position: absolute;
|
left: 50%;
|
top: 20%;
|
text-align: center;
|
padding-bottom: 100px;
|
color: #999;
|
}
|
|
.no-data img {
|
width: 500px;
|
}
|
|
|
.radar-box {
|
height: 500px;
|
flex: 1;
|
min-width: 800px;
|
}
|
|
.ent-structure {
|
width: 100%;
|
height: 100%;
|
background: #fff;
|
}
|
|
.ent-radar {
|
width: 100%;
|
min-width: 800px;
|
height: 100%;
|
overflow: auto;
|
}
|
</style>
|