Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
ty_patentSys
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hanxiao
ty_patentSys
Commits
a72e36fc
Commit
a72e36fc
authored
Jul 27, 2023
by
liudx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
公司详情页面
parent
880918b4
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
770 additions
and
473 deletions
+770
-473
public/company.docx
+0
-0
public/patent.docx
+0
-0
src/components/EchartsCon.vue
+6
-1
src/utils/indexApi.js
+6
-0
src/utils/loginAPI.js
+1
-0
src/views/adminset/userInfo.vue
+64
-42
src/views/company/companyDetails.vue
+358
-11
src/views/company/companyProfile.vue
+17
-32
src/views/company/cooperation.vue
+127
-131
src/views/company/index.vue
+7
-29
src/views/company/overview.vue
+35
-28
src/views/company/technology.vue
+128
-176
src/views/home/home.vue
+4
-0
src/views/login/admin.vue
+1
-1
src/views/login/forget.vue
+9
-15
src/views/patent/patentDetails.vue
+5
-6
src/views/userset/securitySetting.vue
+2
-1
No files found.
public/company.docx
View file @
a72e36fc
No preview for this file type
public/patent.docx
View file @
a72e36fc
No preview for this file type
src/components/EchartsCon.vue
View file @
a72e36fc
...
...
@@ -23,7 +23,7 @@ export default {
},
option
:
{
type
:
Object
,
default
:
{}
default
:
{},
},
},
computed
:
{
...
...
@@ -69,7 +69,12 @@ export default {
// });
// },
init
()
{
if
(
document
.
getElementById
(
this
.
id
)
==
null
)
{
return
;
}
echarts
.
dispose
(
document
.
getElementById
(
this
.
id
));
let
chart
=
echarts
.
init
(
document
.
getElementById
(
this
.
id
));
chart
.
setOption
(
this
.
option
);
// let that = this;
...
...
src/utils/indexApi.js
View file @
a72e36fc
...
...
@@ -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
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
)
...
...
src/utils/loginAPI.js
View file @
a72e36fc
...
...
@@ -11,6 +11,7 @@ import { get, post,put } from './request'
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
changeStatus
=
p
=>
put
(
'/api/backup/users/'
+
p
.
id
,{
status
:
p
.
status
});
export
const
addusers
=
p
=>
post
(
'/api/backup/users'
,
p
);
...
...
src/views/adminset/userInfo.vue
View file @
a72e36fc
...
...
@@ -7,34 +7,41 @@
</a-breadcrumb>
<div
class=
"table"
>
<a-button
type=
"primary"
size=
"large"
@
click=
"openModal"
>
<img
src=
"../../static/login/icon-add.png"
alt=
""
class=
"img"
>
新增
</a-button
<img
src=
"../../static/login/icon-add.png"
alt=
""
class=
"img"
/>
新增
</a-button
>
<a-button
type=
"primary"
size=
"large"
danger
@
click=
"opendeleteModal"
>
<img
src=
"../../static/login/icon-delete.png"
alt=
""
class=
"img"
>
删除
</a-button>
<a-button
type=
"primary"
size=
"large"
danger
@
click=
"opendeleteModal"
>
<img
src=
"../../static/login/icon-delete.png"
alt=
""
class=
"img"
/>
删除
</a-button
>
<br
/><br
/>
<a-table
:row-selection=
"rowSelection"
:columns=
"columns"
:data-source=
"data"
:rowKey=
"row=>
{return row.id}"
:rowKey=
"
(row) =>
{
return row.id;
}
"
>
<template
#
bodyCell=
"
{ column, text, record }">
<template
v-if=
"column.dataIndex === 'status'"
>
<div
v-if=
"text"
class=
"status"
>
<span
class=
"marker"
></span>
已启用
</div>
已启用
</div>
<div
v-else
class=
"status"
>
<span
class=
"marker disabled"
></span>
已禁用
</div>
</
template
>
已禁用
</div>
</
template
>
<
template
v-if=
"column.dataIndex === 'action'"
>
<!--
<a
@
click=
"change(record)"
danger
v-if=
"text"
>
禁用
</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>
</a-table>
...
...
@@ -42,7 +49,6 @@
</div>
<a-modal
v-model:visible=
"visible"
title=
"新增账号"
@
ok=
"add"
centered
...
...
@@ -62,59 +68,60 @@
okText=
"确定"
@
onCancel=
"closeModal"
>
<p>
确定删除以下用户吗?
</p>
<p>
确定删除以下用户吗?
</p>
</a-modal>
</template>
<
script
>
// import { AES_Encrypt, AES_Decrypt } from "@/utils/aes_util.js";
import
{
message
}
from
"ant-design-vue"
;
import
{
users
,
changeStatus
}
from
"@/utils/loginAPI"
;
import
{
users
,
changeStatus
,
addusers
}
from
"@/utils/loginAPI"
;
export
default
{
name
:
"userInfo"
,
data
()
{
return
{
visible
:
false
,
visibleDelete
:
false
,
username
:
''
,
visibleDelete
:
false
,
columns
:
[
{
title
:
"序号"
,
dataIndex
:
"id"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"姓名"
,
dataIndex
:
"name"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"手机号"
,
dataIndex
:
"phone"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"账号名"
,
dataIndex
:
"account_number"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"创建时间"
,
dataIndex
:
"create_time"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"状态"
,
dataIndex
:
"status"
,
align
:
'center'
align
:
"center"
,
},
{
title
:
"操作"
,
dataIndex
:
"action"
,
align
:
'center'
align
:
"center"
,
},
],
selectedRowKeys
:
[],
data
:
[],
checked
:
true
checked
:
true
,
};
},
created
()
{
...
...
@@ -139,12 +146,12 @@ export default {
mounted
()
{},
methods
:
{
//调用删除用户接口
deleteUser
(){
this
.
visibleDelete
=
false
deleteUser
()
{
this
.
visibleDelete
=
false
;
},
//打开删除用户弹窗
opendeleteModal
(){
this
.
visibleDelete
=
true
opendeleteModal
()
{
this
.
visibleDelete
=
true
;
},
//打开新增用户弹窗
openModal
()
{
...
...
@@ -152,16 +159,28 @@ export default {
},
closeModal
()
{
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
()
{
this
.
getList
();
},
getList
(
page
)
{
users
({
page
:
1
,
page
:
page
||
1
,
size
:
10
,
}).
then
((
res
)
=>
{
console
.
log
(
res
);
if
(
res
.
code
==
0
)
{
this
.
data
=
res
.
data
;
}
else
{
...
...
@@ -177,9 +196,12 @@ export default {
//修改用户状态
change
(
record
)
{
console
.
log
(
record
);
changeStatus
({
id
:
record
.
id
,
status
:
record
.
status
}).
then
((
res
)
=>
{
console
.
log
(
res
);
changeStatus
({
id
:
record
.
id
,
status
:
!
record
.
status
}).
then
((
res
)
=>
{
// console.log(res);
if
(
res
.
code
==
0
)
{
this
.
getList
()
message
.
success
(
res
.
msg
);
}
});
},
},
...
...
@@ -192,29 +214,29 @@ export default {
width
:
calc
(
100%
-
80px
);
//
text-align
:
center
;
flex
:
1
;
.img{
.img
{
width
:
15px
;
height
:
15px
;
padding-right
:
3px
;
}
.marker
{
.marker
{
width
:
12px
;
height
:
12px
;
background-color
:
#00
B42A
;
background-color
:
#00
b42a
;
border-radius
:
50%
;
display
:
inline-block
;
}
.disabled
{
.disabled
{
background-color
:
#ccc
;
}
.nav_bread
{
height
:
50px
;
padding
:
20px
3px
;
background-color
:
#ebebeb
;
}
:deep
(
.ant-switch-checked
)
{
background-color
:
#00
B42A
;
:deep
(
.ant-switch-checked
)
{
background-color
:
#00
b42a
;
}
}
</
style
>
src/views/company/companyDetails.vue
View file @
a72e36fc
...
...
@@ -67,10 +67,11 @@
<overview
:developmentOverview=
"developmentOverview"
:deveSustain=
"deveSustain"
:structureData=
"structureData"
></overview>
</a-tab-pane>
<a-tab-pane
key=
"技术合作"
tab=
"技术合作"
>
<cooperation></cooperation>
<cooperation
:jointData=
"jointData"
:patentPurchaseData=
"patentPurchaseData"
></cooperation>
</a-tab-pane>
<a-tab-pane
key=
"科创能力评价"
tab=
"科创能力评价"
>
<technology></technology>
...
...
@@ -102,15 +103,20 @@
</a-modal>
<div
style=
"width: 70%"
>
<EchartsCon
:id=
"'applyTrend'"
:id=
"'applyTrend
1
'"
:option=
"option1"
:style=
"'height:300px'"
></EchartsCon>
<EchartsCon
:id=
"'patentAuthorize'"
:id=
"'patentAuthorize
1
'"
:option=
"option2"
:style=
"'height:300px;width:100%;'"
></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>
</
template
>
...
...
@@ -123,6 +129,9 @@ import {
exportword
,
researchDevelop
,
sustainability
,
structure
,
jointApplication
,
patentPurchase
,
}
from
"../../utils/indexApi.js"
;
import
overview
from
"./overview.vue"
;
import
{
message
}
from
"ant-design-vue"
;
...
...
@@ -159,6 +168,15 @@ export default {
return
{
id
:
""
,
option1
:
{},
option2
:
{},
option3
:
{},
option4
:
{},
option5
:
{},
option6
:
{},
option7
:
{},
option8
:
{},
option9
:
{},
option10
:
{},
formState
:
{
email
:
""
,
},
...
...
@@ -167,8 +185,8 @@ export default {
value
:
undefined
,
activeKey
:
"企业概况"
,
developmentOverview
:
null
,
deveSustain
:
null
,
count
:
161
,
deveSustain
:
null
,
count
:
0
,
follow
:
true
,
techArr
:
[
{
...
...
@@ -189,6 +207,9 @@ export default {
},
],
baseinfo
:
{},
structureData
:
{},
jointData
:
{},
patentPurchaseData
:{}
};
},
components
:
{
...
...
@@ -225,15 +246,56 @@ export default {
message
.
error
(
res
.
msg
);
}
});
//研发可持续性
sustainability
({
id
:
id
}).
then
((
res
)
=>
{
if
(
res
.
code
==
0
)
{
this
.
deveSustain
=
res
.
data
;
this
.
deveSustain
.
patent_authorization_rate
=
(
this
.
deveSustain
.
patent_authorization_rate
*
100
).
toFixed
(
2
)
+
"%"
;
this
.
getTrend
();
this
.
getAuthorize
();
}
else
{
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
()
{
...
...
@@ -250,7 +312,6 @@ export default {
ydata2
.
push
(
item
[
1
]);
});
this
.
deveSustain
.
utility
.
forEach
((
item
)
=>
{
xdata
.
push
(
item
[
0
]);
ydata3
.
push
(
item
[
1
]);
});
maxdata
=
ydata1
.
map
((
elem
,
index
)
=>
elem
+
ydata2
[
index
]);
...
...
@@ -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
daochu
()
{
this
.
visible
=
false
;
var
that
=
this
;
let
share_holders
=
that
.
baseinfo
.
share_holders
;
//对模板中股东信息进行修改
...
...
@@ -535,15 +819,39 @@ export default {
day
=
day
<
10
?
"0"
+
day
:
day
;
var
today
=
year
+
"年"
+
month
+
"月"
+
day
+
"日"
;
var
chartDom1
=
document
.
getElementById
(
"applyTrend"
);
var
chartDom2
=
document
.
getElementById
(
"patentAuthorize"
);
var
chartDom1
=
document
.
getElementById
(
"applyTrend1"
);
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
myChart2
=
null
;
let
myChart3
=
null
;
let
myChart4
=
null
;
let
myChart5
=
null
;
let
myChart7
=
null
;
let
myChart8
=
null
;
myChart1
=
echarts
.
init
(
chartDom1
);
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
myChart1
.
setOption
(
this
.
option1
);
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是为了让echarts渲染完成后生成图片
JSZipUtils
.
getBinaryContent
(
"company.docx"
,
function
(
error
,
content
)
{
...
...
@@ -565,7 +873,7 @@ export default {
if
(
tagValue
.
size
&&
tagValue
.
data
)
{
return
tagValue
.
size
;
}
return
[
600
,
3
00
];
return
[
550
,
2
00
];
};
// 创建一个JSZip实例,内容为模板的内容
const
zip
=
new
PizZip
(
content
);
...
...
@@ -590,9 +898,12 @@ export default {
company_finance
,
...
that
.
developmentOverview
,
...
that
.
deveSustain
,
...
that
.
structureData
,
...
that
.
jointData
,
...
that
.
patentPurchaseData
,
today
,
image1
:
myChart1
.
getDataURL
({
pixelRatio
:
5
,
//导出的图片分辨率比率,默认是1
pixelRatio
:
2
,
//导出的图片分辨率比率,默认是1
backgroundColor
:
"#fff"
,
//图表背景色
excludeComponents
:
[
"toolbox"
],
//忽略组件的列表
type
:
"png"
,
//图片类型支持png和jpeg
...
...
@@ -603,6 +914,42 @@ export default {
excludeComponents
:
[
"toolbox"
],
//忽略组件的列表
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
{
// 用模板变量的值替换所有模板变量
...
...
@@ -620,7 +967,7 @@ export default {
//formData文件流
// that.blobToBase64(out);
// 将目标文件对象保存为目标类型的文件,并命名
saveAs
(
out
,
`
公司详情
报告.docx`
);
saveAs
(
out
,
`
企业科创能力
报告.docx`
);
});
},
1000
);
},
...
...
src/views/company/companyProfile.vue
View file @
a72e36fc
...
...
@@ -83,38 +83,22 @@
<!-- 股东信息 -->
<div
class=
"company_con1"
id=
"shareholder"
>
<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
style=
"text-align: center"
:columns=
"columns_history"
:data-source=
"history_shareholder"
:pagination=
"pagination"
>
</a-table>
</a-tab-pane>
</a-tabs>
<!-- 工商登记表格 -->
<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>
</div>
<!-- 主要人员 -->
<div
class=
"company_con1"
id=
"keyPerson"
>
...
...
@@ -138,11 +122,12 @@
</div>
<!-- 融资经历 -->
<div
class=
"company_con1"
id=
""
>
<div
class=
"company_con1"
id=
"
financing
"
>
<h2
class=
"title"
>
融资经历
</h2>
<a-table
:columns=
"columns_financing"
:data-source=
"baseinfo.company_finance"
:pagination=
"pagination"
>
</a-table>
</div>
...
...
src/views/company/cooperation.vue
View file @
a72e36fc
...
...
@@ -6,7 +6,14 @@
<div
class=
"company_con1"
id=
"jointApplication"
>
<h2
class=
"title"
>
联合申请
</h2>
<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>
<EchartsCon
:option=
"option1"
:id=
"'echarts1'"
></EchartsCon>
</div>
...
...
@@ -14,7 +21,13 @@
<div
class=
"company_con1"
id=
"PatentPurchase"
>
<h2
class=
"title"
>
专利购买
</h2>
<p>
分析该企业专利购买历史,了解该企业向哪些专利权人购买了专利,以及购买了哪些专利。如果该企业购买专利数量较多,需要关注这些外购专利是否为企业的核心专利,进而分析企业的研发能力。该企业向山西凌志达煤业有限公司购买专利最多,为6件。
分析该企业专利购买历史,了解该企业向哪些专利权人购买了专利,以及购买了哪些专利。如果该企业购买专利数量较多,需要关注这些外购专利是否为企业的核心专利,进而分析企业的研发能力。该企业向
<span
class=
"color"
>
{{
patentPurchase
.
max_name_purchase
}}
</span
>
购买专利最多,为
<span
class=
"color"
>
{{
patentPurchase
.
max_value_purchase
}}
</span
>
件。
</p>
<EchartsCon
:option=
"option2"
:id=
"'echarts2'"
></EchartsCon>
</div>
...
...
@@ -22,7 +35,7 @@
<div
class=
"company_con_anchor"
>
<a-anchor>
<a-anchor-link
style=
"font-size: 20px; color: #1
C1C
28; font-weight: bold"
style=
"font-size: 20px; color: #1
c1c
28; font-weight: bold"
title=
"技术合作"
/>
<a-anchor-link
href=
"#jointApplication"
title=
"联合申请"
/>
...
...
@@ -32,7 +45,7 @@
<div
id=
"components-back-top-demo-custom"
>
<a-back-top>
<div
class=
"ant-back-top-inner"
>
<img
src=
"@/static/common/icon-top.png"
alt=
""
>
<img
src=
"@/static/common/icon-top.png"
alt=
""
/
>
回到顶部
</div>
</a-back-top>
...
...
@@ -50,12 +63,24 @@ export default {
data
()
{
return
{
option1
:
null
,
option2
:
null
,
joint
:
{},
company_name
:
""
,
};
},
props
:
{
jointData
:
Object
,
patentPurchaseData
:
Object
,
},
components
:
{
EchartsCon
,
},
created
()
{
this
.
joint
=
this
.
$props
.
jointData
;
this
.
patentPurchase
=
this
.
$props
.
patentPurchaseData
;
this
.
company_name
=
this
.
$route
.
query
.
name
;
},
beforeMount
()
{
this
.
init
();
},
methods
:
{
...
...
@@ -66,48 +91,33 @@ export default {
getOptions1
()
{
let
points
=
[
{
name
:
"山西煤炭进出口集团有限公司"
,
name
:
this
.
company_name
,
symbolSize
:
40
,
category
:
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"
,
value
:
0
,
},
];
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
=
{
// animationDurationUpdate: 1500,
// animationEasingUpdate: "quinticInOut",
// color: ["#83e0ff", "#45f5ce", "#b158ff"],
legend
:{
show
:
true
,
data
:[
'搜索的企业'
,
'企业'
,
'院校'
]
legend
:
{
show
:
true
,
data
:
[
"搜索的企业"
,
"其他单位"
],
},
series
:
[
{
...
...
@@ -117,10 +127,15 @@ export default {
repulsion
:
1500
,
edgeLength
:
30
,
},
roam
:
tru
e
,
roam
:
fals
e
,
label
:
{
normal
:
{
show
:
true
,
show
:
true
,
formatter
:
function
(
params
)
{
if
(
params
.
value
)
{
return
params
.
name
+
"("
+
params
.
value
+
")"
;
// 显示节点的数值
}
else
{
return
params
.
name
;
}
},
},
data
:
points
,
...
...
@@ -132,93 +147,71 @@ export default {
curveness
:
0
,
},
},
categories
:
[{
name
:
"搜索的企业"
},
{
name
:
"
企业"
},
{
name
:
"院校
"
}],
categories
:
[{
name
:
"搜索的企业"
},
{
name
:
"
其他单位
"
}],
},
],
};
},
getOptions2
(){
const
dataList
=
[{
name
:
"Mon"
,
value
:
260
,
},
{
name
:
"Tue"
,
value
:
220
,
},
{
name
:
"Wed"
,
value
:
200
,
},
{
name
:
"Thu"
,
value
:
160
,
},
{
name
:
"Fri"
,
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
:
{
getOptions2
()
{
const
dataList
=
this
.
patentPurchase
.
patent_purchase
;
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
,
position
:
"right"
,
// color: "#3EFFE8",
fontSize
:
12
,
formatter
:
"{c}"
,
},
data
:
dataList
,
},
],
};
}
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
,
},
],
};
},
},
};
</
script
>
...
...
@@ -230,6 +223,9 @@ this.option2 = {
display
:
flex
;
justify-content
:
flex-start
;
background-color
:
#f3f3f6
;
.color
{
color
:
#53a7f0
;
}
.company_con_left
{
.company_con1
{
width
:
1400px
;
...
...
@@ -267,23 +263,23 @@ this.option2 = {
.company_con_anchor
{
margin-top
:
15px
;
font-weight
:
bold
;
color
:
#1
C1C
28
;
color
:
#1
c1c
28
;
:deep(.ant-anchor-link-title)
{
color
:
#1
C1C
28
;
color
:
#1
c1c
28
;
margin-bottom
:
15px
;
}
:deep
(
.ant-anchor-link-active
>
.ant-anchor-link-title
)
{
color
:
#1890ff
;
}
:deep
(
.ant-anchor-ink
::before
)
{
:deep
(
.ant-anchor-ink
::before
)
{
width
:
8px
;
background-color
:
#
F5F5F
5
;
background-color
:
#
f5f5f
5
;
}
:deep
(
.ant-anchor-wrapper
)
{
background-color
:
#fff
;
padding-left
:
10px
;
color
:
#1
C1C
28
;
color
:
#1
c1c
28
;
height
:
350px
;
margin-left
:
10px
;
padding
:
30px
15px
0
;
...
...
src/views/company/index.vue
View file @
a72e36fc
...
...
@@ -27,12 +27,7 @@
<div
class=
"company_con"
>
<div
class=
"company_con_left"
>
<h3>
筛选器
</h3>
<a-form
:layout=
"'vertical'"
:model=
"formState"
validateTrigger=
"change"
:ref=
"form"
>
<a-form
:layout=
"'vertical'"
:model=
"formState"
>
<a-form-item
label=
"区域"
>
<a-cascader
v-model:value=
"valueArea"
...
...
@@ -57,7 +52,7 @@
placeholder=
"请选择"
></a-select>
</a-form-item>
<a-form-item
name=
"range-picker"
label=
"注册时间"
>
<a-form-item
label=
"注册时间"
>
<a-config-provider
:locale=
"zh_CN"
>
<a-range-picker
v-model:value=
"formState['rangetime1']"
...
...
@@ -68,7 +63,7 @@
<a-row><label
for=
""
>
注册资本
</label></a-row>
<a-row>
<a-col
:span=
"11"
>
<a-form-item
name=
"
minvalue"
:rules=
"minvalueRules
"
>
<a-form-item
name=
"
capital_nums_min
"
>
<a-input
v-model=
"formState.capital_nums_min"
style=
"width: 95%"
...
...
@@ -78,7 +73,7 @@
</a-col>
<a-col
:span=
"1"
>
-
</a-col>
<a-col
:span=
"11"
>
<a-form-item
name=
"
maxvalue"
:rules=
"maxvalueRules
"
>
<a-form-item
name=
"
capital_nums_max
"
>
<a-input
v-model=
"formState.capital_nums_max"
style=
"width: 95%"
...
...
@@ -130,7 +125,7 @@
class=
"card"
v-for=
"item in companylist"
:key=
"item"
@
click=
"openCompany(item.mysql_id)"
@
click=
"openCompany(item.mysql_id
,item.company_name
)"
>
<div
class=
"card_title"
>
{{ item.company_name }}
</div>
<!-- 关注 -->
...
...
@@ -204,7 +199,6 @@ import {
enterpriseList
,
industryType
,
enterpriseSelect
,
}
from
"../../utils/indexApi.js"
;
import
"dayjs/locale/zh-cn"
;
import
zh_CN
from
"ant-design-vue/lib/locale-provider/zh_CN"
;
...
...
@@ -241,27 +235,10 @@ export default {
},
filter
:
[],
companylist
:
[],
minvalueRules
:
[
{
required
:
true
,
message
:
"请输入ghj"
,
trigger
:
"blur"
},
{
type
:
"number"
,
message
:
"年龄必须是一个数值"
,
trigger
:
"blur"
},
{
min
:
18
,
max
:
60
,
message
:
"年龄必须介于18到60之间"
,
trigger
:
"blur"
,
},
],
};
},
components
:
{},
methods
:
{
validateUsername
()
{
if
(
value
!==
"admin"
)
{
callback
(
new
Error
(
"用户名必须是 admin"
));
}
else
{
callback
();
}
},
//获取企业列表
getCompanyList
(
keyword
)
{
let
params
=
{
...
...
@@ -428,11 +405,12 @@ export default {
});
},
//打开企业详情
openCompany
(
id
)
{
openCompany
(
id
,
company_name
)
{
this
.
$router
.
push
({
path
:
"/companyDetails"
,
query
:
{
id
:
id
,
name
:
company_name
},
});
},
...
...
src/views/company/overview.vue
View file @
a72e36fc
...
...
@@ -32,18 +32,18 @@
<h2
class=
"title"
>
研发可持续性
</h2>
<p>
企业的总专利申请量为
<span
class=
"color"
>
{{
deveSustain
.
patent_application_num
deveSustain
Data
.
patent_application_num
}}
</span
>
件,最早专利申请是
<span
class=
"color"
>
{{
deveSustain
.
earliest_patent_application_year
}}
</span
{{
deveSustain
Data
.
earliest_patent_application_year
}}
</span
>
年,企业在
<span
class=
"color"
>
{{
deveSustain
.
most_patent_application_year
deveSustain
Data
.
most_patent_application_year
}}
</span
>
年的专利申请量最多,为
<span
class=
"color"
>
{{
deveSustain
.
most_patent_application_num
deveSustain
Data
.
most_patent_application_num
}}
</span
>
件且专利授权率为
<span
class=
"color"
>
{{
deveSustain
.
patent_authorization_rate
deveSustain
Data
.
patent_authorization_rate
}}
</span
>
。
</p>
...
...
@@ -68,7 +68,14 @@
<div
class=
"company_con1"
id=
"PatentAnalysis"
>
<h2
class=
"title"
>
专利结构分析
</h2>
<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>
<div
class=
"ecahrsThree"
>
<EchartsCon
...
...
@@ -138,11 +145,13 @@ export default {
props
:
{
developmentOverview
:
Object
,
deveSustain
:
Object
,
structureData
:
Object
,
},
data
()
{
return
{
tabchange
:
"1"
,
deveSustain
:
null
,
deveSustainData
:
null
,
devstructureData
:
null
,
};
},
...
...
@@ -163,15 +172,14 @@ export default {
ydata2
=
[],
ydata3
=
[],
maxdata
=
[];
this
.
deveSustain
.
invent
.
forEach
((
item
)
=>
{
this
.
deveSustain
Data
.
invent
.
forEach
((
item
)
=>
{
xdata
.
push
(
item
[
0
]);
ydata1
.
push
(
item
[
1
]);
});
this
.
deveSustain
.
appearance
.
forEach
((
item
)
=>
{
this
.
deveSustain
Data
.
appearance
.
forEach
((
item
)
=>
{
ydata2
.
push
(
item
[
1
]);
});
this
.
deveSustain
.
utility
.
forEach
((
item
)
=>
{
xdata
.
push
(
item
[
0
]);
this
.
deveSustainData
.
utility
.
forEach
((
item
)
=>
{
ydata3
.
push
(
item
[
1
]);
});
this
.
option1
=
{
...
...
@@ -290,11 +298,11 @@ export default {
ydata1
=
[],
ydata2
=
[],
ydata3
=
[];
this
.
deveSustain
.
old_patent_authorization
.
forEach
((
item
)
=>
{
this
.
deveSustain
Data
.
old_patent_authorization
.
forEach
((
item
)
=>
{
xdata
.
push
(
item
[
0
]);
ydata1
.
push
(
item
[
1
]);
});
this
.
deveSustain
.
old_patent_application
.
forEach
((
item
)
=>
{
this
.
deveSustain
Data
.
old_patent_application
.
forEach
((
item
)
=>
{
ydata2
.
push
(
item
[
1
]);
});
ydata3
=
ydata1
.
map
((
elem
,
index
)
=>
...
...
@@ -451,10 +459,7 @@ export default {
label
:
{
formatter
:
"{b}:
\
n{d}%"
,
// 用来换行
},
data
:
[
{
value
:
6
,
name
:
"实用新型"
},
{
value
:
10
,
name
:
"发明"
},
],
data
:
this
.
devstructureData
.
patent_type
,
emphasis
:
{
itemStyle
:
{
shadowBlur
:
10
,
...
...
@@ -485,10 +490,7 @@ export default {
label
:
{
formatter
:
"{b}:
\
n{d}%"
,
// 用来换行
},
data
:
[
{
value
:
6
,
name
:
"审中"
},
{
value
:
10
,
name
:
"有效"
},
],
data
:
this
.
devstructureData
.
patent_status
,
emphasis
:
{
itemStyle
:
{
shadowBlur
:
10
,
...
...
@@ -519,10 +521,7 @@ export default {
label
:
{
formatter
:
"{b}:
\
n{d}%"
,
// 用来换行
},
data
:
[
{
value
:
6
,
name
:
"实用新型"
},
{
value
:
10
,
name
:
"发明"
},
],
data
:
this
.
devstructureData
.
valid_patent_type
,
emphasis
:
{
itemStyle
:
{
shadowBlur
:
10
,
...
...
@@ -557,9 +556,17 @@ export default {
},
},
created
()
{
this
.
deveSustain
=
this
.
$props
.
deveSustain
;
this
.
deveSustain
.
patent_authorization_rate
=
(
this
.
deveSustain
.
patent_authorization_rate
*
100
).
toFixed
(
2
)
+
"%"
;
this
.
deveSustainData
=
this
.
$props
.
deveSustain
;
this
.
devstructureData
=
this
.
$props
.
structureData
;
// 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
>
...
...
src/views/company/technology.vue
View file @
a72e36fc
...
...
@@ -6,25 +6,45 @@
<div
class=
"company_con1"
id=
"Ability"
>
<h2
class=
"title"
>
科创能力分析
</h2>
<div
style=
"display: flex; position: relative"
>
<
!--
<
EchartsCon
:option=
"option1"
:id=
"'echartsraodar'"
class=
"echarts"
></EchartsCon>
--
>
<div
<EchartsCon
:option=
"option1"
:id=
"'echartsraodar'"
class=
"echarts"
></EchartsCon
>
<
!--
<
div
id=
"echartsraodar"
class=
"echarts"
style=
"width: 100%; height: 300px"
></div>
<div
></div>
-->
<
!--
<
div
class=
"hover"
v-if=
"hover"
ref=
"hover"
:style=
"
{ left: left, top: top }"
>
{{
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>
<EchartsCon
:option=
"option2"
:id=
"'echartsscatter'"
></EchartsCon>
</div>
</div>
</div>
...
...
@@ -74,53 +94,74 @@ export default {
},
methods
:
{
getOption1
()
{
let
chart
=
echarts
.
init
(
document
.
getElementById
(
"echartsraodar"
));
let
option1
=
{
// tooltip: {
// trigger: "item",
// show: !this.hover,
// },
tooltip
:
{
trigger
:
"item"
,
// formatter: function (params) {
// console.log(params);
// },
},
radar
:
[
{
indicator
:
[
{
text
:
"公司竞争力"
,
max
:
10
0
},
{
text
:
"技术质量"
,
max
:
10
0
},
{
text
:
"技术体量"
,
max
:
10
0
},
{
text
:
"公司竞争力"
,
max
:
3
0
},
{
text
:
"技术质量"
,
max
:
3
0
},
{
text
:
"技术体量"
,
max
:
4
0
},
],
center
:
[
"50%"
,
"50%"
],
radius
:
120
,
triggerEvent
:
true
,
},
{
indicator
:
[
{
text
:
"公司竞争力"
,
max
:
30
},
{
text
:
"技术质量"
,
max
:
30
},
{
text
:
"技术体量"
,
max
:
40
},
],
center
:
[
"50%"
,
"50%"
],
radius
:
120
,
},
],
series
:
[
{
type
:
"radar"
,
radarIndex
:
0
,
data
:
[
{
value
:
[
20
,
10
,
25
],
name
:
"均值"
,
areaStyle
:
{
color
:
"#73A3F2"
,
},
lineStyle
:
{
color
:
"#0263FF"
,
},
itemStyle
:
{
color
:
"#0263FF"
,
},
areaStyle
:
{
color
:
"#F7B46A"
,
},
lineStyle
:
{
color
:
"#F7B46A"
,
},
itemStyle
:
{
color
:
"#F7B46A"
,
},
},
],
},
{
type
:
"radar"
,
radarIndex
:
0
,
data
:
[
{
value
:
[
50
,
93
,
5
0
],
name
:
"分值"
,
value
:
[
10
,
20
,
1
0
],
name
:
"
科创能力
分值"
,
areaStyle
:
{
color
:
"#
73A3F2
"
,
color
:
"#
5A95F7
"
,
},
lineStyle
:
{
color
:
"#
0263FF
"
,
color
:
"#
5A95F7
"
,
},
itemStyle
:
{
color
:
"#
0263FF
"
,
color
:
"#
5A95F7
"
,
},
},
],
...
...
@@ -129,52 +170,50 @@ export default {
};
chart
.
setOption
(
option1
);
//在name上移动
let
that
=
this
;
chart
.
on
(
"mousemove"
,
function
(
params
)
{
that
.
hover
=
true
;
// let that = this;
// chart.on("mousemove", function (params) {
// that.hover = true;
if
(
params
.
name
==
"技术质量"
)
{
that
.
$nextTick
(()
=>
{
that
.
$refs
.
hover
.
style
.
left
=
params
.
event
.
offsetX
+
"px"
;
that
.
$refs
.
hover
.
style
.
top
=
params
.
event
.
offsetY
+
"px"
;
});
that
.
con
=
"从有效专利占专利申请总量比例、有效发明专利占有效专利比例和风险专利占全部申请专利的比例分析"
;
}
else
if
(
params
.
name
==
"公司竞争力"
)
{
that
.
$nextTick
(()
=>
{
that
.
$refs
.
hover
.
style
.
left
=
params
.
event
.
offsetX
+
"px"
;
that
.
$refs
.
hover
.
style
.
top
=
params
.
event
.
offsetY
+
"px"
;
});
that
.
con
=
"从公司资质类别、公司规模、对外投资和公司融资分析"
;
}
else
if
(
params
.
name
==
"技术体量"
)
{
that
.
$nextTick
(()
=>
{
that
.
$refs
.
hover
.
style
.
left
=
params
.
event
.
offsetX
+
"px"
;
that
.
$refs
.
hover
.
style
.
top
=
params
.
event
.
offsetY
+
"px"
;
});
that
.
con
=
"从专利申请总量、有效专利总量和近3年专利申请增速分析"
;
}
else
{
that
.
hover
=
false
;
}
});
chart
.
on
(
"mouseout"
,
function
(
params
)
{
that
.
hover
=
false
;
});
// if (params.name == "技术质量") {
// that.$nextTick(() => {
// that.$refs.hover.style.left = params.event.offsetX + "px";
// that.$refs.hover.style.top = params.event.offsetY + "px";
// });
// that.con =
// "从有效专利占专利申请总量比例、有效发明专利占有效专利比例和风险专利占全部申请专利的比例分析";
// } else if (params.name == "公司竞争力") {
// that.$nextTick(() => {
// that.$refs.hover.style.left = params.event.offsetX + "px";
// that.$refs.hover.style.top = params.event.offsetY + "px";
// });
// that.con = "从公司资质类别、公司规模、对外投资和公司融资分析";
// } else if (params.name == "技术体量") {
// that.$nextTick(() => {
// that.$refs.hover.style.left = params.event.offsetX + "px";
// that.$refs.hover.style.top = params.event.offsetY + "px";
// });
// that.con = "从专利申请总量、有效专利总量和近3年专利申请增速分析";
// } else {
// that.hover = false;
// }
// });
// chart.on("mouseout", function (params) {
// that.hover = false;
// });
},
getOption2
()
{
var
data
=
[
{
name
:
"技术体量"
,
value
:
52
,
value
:
30
,
},
{
name
:
"技术质量"
,
value
:
41
,
value
:
30
,
},
{
name
:
"公司竞争力"
,
value
:
7
0
,
value
:
3
0
,
},
];
//已排序好的数组
...
...
@@ -188,114 +227,32 @@ export default {
}
this
.
option2
=
{
grid
:
{
left
:
"11%"
,
top
:
"5%"
,
right
:
"10%"
,
bottom
:
"15%"
,
containLabel
:
true
,
tooltip
:
{
formatter
:
"{a} <br/>{b} : {c}%"
,
},
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
:
[
{
name
:
"条"
,
type
:
"bar"
,
stack
:
"圆"
,
yAxisIndex
:
0
,
data
:
data
,
barWidth
:
8
,
itemStyle
:
{
normal
:
{
color
:
"#eee"
,
barBorderRadius
:
5
,
},
name
:
"Pressure"
,
startAngle
:
180
,
endAngle
:
0
,
min
:
0
,
max
:
100
,
radius
:
"160"
,
center
:
[
"50%"
,
"60%"
],
type
:
"gauge"
,
progress
:
{
show
:
true
,
},
z
:
2
,
},
{
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
,
},
detail
:
{
valueAnimation
:
true
,
formatter
:
"{value}"
,
},
// z: 2
},
{
name
:
"白框"
,
type
:
"bar"
,
yAxisIndex
:
1
,
barGap
:
"-100%"
,
data
:
[
100
,
100
,
100
],
barWidth
:
6
,
itemStyle
:
{
normal
:
{
color
:
"#eee"
,
barBorderRadius
:
5
,
data
:
[
{
value
:
50
,
name
:
"总分"
,
},
},
z
:
0
,
],
},
],
};
...
...
@@ -333,15 +290,10 @@ export default {
}
.hover
{
position
:
absolute
;
z-index
:
999999
;
//
left
:
0
;
width
:
320px
;
//
height
:
76px
;
background
:
#ffffff
;
box-shadow
:
0px
0px
12px
1px
rgba
(
0
,
0
,
0
,
0.16
);
border-radius
:
8px
8px
8px
8px
;
opacity
:
1
;
padding
:
10px
;
left
:
50%
;
transform
:
translateX
(
-50%
);
bottom
:
5%
;
color
:
#1890ff
;
}
}
}
...
...
src/views/home/home.vue
View file @
a72e36fc
...
...
@@ -261,23 +261,27 @@ export default {
background
:
url("../../static/home/index/icon-czl-normal.png")
no-repeat
;
background-size
:
100%
100%
;
cursor
:
pointer
;
}
.patent_active
{
background
:
url("../../static/home/index/icon-czl-select.png")
no-repeat
;
background-size
:
100%
100%
;
color
:
#fff
;
cursor
:
pointer
;
}
.company
{
background
:
url("../../static/home/index/icon-cqy-normal.png")
no-repeat
;
background-size
:
100%
100%
;
cursor
:
pointer
;
}
.company_active
{
background
:
url("../../static/home/index/icon-cqy-select.png")
no-repeat
;
background-size
:
100%
100%
;
color
:
#fff
;
cursor
:
pointer
;
}
}
.search
{
...
...
src/views/login/admin.vue
View file @
a72e36fc
...
...
@@ -110,7 +110,7 @@ export default {
formState
:
{
username
:
""
,
password
:
""
,
remember
:
tru
e
,
remember
:
fals
e
,
},
};
},
...
...
src/views/login/forget.vue
View file @
a72e36fc
...
...
@@ -34,9 +34,8 @@
ref=
"form"
:rules=
"formRules"
>
<a-form-item
name=
"phone"
:rules=
"[
<a-form-item
name=
"phone"
>
<!-- :rules="[
{ required: true, message: '请输入手机号!' },
{
pattern:
...
...
@@ -44,8 +43,7 @@
message: '手机号格式不正确!',
validateTrigger: 'onBlur',
},
]"
>
]" -->
<a-input
v-model:value=
"formState.phone"
placeholder=
"请输入手机号"
>
<template
#
prefix
>
<img
src=
"../../static/login/icon-user.png"
alt=
""
/>
...
...
@@ -53,10 +51,8 @@
</a-input>
</a-form-item>
<a-form-item
name=
"code"
:rules=
"[{ required: true, message: '请输入验证码!' }]"
>
<a-form-item
name=
"code"
>
<!-- :rules="[{ required: true, message: '请输入验证码!' }]" -->
<a-input
v-model:value=
"formState.code"
placeholder=
"请输入验证码"
>
<
template
#
prefix
>
<img
src=
"../../static/login/icon-yzm.png"
alt=
""
/>
...
...
@@ -74,8 +70,9 @@
</a-form-item>
<a-form-item
name=
"password"
:rules=
"[{ required: true, message: '请输入密码!' }]"
>
<!-- :rules="[{ required: true, message: '请输入密码!' }]" -->
<a-input-password
v-model:value=
"formState.password"
placeholder=
"请输入新密码"
...
...
@@ -85,10 +82,7 @@
</
template
>
</a-input-password>
</a-form-item>
<a-form-item
name=
"password"
:rules=
"[{ required: true, message: '请输入密码!' }]"
>
<a-form-item
name=
"repassword"
>
<a-input-password
v-model:value=
"formState.repassword"
placeholder=
"请再次输入新密码"
...
...
@@ -187,7 +181,7 @@ export default {
//验证两次密码
validateConfirmPassword
(
rule
,
value
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
value
&&
value
!==
this
.
formState
.
newpw
d
)
{
if
(
value
&&
value
!==
this
.
formState
.
passwor
d
)
{
reject
(
new
Error
());
}
else
{
resolve
();
...
...
src/views/patent/patentDetails.vue
View file @
a72e36fc
...
...
@@ -279,8 +279,7 @@
okText=
"确定"
@
onCancel=
"closeModal"
>
<p>
请选择报告格式,请稍后在历史记录里查看
</p>
<p>
报告格式
<span
class=
"PDF"
>
PDF
</span></p>
<p>
报告格式
PDF
</p>
<a-form
:model=
"formState"
>
<a-form-item
:name=
"'email'"
...
...
@@ -531,9 +530,9 @@ export default {
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
,
});
//formData文件流
that
.
blobToBase64
(
out
);
//
that.blobToBase64(out);
// 将目标文件对象保存为目标类型的文件,并命名
// saveAs(out, `专利详情报告.word
`);
saveAs
(
out
,
`专利成果转移转化智能推荐报告.docx
`
);
});
},
1000
);
},
...
...
@@ -541,11 +540,11 @@ export default {
return
new
Promise
((
resolve
,
reject
)
=>
{
const
fileReader
=
new
FileReader
();
fileReader
.
onload
=
(
e
)
=>
{
console
.
log
(
e
.
target
.
result
)
console
.
log
(
e
.
target
.
result
)
;
// resolve(e.target.result);
setTimeout
(
function
()
{
exportword
({
file
:
e
.
target
.
result
}).
then
((
res
)
=>
{});
},
300
);
},
300
);
};
// readAsDataURL
fileReader
.
readAsDataURL
(
blob
);
...
...
src/views/userset/securitySetting.vue
View file @
a72e36fc
...
...
@@ -156,7 +156,8 @@ export default {
changePassword
({
param
}).
then
((
res
)
=>
{
// console.log(res)
if
(
res
.
code
==
0
)
{
this
.
resetShow
=
true
;
message
.
success
(
res
.
msg
)
// this.resetShow = true;
}
else
{
message
.
error
(
res
.
msg
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment