Commit a72e36fc by liudx

公司详情页面

parent 880918b4
No preview for this file type
No preview for this file type
...@@ -23,7 +23,7 @@ export default { ...@@ -23,7 +23,7 @@ export default {
}, },
option: { option: {
type: Object, type: Object,
default:{} default: {},
}, },
}, },
computed: { computed: {
...@@ -69,7 +69,12 @@ export default { ...@@ -69,7 +69,12 @@ export default {
// }); // });
// }, // },
init() { init() {
if (document.getElementById(this.id) == null) {
return;
}
echarts.dispose(document.getElementById(this.id));
let chart = echarts.init(document.getElementById(this.id)); let chart = echarts.init(document.getElementById(this.id));
chart.setOption(this.option); chart.setOption(this.option);
// let that = this; // let that = this;
......
...@@ -19,6 +19,12 @@ export const enterpriseDetail = p => get('/api/enterprise/detail/'+p.id); ...@@ -19,6 +19,12 @@ export const enterpriseDetail = p => get('/api/enterprise/detail/'+p.id);
export const researchDevelop = p=>get('/api/enterprise/researchDevelop/'+p.id) export const researchDevelop = p=>get('/api/enterprise/researchDevelop/'+p.id)
//企业详情-》研发概要 研发可持续性 //企业详情-》研发概要 研发可持续性
export const sustainability = p=>get('/api/enterprise/sustainability/'+p.id) export const sustainability = p=>get('/api/enterprise/sustainability/'+p.id)
//企业详情-》研发概要 专利结构分析
export const structure = p=>get('/api/enterprise/structure/'+p.id)
//企业详情-技术合作 联合申请
export const jointApplication = p=>get('/api/enterprise/jointApplication/'+p.id)
//企业详情-技术合作 专利购买
export const patentPurchase = p=>get('/api/enterprise/patentPurchase/'+p.id)
......
...@@ -11,6 +11,7 @@ import { get, post,put } from './request' ...@@ -11,6 +11,7 @@ import { get, post,put } from './request'
export const sendSms = p => post('/api/common/sendSms',p); export const sendSms = p => post('/api/common/sendSms',p);
export const users = p => get('/api/backup/users?page='+p.page+'&size='+p.size); export const users = p => get('/api/backup/users?page='+p.page+'&size='+p.size);
export const changeStatus = p => put('/api/backup/users/'+p.id,{status:p.status}); export const changeStatus = p => put('/api/backup/users/'+p.id,{status:p.status});
export const addusers = p => post('/api/backup/users',p);
......
...@@ -7,34 +7,41 @@ ...@@ -7,34 +7,41 @@
</a-breadcrumb> </a-breadcrumb>
<div class="table"> <div class="table">
<a-button type="primary" size="large" @click="openModal"> <a-button type="primary" size="large" @click="openModal">
<img src="../../static/login/icon-add.png" alt="" class="img"> <img src="../../static/login/icon-add.png" alt="" class="img" />
新增 新增 </a-button
</a-button
>&nbsp; >&nbsp;
<a-button type="primary" size="large" danger @click="opendeleteModal"> <a-button type="primary" size="large" danger @click="opendeleteModal">
<img src="../../static/login/icon-delete.png" alt="" class="img"> <img src="../../static/login/icon-delete.png" alt="" class="img" />
删除</a-button> 删除</a-button
>
<br /><br /> <br /><br />
<a-table <a-table
:row-selection="rowSelection" :row-selection="rowSelection"
:columns="columns" :columns="columns"
:data-source="data" :data-source="data"
:rowKey="row=>{return row.id}" :rowKey="
(row) => {
return row.id;
}
"
> >
<template #bodyCell="{ column, text, record }"> <template #bodyCell="{ column, text, record }">
<template v-if="column.dataIndex === 'status'"> <template v-if="column.dataIndex === 'status'">
<div v-if="text" class="status"> <div v-if="text" class="status">
<span class="marker"></span> <span class="marker"></span>
已启用</div> 已启用
</div>
<div v-else class="status"> <div v-else class="status">
<span class="marker disabled"></span> <span class="marker disabled"></span>
已禁用</div> 已禁用
</div>
</template> </template>
<template v-if="column.dataIndex === 'action'"> <template v-if="column.dataIndex === 'action'">
<!-- <a @click="change(record)" danger v-if="text">禁用</a> <!-- <a @click="change(record)" danger v-if="text">禁用</a>
<a v-else>使用</a> --> <a v-else>使用</a> -->
<a-switch @click="change(record)" v-model:checked="status">禁用</a-switch> <a-switch @click="change(record)" v-model:checked="status"
></a-switch
>
</template> </template>
</template> </template>
</a-table> </a-table>
...@@ -42,7 +49,6 @@ ...@@ -42,7 +49,6 @@
</div> </div>
<a-modal <a-modal
v-model:visible="visible" v-model:visible="visible"
title="新增账号" title="新增账号"
@ok="add" @ok="add"
centered centered
...@@ -62,59 +68,60 @@ ...@@ -62,59 +68,60 @@
okText="确定" okText="确定"
@onCancel="closeModal" @onCancel="closeModal"
> >
<p>确定删除以下用户吗?</p> <p>确定删除以下用户吗?</p>
</a-modal> </a-modal>
</template> </template>
<script> <script>
// import { AES_Encrypt, AES_Decrypt } from "@/utils/aes_util.js"; // import { AES_Encrypt, AES_Decrypt } from "@/utils/aes_util.js";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { users, changeStatus } from "@/utils/loginAPI"; import { users, changeStatus,addusers } from "@/utils/loginAPI";
export default { export default {
name: "userInfo", name: "userInfo",
data() { data() {
return { return {
visible: false, visible: false,
visibleDelete:false, username:'',
visibleDelete: false,
columns: [ columns: [
{ {
title: "序号", title: "序号",
dataIndex: "id", dataIndex: "id",
align:'center' align: "center",
}, },
{ {
title: "姓名", title: "姓名",
dataIndex: "name", dataIndex: "name",
align:'center' align: "center",
}, },
{ {
title: "手机号", title: "手机号",
dataIndex: "phone", dataIndex: "phone",
align:'center' align: "center",
}, },
{ {
title: "账号名", title: "账号名",
dataIndex: "account_number", dataIndex: "account_number",
align:'center' align: "center",
}, },
{ {
title: "创建时间", title: "创建时间",
dataIndex: "create_time", dataIndex: "create_time",
align:'center' align: "center",
}, },
{ {
title: "状态", title: "状态",
dataIndex: "status", dataIndex: "status",
align:'center' align: "center",
}, },
{ {
title: "操作", title: "操作",
dataIndex: "action", dataIndex: "action",
align:'center' align: "center",
}, },
], ],
selectedRowKeys: [], selectedRowKeys: [],
data: [], data: [],
checked:true checked: true,
}; };
}, },
created() { created() {
...@@ -139,12 +146,12 @@ export default { ...@@ -139,12 +146,12 @@ export default {
mounted() {}, mounted() {},
methods: { methods: {
//调用删除用户接口 //调用删除用户接口
deleteUser(){ deleteUser() {
this.visibleDelete = false this.visibleDelete = false;
}, },
//打开删除用户弹窗 //打开删除用户弹窗
opendeleteModal(){ opendeleteModal() {
this.visibleDelete = true this.visibleDelete = true;
}, },
//打开新增用户弹窗 //打开新增用户弹窗
openModal() { openModal() {
...@@ -152,16 +159,28 @@ export default { ...@@ -152,16 +159,28 @@ export default {
}, },
closeModal() { closeModal() {
this.visible = false; this.visible = false;
this.visibleDelete = false this.visibleDelete = false;
},
add() {
addusers({account_number:this.username}).then(res=>{
if (res.code == 0) {
this.getList()
this.visible = false;
message.success(res.msg);
}else{
message.error(res.msg);
}
})
}, },
add() {},
//用户列表初始化 //用户列表初始化
init() { init() {
this.getList();
},
getList(page) {
users({ users({
page: 1, page: page||1,
size: 10, size: 10,
}).then((res) => { }).then((res) => {
console.log(res);
if (res.code == 0) { if (res.code == 0) {
this.data = res.data; this.data = res.data;
} else { } else {
...@@ -177,9 +196,12 @@ export default { ...@@ -177,9 +196,12 @@ export default {
//修改用户状态 //修改用户状态
change(record) { change(record) {
console.log(record); changeStatus({ id: record.id, status: !record.status }).then((res) => {
changeStatus({ id: record.id, status: record.status }).then((res) => { // console.log(res);
console.log(res); if (res.code == 0) {
this.getList()
message.success(res.msg);
}
}); });
}, },
}, },
...@@ -192,29 +214,29 @@ export default { ...@@ -192,29 +214,29 @@ export default {
width: calc(100% - 80px); width: calc(100% - 80px);
// text-align: center; // text-align: center;
flex: 1; flex: 1;
.img{ .img {
width: 15px; width: 15px;
height: 15px; height: 15px;
padding-right: 3px; padding-right: 3px;
} }
.marker{ .marker {
width: 12px; width: 12px;
height: 12px; height: 12px;
background-color: #00B42A; background-color: #00b42a;
border-radius: 50%; border-radius: 50%;
display: inline-block; display: inline-block;
} }
.disabled{ .disabled {
background-color: #ccc; background-color: #ccc;
} }
.nav_bread { .nav_bread {
height: 50px; height: 50px;
padding: 20px 3px; padding: 20px 3px;
background-color: #ebebeb; background-color: #ebebeb;
} }
:deep(.ant-switch-checked){ :deep(.ant-switch-checked) {
background-color: #00B42A; background-color: #00b42a;
} }
} }
</style> </style>
...@@ -67,10 +67,11 @@ ...@@ -67,10 +67,11 @@
<overview <overview
:developmentOverview="developmentOverview" :developmentOverview="developmentOverview"
:deveSustain="deveSustain" :deveSustain="deveSustain"
:structureData="structureData"
></overview> ></overview>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="技术合作" tab="技术合作"> <a-tab-pane key="技术合作" tab="技术合作">
<cooperation></cooperation> <cooperation :jointData="jointData" :patentPurchaseData="patentPurchaseData"></cooperation>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="科创能力评价" tab="科创能力评价"> <a-tab-pane key="科创能力评价" tab="科创能力评价">
<technology></technology> <technology></technology>
...@@ -102,15 +103,20 @@ ...@@ -102,15 +103,20 @@
</a-modal> </a-modal>
<div style="width: 70%"> <div style="width: 70%">
<EchartsCon <EchartsCon
:id="'applyTrend'" :id="'applyTrend1'"
:option="option1" :option="option1"
:style="'height:300px'" :style="'height:300px'"
></EchartsCon> ></EchartsCon>
<EchartsCon <EchartsCon
:id="'patentAuthorize'" :id="'patentAuthorize1'"
:option="option2" :option="option2"
:style="'height:300px;width:100%;'" :style="'height:300px;width:100%;'"
></EchartsCon> ></EchartsCon>
<EchartsCon :id="'echartsone1'" :option="option3"></EchartsCon>
<EchartsCon :id="'echartstwo1'" :option="option4"></EchartsCon>
<EchartsCon :id="'echartsthree1'" :option="option5"></EchartsCon>
<EchartsCon :option="option7" :id="'apply'"></EchartsCon>
<EchartsCon :option="option8" :id="'purchase'"></EchartsCon>
</div> </div>
</div> </div>
</template> </template>
...@@ -123,6 +129,9 @@ import { ...@@ -123,6 +129,9 @@ import {
exportword, exportword,
researchDevelop, researchDevelop,
sustainability, sustainability,
structure,
jointApplication,
patentPurchase,
} from "../../utils/indexApi.js"; } from "../../utils/indexApi.js";
import overview from "./overview.vue"; import overview from "./overview.vue";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
...@@ -159,6 +168,15 @@ export default { ...@@ -159,6 +168,15 @@ export default {
return { return {
id: "", id: "",
option1: {}, option1: {},
option2: {},
option3: {},
option4: {},
option5: {},
option6: {},
option7: {},
option8: {},
option9: {},
option10: {},
formState: { formState: {
email: "", email: "",
}, },
...@@ -167,8 +185,8 @@ export default { ...@@ -167,8 +185,8 @@ export default {
value: undefined, value: undefined,
activeKey: "企业概况", activeKey: "企业概况",
developmentOverview: null, developmentOverview: null,
deveSustain:null, deveSustain: null,
count: 161, count: 0,
follow: true, follow: true,
techArr: [ techArr: [
{ {
...@@ -189,6 +207,9 @@ export default { ...@@ -189,6 +207,9 @@ export default {
}, },
], ],
baseinfo: {}, baseinfo: {},
structureData: {},
jointData: {},
patentPurchaseData:{}
}; };
}, },
components: { components: {
...@@ -225,15 +246,56 @@ export default { ...@@ -225,15 +246,56 @@ export default {
message.error(res.msg); message.error(res.msg);
} }
}); });
//研发可持续性
sustainability({ id: id }).then((res) => { sustainability({ id: id }).then((res) => {
if (res.code == 0) { if (res.code == 0) {
this.deveSustain = res.data; this.deveSustain = res.data;
this.deveSustain.patent_authorization_rate =
(this.deveSustain.patent_authorization_rate * 100).toFixed(2) + "%";
this.getTrend(); this.getTrend();
this.getAuthorize(); this.getAuthorize();
} else { } else {
message.error(res.msg); message.error(res.msg);
} }
}); });
//专利结构
structure({ id: id }).then((res) => {
if (res.code == 0) {
this.structureData = res.data;
//专利结构占比的发明专利占比
this.structureData.invent_patent_percent =
(this.structureData.invent_patent_percent * 100).toFixed(2) + "%";
//专利结构占比的有效专利占比
this.structureData.valid_patent_percent =
(this.structureData.valid_patent_percent * 100).toFixed(2) + "%";
this.getPatentStructure();
} else {
message.error(res.msg);
}
});
//联合申请
jointApplication({ id: id }).then((res) => {
if (res.code == 0) {
this.jointData = res.data;
this.jointData.max_name_apply = this.jointData.max_name;
this.jointData.max_value_apply = this.jointData.max_value;
this.getOptions1();
} else {
message.error(res.msg);
}
});
//专利购买
patentPurchase({ id: id }).then((res) => {
if (res.code == 0) {
this.patentPurchaseData = res.data;
this.patentPurchaseData.max_name_purchase = this.patentPurchaseData.max_name;
this.patentPurchaseData.max_value_purchase = this.patentPurchaseData.max_value;
this.getOptions2()
} else {
message.error(res.msg);
}
});
}, },
//获取专利申请年份趋势 //获取专利申请年份趋势
getTrend() { getTrend() {
...@@ -250,7 +312,6 @@ export default { ...@@ -250,7 +312,6 @@ export default {
ydata2.push(item[1]); ydata2.push(item[1]);
}); });
this.deveSustain.utility.forEach((item) => { this.deveSustain.utility.forEach((item) => {
xdata.push(item[0]);
ydata3.push(item[1]); ydata3.push(item[1]);
}); });
maxdata = ydata1.map((elem, index) => elem + ydata2[index]); maxdata = ydata1.map((elem, index) => elem + ydata2[index]);
...@@ -512,8 +573,231 @@ export default { ...@@ -512,8 +573,231 @@ export default {
], ],
}; };
}, },
//获取专利结构分析
getPatentStructure() {
this.option3 = {
//你的代码
title: {
text: "专利类型分布图",
left: "43%",
bottom: "5%",
},
//color: colors,
tooltip: {
trigger: "item",
},
series: [
{
name: "专利类型分布图",
type: "pie",
radius: ["30%", "60%"],
center: ["50%", "40%"],
label: {
formatter: "{b}:\n{d}%", // 用来换行
},
data: this.structureData.patent_type,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
this.option4 = {
//你的代码
title: {
text: "专利状态分布图",
left: "43%",
bottom: "5%",
},
//color: colors,
tooltip: {
trigger: "item",
},
series: [
{
name: "专利状态分布图",
type: "pie",
radius: ["30%", "60%"],
center: ["50%", "40%"],
label: {
formatter: "{b}:\n{d}%", // 用来换行
},
data: this.structureData.patent_status,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
this.option5 = {
//你的代码
title: {
text: "有效专利分布图",
left: "43%",
bottom: "5%",
},
//color: colors,
tooltip: {
trigger: "item",
},
series: [
{
name: "有效专利分布图",
type: "pie",
radius: ["30%", "60%"],
center: ["50%", "40%"],
label: {
formatter: "{b}:\n{d}%", // 用来换行
},
data: this.structureData.valid_patent_type,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: "rgba(0, 0, 0, 0.5)",
},
},
},
],
};
},
//获取联合申请数据
getOptions1() {
let points = [
{
name: this.$route.query.name,
symbolSize: 40,
category: 0,
},
];
let links = [];
//添加数据
if (this.jointData.joint_application.length != 0) {
this.jointData.joint_application.forEach((item) => {
points.push({
name: item.name,
symbolSize: 40,
category: 1,
value: item.value,
});
links.push({
source: this.$route.query.name,
target: item.name,
value: item.value,
});
});
}
this.option7 = {
legend: {
show: true,
data: ["搜索的企业", "其他单位"],
},
series: [
{
type: "graph",
layout: "force",
force: {
repulsion: 1500,
edgeLength: 30,
},
roam: false,
label: {
show: true,
formatter: function (params) {
if (params.value) {
return params.name + "(" + params.value + ")"; // 显示节点的数值
} else {
return params.name;
}
},
},
data: points,
links: links,
lineStyle: {
normal: {
opacity: 0.9,
width: 5,
curveness: 0,
},
},
categories: [{ name: "搜索的企业" }, { name: "其他单位" }],
},
],
};
},
//获取专利购买数据
getOptions2() {
const dataList = this.patentPurchaseData.patent_purchase;
this.option8 = {
tooltip: {
show: false,
},
grid: {
top: "5%",
left: "3%",
right: "2%",
bottom: "1%",
containLabel: true,
},
xAxis: {
type: "value",
axisLabel: {
color: "#333",
},
splitLine: {
show: true,
lineStyle: {
},
},
},
yAxis: {
type: "category",
axisLabel: {
color: "#333",
},
axisLine: {
show: false,
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
data: dataList.map((r) => r.name),
},
series: [
{
name: "地市资源排行",
type: "bar",
// symbol: "path://M1 1,L140 1,L140 15,L1 15,Z",
// symbolKeepAspect: false,
// stack: "triangle",
barWidth: 16,
label: {
show: true,
position: "right",
// color: "#3EFFE8",
fontSize: 12,
formatter: "{c}",
},
data: dataList,
},
],
};
},
//导出.overview //导出.overview
daochu() { daochu() {
this.visible = false;
var that = this; var that = this;
let share_holders = that.baseinfo.share_holders; let share_holders = that.baseinfo.share_holders;
//对模板中股东信息进行修改 //对模板中股东信息进行修改
...@@ -535,15 +819,39 @@ export default { ...@@ -535,15 +819,39 @@ export default {
day = day < 10 ? "0" + day : day; day = day < 10 ? "0" + day : day;
var today = year + "年" + month + "月" + day + "日"; var today = year + "年" + month + "月" + day + "日";
var chartDom1 = document.getElementById("applyTrend"); var chartDom1 = document.getElementById("applyTrend1");
var chartDom2 = document.getElementById("patentAuthorize"); var chartDom2 = document.getElementById("patentAuthorize1");
var chartDom3 = document.getElementById("echartsone1");
var chartDom4 = document.getElementById("echartstwo1");
var chartDom5 = document.getElementById("echartsthree1");
// var chartDom6 = document.getElementById("");
var chartDom7 = document.getElementById("apply");
var chartDom8 = document.getElementById("purchase");
let myChart1 = null; let myChart1 = null;
let myChart2 = null; let myChart2 = null;
let myChart3 = null;
let myChart4 = null;
let myChart5 = null;
let myChart7 = null;
let myChart8 = null;
myChart1 = echarts.init(chartDom1); myChart1 = echarts.init(chartDom1);
myChart2 = echarts.init(chartDom2); myChart2 = echarts.init(chartDom2);
myChart3 = echarts.init(chartDom3);
myChart4 = echarts.init(chartDom4);
myChart5 = echarts.init(chartDom5);
myChart7 = echarts.init(chartDom7);
myChart8 = echarts.init(chartDom8);
// myChart2 = echarts.init(chartDom2);
// // 第一个echrts // // 第一个echrts
myChart1.setOption(this.option1); myChart1.setOption(this.option1);
myChart2.setOption(this.option2); myChart2.setOption(this.option2);
myChart3.setOption(this.option3);
myChart4.setOption(this.option4);
myChart5.setOption(this.option5);
myChart7.setOption(this.option7);
myChart8.setOption(this.option8);
setTimeout(() => { setTimeout(() => {
// 加setTimeout是为了让echarts渲染完成后生成图片 // 加setTimeout是为了让echarts渲染完成后生成图片
JSZipUtils.getBinaryContent("company.docx", function (error, content) { JSZipUtils.getBinaryContent("company.docx", function (error, content) {
...@@ -565,7 +873,7 @@ export default { ...@@ -565,7 +873,7 @@ export default {
if (tagValue.size && tagValue.data) { if (tagValue.size && tagValue.data) {
return tagValue.size; return tagValue.size;
} }
return [600, 300]; return [550, 200];
}; };
// 创建一个JSZip实例,内容为模板的内容 // 创建一个JSZip实例,内容为模板的内容
const zip = new PizZip(content); const zip = new PizZip(content);
...@@ -590,9 +898,12 @@ export default { ...@@ -590,9 +898,12 @@ export default {
company_finance, company_finance,
...that.developmentOverview, ...that.developmentOverview,
...that.deveSustain, ...that.deveSustain,
...that.structureData,
...that.jointData,
...that.patentPurchaseData,
today, today,
image1: myChart1.getDataURL({ image1: myChart1.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1 pixelRatio: 2, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色 backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表 excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg type: "png", //图片类型支持png和jpeg
...@@ -603,6 +914,42 @@ export default { ...@@ -603,6 +914,42 @@ export default {
excludeComponents: ["toolbox"], //忽略组件的列表 excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg type: "png", //图片类型支持png和jpeg
}), }),
image3: myChart3.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg
}),
image4: myChart4.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg
}),
image5: myChart5.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg
}),
// image5: myChart5.getDataURL({
// pixelRatio: 5, //导出的图片分辨率比率,默认是1
// backgroundColor: "#fff", //图表背景色
// excludeComponents: ["toolbox"], //忽略组件的列表
// type: "png", //图片类型支持png和jpeg
// }),
image7: myChart7.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg
}),
image8: myChart8.getDataURL({
pixelRatio: 5, //导出的图片分辨率比率,默认是1
backgroundColor: "#fff", //图表背景色
excludeComponents: ["toolbox"], //忽略组件的列表
type: "png", //图片类型支持png和jpeg
}),
}); });
try { try {
// 用模板变量的值替换所有模板变量 // 用模板变量的值替换所有模板变量
...@@ -620,7 +967,7 @@ export default { ...@@ -620,7 +967,7 @@ export default {
//formData文件流 //formData文件流
// that.blobToBase64(out); // that.blobToBase64(out);
// 将目标文件对象保存为目标类型的文件,并命名 // 将目标文件对象保存为目标类型的文件,并命名
saveAs(out, `公司详情报告.docx`); saveAs(out, `企业科创能力报告.docx`);
}); });
}, 1000); }, 1000);
}, },
......
...@@ -83,38 +83,22 @@ ...@@ -83,38 +83,22 @@
<!-- 股东信息 --> <!-- 股东信息 -->
<div class="company_con1" id="shareholder"> <div class="company_con1" id="shareholder">
<h2 class="title">股东信息</h2> <h2 class="title">股东信息</h2>
<a-tabs
v-model:activeKey="activeKey_shareholder"
style="background: #fff"
>
<!-- 工商登记表格 -->
<a-tab-pane key="工商登记" tab="工商登记">
<a-table
:columns="columns_shareholder"
:data-source="baseinfo.share_holders"
:pagination="pagination"
>
<template #bodyCell="{ column, text, record }">
<template v-if="column.dataIndex == 'amount'">
{{ Number(text) + "万元" }}
</template>
<template v-if="column.dataIndex == 'percent'">
{{ (text * 100).toFixed(2) + "%" }}
</template>
</template>
</a-table>
</a-tab-pane>
<a-tab-pane key="历史股东信息" tab="历史股东信息"> <!-- 工商登记表格 -->
<a-table <a-table
style="text-align: center" :columns="columns_shareholder"
:columns="columns_history" :data-source="baseinfo.share_holders"
:data-source="history_shareholder" :pagination="pagination"
:pagination="pagination" >
> <template #bodyCell="{ column, text, record }">
</a-table> <template v-if="column.dataIndex == 'amount'">
</a-tab-pane> {{ Number(text) + "万元" }}
</a-tabs> </template>
<template v-if="column.dataIndex == 'percent'">
{{ (text * 100).toFixed(2) + "%" }}
</template>
</template>
</a-table>
</div> </div>
<!-- 主要人员 --> <!-- 主要人员 -->
<div class="company_con1" id="keyPerson"> <div class="company_con1" id="keyPerson">
...@@ -138,11 +122,12 @@ ...@@ -138,11 +122,12 @@
</div> </div>
<!-- 融资经历 --> <!-- 融资经历 -->
<div class="company_con1" id=""> <div class="company_con1" id="financing">
<h2 class="title">融资经历</h2> <h2 class="title">融资经历</h2>
<a-table <a-table
:columns="columns_financing" :columns="columns_financing"
:data-source="baseinfo.company_finance" :data-source="baseinfo.company_finance"
:pagination="pagination"
> >
</a-table> </a-table>
</div> </div>
......
...@@ -6,7 +6,14 @@ ...@@ -6,7 +6,14 @@
<div class="company_con1" id="jointApplication"> <div class="company_con1" id="jointApplication">
<h2 class="title">联合申请</h2> <h2 class="title">联合申请</h2>
<p> <p>
在遇到技术创新难题时,企业往往会借助外部机构的研究优势和实力来共同研发解决。在某个技术领域企业的产学研合作次数越多,可以反映企业在该技术领域布局的意愿更强烈。同时,关注产学研合作的主要伙伴,可进一步分析企业在主要布局领域的技术依赖程度和权属纠纷可能性。该企业与其他公司、高校、研究所等机构共进行了6次产学研合作。其中,与山西凌志达煤业有限公司最为密切,合作次数为6次,与该企业合作次数最多的申请人如下图所示。 在遇到技术创新难题时,企业往往会借助外部机构的研究优势和实力来共同研发解决。在某个技术领域企业的产学研合作次数越多,可以反映企业在该技术领域布局的意愿更强烈。同时,关注产学研合作的主要伙伴,可进一步分析企业在主要布局领域的技术依赖程度和权属纠纷可能性。该企业与其他单位共进行了<span
class="color"
>{{ joint.all_nums }}</span
>次产学研合作。其中,与<span class="color">{{
joint.max_name_apply
}}</span
>最为密切,合作次数为<span class="color">{{ joint.max_value_apply }}</span
>次,与该企业合作次数最多的申请人如下图所示。
</p> </p>
<EchartsCon :option="option1" :id="'echarts1'"></EchartsCon> <EchartsCon :option="option1" :id="'echarts1'"></EchartsCon>
</div> </div>
...@@ -14,7 +21,13 @@ ...@@ -14,7 +21,13 @@
<div class="company_con1" id="PatentPurchase"> <div class="company_con1" id="PatentPurchase">
<h2 class="title">专利购买</h2> <h2 class="title">专利购买</h2>
<p> <p>
分析该企业专利购买历史,了解该企业向哪些专利权人购买了专利,以及购买了哪些专利。如果该企业购买专利数量较多,需要关注这些外购专利是否为企业的核心专利,进而分析企业的研发能力。该企业向山西凌志达煤业有限公司购买专利最多,为6件。 分析该企业专利购买历史,了解该企业向哪些专利权人购买了专利,以及购买了哪些专利。如果该企业购买专利数量较多,需要关注这些外购专利是否为企业的核心专利,进而分析企业的研发能力。该企业向<span
class="color"
>{{ patentPurchase.max_name_purchase }}</span
>购买专利最多,为<span class="color">{{
patentPurchase.max_value_purchase
}}</span
>件。
</p> </p>
<EchartsCon :option="option2" :id="'echarts2'"></EchartsCon> <EchartsCon :option="option2" :id="'echarts2'"></EchartsCon>
</div> </div>
...@@ -22,7 +35,7 @@ ...@@ -22,7 +35,7 @@
<div class="company_con_anchor"> <div class="company_con_anchor">
<a-anchor> <a-anchor>
<a-anchor-link <a-anchor-link
style="font-size: 20px; color: #1C1C28; font-weight: bold" style="font-size: 20px; color: #1c1c28; font-weight: bold"
title="技术合作" title="技术合作"
/> />
<a-anchor-link href="#jointApplication" title="联合申请" /> <a-anchor-link href="#jointApplication" title="联合申请" />
...@@ -32,7 +45,7 @@ ...@@ -32,7 +45,7 @@
<div id="components-back-top-demo-custom"> <div id="components-back-top-demo-custom">
<a-back-top> <a-back-top>
<div class="ant-back-top-inner"> <div class="ant-back-top-inner">
<img src="@/static/common/icon-top.png" alt=""> <img src="@/static/common/icon-top.png" alt="" />
回到顶部 回到顶部
</div> </div>
</a-back-top> </a-back-top>
...@@ -50,12 +63,24 @@ export default { ...@@ -50,12 +63,24 @@ export default {
data() { data() {
return { return {
option1: null, option1: null,
option2: null,
joint: {},
company_name: "",
}; };
}, },
props: {
jointData: Object,
patentPurchaseData: Object,
},
components: { components: {
EchartsCon, EchartsCon,
}, },
created() { created() {
this.joint = this.$props.jointData;
this.patentPurchase = this.$props.patentPurchaseData;
this.company_name = this.$route.query.name;
},
beforeMount() {
this.init(); this.init();
}, },
methods: { methods: {
...@@ -66,48 +91,33 @@ export default { ...@@ -66,48 +91,33 @@ export default {
getOptions1() { getOptions1() {
let points = [ let points = [
{ {
name: "山西煤炭进出口集团有限公司", name: this.company_name,
symbolSize: 40, symbolSize: 40,
category: 0, category: 0,
}, value: 0,
{
name: "企业1",
symbolSize: 40,
category: 1,
},
{
name: "院校1",
symbolSize: 40,
category: 2,
},
{
name: "院校2",
symbolSize: 40,
category: 2,
},
];
let links = [
{
source: "山西煤炭进出口集团有限公司",
target: "企业1",
},
{
source: "山西煤炭进出口集团有限公司",
target: "院校1",
},
{
source: "山西煤炭进出口集团有限公司",
target: "院校2",
}, },
]; ];
let links = [];
//添加数据
if (this.joint.joint_application.length != 0) {
this.joint.joint_application.forEach((item) => {
points.push({
name: item.name,
symbolSize: 40,
category: 1,
value: item.value,
});
links.push({
source: this.company_name,
target: item.name,
value: item.value,
});
});
}
this.option1 = { this.option1 = {
// animationDurationUpdate: 1500, legend: {
// animationEasingUpdate: "quinticInOut", show: true,
// color: ["#83e0ff", "#45f5ce", "#b158ff"], data: ["搜索的企业", "其他单位"],
legend:{
show:true,
data:['搜索的企业','企业','院校']
}, },
series: [ series: [
{ {
...@@ -117,10 +127,15 @@ export default { ...@@ -117,10 +127,15 @@ export default {
repulsion: 1500, repulsion: 1500,
edgeLength: 30, edgeLength: 30,
}, },
roam: true, roam: false,
label: { label: {
normal: { show: true,
show: true, formatter: function (params) {
if (params.value) {
return params.name + "(" + params.value + ")"; // 显示节点的数值
} else {
return params.name;
}
}, },
}, },
data: points, data: points,
...@@ -132,93 +147,71 @@ export default { ...@@ -132,93 +147,71 @@ export default {
curveness: 0, curveness: 0,
}, },
}, },
categories: [{ name: "搜索的企业" }, { name: "企业" }, { name: "院校" }], categories: [{ name: "搜索的企业" }, { name: "其他单位" }],
}, },
], ],
}; };
}, },
getOptions2(){ getOptions2() {
const dataList = [{ const dataList = this.patentPurchase.patent_purchase;
name: "Mon", this.option2 = {
value: 260, tooltip: {
}, show: false,
{ },
name: "Tue", grid: {
value: 220, top: "5%",
}, left: "3%",
{ right: "2%",
name: "Wed", bottom: "1%",
value: 200, containLabel: true,
}, },
{ xAxis: {
name: "Thu", type: "value",
value: 160, axisLabel: {
}, color: "#333",
{ },
name: "Fri", splitLine: {
value: 140,
},]
this.option2 = {
tooltip: {
show: false,
},
grid: {
top: "5%",
left: "3%",
right: "2%",
bottom: "1%",
containLabel: true,
},
xAxis: {
type: "value",
axisLabel: {
color: "#333",
},
splitLine: {
show: true,
lineStyle: {
// color: "rgba(21, 200, 221,0.2)",
},
},
},
yAxis: {
type: "category",
axisLabel: {
color: "#333",
},
axisLine: {
show: false,
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
data: dataList.map(r => r.name),
},
series: [
{
name: "地市资源排行",
type: "bar",
// symbol: "path://M1 1,L140 1,L140 15,L1 15,Z",
// symbolKeepAspect: false,
// stack: "triangle",
barWidth: 16,
label: {
show: true, show: true,
position: "right", lineStyle: {
// color: "#3EFFE8", },
fontSize: 12, },
formatter: "{c}", },
}, yAxis: {
data: dataList, type: "category",
}, axisLabel: {
color: "#333",
], },
}; axisLine: {
} show: false,
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
data: dataList.map((r) => r.name),
},
series: [
{
name: "地市资源排行",
type: "bar",
// symbol: "path://M1 1,L140 1,L140 15,L1 15,Z",
// symbolKeepAspect: false,
// stack: "triangle",
barWidth: 16,
label: {
show: true,
position: "right",
// color: "#3EFFE8",
fontSize: 12,
formatter: "{c}",
},
data: dataList,
},
],
};
},
}, },
}; };
</script> </script>
...@@ -230,6 +223,9 @@ this.option2 = { ...@@ -230,6 +223,9 @@ this.option2 = {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
background-color: #f3f3f6; background-color: #f3f3f6;
.color {
color: #53a7f0;
}
.company_con_left { .company_con_left {
.company_con1 { .company_con1 {
width: 1400px; width: 1400px;
...@@ -267,23 +263,23 @@ this.option2 = { ...@@ -267,23 +263,23 @@ this.option2 = {
.company_con_anchor { .company_con_anchor {
margin-top: 15px; margin-top: 15px;
font-weight: bold; font-weight: bold;
color: #1C1C28; color: #1c1c28;
:deep(.ant-anchor-link-title) { :deep(.ant-anchor-link-title) {
color: #1C1C28; color: #1c1c28;
margin-bottom: 15px; margin-bottom: 15px;
} }
:deep(.ant-anchor-link-active > .ant-anchor-link-title) { :deep(.ant-anchor-link-active > .ant-anchor-link-title) {
color: #1890ff; color: #1890ff;
} }
:deep(.ant-anchor-ink::before){ :deep(.ant-anchor-ink::before) {
width: 8px; width: 8px;
background-color: #F5F5F5; background-color: #f5f5f5;
} }
:deep(.ant-anchor-wrapper) { :deep(.ant-anchor-wrapper) {
background-color: #fff; background-color: #fff;
padding-left: 10px; padding-left: 10px;
color: #1C1C28; color: #1c1c28;
height: 350px; height: 350px;
margin-left: 10px; margin-left: 10px;
padding: 30px 15px 0; padding: 30px 15px 0;
......
...@@ -27,12 +27,7 @@ ...@@ -27,12 +27,7 @@
<div class="company_con"> <div class="company_con">
<div class="company_con_left"> <div class="company_con_left">
<h3>筛选器</h3> <h3>筛选器</h3>
<a-form <a-form :layout="'vertical'" :model="formState">
:layout="'vertical'"
:model="formState"
validateTrigger="change"
:ref="form"
>
<a-form-item label="区域"> <a-form-item label="区域">
<a-cascader <a-cascader
v-model:value="valueArea" v-model:value="valueArea"
...@@ -57,7 +52,7 @@ ...@@ -57,7 +52,7 @@
placeholder="请选择" placeholder="请选择"
></a-select> ></a-select>
</a-form-item> </a-form-item>
<a-form-item name="range-picker" label="注册时间"> <a-form-item label="注册时间">
<a-config-provider :locale="zh_CN"> <a-config-provider :locale="zh_CN">
<a-range-picker <a-range-picker
v-model:value="formState['rangetime1']" v-model:value="formState['rangetime1']"
...@@ -68,7 +63,7 @@ ...@@ -68,7 +63,7 @@
<a-row><label for="">注册资本</label></a-row> <a-row><label for="">注册资本</label></a-row>
<a-row> <a-row>
<a-col :span="11"> <a-col :span="11">
<a-form-item name="minvalue" :rules="minvalueRules"> <a-form-item name="capital_nums_min">
<a-input <a-input
v-model="formState.capital_nums_min" v-model="formState.capital_nums_min"
style="width: 95%" style="width: 95%"
...@@ -78,7 +73,7 @@ ...@@ -78,7 +73,7 @@
</a-col> </a-col>
<a-col :span="1">-</a-col> <a-col :span="1">-</a-col>
<a-col :span="11"> <a-col :span="11">
<a-form-item name="maxvalue" :rules="maxvalueRules"> <a-form-item name="capital_nums_max">
<a-input <a-input
v-model="formState.capital_nums_max" v-model="formState.capital_nums_max"
style="width: 95%" style="width: 95%"
...@@ -130,7 +125,7 @@ ...@@ -130,7 +125,7 @@
class="card" class="card"
v-for="item in companylist" v-for="item in companylist"
:key="item" :key="item"
@click="openCompany(item.mysql_id)" @click="openCompany(item.mysql_id,item.company_name)"
> >
<div class="card_title">{{ item.company_name }}</div> <div class="card_title">{{ item.company_name }}</div>
<!-- 关注 --> <!-- 关注 -->
...@@ -204,7 +199,6 @@ import { ...@@ -204,7 +199,6 @@ import {
enterpriseList, enterpriseList,
industryType, industryType,
enterpriseSelect, enterpriseSelect,
} from "../../utils/indexApi.js"; } from "../../utils/indexApi.js";
import "dayjs/locale/zh-cn"; import "dayjs/locale/zh-cn";
import zh_CN from "ant-design-vue/lib/locale-provider/zh_CN"; import zh_CN from "ant-design-vue/lib/locale-provider/zh_CN";
...@@ -241,27 +235,10 @@ export default { ...@@ -241,27 +235,10 @@ export default {
}, },
filter: [], filter: [],
companylist: [], companylist: [],
minvalueRules: [
{ required: true, message: "请输入ghj", trigger: "blur" },
{ type: "number", message: "年龄必须是一个数值", trigger: "blur" },
{
min: 18,
max: 60,
message: "年龄必须介于18到60之间",
trigger: "blur",
},
],
}; };
}, },
components: {}, components: {},
methods: { methods: {
validateUsername() {
if (value !== "admin") {
callback(new Error("用户名必须是 admin"));
} else {
callback();
}
},
//获取企业列表 //获取企业列表
getCompanyList(keyword) { getCompanyList(keyword) {
let params = { let params = {
...@@ -428,11 +405,12 @@ export default { ...@@ -428,11 +405,12 @@ export default {
}); });
}, },
//打开企业详情 //打开企业详情
openCompany(id) { openCompany(id,company_name) {
this.$router.push({ this.$router.push({
path: "/companyDetails", path: "/companyDetails",
query: { query: {
id: id, id: id,
name:company_name
}, },
}); });
}, },
......
...@@ -32,18 +32,18 @@ ...@@ -32,18 +32,18 @@
<h2 class="title">研发可持续性</h2> <h2 class="title">研发可持续性</h2>
<p> <p>
企业的总专利申请量为<span class="color">{{ 企业的总专利申请量为<span class="color">{{
deveSustain.patent_application_num deveSustainData.patent_application_num
}}</span }}</span
>件,最早专利申请是<span class="color"> >件,最早专利申请是<span class="color">
{{ deveSustain.earliest_patent_application_year }} </span {{ deveSustainData.earliest_patent_application_year }} </span
>年,企业在<span class="color">{{ >年,企业在<span class="color">{{
deveSustain.most_patent_application_year deveSustainData.most_patent_application_year
}}</span }}</span
>年的专利申请量最多,为<span class="color">{{ >年的专利申请量最多,为<span class="color">{{
deveSustain.most_patent_application_num deveSustainData.most_patent_application_num
}}</span }}</span
>件且专利授权率为<span class="color">{{ >件且专利授权率为<span class="color">{{
deveSustain.patent_authorization_rate deveSustainData.patent_authorization_rate
}}</span }}</span
> >
</p> </p>
...@@ -68,7 +68,14 @@ ...@@ -68,7 +68,14 @@
<div class="company_con1" id="PatentAnalysis"> <div class="company_con1" id="PatentAnalysis">
<h2 class="title">专利结构分析</h2> <h2 class="title">专利结构分析</h2>
<p> <p>
专利结构可从专利类型以及专利基本法律状态两个方面进行分析。从专利类型来看,一般在评估专利技术质量时,普遍认为发明>实用新型>外观。因此,关注发明专利的占比高低,可以帮助了解企业历史研发的技术质量水平。从专利基本法律状态来看,关注失效专利的占比,可以帮助了解企业当前持有技术的质量水平。该企业的专利数量为7件,其中发明专利4件,占比57.14%;有效专利4件,占比57.14%。 专利结构可从专利类型以及专利基本法律状态两个方面进行分析。从专利类型来看,一般在评估专利技术质量时,普遍认为发明>实用新型>外观。因此,关注发明专利的占比高低,可以帮助了解企业历史研发的技术质量水平。从专利基本法律状态来看,关注失效专利的占比,可以帮助了解企业当前持有技术的质量水平。该企业的专利数量为<span
class="color"
>{{ devstructureData.patent_application_num }}</span
>件,其中发明专利<span class="color">{{ devstructureData.invent_patent_num }}</span
>件,占比<span class="color">{{ devstructureData.invent_patent_percent }}</span
>;有效专利<span class="color">{{ devstructureData.valid_patent_num }}</span
>件,占比<span class="color">{{ devstructureData.valid_patent_percent }}</span
>
</p> </p>
<div class="ecahrsThree"> <div class="ecahrsThree">
<EchartsCon <EchartsCon
...@@ -138,11 +145,13 @@ export default { ...@@ -138,11 +145,13 @@ export default {
props: { props: {
developmentOverview: Object, developmentOverview: Object,
deveSustain: Object, deveSustain: Object,
structureData: Object,
}, },
data() { data() {
return { return {
tabchange: "1", tabchange: "1",
deveSustain: null, deveSustainData: null,
devstructureData:null,
}; };
}, },
...@@ -163,15 +172,14 @@ export default { ...@@ -163,15 +172,14 @@ export default {
ydata2 = [], ydata2 = [],
ydata3 = [], ydata3 = [],
maxdata = []; maxdata = [];
this.deveSustain.invent.forEach((item) => { this.deveSustainData.invent.forEach((item) => {
xdata.push(item[0]); xdata.push(item[0]);
ydata1.push(item[1]); ydata1.push(item[1]);
}); });
this.deveSustain.appearance.forEach((item) => { this.deveSustainData.appearance.forEach((item) => {
ydata2.push(item[1]); ydata2.push(item[1]);
}); });
this.deveSustain.utility.forEach((item) => { this.deveSustainData.utility.forEach((item) => {
xdata.push(item[0]);
ydata3.push(item[1]); ydata3.push(item[1]);
}); });
this.option1 = { this.option1 = {
...@@ -290,11 +298,11 @@ export default { ...@@ -290,11 +298,11 @@ export default {
ydata1 = [], ydata1 = [],
ydata2 = [], ydata2 = [],
ydata3 = []; ydata3 = [];
this.deveSustain.old_patent_authorization.forEach((item) => { this.deveSustainData.old_patent_authorization.forEach((item) => {
xdata.push(item[0]); xdata.push(item[0]);
ydata1.push(item[1]); ydata1.push(item[1]);
}); });
this.deveSustain.old_patent_application.forEach((item) => { this.deveSustainData.old_patent_application.forEach((item) => {
ydata2.push(item[1]); ydata2.push(item[1]);
}); });
ydata3 = ydata1.map((elem, index) => ydata3 = ydata1.map((elem, index) =>
...@@ -451,10 +459,7 @@ export default { ...@@ -451,10 +459,7 @@ export default {
label: { label: {
formatter: "{b}:\n{d}%", // 用来换行 formatter: "{b}:\n{d}%", // 用来换行
}, },
data: [ data: this.devstructureData.patent_type,
{ value: 6, name: "实用新型" },
{ value: 10, name: "发明" },
],
emphasis: { emphasis: {
itemStyle: { itemStyle: {
shadowBlur: 10, shadowBlur: 10,
...@@ -485,10 +490,7 @@ export default { ...@@ -485,10 +490,7 @@ export default {
label: { label: {
formatter: "{b}:\n{d}%", // 用来换行 formatter: "{b}:\n{d}%", // 用来换行
}, },
data: [ data: this.devstructureData.patent_status,
{ value: 6, name: "审中" },
{ value: 10, name: "有效" },
],
emphasis: { emphasis: {
itemStyle: { itemStyle: {
shadowBlur: 10, shadowBlur: 10,
...@@ -519,10 +521,7 @@ export default { ...@@ -519,10 +521,7 @@ export default {
label: { label: {
formatter: "{b}:\n{d}%", // 用来换行 formatter: "{b}:\n{d}%", // 用来换行
}, },
data: [ data: this.devstructureData.valid_patent_type,
{ value: 6, name: "实用新型" },
{ value: 10, name: "发明" },
],
emphasis: { emphasis: {
itemStyle: { itemStyle: {
shadowBlur: 10, shadowBlur: 10,
...@@ -557,9 +556,17 @@ export default { ...@@ -557,9 +556,17 @@ export default {
}, },
}, },
created() { created() {
this.deveSustain = this.$props.deveSustain; this.deveSustainData = this.$props.deveSustain;
this.deveSustain.patent_authorization_rate = this.devstructureData = this.$props.structureData;
(this.deveSustain.patent_authorization_rate * 100).toFixed(2) + "%";
// this.deveSustain.patent_authorization_rate =
// (this.deveSustain.patent_authorization_rate * 100).toFixed(2) + "%";
// //专利结构占比的发明专利占比
// this.structureData.invent_patent_percent =
// (this.structureData.invent_patent_percent * 100).toFixed(2) + "%";
// //专利结构占比的有效专利占比
// this.structureData.valid_patent_percent =
// (this.structureData.valid_patent_percent * 100).toFixed(2) + "%";
}, },
}; };
</script> </script>
......
...@@ -6,25 +6,45 @@ ...@@ -6,25 +6,45 @@
<div class="company_con1" id="Ability"> <div class="company_con1" id="Ability">
<h2 class="title">科创能力分析</h2> <h2 class="title">科创能力分析</h2>
<div style="display: flex; position: relative"> <div style="display: flex; position: relative">
<!-- <EchartsCon <EchartsCon
:option="option1" :option="option1"
:id="'echartsraodar'" :id="'echartsraodar'"
class="echarts" class="echarts"
></EchartsCon> --> ></EchartsCon>
<div <!-- <div
id="echartsraodar" id="echartsraodar"
class="echarts" class="echarts"
style="width: 100%; height: 300px" style="width: 100%; height: 300px"
></div> ></div> -->
<div <!-- <div
class="hover" class="hover"
v-if="hover" v-if="hover"
ref="hover" ref="hover"
:style="{ left: left, top: top }" :style="{ left: left, top: top }"
> >
{{ con }} {{ con }}
</div> -->
<div style="width: 50%; position: relative">
<EchartsCon :option="option2" :id="'echartsscatter'"></EchartsCon>
<a-popover title="科创能力分析指标">
<template #content>
<p>
<div><strong>公司竞争力:</strong></div>
<div>从公司资质类别、公司规模、对外投资和公司融资分析</div>
</p>
<p>
<div><strong>技术质量:</strong></div>
<div>从有效专利占专利申请总量比例、有效发明专利占有效专利比例和风险专利占全部申请专利的比例分析</div>
</p>
<p>
<div><strong>技术体量:</strong></div>
<div>从专利申请总量、有效专利总量和近3年专利申请增速分析</div>
</p>
</template>
<div class="hover">指标说明</div>
</a-popover>
</div> </div>
<EchartsCon :option="option2" :id="'echartsscatter'"></EchartsCon>
</div> </div>
</div> </div>
</div> </div>
...@@ -74,53 +94,74 @@ export default { ...@@ -74,53 +94,74 @@ export default {
}, },
methods: { methods: {
getOption1() { getOption1() {
let chart = echarts.init(document.getElementById("echartsraodar")); let chart = echarts.init(document.getElementById("echartsraodar"));
let option1 = { let option1 = {
// tooltip: { tooltip: {
// trigger: "item", trigger: "item",
// show: !this.hover, // formatter: function (params) {
// }, // console.log(params);
// },
},
radar: [ radar: [
{ {
indicator: [ indicator: [
{ text: "公司竞争力", max: 100 }, { text: "公司竞争力", max: 30 },
{ text: "技术质量", max: 100 }, { text: "技术质量", max: 30 },
{ text: "技术体量", max: 100 }, { text: "技术体量", max: 40 },
], ],
center: ["50%", "50%"], center: ["50%", "50%"],
radius: 120, radius: 120,
triggerEvent: true, triggerEvent: true,
}, },
{
indicator: [
{ text: "公司竞争力", max: 30 },
{ text: "技术质量", max: 30 },
{ text: "技术体量", max: 40 },
],
center: ["50%", "50%"],
radius: 120,
},
], ],
series: [ series: [
{ {
type: "radar", type: "radar",
radarIndex: 0, radarIndex: 0,
data: [
{
value: [20, 10, 25],
name: "均值",
areaStyle: { areaStyle: {
color: "#73A3F2", color: "#F7B46A",
}, },
lineStyle: { lineStyle: {
color: "#0263FF", color: "#F7B46A",
}, },
itemStyle: { itemStyle: {
color: "#0263FF", color: "#F7B46A",
}, },
},
],
},
{
type: "radar",
radarIndex: 0,
data: [ data: [
{ {
value: [50, 93, 50], value: [10, 20, 10],
name: "分值", name: "科创能力分值",
areaStyle: { areaStyle: {
color: "#73A3F2", color: "#5A95F7",
}, },
lineStyle: { lineStyle: {
color: "#0263FF", color: "#5A95F7",
}, },
itemStyle: { itemStyle: {
color: "#0263FF", color: "#5A95F7",
}, },
}, },
], ],
...@@ -129,52 +170,50 @@ export default { ...@@ -129,52 +170,50 @@ export default {
}; };
chart.setOption(option1); chart.setOption(option1);
//在name上移动 //在name上移动
let that = this; // let that = this;
chart.on("mousemove", function (params) { // chart.on("mousemove", function (params) {
that.hover = true; // that.hover = true;
if (params.name == "技术质量") { // if (params.name == "技术质量") {
that.$nextTick(() => { // that.$nextTick(() => {
that.$refs.hover.style.left = params.event.offsetX + "px"; // that.$refs.hover.style.left = params.event.offsetX + "px";
that.$refs.hover.style.top = params.event.offsetY + "px"; // that.$refs.hover.style.top = params.event.offsetY + "px";
}); // });
that.con = // that.con =
"从有效专利占专利申请总量比例、有效发明专利占有效专利比例和风险专利占全部申请专利的比例分析"; // "从有效专利占专利申请总量比例、有效发明专利占有效专利比例和风险专利占全部申请专利的比例分析";
} else if (params.name == "公司竞争力") { // } else if (params.name == "公司竞争力") {
that.$nextTick(() => { // that.$nextTick(() => {
that.$refs.hover.style.left = params.event.offsetX + "px"; // that.$refs.hover.style.left = params.event.offsetX + "px";
that.$refs.hover.style.top = params.event.offsetY + "px"; // that.$refs.hover.style.top = params.event.offsetY + "px";
}); // });
that.con = "从公司资质类别、公司规模、对外投资和公司融资分析"; // that.con = "从公司资质类别、公司规模、对外投资和公司融资分析";
} else if (params.name == "技术体量") { // } else if (params.name == "技术体量") {
that.$nextTick(() => { // that.$nextTick(() => {
that.$refs.hover.style.left = params.event.offsetX + "px"; // that.$refs.hover.style.left = params.event.offsetX + "px";
that.$refs.hover.style.top = params.event.offsetY + "px"; // that.$refs.hover.style.top = params.event.offsetY + "px";
}); // });
that.con = "从专利申请总量、有效专利总量和近3年专利申请增速分析"; // that.con = "从专利申请总量、有效专利总量和近3年专利申请增速分析";
} else { // } else {
that.hover = false; // that.hover = false;
} // }
}); // });
chart.on("mouseout", function (params) { // chart.on("mouseout", function (params) {
// that.hover = false;
that.hover = false; // });
});
}, },
getOption2() { getOption2() {
var data = [ var data = [
{ {
name: "技术体量", name: "技术体量",
value: 52, value: 30,
}, },
{ {
name: "技术质量", name: "技术质量",
value: 41, value: 30,
}, },
{ {
name: "公司竞争力", name: "公司竞争力",
value: 70, value: 30,
}, },
]; //已排序好的数组 ]; //已排序好的数组
...@@ -188,114 +227,32 @@ export default { ...@@ -188,114 +227,32 @@ export default {
} }
this.option2 = { this.option2 = {
grid: { tooltip: {
left: "11%", formatter: "{a} <br/>{b} : {c}%",
top: "5%",
right: "10%",
bottom: "15%",
containLabel: true,
}, },
xAxis: [
{
show: true,
axisLabel: {
formatter: "{value}%",
},
},
],
legend: {
show: true,
data: ["均值", "公司"],
bottom: "0%",
},
yAxis: [
{
axisTick: "none",
axisLine: "none",
offset: "10",
axisLabel: {
textStyle: {
color: "#666",
fontSize: "12",
},
},
data: ydata,
},
{
axisLine: {
lineStyle: {
color: "#fff",
},
},
data: [],
},
],
series: [ series: [
{ {
name: "条", name: "Pressure",
type: "bar", startAngle: 180,
stack: "圆", endAngle: 0,
yAxisIndex: 0, min: 0,
data: data, max: 100,
barWidth: 8, radius: "160",
itemStyle: { center: ["50%", "60%"],
normal: { type: "gauge",
color: "#eee", progress: {
barBorderRadius: 5, show: true,
},
}, },
z: 2, detail: {
}, valueAnimation: true,
{ formatter: "{value}",
name: "均值",
type: "scatter",
stack: "圆",
yAxisIndex: 0,
data: [0, 0, 0],
label: false,
symbolSize: 12,
itemStyle: {
normal: {
borderColor: "#FE8700",
borderWidth: 4,
color: "#fff",
opacity: 1,
},
},
z: 2,
},
{
name: "公司",
type: "scatter",
stack: "圆",
yAxisIndex: 0,
data: [10, 10, 10],
label: false,
symbolSize: 12,
itemStyle: {
normal: {
borderColor: "#0263FF",
borderWidth: 4,
color: "#fff",
opacity: 1,
},
}, },
// z: 2 data: [
}, {
{ value: 50,
name: "白框", name: "总分",
type: "bar",
yAxisIndex: 1,
barGap: "-100%",
data: [100, 100, 100],
barWidth: 6,
itemStyle: {
normal: {
color: "#eee",
barBorderRadius: 5,
}, },
}, ],
z: 0,
}, },
], ],
}; };
...@@ -333,15 +290,10 @@ export default { ...@@ -333,15 +290,10 @@ export default {
} }
.hover { .hover {
position: absolute; position: absolute;
z-index: 999999; left: 50%;
// left: 0; transform: translateX(-50%);
width: 320px; bottom: 5%;
// height: 76px; color: #1890ff;
background: #ffffff;
box-shadow: 0px 0px 12px 1px rgba(0, 0, 0, 0.16);
border-radius: 8px 8px 8px 8px;
opacity: 1;
padding: 10px;
} }
} }
} }
......
...@@ -261,23 +261,27 @@ export default { ...@@ -261,23 +261,27 @@ export default {
background: url("../../static/home/index/icon-czl-normal.png") background: url("../../static/home/index/icon-czl-normal.png")
no-repeat; no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
cursor: pointer;
} }
.patent_active { .patent_active {
background: url("../../static/home/index/icon-czl-select.png") background: url("../../static/home/index/icon-czl-select.png")
no-repeat; no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
color: #fff; color: #fff;
cursor: pointer;
} }
.company { .company {
background: url("../../static/home/index/icon-cqy-normal.png") background: url("../../static/home/index/icon-cqy-normal.png")
no-repeat; no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
cursor: pointer;
} }
.company_active { .company_active {
background: url("../../static/home/index/icon-cqy-select.png") background: url("../../static/home/index/icon-cqy-select.png")
no-repeat; no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
color: #fff; color: #fff;
cursor: pointer;
} }
} }
.search { .search {
......
...@@ -110,7 +110,7 @@ export default { ...@@ -110,7 +110,7 @@ export default {
formState: { formState: {
username: "", username: "",
password: "", password: "",
remember: true, remember: false,
}, },
}; };
}, },
......
...@@ -34,9 +34,8 @@ ...@@ -34,9 +34,8 @@
ref="form" ref="form"
:rules="formRules" :rules="formRules"
> >
<a-form-item <a-form-item name="phone">
name="phone" <!-- :rules="[
:rules="[
{ required: true, message: '请输入手机号!' }, { required: true, message: '请输入手机号!' },
{ {
pattern: pattern:
...@@ -44,8 +43,7 @@ ...@@ -44,8 +43,7 @@
message: '手机号格式不正确!', message: '手机号格式不正确!',
validateTrigger: 'onBlur', validateTrigger: 'onBlur',
}, },
]" ]" -->
>
<a-input v-model:value="formState.phone" placeholder="请输入手机号"> <a-input v-model:value="formState.phone" placeholder="请输入手机号">
<template #prefix> <template #prefix>
<img src="../../static/login/icon-user.png" alt="" /> <img src="../../static/login/icon-user.png" alt="" />
...@@ -53,10 +51,8 @@ ...@@ -53,10 +51,8 @@
</a-input> </a-input>
</a-form-item> </a-form-item>
<a-form-item <a-form-item name="code">
name="code" <!-- :rules="[{ required: true, message: '请输入验证码!' }]" -->
:rules="[{ required: true, message: '请输入验证码!' }]"
>
<a-input v-model:value="formState.code" placeholder="请输入验证码"> <a-input v-model:value="formState.code" placeholder="请输入验证码">
<template #prefix> <template #prefix>
<img src="../../static/login/icon-yzm.png" alt="" /> <img src="../../static/login/icon-yzm.png" alt="" />
...@@ -74,8 +70,9 @@ ...@@ -74,8 +70,9 @@
</a-form-item> </a-form-item>
<a-form-item <a-form-item
name="password" name="password"
:rules="[{ required: true, message: '请输入密码!' }]"
> >
<!-- :rules="[{ required: true, message: '请输入密码!' }]" -->
<a-input-password <a-input-password
v-model:value="formState.password" v-model:value="formState.password"
placeholder="请输入新密码" placeholder="请输入新密码"
...@@ -85,10 +82,7 @@ ...@@ -85,10 +82,7 @@
</template> </template>
</a-input-password> </a-input-password>
</a-form-item> </a-form-item>
<a-form-item <a-form-item name="repassword">
name="password"
:rules="[{ required: true, message: '请输入密码!' }]"
>
<a-input-password <a-input-password
v-model:value="formState.repassword" v-model:value="formState.repassword"
placeholder="请再次输入新密码" placeholder="请再次输入新密码"
...@@ -187,7 +181,7 @@ export default { ...@@ -187,7 +181,7 @@ export default {
//验证两次密码 //验证两次密码
validateConfirmPassword(rule, value) { validateConfirmPassword(rule, value) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (value && value !== this.formState.newpwd) { if (value && value !== this.formState.password) {
reject(new Error()); reject(new Error());
} else { } else {
resolve(); resolve();
......
...@@ -279,8 +279,7 @@ ...@@ -279,8 +279,7 @@
okText="确定" okText="确定"
@onCancel="closeModal" @onCancel="closeModal"
> >
<p>请选择报告格式,请稍后在历史记录里查看</p> <p>报告格式&nbsp;&nbsp;&nbsp;PDF</p>
<p>报告格式&nbsp;&nbsp;&nbsp;<span class="PDF">PDF</span></p>
<a-form :model="formState"> <a-form :model="formState">
<a-form-item <a-form-item
:name="'email'" :name="'email'"
...@@ -531,9 +530,9 @@ export default { ...@@ -531,9 +530,9 @@ export default {
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
}); });
//formData文件流 //formData文件流
that.blobToBase64(out); // that.blobToBase64(out);
// 将目标文件对象保存为目标类型的文件,并命名 // 将目标文件对象保存为目标类型的文件,并命名
// saveAs(out, `专利详情报告.word`); saveAs(out, `专利成果转移转化智能推荐报告.docx`);
}); });
}, 1000); }, 1000);
}, },
...@@ -541,11 +540,11 @@ export default { ...@@ -541,11 +540,11 @@ export default {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const fileReader = new FileReader(); const fileReader = new FileReader();
fileReader.onload = (e) => { fileReader.onload = (e) => {
console.log(e.target.result) console.log(e.target.result);
// resolve(e.target.result); // resolve(e.target.result);
setTimeout(function () { setTimeout(function () {
exportword({ file: e.target.result }).then((res) => {}); exportword({ file: e.target.result }).then((res) => {});
},300); }, 300);
}; };
// readAsDataURL // readAsDataURL
fileReader.readAsDataURL(blob); fileReader.readAsDataURL(blob);
......
...@@ -156,7 +156,8 @@ export default { ...@@ -156,7 +156,8 @@ export default {
changePassword({ param }).then((res) => { changePassword({ param }).then((res) => {
// console.log(res) // console.log(res)
if (res.code == 0) { if (res.code == 0) {
this.resetShow = true; message.success(res.msg)
// this.resetShow = true;
} else { } else {
message.error(res.msg); message.error(res.msg);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment