guzhi/web1/src/views/pages/index.vue

1988 lines
62 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

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

<template>
<div class="pages">
<AppHeader class="page-header" />
<!-- 左侧边栏 - 已隐藏 -->
<!-- <div class="left">
<img style="width: 198px; height: 32px; margin: 20px;" src="@/assets/images/logo.png" alt="" @click="navToLogin">
<div style="margin-left: 20px;">
<div v-for="(item, index) in historyList" @click="selectTimeBox(item)" :class="{ timeBox: item.id != isSelected, timeBox2: item.id == isSelected}">
{{ item.created_at.slice(0,10) + ' ' + item.created_at.slice(11,16) }}
<img v-if="item.id == isSelected" class="delete-icon" src="@/assets/images/delete.png" alt="" @click.stop="deleteValuations(item)">
</div>
</div>
</div> -->
<div v-if="status == 'create'" class="right">
<StepProgressBar
style="width: 800px; margin: auto; margin-top: 40px"
:steps="steps"
:currentStep="currentStep"
/>
<div class="line"></div>
<div class="form-title-box">
<div class="title-left"></div>
<div v-if="currentStep == 0" class="title-form">基础信息</div>
<div v-if="currentStep == 1" class="title-form">财务状况</div>
<div v-if="currentStep == 2" class="title-form">非遗等级与技术</div>
<div v-if="currentStep == 3" class="title-form">非遗应用与推广</div>
<div v-if="currentStep == 4" class="title-form">非遗资产衍生商品信息</div>
</div>
<NForm
class="form-container"
ref="modalFormRef"
label-placement="top"
label-align="top"
:label-width="80"
:model="modalForm"
:rules="modalRules"
require-mark-placement="left"
>
<n-grid v-if="currentStep == 0" :cols="24" :x-gap="24">
<n-form-item-gi :span="12" label="资产名称" path="asset_name">
<template #label>
<div class="flex items-center gap-4">
<span>资产名称</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请填写非遗资产名称,如“蜀绣”
</n-tooltip>
</div>
</template>
<NInput v-model:value="modalForm.asset_name" placeholder="请输入资产名称" />
</n-form-item-gi>
<n-gi :span="12"></n-gi>
<n-form-item-gi :span="12" label="所属机构/权利人" path="institution">
<template #label>
<div class="flex items-center gap-4">
<span>所属机构/权利人</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请填写评估机构全称,如"XXX有限公司"
</n-tooltip>
</div>
</template>
<NInput v-model:value="modalForm.institution" placeholder="请输入所属机构/权利人" />
</n-form-item-gi>
<n-form-item-gi :span="12" label="统一社会信用代码/身份证号" path="credit_code_or_id">
<template #label>
<div class="flex items-center gap-4">
<span>统一社会信用代码/身份证号</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请填写评估机构统一社会信用代码/身份证号
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.credit_code_or_id"
placeholder="请输入统一社会信用代码/身份证号"
/>
</n-form-item-gi>
<n-form-item-gi :span="12" label="所属行业" path="industry">
<template #label>
<div class="flex items-center gap-4">
<span>所属行业</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请根据国民经济行业分类进行选择
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.industry"
placeholder="请选择所属行业"
:options="industryOptions"
filterable
/>
</n-form-item-gi>
<n-gi :span="12"></n-gi>
<n-form-item-gi :span="24" label="业务/传承介绍" path="biz_intro">
<template #label>
<div class="flex items-center gap-4">
<span>业务/传承介绍</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请在此处自由填写受评估单位/人的详细业务与项目情况建议着重介绍与本次所评估非遗IP资产直接相关的背景信息例如主要业务范围核心技艺传承谱系运营模式市场定位近年发展状况等本部分是评估师理解评估对象价值内涵的重要依据请务必详尽客观地描述
</n-tooltip>
</div>
</template>
<n-input
v-model:value="modalForm.biz_intro"
type="textarea"
placeholder="请在此处自由填写受评估单位/人的详细业务与项目情况。建议着重介绍与本次所评估非遗IP资产直接相关的背景信息例如主要业务范围、核心技艺、传承谱系、运营模式、市场定位、近年发展状况等。本部分是评估师理解评估对象价值内涵的重要依据请务必详尽、客观地描述。"
:autosize="{
minRows: 4,
maxRows: 8,
}"
/>
</n-form-item-gi>
</n-grid>
<n-grid v-if="currentStep == 1" :cols="24" :x-gap="0">
<n-form-item-gi
:span="10"
class="form-item"
label="近12个月机构营收/万元"
path="annual_revenue"
>
<template #label>
<div class="flex items-center gap-4">
<span>近12个月机构营收/万元</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
近12个月的营收额,便于体现在技术研发上的投入比例
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.annual_revenue"
placeholder="请输入近12个月机构营收"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="近12个月机构研发投入/万元"
path="rd_investment"
>
<template #label>
<div class="flex items-center gap-4">
<span>近12个月机构研发投入/万元</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
近12个月的研发投入费用便于体现在技术研发上的投入比例
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.rd_investment"
placeholder="请输入近12个月机构研发投入"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi
:span="24"
label="近三年机构收益/万元"
path="three_year_income"
style="margin-left: 20px"
>
<template #label>
<div class="flex items-center gap-4">
<span>近三年机构收益/万元</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
填写近3年资产相关的年收益,用以判断资产的商业价值
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.three_year_income[0]"
placeholder="第一年"
style="width: 220px"
type="number"
/>
<NInput
v-model:value="modalForm.three_year_income[1]"
placeholder="第二年"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.three_year_income[2]"
placeholder="第三年"
style="width: 220px; margin-left: 10px"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="资产受资助情况" path="funding_status">
<template #label>
<div class="flex items-center gap-4">
<span>资产受资助情况</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
根据与资产相关项目的受资助情况选择
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.funding_status"
placeholder="请选择资产受资助情况"
:options="fundingOptions"
/>
</n-form-item-gi>
</n-grid>
<n-grid v-if="currentStep == 2" :cols="24" :x-gap="0">
<n-form-item-gi
:span="24"
class="form-item"
label="非遗传承人等级"
path="inheritor_level"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗传承人等级</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
选择该非遗项目所对应的最高传承人等级并上传相关证书或者证明材料以佐证
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.inheritor_level"
placeholder="非遗传承人等级"
:options="fundingOptions2"
/>
</n-form-item-gi>
<n-form-item-gi
:span="24"
label="非遗传承人年龄水平及数量"
path="inheritor_age_count"
style="margin-left: 20px"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗传承人年龄水平及数量</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请填写该资产的所有受认证传承人年龄段的人数
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.inheritor_age_count[0]"
placeholder="请输入≤50岁传承人数量"
style="width: 220px"
type="number"
/>
<NInput
v-model:value="modalForm.inheritor_age_count[1]"
placeholder="请输入50-70岁传承人数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.inheritor_age_count[2]"
placeholder="请输入≥70岁传承人数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi
:span="24"
class="form-item"
label="非遗传承人等级证书"
path="inheritor_certificates"
>
<n-upload
:action="actionUrl"
:default-file-list="modalForm.inheritor_certificates"
list-type="image-card"
@finish="handleFinish3"
@remove="delete3"
>
<div>
<img style="width: 24px; height: 24px" src="@/assets/images/upload.png" alt="" />
<p style="font-size: 12px">添加图片</p>
</div>
</n-upload>
</n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="非遗等级" path="heritage_level">
<template #label>
<div class="flex items-center gap-4">
<span>非遗等级</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请选择该非遗资产的认证等级如国家级非遗
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.heritage_level"
placeholder="非遗等级"
:options="heritageOptions"
/>
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="非遗资产所用专利的申请号"
path="patent_application_no"
>
<NInput
v-model:value="modalForm.patent_application_no"
placeholder="非遗资产所用专利的申请号"
/>
</n-form-item-gi>
<n-form-item-gi
:span="20"
label="非遗资产历史证明证据及数量"
path="historical_evidence"
style="margin-left: 20px; width: 800px"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗资产历史证明证据及数量</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
为考究非遗资产的传承历史需填写资产所相关的历史证明材料相关信息请填写不同证据类型的证据数量例如某纹样有1件唐代实物+3篇研究论文证明其历史传承
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.historical_evidence[0]"
placeholder="请输入出土实物样本数量"
style="width: 220px"
type="number"
/>
<NInput
v-model:value="modalForm.historical_evidence[1]"
placeholder="请输入古代文献样本数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.historical_evidence[2]"
placeholder="请输入传承人佐证样本数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.historical_evidence[3]"
placeholder="请输入现代研究样本数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi
:span="24"
class="form-item"
label="非遗资产所用专利的证书"
path="patent_certificates"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗资产所用专利的证书</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
上传资产所涉及的专利截图佐证技术强度
</n-tooltip>
</div>
</template>
<n-upload
:action="actionUrl"
:default-file-list="modalForm.patent_certificates"
@finish="handleFinish1"
@remove="delete1"
list-type="image-card"
>
<div>
<img style="width: 24px; height: 24px" src="@/assets/images/upload.png" alt="" />
<p style="font-size: 12px">添加图片</p>
</div>
</n-upload>
</n-form-item-gi>
<n-form-item-gi :span="24" class="form-item" label="非遗纹样图片" path="pattern_images">
<template #label>
<div class="flex items-center gap-4">
<span>非遗纹样图片</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
上传资产所涉及的纹样清晰图片便于判断纹样的精细与美观度
</n-tooltip>
</div>
</template>
<n-upload
:action="actionUrl"
:default-file-list="modalForm.pattern_images"
@finish="handleFinish2"
@remove="delete2"
list-type="image-card"
>
<div>
<img style="width: 24px; height: 24px" src="@/assets/images/upload.png" alt="" />
<p style="font-size: 12px">添加图片</p>
</div>
</n-upload>
</n-form-item-gi>
</n-grid>
<n-grid v-if="currentStep == 3" :cols="24" :x-gap="0">
<n-form-item-gi
:span="24"
class="form-item"
label="非遗资产应用成熟度"
path="application_maturity"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗资产应用成熟度</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
根据目前资产的实际情况选择当前资产的应用成熟程度
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.application_maturity"
placeholder="请选择"
:options="maturityOptions"
/>
</n-form-item-gi>
<n-form-item-gi
:span="9"
class="form-item"
label="非遗资产应用覆盖范围"
path="application_coverage"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗资产应用覆盖范围</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
资产目前普及的区域范围
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.application_coverage"
placeholder="请选择"
:options="coverageOptions"
/>
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="非遗资产跨界合作深度"
path="cooperation_depth"
>
<template #label>
<div class="flex items-center gap-4">
<span>非遗资产跨界合作深度</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
根据资产目前跨界合作项目的情况选择选项自上而下深度逐渐升高1.品牌联名如苗绣与LV手袋合作2.科技载体如云锦纹样应用于OLED屏幕3.国家外交礼品如景泰蓝作为国礼赠联合国
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.cooperation_depth"
placeholder="请选择"
:options="depthOptions"
/>
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="近12个月线下相关宣讲活动次数"
path="offline_activities"
>
<template #label>
<div class="flex items-center gap-4">
<span>近12个月线下相关宣讲活动次数</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
统计以往所进行过的与资产相关的线下传习活动填写线下传习活动次数
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.offline_activities"
placeholder="近12个月线下相关宣讲活动次数"
type="number"
/>
</n-form-item-gi>
<n-form-item-gi
:span="22"
style="margin-left: 20px"
label="线上相关宣传账号信息"
path="online_accounts"
>
<template #label>
<div class="flex items-center gap-4">
<span>线上相关宣传账号信息</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
与资产相关的宣传销售的平台与账户信息
</n-tooltip>
</div>
</template>
<n-select
style="width: 330px"
v-model:value="modalForm.online_accounts[0]"
placeholder="请选择"
:options="accountsOptions"
/>
<NInput
v-model:value="modalForm.online_accounts[1]"
placeholder="请输入账号"
style="width: 220px; margin-left: 10px"
/>
<NInput
v-model:value="modalForm.online_accounts[2]"
placeholder="请输入点赞数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.online_accounts[3]"
placeholder="请输入评论数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
<NInput
v-model:value="modalForm.online_accounts[4]"
placeholder="请输入分享数量"
style="width: 220px; margin-left: 10px"
type="number"
/>
</n-form-item-gi>
</n-grid>
<n-grid v-if="currentStep == 4" :cols="24" :x-gap="0">
<n-form-item-gi
:span="10"
class="form-item"
label="该商品近12个月销售量"
path="sales_volume"
>
<template #label>
<div class="flex items-center gap-4">
<span>该商品近12个月销售量</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
非遗资产代表产品近12个月的总销售数量
</n-tooltip>
</div>
</template>
<NInput v-model:value="modalForm.sales_volume" placeholder="请输入" type="number" />
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="该商品近12个月的链接浏览量"
path="link_views"
>
<template #label>
<div class="flex items-center gap-4">
<span>该商品近12个月的链接浏览量</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
非遗资产代表产品近12个月的商品链接浏览量
</n-tooltip>
</div>
</template>
<NInput v-model:value="modalForm.link_views" placeholder="请输入" type="number" />
</n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="该商品的发行量" path="circulation">
<template #label>
<div class="flex items-center gap-4">
<span>该商品的发行量</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请选择该资产的发行量单位以便确认该资产的稀缺性
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.circulation"
placeholder="请选择"
:options="circulationOptions"
:consistent-menu-width="false"
/>
</n-form-item-gi>
<n-form-item-gi
:span="12"
class="form-item"
label="该商品最近一次市场活动时间"
path="last_market_activity"
>
<template #label>
<div class="flex items-center gap-4">
<span>该商品最近一次市场活动时间</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
与资产相关的商品最近一次市场活动交易报价评估的相距时间
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.last_market_activity"
placeholder="请选择"
:options="activityOptions"
/>
</n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="月交易额" path="monthly_transaction">
<template #label>
<div class="flex items-center gap-4">
<span>月交易额</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请选择该资产所衍生商品的月交易额水平
</n-tooltip>
</div>
</template>
<n-select
v-model:value="modalForm.monthly_transaction"
placeholder="请选择"
:options="transactionOptions"
/>
</n-form-item-gi>
<n-form-item-gi
:span="6"
class="form-item"
label="该商品近30天价格波动区间"
path="price_fluctuation"
>
<template #label>
<div class="flex items-center gap-4">
<span>该商品近30天价格波动区间</span>
<n-tooltip placement="top-start" trigger="hover">
<template #trigger>
<img style="width: 14px; height: 14px" src="@/assets/images/ps.png" alt="" />
</template>
请输入与资产相关的最具代表性商品近30天的最高价与最低价
</n-tooltip>
</div>
</template>
<NInput
v-model:value="modalForm.price_fluctuation[0]"
placeholder="最低价"
style="width: 220px"
/>
<span style="display: inline-block; margin: 0 8px">-</span>
<NInput
v-model:value="modalForm.price_fluctuation[1]"
placeholder="最高价"
style="width: 220px"
/>
</n-form-item-gi>
</n-grid>
</NForm>
<div class="submit-box">
<div
v-if="currentStep != 0"
class="submit-btn2"
style="cursor: pointer"
@click="previousStep"
>
上一步
</div>
<div v-if="currentStep != 4" class="submit-btn">
<n-spin style="cursor: pointer" :show="loading" @click="nextStep"> 下一步 </n-spin>
</div>
<div v-if="currentStep == 4" class="submit-btn">
<n-spin :show="loading" @click="nextStep" style="cursor: pointer"> 立即评估 </n-spin>
</div>
</div>
</div>
<div v-if="status == 'success'" class="right">
<div class="price-container" :style="{ backgroundImage: `url(${backgroundImg})` }">
<div>¥{{ parseInt(selectedObj?.calculation_result?.final_value_ab) }}</div>
<div style="font-size: 20px; color: #303133; line-height: 20px">最终评估结果</div>
<div style="display: flex; justify-content: center; align-items: center; margin-top: 10px">
<div class="credibility-badge">
<span class="credibility-label">评估可信度</span>
<div class="credibility-stars" aria-hidden="true">
<span class="stars-base"></span>
<span class="stars-fill" :style="{ width: '95%' }"></span>
</div>
<span class="credibility-percent">95%</span>
</div>
<div class="secondary-badge">动态质押率=50%</div>
</div>
</div>
<div style="display: flex; margin: auto; margin-top: 24px; width: 1010px">
<div
class="score-box"
style="
background: linear-gradient(90deg, #3196ff 0%, #165dff 100%);
color: #303133;
font-size: 14px;
"
:style="{ backgroundImage: `url(${backgroundImg3})`, backgroundSize: 'contain' }"
>
<div style="font-size: 18px; font-weight: bold">
<img
style="width: 18px; height: 18px; transform: translate(-2px, 2px)"
src="@/assets/images/cost.png"
alt=""
/>
经济价值评估
</div>
<div
ref="economy"
style="
text-align: center;
font-size: 30px;
font-weight: bold;
margin-top: 10px;
height: 95px;
"
:style="{
backgroundImage: `url(${backgroundImg4})`,
backgroundSize: '167px 95px',
backgroundPosition: 'center 2px',
backgroundRepeat: 'no-repeat',
}"
></div>
<div style="margin-top: 20px">
基础价值评估<span style="font-weight: bold">优秀</span>
</div>
<div>流量因子评估<span style="font-weight: bold">良好</span></div>
<div>政策系数评估<span style="font-weight: bold; color: #165dff">极强</span></div>
</div>
<div
class="score-box"
style="background: #ffde1144; color: #303133; font-size: 14px"
:style="{ backgroundImage: `url(${backgroundImg2})` }"
>
<div style="font-size: 18px; font-weight: bold">
<img
style="width: 18px; height: 18px; transform: translate(0, 2px)"
src="@/assets/images/cost2.png"
alt=""
/>
文化价值评估
</div>
<div
ref="culture"
style="
text-align: center;
font-size: 30px;
font-weight: bold;
margin-top: 10px;
height: 95px;
"
:style="{
backgroundImage: `url(${backgroundImg5})`,
backgroundSize: '167px 95px',
backgroundPosition: 'center 2px',
backgroundRepeat: 'no-repeat',
}"
></div>
<div style="margin-top: 20px">
活态传承系数评估<span style="font-weight: bold">优秀</span>
</div>
<div>纹样基因熵值评估<span style="font-weight: bold">优秀</span></div>
</div>
<div
class="score-box"
style="background: #5bd77944; color: #303133; font-size: 14px"
:style="{ backgroundImage: `url(${backgroundImg1})` }"
>
<div style="font-size: 18px; font-weight: bold">
<img
style="width: 18px; height: 18px; transform: translate(0, 2px)"
src="@/assets/images/cost1.png"
alt=""
/>
文化价值风险控制
</div>
<div
ref="risk"
style="
text-align: center;
font-size: 30px;
font-weight: bold;
margin-top: 10px;
height: 95px;
"
:style="{
backgroundImage: `url(${backgroundImg6})`,
backgroundSize: '167px 95px',
backgroundPosition: 'center 2px',
backgroundRepeat: 'no-repeat',
}"
></div>
<div style="margin-top: 20px">
风险调整系数<span style="font-weight: bold; color: #2eae44"></span>
</div>
</div>
</div>
<div
class="retry"
@click="retry"
style="background: #f8f8f8; color: #303133; line-height: 40px"
>
<img
style="width: 16px; height: 16px; transform: translate(0, 2px); margin-right: 6px"
src="@/assets/images/retry.png"
alt=""
/>
重新评估
</div>
</div>
<div v-if="status == 'fail'" class="right" style="text-align: center">
<img
style="width: 100px; height: 100px; margin-top: 30vh"
src="@/assets/images/fail.png"
alt=""
/>
<div style="font-size: 20px">评估失败</div>
<div style="font-size: 14px; color: #999999; margin-top: 10px">
很抱歉您的知识产权和非物质文化遗产的价值评估失败请重新评估
</div>
<div class="retry" @click="retry">
<img
style="width: 16px; height: 16px; transform: translate(0, 2px); margin-right: 6px"
src="@/assets/images/retry.png"
alt=""
/>
重新评估
</div>
</div>
<div v-if="status == 'pending'" class="right" style="text-align: center">
<img
style="width: 100px; height: 100px; margin-top: 30vh"
src="@/assets/images/loading.png"
alt=""
/>
<div style="font-size: 20px">评估中</div>
<div style="font-size: 14px; color: #999999; margin-top: 10px">
您的知识产权和非物质文化遗产的价值正在评估中请耐心等候
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import type { FormInst, FormItemRule, FormRules } from 'naive-ui'
import StepProgressBar from './components/StepProgressBar.vue'
import AppHeader from '@/components/AppHeader.vue'
import api from '@/api'
import { ref, reactive, onMounted } from 'vue'
import { useMessage, useDialog } from 'naive-ui'
import backgroundImg from '@/assets/images/background.png'
import backgroundImg1 from '@/assets/images/bgc.png'
import backgroundImg2 from '@/assets/images/bgy.png'
import backgroundImg3 from '@/assets/images/bgg.png'
import backgroundImg4 from '@/assets/images/circleg.png'
import backgroundImg5 from '@/assets/images/circley.png'
import backgroundImg6 from '@/assets/images/circlec.png'
const status = ref('create')
const message = useMessage()
const modalFormRef = ref<FormInst | null>(null)
const isSelected = ref<Number | null>(null)
const steps = [
{ title: '基础信息' },
{ title: '财务状况' },
{ title: '非遗等级与技术' },
{ title: '非遗应用与推广' },
{ title: '非遗资产衍生商品信息' },
]
const loading = ref(false)
const actionUrl = 'https://value.cdcee.net/api/v1/upload/image'
const currentStep = ref(0)
const historyList = ref([])
const modalForm = reactive({
asset_name: '',
institution: '',
credit_code_or_id: '',
industry: null,
biz_intro: '',
annual_revenue: '',
rd_investment: '',
three_year_income: [],
funding_status: null,
sales_volume: '',
link_views: '',
circulation: null,
last_market_activity: null,
monthly_transaction: null,
price_fluctuation: [],
application_maturity: null,
application_coverage: null,
cooperation_depth: null,
offline_activities: '',
online_accounts: [],
inheritor_level: null,
inheritor_age_count: [],
inheritor_certificates: [],
heritage_level: null,
historical_evidence: [],
patent_certificates: [],
pattern_images: [],
patent_application_no: '',
})
const modalRules = {
asset_name: [
{
required: true,
message: '请输入资产名称',
trigger: ['input', 'blur'],
},
],
institution: [
{
required: true,
message: '请输入所属机构/权利人',
trigger: ['input', 'blur'],
},
],
credit_code_or_id: [
{
required: true,
message: '请输入统一社会信用代码/身份证号',
trigger: ['input', 'blur'],
},
],
biz_intro: [
{
required: true,
message: '请输入业务/传承介绍',
trigger: ['input', 'blur'],
},
],
industry: [
{
required: true,
message: '请选择所属行业',
trigger: ['input', 'blur'],
},
],
annual_revenue: [
{
required: true,
message: '请输入近12个月机构营收',
trigger: ['input', 'blur'],
},
],
rd_investment: [
{
required: true,
message: '请输入近12个月机构研发投入',
trigger: ['input', 'blur'],
},
],
three_year_income: [
{
type: 'array',
required: true,
message: '',
trigger: ['input', 'blur'],
len: 3,
fields: [
{
required: true,
message: '请输入第一年机构收益',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入第二年机构收益',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入第三年机构收益',
trigger: ['input', 'blur'],
},
],
},
],
historical_evidence: [
{
type: 'array',
required: true,
message: '',
trigger: ['input', 'blur'],
len: 4,
fields: [
{
required: true,
message: '请输入出土实物样本数量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入古代文献样本数量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入传承人佐证样本数量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入现代研究样本数量',
trigger: ['input', 'blur'],
},
],
},
],
funding_status: [
{
required: true,
message: '请选择资产受资助情况',
trigger: ['input', 'blur'],
},
],
inheritor_level: [
{
required: true,
message: '请选择非遗传承人等级',
trigger: ['input', 'blur'],
},
],
inheritor_age_count: [
{
type: 'array',
required: true,
message: '',
trigger: ['input', 'blur'],
len: 3,
fields: [
{
required: true,
message: '请输入≤50岁传承人数量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入50-70岁传承人数量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入≥70岁传承人数量',
trigger: ['input', 'blur'],
},
],
},
],
heritage_level: [
{
required: true,
message: '请选择非遗等级',
trigger: ['input', 'blur'],
},
],
application_maturity: [
{
required: true,
message: '请选择非遗资产应用成熟度',
trigger: ['input', 'blur'],
},
],
application_coverage: [
{
required: true,
message: '请选择非遗资产应用覆盖范围',
trigger: ['input', 'blur'],
},
],
cooperation_depth: [
{
required: true,
message: '请选择非遗资产跨界合作深度',
trigger: ['input', 'blur'],
},
],
offline_activities: [
{
required: true,
message: '请输入近12个月线下相关宣讲活动次数',
trigger: ['input', 'blur'],
},
],
online_accounts: [
{
type: 'array',
required: true,
message: '',
trigger: ['input', 'blur'],
len: 5,
fields: [
{
required: true,
message: '请选择线上相关宣传账号信息',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入账号',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入账号点赞量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入账号评论量',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入账号分享量',
trigger: ['input', 'blur'],
},
],
},
],
sales_volume: [
{
required: true,
message: '请输入该商品近12个月销售量',
trigger: ['input', 'blur'],
},
],
link_views: [
{
required: true,
message: '请输入该商品近12个月的链接浏览量',
trigger: ['input', 'blur'],
},
],
circulation: [
{
required: true,
message: '请选择该商品的发行量',
trigger: ['input', 'blur'],
},
],
last_market_activity: [
{
required: true,
message: '请选择该商品最近一次市场活动时间',
trigger: ['input', 'blur'],
},
],
monthly_transaction: [
{
required: true,
message: '请选择月交易额',
trigger: ['input', 'blur'],
},
],
price_fluctuation: [
{
type: 'array',
required: true,
message: '',
trigger: ['input', 'blur'],
len: 2,
fields: [
{
required: true,
message: '请输入最高价',
trigger: ['input', 'blur'],
},
{
required: true,
message: '请输入最低价',
trigger: ['input', 'blur'],
},
],
},
],
}
const industryOptions = ref([])
const fundingOptions = [
{
label: '国家级资助',
value: '0',
},
{
label: '省级资助',
value: '1',
},
{
label: '无资助',
value: '2',
},
]
const fundingOptions2 = [
{
label: '国家级传承人',
value: '0',
},
{
label: '省级传承人',
value: '1',
},
{
label: '市级传承人',
value: '2',
},
]
const circulationOptions = [
{
label: '孤品:全球唯一,不可复制(如特定版权、唯一实物)',
value: '孤品:全球唯一,不可复制(如特定版权、唯一实物)',
},
{
label: '限量:总发行份数 ≤100份',
value: '限量:总发行份数 ≤100份',
},
{
label: '稀有:总发行份数∈[100, 1000]份,或二级市场流通率 < 5%',
value: '稀有:总发行份数∈[100, 1000]份,或二级市场流通率 < 5%',
},
{
label: '流通:总发行份数 >1000份或二级市场流通率 ≥ 5%',
value: '流通:总发行份数 >1000份或二级市场流通率 ≥ 5%',
},
]
const activityOptions = [
{
label: '近一周',
value: '0',
},
{
label: '近一月',
value: '1',
},
{
label: '近一年',
value: '2',
},
{
label: '其他',
value: '3',
},
]
const transactionOptions = [
{
label: '月交易额<100万元',
value: '0',
},
{
label: '月交易额100万500万',
value: '1',
},
{
label: '月交易额≥500万',
value: '2',
},
]
const maturityOptions = [
{
label: '成熟应用',
value: '0',
},
{
label: '推广阶段',
value: '1',
},
{
label: '试点阶段',
value: '2',
},
]
const depthOptions = [
{
label: '无',
value: '0',
},
{
label: '品牌联名',
value: '1',
},
{
label: '科技载体',
value: '2',
},
{
label: '国家外交礼品',
value: '3',
},
]
const coverageOptions = [
{
label: '全球覆盖',
value: '0',
},
{
label: '全国覆盖',
value: '1',
},
{
label: '区域覆盖',
value: '2',
},
]
const accountsOptions = [
{
label: 'b站',
value: '0',
},
{
label: '抖音',
value: '1',
},
{
label: '快手',
value: '2',
},
{
label: '其他',
value: '3',
},
]
const heritageOptions = [
{
label: '国家级非遗',
value: '0',
},
{
label: '省级非遗',
value: '1',
},
{
label: '纳入《国家文化数字化战略清单》',
value: '2',
},
{
label: '无',
value: '3',
},
]
const handleFinish1 = (file) => {
let url = JSON.parse(file.event.target.response)
modalForm.patent_certificates.push({ url: url.url, id: file.file.batchId })
}
const handleFinish2 = (file) => {
let url = JSON.parse(file.event.target.response)
modalForm.pattern_images.push({ url: url.url, id: file.file.batchId })
}
const handleFinish3 = (file) => {
console.log(file)
let url = JSON.parse(file.event.target.response)
modalForm.inheritor_certificates.push({ url: url.url, id: file.file.batchId })
}
const delete1 = (file) => {
const index = modalForm.patent_certificates.findIndex((item) => item.id === file.file.batchId)
if (index !== -1) {
modalForm.patent_certificates.splice(index, 1)
}
}
const delete2 = (file) => {
const index = modalForm.pattern_images.findIndex((item) => item.id === file.file.batchId)
if (index !== -1) {
modalForm.pattern_images.splice(index, 1)
}
}
const delete3 = (file) => {
const index = modalForm.inheritor_certificates.findIndex((item) => item.id === file.file.batchId)
if (index !== -1) {
modalForm.inheritor_certificates.splice(index, 1)
}
console.log(modalForm.inheritor_certificates)
}
const previousStep = () => {
console.log(modalForm)
currentStep.value--
}
import { useRouter, useRoute } from 'vue-router'
import { unref } from 'vue'
const router = useRouter()
const route = useRoute()
const navToLogin = () => {
userStore.logout()
}
const nextStep = () => {
console.log(modalForm)
if (loading.value) {
return
}
modalFormRef.value?.validate((errors) => {
if (!errors) {
if (currentStep.value < 4) {
currentStep.value++
return
}
openSubmitConfirm()
} else {
message.error('请完善表单')
}
})
}
const submit = () => {
const data = {
...modalForm,
industry: industryOptions.value.find((item) => item.value === modalForm.industry).label,
funding_status: fundingOptions.find((item) => item.value === modalForm.funding_status).label,
inheritor_level: fundingOptions2.find((item) => item.value === modalForm.inheritor_level).label,
// "inheritor_ages": [60, 42, 35], # 传承人年龄
inheritor_certificates: modalForm.inheritor_certificates.map((item) => item.url),
heritage_asset_level: heritageOptions.find((item) => item.value === modalForm.heritage_level)
.label,
inheritor_ages: [
modalForm.inheritor_age_count[0] - 0,
modalForm.inheritor_age_count[1] - 0,
modalForm.inheritor_age_count[2] - 0,
],
historical_evidence: {
artifacts: modalForm.historical_evidence[0],
ancient_literature: modalForm.historical_evidence[1],
inheritor_testimony: modalForm.historical_evidence[2],
modern_research: modalForm.historical_evidence[3],
},
patent_certificates: modalForm.patent_certificates.map((item) => item.url),
pattern_images: modalForm.pattern_images.map((item) => item.url),
implementation_stage: maturityOptions.find(
(item) => item.value === modalForm.application_maturity
).label,
coverage_area: coverageOptions.find((item) => item.value === modalForm.application_coverage)
.label,
collaboration_type: depthOptions.find((item) => item.value === modalForm.cooperation_depth)
?.label,
scarcity_level: circulationOptions.find((item) => item.value === modalForm.circulation).label,
market_activity_time: activityOptions.find(
(item) => item.value === modalForm.last_market_activity
).label,
price_fluctuation: [modalForm.price_fluctuation[0] - 0, modalForm.price_fluctuation[1] - 0],
monthly_transaction_amount: transactionOptions.find(
(item) => item.value === modalForm.monthly_transaction
).label,
platform_accounts: {},
}
if (modalForm.online_accounts[0] == '0') {
data.platform_accounts = {
bilibili: {
account: modalForm.online_accounts[1],
likes: modalForm.online_accounts[2],
comments: modalForm.online_accounts[3],
shares: modalForm.online_accounts[4],
},
}
} else if (modalForm.online_accounts[0] == '1') {
data.platform_accounts = {
douyin: {
account: modalForm.online_accounts[1],
likes: modalForm.online_accounts[2],
comments: modalForm.online_accounts[3],
shares: modalForm.online_accounts[4],
},
}
} else if (modalForm.online_accounts[0] == '2') {
data.platform_accounts = {
kuaishou: {
account: modalForm.online_accounts[1],
likes: modalForm.online_accounts[2],
comments: modalForm.online_accounts[3],
shares: modalForm.online_accounts[4],
},
}
} else if (modalForm.online_accounts[0] == '3') {
data.platform_accounts = {
qita: {
account: modalForm.online_accounts[1],
likes: modalForm.online_accounts[2],
comments: modalForm.online_accounts[3],
shares: modalForm.online_accounts[4],
},
}
}
data.inheritor_age_count = data.inheritor_ages
message.success('正在评估中,请前往历史记录查看')
loading.value = true
api.valuations(data).then((res) => {
loading.value = false
getHistoryList()
message.success('评估完成 将于7个工作日内生成报告与证书 以短信形式通知')
router.push('/user-center')
// status.value = 'success'
// setTimeout(() => {
// window.location.reload()
// }, 1000)
})
}
const getHistoryList = () => {
const params = {
page: 1,
page_size: 99,
}
return api.getHistoryList(params).then((res) => {
const list = res?.data?.items ?? res?.data?.results ?? res?.results ?? []
historyList.value = Array.isArray(list) ? list : []
return res
})
}
const selectedObj = ref({
calculation_result: '',
})
const selectTimeBox = (item) => {
isSelected.value = item.id
status.value = item.status
selectedObj.value = item
if (item.status == 'success') {
setTimeout(() => {
getEcharts(economy.value, 75, '#16CEB9', '#6648FF')
getEcharts(culture.value, 50, '#ffdd00', '#ffbb05')
getEcharts(risk.value, 5, '#5ad775', '#2fab43')
}, 0)
}
}
async function retry() {
try {
const res = await api.userQuota()
if (res && res.data && res.data.remaining_count > 0) {
status.value = 'create'
} else {
$message.error('剩余评估次数不足!')
router.push('/user-center/transfer')
}
} catch (err) {
console.log(err)
}
}
const dialog = useDialog()
const openSubmitConfirm = () => {
dialog.warning({
title: '提示',
content: '提交后将消耗评估次数,确认提交?',
positiveText: '确认',
negativeText: '取消',
onPositiveClick: () => submit(),
})
}
const deleteValuations = (item) => {
dialog.warning({
title: '确认删除',
content: '是否确认删除记录?',
positiveText: '确定',
negativeText: '取消',
draggable: true,
onPositiveClick: () => {
api.deleteValuations(item).then(() => {
message.success('删除成功')
getHistoryList()
status.value = 'create'
})
},
})
}
import * as echarts from 'echarts'
import type { ECharts, EChartsOption } from 'echarts'
import { useUserStore } from '@/store'
const userStore = useUserStore()
const economy = ref<HTMLDivElement | null>(null)
const culture = ref<HTMLDivElement | null>(null)
const risk = ref<HTMLDivElement | null>(null)
// 存储ECharts实例
const chartInstance = ref<ECharts | null>(null)
const getEcharts = (item, value, color1, color2) => {
if (!item) return
// 创建实例
chartInstance.value = echarts.init(item)
// 定义半圆形进度环配置
const chartOptions = ref<EChartsOption>({
title: [
{
text: '综合评估',
top: '80%',
left: '36%',
textStyle: {
color: '#909399',
fontSize: 13,
fontWeight: 100,
},
},
{
text: value < 10 ? '0' + value : value,
top: '45%',
left: '40%',
textStyle: {
fontSize: '26',
color: '#000',
fontFamily: 'DINAlternate-Bold, DINAlternate',
fontWeight: 800,
},
},
],
polar: {
radius: ['132%', '165%'],
center: ['50%', '90%'],
},
angleAxis: {
max: 100,
show: false,
startAngle: 180,
endAngle: 0,
min: 0,
type: 'value',
},
radiusAxis: {
type: 'category',
show: false,
data: [''],
},
series: [
{
name: '进度',
type: 'bar',
roundCap: true,
barWidth: 90,
data: [
{
value: value,
itemStyle: {
color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
{
offset: 1,
color: color1,
},
{
offset: 0,
color: color2,
},
]),
},
},
],
coordinateSystem: 'polar',
},
],
})
chartInstance.value.setOption(chartOptions.value)
}
onMounted(async () => {
const params = {
page: 1,
page_size: 99,
}
await getHistoryList()
if (route.query.id) {
const targetId = Number(route.query.id)
const targetItem = historyList.value.find((item) => item.id === targetId)
if (targetItem) {
selectTimeBox(targetItem)
}
}
// 使用await提高可读性
const res = await api.getIndustryList(params)
// 检查响应数据有效性
if (!res?.data || !Array.isArray(res.data)) {
return
}
// 复制原始数据并处理,避免直接修改响应数据
industryOptions.value = await res.data.map((element, index) => {
// 只处理有名称且索引<=10的元素
if (element.name) {
return {
...element, // 保留原始属性
value: index + '',
label: element.name,
}
}
// 对于不满足条件的元素,返回原始值或进行其他处理
return element
})
})
</script>
<style lang="scss">
.pages {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
'Noto Color Emoji';
width: 100%;
height: 100vh;
overflow-y: auto;
display: flex;
flex-direction: column;
background: #f8f8f8;
/* 左侧边栏样式 - 已隐藏 */
/* .left {
width: 270px;
height: 100%;
background-color: #fff;
} */
.right {
flex: 1;
margin: 20px auto;
max-width: 1200px;
width: 95%;
background-color: #fff;
border-radius: 8px;
padding: 20px;
display: flex;
flex-direction: column;
padding-bottom: 60px;
}
}
.page-header {
position: sticky;
top: 0;
z-index: 10;
}
.delete-icon {
float: right;
transform: translate(0, 2px);
width: 16px;
height: 16px;
}
.timeBox {
margin-top: 10px;
width: 200px;
height: 40px;
font-weight: 500;
font-size: 14px;
color: #303133;
line-height: 20px;
text-align: left;
font-style: normal;
padding: 10px 12px;
cursor: pointer;
}
.timeBox2 {
margin-top: 10px;
width: 200px;
height: 40px;
font-weight: 500;
font-size: 14px;
color: #303133;
line-height: 20px;
text-align: left;
font-style: normal;
padding: 10px 12px;
cursor: pointer;
background-color: #f8f8f8;
}
.line {
margin: auto;
margin-top: 40px;
width: 900px;
height: 1px;
background: #eeeeee;
border-radius: 4px;
}
.form-container {
margin: auto;
margin-top: 30px;
width: 900px;
max-width: 100%;
}
.form-item {
display: inline-block;
width: 330px;
margin-left: 20px;
}
.form-title-box {
margin: auto;
margin-top: 40px;
width: 900px;
}
.title-left {
width: 6px;
height: 24px;
background: #a30113;
border-radius: 4px;
display: inline-block;
transform: translate(0, 3px);
}
.title-form {
display: inline-block;
font-weight: 500;
font-size: 20px;
color: #303133;
line-height: 20px;
text-align: left;
font-style: normal;
margin-left: 8px;
}
.submit-box {
width: 900px;
margin: auto;
margin-top: 60px;
}
.submit-btn {
display: inline-block;
margin-left: 20px;
width: 180px;
height: 40px;
background: #a30113;
border-radius: 4px;
text-align: center;
font-size: 14px;
color: #ffffff;
line-height: 40px;
font-style: normal;
}
.submit-btn2 {
display: inline-block;
margin-left: 20px;
width: 180px;
height: 40px;
background: #fff;
border-radius: 4px;
text-align: center;
font-size: 14px;
line-height: 14px;
font-style: normal;
padding-top: 12px;
border-radius: 4px;
border: 1px solid #bbbbbb;
}
.retry {
text-align: center;
margin: auto;
margin-top: 40px;
width: 180px;
height: 40px;
background: #a30113;
border-radius: 4px;
font-size: 16px;
line-height: 40px;
color: #ffffff;
}
.price-container {
margin: auto;
margin-top: 40px;
height: 268px;
width: 1010px;
padding-top: 79px;
/* 使用导入的图片作为背景 */
background-image: url(~@/assets/images/background.png);
background-size: cover;
background-position: center;
background-repeat: no-repeat;
/* 文本样式 */
color: #b5906b; /* 假设白色文本在背景上更清晰 */
font-size: 52px;
font-weight: bold;
text-align: center;
}
.credibility-badge {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 8px 14px;
min-width: 240px;
height: 36px;
background: linear-gradient(180deg, #f1e4e4 0%, #ead7d7 100%);
border-radius: 12px;
box-shadow: 0 6px 16px rgba(163, 1, 19, 0.08);
color: #4f4f4f;
font-size: 14px;
font-weight: 500;
}
.credibility-label {
color: #595959;
}
.credibility-stars {
display: flex;
position: relative;
width: 100px;
height: 18px;
align-items: center;
}
.stars-base,
.stars-fill {
font-size: 18px;
line-height: 1;
letter-spacing: 3px;
}
.stars-base {
color: #d0d0d0;
}
.stars-fill {
position: absolute;
left: 0;
top: 0;
color: #a30d15;
overflow: hidden;
white-space: nowrap;
}
.credibility-percent {
color: #595959;
font-weight: 600;
letter-spacing: 0.2px;
}
.secondary-badge {
display: inline-flex;
align-items: center;
justify-content: center;
margin-left: 14px;
padding: 8px 14px;
min-width: 170px;
height: 36px;
background: linear-gradient(180deg, #e7ebf3 0%, #dce2ee 100%);
border-radius: 12px;
box-shadow: 0 6px 16px rgba(22, 93, 255, 0.06);
color: #5a5a5a;
font-size: 14px;
font-weight: 500;
}
.score-box {
padding: 30px;
width: 320px;
height: 284px;
border-radius: 8px;
margin-left: 25px;
color: #303133;
}
/* 移除number类型输入框的箭头 */
input[type='number']::-webkit-outer-spin-button,
input[type='number']::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
</style>