Commit a72e36fc by liudx

公司详情页面

parent 880918b4
No preview for this file type
No preview for this file type
......@@ -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;
......
......@@ -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)
......
......@@ -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);
......
......@@ -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
>&nbsp;
<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: #00B42A;
background-color: #00b42a;
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: #00B42A;
:deep(.ant-switch-checked) {
background-color: #00b42a;
}
}
</style>
......@@ -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>
......
......@@ -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
},
});
},
......
......@@ -32,18 +32,18 @@
<h2 class="title">研发可持续性</h2>
<p>
企业的总专利申请量为<span class="color">{{
deveSustain.patent_application_num
deveSustainData.patent_application_num
}}</span
>件,最早专利申请是<span class="color">
{{ deveSustain.earliest_patent_application_year }} </span
{{ deveSustainData.earliest_patent_application_year }} </span
>年,企业在<span class="color">{{
deveSustain.most_patent_application_year
deveSustainData.most_patent_application_year
}}</span
>年的专利申请量最多,为<span class="color">{{
deveSustain.most_patent_application_num
deveSustainData.most_patent_application_num
}}</span
>件且专利授权率为<span class="color">{{
deveSustain.patent_authorization_rate
deveSustainData.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.deveSustainData.invent.forEach((item) => {
xdata.push(item[0]);
ydata1.push(item[1]);
});
this.deveSustain.appearance.forEach((item) => {
this.deveSustainData.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.deveSustainData.old_patent_authorization.forEach((item) => {
xdata.push(item[0]);
ydata1.push(item[1]);
});
this.deveSustain.old_patent_application.forEach((item) => {
this.deveSustainData.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>
......
......@@ -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 {
......
......@@ -110,7 +110,7 @@ export default {
formState: {
username: "",
password: "",
remember: true,
remember: false,
},
};
},
......
......@@ -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.newpwd) {
if (value && value !== this.formState.password) {
reject(new Error());
} else {
resolve();
......
......@@ -279,8 +279,7 @@
okText="确定"
@onCancel="closeModal"
>
<p>请选择报告格式,请稍后在历史记录里查看</p>
<p>报告格式&nbsp;&nbsp;&nbsp;<span class="PDF">PDF</span></p>
<p>报告格式&nbsp;&nbsp;&nbsp;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);
......
......@@ -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);
}
......
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