|
|
@@ -5,8 +5,8 @@
|
|
|
<!-- 基本信息 -->
|
|
|
<CommonSection title="基本信息" :isFirst="true">
|
|
|
<CommonInfoRow label="专利名称" :value="form.patentName" />
|
|
|
- <CommonInfoRow label="所属科室" :value="form.deptName" />
|
|
|
- <!-- <CommonInfoRow label="代理公司" :value="form.companyName" /> -->
|
|
|
+ <CommonInfoRow label="所属部门" :value="form.deptName" />
|
|
|
+ <CommonInfoRow label="代理公司" :value="form.companyName" />
|
|
|
<CommonInfoRow label="专利类型" :value="getDictLabel('sci_patent_class', form.patentClass)" />
|
|
|
<CommonInfoRow label="专利范围" :value="getDictLabel('sci_patent_scope', form.patentScope)" />
|
|
|
<CommonInfoRow label="专利状态" :value="getDictLabel('sci_patent_condition', form.patentCondition)" />
|
|
|
@@ -25,16 +25,9 @@
|
|
|
<CommonInfoRow label="专利代理机构" :value="form.entrustUnit" />
|
|
|
<CommonInfoRow label="代理人" :value="form.agencyUserName" />
|
|
|
<CommonInfoRow label="代理人联系电话" :value="form.agencyPhone" />
|
|
|
- <CommonInfoRow label="专利文献出版日" :value="formatDate(form.publicationDate)" />
|
|
|
- <CommonInfoRow label="所属年份" :value="form.patentYeat" />
|
|
|
- <CommonInfoRow label="是否失效" :value="form.patentEffectiveness === '10' ? '是' : '否'" />
|
|
|
- <CommonInfoRow label="合作类型" :value="getDictLabel('sci_cooperation', form.patentCooperation)" />
|
|
|
- <CommonInfoRow label="是否职务专利" :value="form.patentOffice === '10' ? '是' : '否'" />
|
|
|
- <CommonInfoRow label="是否为PCT专利" :value="form.patentCt === '10' ? '是' : '否'" />
|
|
|
- <CommonInfoRow label="成果权属" :value="getDictLabel('achievement_owner_unit', form.achievementOwnerUnit)
|
|
|
- " />
|
|
|
+ <CommonInfoRow label="所属年份" :value="form.patentYeat ? formatDate(form.patentYeat, 'YYYY') : '-'" />
|
|
|
|
|
|
- <CommonInfoRow label="所属平台">
|
|
|
+ <CommonInfoRow label="所属平台" isColumn>
|
|
|
<view class="platform-tags">
|
|
|
<template v-if="platformList.length > 0">
|
|
|
<uv-tags v-for="(p, index) in platformList" :key="index" :text="p.platformName === '其他'
|
|
|
@@ -48,23 +41,52 @@
|
|
|
</view>
|
|
|
</CommonInfoRow>
|
|
|
<CommonInfoRow label="所属团队" :value="form.belongTeam || '-'" />
|
|
|
-
|
|
|
- <!-- 专利转化特有字段 -->
|
|
|
- <template v-if="code.includes('专利转化')">
|
|
|
- <CommonInfoRow label="转化时间" :value="formatDate(form.invertTime)" />
|
|
|
- <CommonInfoRow label="转化金额" :value="(form.invertAmount || '0') + ' 元'" isAmount />
|
|
|
- <CommonInfoRow label="转化单位" :value="form.invertUnit" />
|
|
|
- <CommonInfoRow label="知识产权交易类型" :value="form.tradeType === '10'
|
|
|
- ? '转让'
|
|
|
- : form.tradeType === '20'
|
|
|
- ? '许可'
|
|
|
- : '-'
|
|
|
- " />
|
|
|
- </template>
|
|
|
+ <CommonInfoRow label="成果权属" :value="getDictLabel('achievement_owner_unit', form.achievementOwnerUnit)" />
|
|
|
+ <CommonInfoRow label="是否失效" :value="form.patentEffectiveness === '10' ? '是' : form.patentEffectiveness === '20' ? '否' : '-'" />
|
|
|
+ <CommonInfoRow label="是否职务专利" :value="form.patentOffice === '10' ? '是' : form.patentOffice === '20' ? '否' : '-'" />
|
|
|
+ <CommonInfoRow label="是否为PCT专利" :value="form.patentCt === '10' ? '是' : form.patentCt === '20' ? '否' : '-'" />
|
|
|
+ <CommonInfoRow label="专利附件" isColumn>
|
|
|
+ <view class="file-links">
|
|
|
+ <template v-if="patentFileList.length">
|
|
|
+ <view class="file-item" v-for="(item, index) in patentFileList" :key="'patent-' + index" @click="handlePreview(item)">
|
|
|
+ <text class="file-link">{{ item.name || item.fileName || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ </template>
|
|
|
+ <text v-else>-</text>
|
|
|
+ </view>
|
|
|
+ </CommonInfoRow>
|
|
|
+ <CommonInfoRow label="专利委托合同附件" isColumn>
|
|
|
+ <view class="file-links">
|
|
|
+ <template v-if="agencyContractFileList.length">
|
|
|
+ <view class="file-item" v-for="(item, index) in agencyContractFileList" :key="'agency-' + index" @click="handlePreview(item)">
|
|
|
+ <text class="file-link">{{ item.name || item.fileName || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ </template>
|
|
|
+ <text v-else>-</text>
|
|
|
+ </view>
|
|
|
+ </CommonInfoRow>
|
|
|
|
|
|
<CommonInfoRow label="专利简介" :value="form.patentDesc" isColumn />
|
|
|
</CommonSection>
|
|
|
|
|
|
+ <!-- 转化信息 -->
|
|
|
+ <CommonSection title="转化信息" v-if="['60', '70', '80'].includes(form.patentStatus)">
|
|
|
+ <CommonInfoRow label="转化时间" :value="formatDate(form.invertTime)" />
|
|
|
+ <CommonInfoRow label="转化金额" :value="form.invertAmount || '-'" isAmount />
|
|
|
+ <CommonInfoRow label="转化单位" :value="form.invertUnit || '-'" />
|
|
|
+ <CommonInfoRow label="知识产权交易类型" :value="form.tradeType === '10' ? '转让' : form.tradeType === '20' ? '许可' : '-'" />
|
|
|
+ <CommonInfoRow label="转化附件" isColumn>
|
|
|
+ <view class="file-links">
|
|
|
+ <template v-if="invertFileList.length">
|
|
|
+ <view class="file-item" v-for="(item, index) in invertFileList" :key="'invert-' + index" @click="handlePreview(item)">
|
|
|
+ <text class="file-link">{{ item.name || item.fileName || '-' }}</text>
|
|
|
+ </view>
|
|
|
+ </template>
|
|
|
+ <text v-else>-</text>
|
|
|
+ </view>
|
|
|
+ </CommonInfoRow>
|
|
|
+ </CommonSection>
|
|
|
+
|
|
|
<!-- 发明(设计)人信息 -->
|
|
|
<CommonSection title="发明(设计)人信息" v-if="form.memberList?.length">
|
|
|
<view class="member-list">
|
|
|
@@ -107,9 +129,6 @@
|
|
|
</view>
|
|
|
</CommonSection>
|
|
|
|
|
|
- <!-- 附件信息 -->
|
|
|
- <AttachmentList :list="mergedFileList" title="相关附件" />
|
|
|
-
|
|
|
<!-- 标注经济来源 -->
|
|
|
<CommonSection title="标注经济来源" v-if="form.projList?.length">
|
|
|
<view class="achievement-card" v-for="(row, index) in form.projList" :key="index">
|
|
|
@@ -127,12 +146,17 @@
|
|
|
</CommonSection>
|
|
|
|
|
|
<!-- 审批信息 -->
|
|
|
- <CommonSection title="审批信息" v-if="form.id">
|
|
|
+ <CommonSection title="审批信息">
|
|
|
<FlowTable :id="form.id" :businessCode="'学术专利-' + form.patentCode" defCode="sci_academic_achievement" />
|
|
|
</CommonSection>
|
|
|
|
|
|
+ <!-- 授权审核进度 -->
|
|
|
+ <CommonSection title="授权审核进度">
|
|
|
+ <FlowTable :id="form.id" :businessCode="'学术专利授权-' + form.patentCode" defCode="sci_academic_achievement_auth" />
|
|
|
+ </CommonSection>
|
|
|
+
|
|
|
<!-- 转化审批信息 -->
|
|
|
- <CommonSection title="转化审批信息" v-if="form.id && code.includes('专利转化')">
|
|
|
+ <CommonSection title="转化审批信息">
|
|
|
<FlowTable :id="form.id" :businessCode="'专利转化-' + form.patentCode" defCode="sci_academic_achievement" />
|
|
|
</CommonSection>
|
|
|
</template>
|
|
|
@@ -145,8 +169,8 @@ import { ref, onMounted, watch, computed } from "vue";
|
|
|
import { useDict } from "@/hooks/useDict";
|
|
|
import { useDocumentApi } from "@/api/document";
|
|
|
import { formatDate } from "@/utils/date";
|
|
|
+import { previewFile } from "@/utils/file";
|
|
|
import to from "await-to-js";
|
|
|
-import AttachmentList from "./AttachmentList.vue";
|
|
|
import FlowTable from "@/pages/project/components/detail/FlowTable.vue";
|
|
|
import CommonSection from "@/components/ui/CommonSection.vue";
|
|
|
import CommonInfoRow from "@/components/ui/CommonInfoRow.vue";
|
|
|
@@ -186,29 +210,27 @@ const platformList = computed(() => {
|
|
|
return [];
|
|
|
});
|
|
|
|
|
|
-const mergedFileList = computed(() => {
|
|
|
- if (!form.value) return [];
|
|
|
- const list: any[] = [];
|
|
|
- if (form.value.patentFile) {
|
|
|
- try {
|
|
|
- const file = JSON.parse(form.value.patentFile);
|
|
|
- list.push({ ...file, fileType: "专利附件" });
|
|
|
- } catch (e) { }
|
|
|
+const parseFileList = (fileStr: string) => {
|
|
|
+ if (!fileStr) return [];
|
|
|
+ try {
|
|
|
+ const files = JSON.parse(fileStr);
|
|
|
+ return Array.isArray(files) ? files : [files];
|
|
|
+ } catch (e) {
|
|
|
+ return [];
|
|
|
}
|
|
|
- if (form.value.agencyContractFile) {
|
|
|
- try {
|
|
|
- const file = JSON.parse(form.value.agencyContractFile);
|
|
|
- list.push({ ...file, fileType: "委托合同" });
|
|
|
- } catch (e) { }
|
|
|
- }
|
|
|
- if (form.value.invertUrl) {
|
|
|
- try {
|
|
|
- const file = JSON.parse(form.value.invertUrl);
|
|
|
- list.push({ ...file, fileType: "转化附件" });
|
|
|
- } catch (e) { }
|
|
|
+};
|
|
|
+
|
|
|
+const patentFileList = computed(() => parseFileList(form.value?.patentFile));
|
|
|
+const agencyContractFileList = computed(() => parseFileList(form.value?.agencyContractFile));
|
|
|
+const invertFileList = computed(() => parseFileList(form.value?.invertUrl));
|
|
|
+
|
|
|
+const handlePreview = (file: any) => {
|
|
|
+ const url = file.fileUrl || file.url;
|
|
|
+ const name = file.fileName || file.name;
|
|
|
+ if (url) {
|
|
|
+ previewFile(url, name);
|
|
|
}
|
|
|
- return list;
|
|
|
-});
|
|
|
+};
|
|
|
|
|
|
const fetchData = async () => {
|
|
|
if (!props.code) return;
|
|
|
@@ -380,4 +402,16 @@ const getMemberBadgeType = (type: string) => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.file-links {
|
|
|
+ .file-item {
|
|
|
+ padding: 6rpx 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .file-link {
|
|
|
+ color: #2979ff;
|
|
|
+ text-decoration: underline;
|
|
|
+ word-break: break-all;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|