差不多做完了,累死劳资了

This commit is contained in:
若拙_233 2025-10-10 15:48:25 +08:00
parent 5dd00a4652
commit 909a258c4a
18 changed files with 441 additions and 39 deletions

View File

@ -1,10 +1,10 @@
<p align="center"> <p align="center">
<a href="https://github.com/mizhexiaoxiao/vue-fastapi-admin"> <a href="https://github.com/mizhexiaoxiao/vue-fastapi-admin">
<img alt="Vue FastAPI Admin Logo" width="200" src="https://github.com/mizhexiaoxiao/vue-fastapi-admin/blob/main/deploy/sample-picture/logo.svg"> <!-- <img alt="Vue FastAPI Admin Logo" width="200" src="https://github.com/mizhexiaoxiao/vue-fastapi-admin/blob/main/deploy/sample-picture/logo.svg"> -->
</a> </a>
</p> </p>
<h1 align="center">vue-fastapi-admin</h1> <!-- <h1 align="center">vue-fastapi-admin</h1> -->
English | [简体中文](./README.md) English | [简体中文](./README.md)

View File

@ -1,10 +1,10 @@
<p align="center"> <p align="center">
<a href="https://github.com/mizhexiaoxiao/vue-fastapi-admin"> <a href="https://github.com/mizhexiaoxiao/vue-fastapi-admin">
<img alt="Vue FastAPI Admin Logo" width="200" src="https://github.com/mizhexiaoxiao/vue-fastapi-admin/blob/main/deploy/sample-picture/logo.svg"> <!-- <img alt="Vue FastAPI Admin Logo" width="200" src="https://github.com/mizhexiaoxiao/vue-fastapi-admin/blob/main/deploy/sample-picture/logo.svg"> -->
</a> </a>
</p> </p>
<h1 align="center">vue-fastapi-admin</h1> <!-- <h1 align="center">vue-fastapi-admin</h1> -->
[English](./README-en.md) | 简体中文 [English](./README-en.md) | 简体中文

View File

@ -10,8 +10,8 @@ export default {
loginPhone: (data) => request.post('/app-user/login', data, { noNeedToken: true }), loginPhone: (data) => request.post('/app-user/login', data, { noNeedToken: true }),
// pages // pages
getIndustryList: () => request.get('/industry/list'), getIndustryList: () => request.get('/industry/list'),
getHistoryList: (params) => request.get('/valuations', { params }), getHistoryList: (params) => request.get('/app-valuations', { params }),
valuations: (data = {}) => request.post('/valuations', data), valuations: (data = {}) => request.post('/app-valuations', data),
// profile // profile
updatePassword: (data = {}) => request.post('/base/update_password', data), updatePassword: (data = {}) => request.post('/base/update_password', data),
// users // users

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -36,14 +36,15 @@ export const useUserStore = defineStore('user', {
actions: { actions: {
async getUserInfo() { async getUserInfo() {
try { try {
const res = await api.getUserInfo() // const res = await api.getUserInfo()
if (res.code === 401) { // if (res.code === 401) {
this.logout() // this.logout()
return // return
} // }
const { id, username, email, avatar, roles, is_superuser, is_active } = res.data // const { id, username, email, avatar, roles, is_superuser, is_active } = res.data
this.userInfo = { id, username, email, avatar, roles, is_superuser, is_active } // this.userInfo = { id, username, email, avatar, roles, is_superuser, is_active }
return res.data // return res.data
return {}
} catch (error) { } catch (error) {
return error return error
} }

View File

@ -16,4 +16,5 @@ export function createAxios(options = {}) {
export const request = createAxios({ export const request = createAxios({
baseURL: import.meta.env.VITE_BASE_API, baseURL: import.meta.env.VITE_BASE_API,
Authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxOCwicGhvbmUiOiIxNTg1MDIwMTEzOSIsImV4cCI6MTc2MDYzNTc0NX0.Z-2oCgVYlLo4JVuFLwNWqhj2iYyAvkZxWQp0h6AlhuI'
}) })

View File

@ -4,13 +4,13 @@
<img style="width: 198px; height: 32px; margin: 20px;" src="@/assets/images/logo.png" alt=""> <img style="width: 198px; height: 32px; margin: 20px;" src="@/assets/images/logo.png" alt="">
<div style="margin-left: 20px;"> <div style="margin-left: 20px;">
<div v-for="(item, index) in historyList" @click="selectTimeBox(item)" :class="{ timeBox: item.id != isSelected, timeBox2: item.id == isSelected}"> <div v-for="(item, index) in historyList" @click="selectTimeBox(item)" :class="{ timeBox: item.id != isSelected, timeBox2: item.id == isSelected}">
{{ item.time }} {{ 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=""> <img v-if="item.id == isSelected" class="delete-icon" src="@/assets/images/delete.png" alt="">
</div> </div>
</div> </div>
</div> </div>
<div class="right"> <div v-if="status=='create'" class="right">
<StepProgressBar style="width: 800px; margin: auto; margin-top: 40px;" :steps="steps" :currentStep="currentStep" /> <StepProgressBar style="width: 800px; margin: auto; margin-top: 40px;" :steps="steps" :currentStep="currentStep" />
<div class="line"></div> <div class="line"></div>
<div class="form-title-box"> <div class="form-title-box">
@ -33,12 +33,45 @@
> >
<n-grid v-if="currentStep == 0" :cols="24" :x-gap="24"> <n-grid v-if="currentStep == 0" :cols="24" :x-gap="24">
<n-form-item-gi :span="24" class="form-item" label="资产名称" path="asset_name"> <n-form-item-gi :span="24" class="form-item" 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="请输入资产名称" /> <NInput v-model:value="modalForm.asset_name" placeholder="请输入资产名称" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="所属机构" path="institution"> <n-form-item-gi :span="10" class="form-item" 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="请输入所属机构" /> <NInput v-model:value="modalForm.institution" placeholder="请输入所属机构" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="所属行业" path="industry"> <n-form-item-gi :span="12" class="form-item" 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 <n-select
v-model:value="modalForm.industry" v-model:value="modalForm.industry"
placeholder="请选择所属行业" placeholder="请选择所属行业"
@ -49,17 +82,61 @@
</n-grid> </n-grid>
<n-grid v-if="currentStep == 1" :cols="24" :x-gap="0"> <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"> <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个月机构营收" /> <NInput v-model:value="modalForm.annual_revenue" placeholder="请输入近12个月机构营收" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="近12个月机构研发投入/万元" path="rd_investment"> <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个月机构研发投入" /> <NInput v-model:value="modalForm.rd_investment" placeholder="请输入近12个月机构研发投入" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="24" label="近三年机构收益/万元" path="three_year_income" style="margin-left: 20px;"> <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;" /> <NInput v-model:value="modalForm.three_year_income[0]" placeholder="第一年" style="width: 220px;" />
<NInput v-model:value="modalForm.three_year_income[1]" placeholder="第二年" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.three_year_income[1]" placeholder="第二年" style="width: 220px; margin-left: 10px;"/>
<NInput v-model:value="modalForm.three_year_income[2]" placeholder="第三年" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.three_year_income[2]" placeholder="第三年" style="width: 220px; margin-left: 10px;"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="资产受资助情况" path="funding_status"> <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 <n-select
v-model:value="modalForm.funding_status" v-model:value="modalForm.funding_status"
placeholder="请选择资产受资助情况" placeholder="请选择资产受资助情况"
@ -69,9 +146,31 @@
</n-grid> </n-grid>
<n-grid v-if="currentStep == 2" :cols="24" :x-gap="0"> <n-grid v-if="currentStep == 2" :cols="24" :x-gap="0">
<n-form-item-gi :span="24" class="form-item" label="非遗传承人等级" path="inheritor_level"> <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-select v-model:value="modalForm.inheritor_level" placeholder="非遗传承人等级" :options="fundingOptions2"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="24" label="非遗传承人年龄水平及数量" path="inheritor_age_count" style="margin-left: 20px;"> <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;" /> <NInput v-model:value="modalForm.inheritor_age_count[0]" placeholder="请输入≤50岁传承人数量" style="width: 220px;" />
<NInput v-model:value="modalForm.inheritor_age_count[1]" placeholder="请输入50-70岁传承人数量" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.inheritor_age_count[1]" placeholder="请输入50-70岁传承人数量" style="width: 220px; margin-left: 10px;"/>
<NInput v-model:value="modalForm.inheritor_age_count[2]" placeholder="请输入≥70岁传承人数量" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.inheritor_age_count[2]" placeholder="请输入≥70岁传承人数量" style="width: 220px; margin-left: 10px;"/>
@ -81,6 +180,8 @@
:action="actionUrl" :action="actionUrl"
:default-file-list="modalForm.inheritor_certificates" :default-file-list="modalForm.inheritor_certificates"
list-type="image-card" list-type="image-card"
@finish="handleFinish3"
@remove="delete3"
> >
<div> <div>
<img style="width: 24px; height: 24px;" src="@/assets/images/upload.png" alt=""> <img style="width: 24px; height: 24px;" src="@/assets/images/upload.png" alt="">
@ -89,21 +190,56 @@
</n-upload> </n-upload>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="非遗等级" path="heritage_level"> <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-select v-model:value="modalForm.heritage_level" placeholder="非遗等级" :options="heritageOptions" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="非遗资产所用专利的申请号" path="patent_application_no"> <n-form-item-gi :span="12" class="form-item" label="非遗资产所用专利的申请号" path="patent_application_no">
<NInput v-model:value="modalForm.patent_application_no" placeholder="非遗资产所用专利的申请号" /> <NInput v-model:value="modalForm.patent_application_no" placeholder="非遗资产所用专利的申请号" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="20" label="非遗资产历史证明证据及数量" path="historical_evidence" style="margin-left: 20px; width: 800px;"> <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;" /> <NInput v-model:value="modalForm.historical_evidence[0]" placeholder="请输入出土实物样本数量" style="width: 220px;" />
<NInput v-model:value="modalForm.historical_evidence[1]" placeholder="请输入古代文献样本数量" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.historical_evidence[1]" placeholder="请输入古代文献样本数量" style="width: 220px; margin-left: 10px;"/>
<NInput v-model:value="modalForm.historical_evidence[2]" placeholder="请输入传承人佐证样本数量" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.historical_evidence[2]" placeholder="请输入传承人佐证样本数量" style="width: 220px; margin-left: 10px;"/>
<NInput v-model:value="modalForm.historical_evidence[3]" placeholder="请输入现代研究样本数量" style="width: 220px; margin-left: 10px;"/> <NInput v-model:value="modalForm.historical_evidence[3]" placeholder="请输入现代研究样本数量" style="width: 220px; margin-left: 10px;"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="24" class="form-item" label="非遗资产所用专利的证书" path="patent_certificates"> <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 <n-upload
:action="actionUrl" :action="actionUrl"
:default-file-list="modalForm.patent_certificates" :default-file-list="modalForm.patent_certificates"
@finish="handleFinish1"
@remove="delete1"
list-type="image-card" list-type="image-card"
> >
<div> <div>
@ -113,9 +249,22 @@
</n-upload> </n-upload>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="24" class="form-item" label="非遗纹样图片" path="pattern_images"> <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 <n-upload
:action="actionUrl" :action="actionUrl"
:default-file-list="modalForm.pattern_images" :default-file-list="modalForm.pattern_images"
@finish="handleFinish2"
@remove="delete2"
list-type="image-card" list-type="image-card"
> >
<div> <div>
@ -127,6 +276,17 @@
</n-grid> </n-grid>
<n-grid v-if="currentStep == 3" :cols="24" :x-gap="0"> <n-grid v-if="currentStep == 3" :cols="24" :x-gap="0">
<n-form-item-gi :span="24" class="form-item" label="非遗资产应用成熟度" path="application_maturity"> <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 <n-select
v-model:value="modalForm.application_maturity" v-model:value="modalForm.application_maturity"
placeholder="请选择" placeholder="请选择"
@ -134,6 +294,17 @@
/> />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="9" class="form-item" label="非遗资产应用覆盖范围" path="application_coverage"> <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 <n-select
v-model:value="modalForm.application_coverage" v-model:value="modalForm.application_coverage"
placeholder="请选择" placeholder="请选择"
@ -141,6 +312,17 @@
/> />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="非遗资产跨界合作深度" path="cooperation_depth"> <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 <n-select
v-model:value="modalForm.cooperation_depth" v-model:value="modalForm.cooperation_depth"
placeholder="请选择" placeholder="请选择"
@ -148,9 +330,32 @@
/> />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="近12个月线下相关宣讲活动次数" path="offline_activities"> <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个月线下相关宣讲活动次数" /> <NInput v-model:value="modalForm.offline_activities" placeholder="近12个月线下相关宣讲活动次数" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="16" style="margin-left: 20px;" label="线上相关宣传账号信息" path="online_accounts"> <n-form-item-gi :span="16" 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 <n-select
style="width: 330px;" style="width: 330px;"
v-model:value="modalForm.online_accounts[0]" v-model:value="modalForm.online_accounts[0]"
@ -162,21 +367,87 @@
</n-grid> </n-grid>
<n-grid v-if="currentStep == 4" :cols="24" :x-gap="0"> <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"> <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="请输入" /> <NInput v-model:value="modalForm.sales_volume" placeholder="请输入" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="该商品近12个月的链接浏览量" path="link_views"> <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="请输入" /> <NInput v-model:value="modalForm.link_views" placeholder="请输入" />
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="该商品的发行量" path="circulation"> <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"/> <n-select v-model:value="modalForm.circulation" placeholder="请选择" :options="circulationOptions"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="12" class="form-item" label="该商品最近一次市场活动时间" path="last_market_activity"> <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-select v-model:value="modalForm.last_market_activity" placeholder="请选择" :options="activityOptions"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="10" class="form-item" label="月交易额" path="monthly_transaction"> <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-select v-model:value="modalForm.monthly_transaction" placeholder="请选择" :options="transactionOptions"/>
</n-form-item-gi> </n-form-item-gi>
<n-form-item-gi :span="6" class="form-item" label="该商品近30天价格波动区间" path="price_fluctuation"> <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;" /> <NInput v-model:value="modalForm.price_fluctuation[0]" placeholder="最低价" style="width: 220px;" />
<span style="display: inline-block; margin: 0 8px;">-</span> <span style="display: inline-block; margin: 0 8px;">-</span>
<NInput v-model:value="modalForm.price_fluctuation[1]" placeholder="最高价" style="width: 220px;"/> <NInput v-model:value="modalForm.price_fluctuation[1]" placeholder="最高价" style="width: 220px;"/>
@ -196,6 +467,65 @@
</div> </div>
</div> </div>
<div v-if="status=='success'" class="right">
<div class="price-container" :style="{ backgroundImage: `url(${backgroundImg})`}">
<div>
¥9,988,670
</div>
<div style="font-size: 20px; color: #303133; line-height: 20px;">
最终评估结果
</div>
<div style="display: flex; justify-content: center; margin-top: 10px;">
<div style="border-radius: 4px; width: 125px; height: 28px; font-size: 14px; color: #303133; font-weight: normal; background: #A3011332; line-height: 28px;">评估可信度=95%</div>
<div style="border-radius: 4px; width: 125px; height: 28px; font-size: 14px; color: #303133; font-weight: normal; background: #A3011332; margin-left: 10px; line-height: 28px;">动态质押率=50%</div>
</div>
</div>
<div style="display: flex; margin-left: 15px;">
<div class="score-box" style="background: #3196FF22; color: #303133; font-size: 14px; " :style="{ backgroundImage: `url(${backgroundImg3})`}">
<div style="font-size: 18px; font-weight: bold;">
<img style="width: 18px; height: 18px; transform: translate(0,2px);" src="@/assets/images/cost.png" alt="">
经济价值评估
</div>
<div style="text-align: center; font-size: 30px; font-weight: bold; margin-top: 10px;">75</div>
<div style="text-align: center; color: #909399">综合评估</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 style="text-align: center; font-size: 30px; font-weight: bold; margin-top: 10px;">90</div>
<div style="text-align: center; color: #909399">综合评估</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 style="text-align: center; font-size: 30px; font-weight: bold; margin-top: 10px;">5</div>
<div style="text-align: center; color: #909399">综合评估</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;">重新评估</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">重新评估</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> </div>
</template> </template>
@ -205,7 +535,11 @@ import StepProgressBar from './components/StepProgressBar.vue';
import api from '@/api' import api from '@/api'
import { ref, reactive, onMounted } from 'vue' import { ref, reactive, onMounted } from 'vue'
import { useMessage } from 'naive-ui' import { useMessage } 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';
const status = ref('create')
const message = useMessage() const message = useMessage()
const modalFormRef = ref<FormInst | null>(null) const modalFormRef = ref<FormInst | null>(null)
const isSelected = ref<Number | null>(null) const isSelected = ref<Number | null>(null)
@ -216,20 +550,9 @@ const steps = [
{ title: '非遗应用与推广' }, { title: '非遗应用与推广' },
{ title: '非遗资产衍生商品信息' } { title: '非遗资产衍生商品信息' }
]; ];
const actionUrl = 'http://124.222.245.240:8080/api/v1/upload/upload/image' const actionUrl = 'http://124.222.245.240:8080/api/v1/upload/image'
const currentStep = ref(2) const currentStep = ref(4)
const historyList = ref([ const historyList = ref([])
{
id: 0,
time: '2025-09-12 16:23',
},{
id: 1,
time: '2025-09-13 20:09',
},{
id: 2,
time: '2025-09-14 03:02',
},
])
const modalForm = reactive({ const modalForm = reactive({
asset_name: '', asset_name: '',
institution: '', institution: '',
@ -240,9 +563,9 @@ const modalForm = reactive({
funding_status: null, funding_status: null,
sales_volume:'', sales_volume:'',
link_views:'', link_views:'',
circulation:'', circulation: null,
last_market_activity:'', last_market_activity: null,
monthly_transaction: '', monthly_transaction: null,
price_fluctuation: [], price_fluctuation: [],
application_maturity: null, application_maturity: null,
application_coverage: null, application_coverage: null,
@ -631,6 +954,39 @@ const heritageOptions = [
value: '3', 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 = () => { const previousStep = () => {
currentStep.value -- currentStep.value --
} }
@ -659,7 +1015,7 @@ const submit = () => {
funding_status: fundingOptions.find(item => item.value === modalForm.funding_status).label, funding_status: fundingOptions.find(item => item.value === modalForm.funding_status).label,
inheritor_level: fundingOptions2.find(item => item.value === modalForm.inheritor_level).label, inheritor_level: fundingOptions2.find(item => item.value === modalForm.inheritor_level).label,
// "inheritor_ages": [60, 42, 35], # // "inheritor_ages": [60, 42, 35], #
inheritor_certificates: modalForm.inheritor_certificates, inheritor_certificates: modalForm.inheritor_certificates.map(item => item.url),
heritage_asset_level: heritageOptions.find(item => item.value === modalForm.heritage_level).label, heritage_asset_level: heritageOptions.find(item => item.value === modalForm.heritage_level).label,
inheritor_ages: modalForm.inheritor_age_count, inheritor_ages: modalForm.inheritor_age_count,
historical_evidence: { historical_evidence: {
@ -668,8 +1024,8 @@ const submit = () => {
inheritor_testimony: modalForm.historical_evidence[3], inheritor_testimony: modalForm.historical_evidence[3],
modern_research: modalForm.historical_evidence[4] modern_research: modalForm.historical_evidence[4]
}, },
patent_certificates: modalForm.patent_certificates, patent_certificates: modalForm.patent_certificates.map(item => item.url),
pattern_images: modalForm.pattern_images, pattern_images: modalForm.pattern_images.map(item => item.url),
implementation_stage: maturityOptions.find(item => item.value === modalForm.application_maturity).label, implementation_stage: maturityOptions.find(item => item.value === modalForm.application_maturity).label,
coverage_area: coverageOptions.find(item => item.value === modalForm.application_coverage).label, coverage_area: coverageOptions.find(item => item.value === modalForm.application_coverage).label,
collaboration_type: depthOptions.find(item => item.value === modalForm.cooperation_depth).label, collaboration_type: depthOptions.find(item => item.value === modalForm.cooperation_depth).label,
@ -706,12 +1062,17 @@ const getHistoryList = () => {
size: 99 size: 99
}; };
api.getHistoryList(params).then(res=>{ api.getHistoryList(params).then(res=>{
console.log(res) historyList.value = res.data
}) })
} }
const selectTimeBox = (item) => { const selectTimeBox = (item) => {
isSelected.value = item.id isSelected.value = item.id
status.value = item.status
}
const retry = () => {
status.value = 'create'
} }
onMounted(async () => { onMounted(async () => {
@ -869,4 +1230,43 @@ onMounted(async () => {
border-radius: 4px; border-radius: 4px;
border: 1px solid #BBBBBB; 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: 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;
}
.score-box{
padding: 30px;
width: 320px;
height: 284px;
border-radius: 8px;
margin-left: 25px;
color: #303133;
}
</style> </style>

View File

@ -34,7 +34,7 @@
:key="i" :key="i"
class="mb-10 mt-10 w-300 cursor-pointer" class="mb-10 mt-10 w-300 cursor-pointer"
hover:card-shadow hover:card-shadow
title="Vue FastAPI Admin" title=""
size="small" size="small"
> >
<p op-60>{{ dummyText }}</p> <p op-60>{{ dummyText }}</p>