Commit 1a4a6395 by liudx

联调企业详情、企业筛选接口

parent 9623b853
No preview for this file type
...@@ -17,6 +17,13 @@ ...@@ -17,6 +17,13 @@
box-sizing: border-box !important; box-sizing: border-box !important;
background-color: #F2F3F5; background-color: #F2F3F5;
} }
@font-face {
font-family: "jiangcheng";
src: url("../src/assets/fontFamily/江城斜黑体900W.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}
html,body,#app{ html,body,#app{
// height: 100%; // height: 100%;
// min-height:980px; // min-height:980px;
......
@font-face { @font-face {
font-family: 'jiangcheng'; font-family: "jiangcheng";
src: url('./jiangcheng.ttf'); src: url("./江城斜黑体900W.ttf") format("truetype");
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
} }
\ No newline at end of file
...@@ -91,7 +91,7 @@ export default { ...@@ -91,7 +91,7 @@ export default {
this.username = localStorage.getItem('login_name'); this.username = localStorage.getItem('login_name');
}, },
computed: { computed: {
...mapState(["username"]),
}, },
data() { data() {
return { return {
...@@ -206,7 +206,9 @@ export default { ...@@ -206,7 +206,9 @@ export default {
border-radius: 50%; border-radius: 50%;
width: 60px; width: 60px;
height: 60px; height: 60px;
background-color: pink; // background-color: pink;
background: url('../static/common/img-tx-big.svg') no-repeat;
background-size: 100% 100%;
.portrait_btn { .portrait_btn {
cursor: pointer !important; cursor: pointer !important;
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="120" height="120" viewBox="0 0 120 120"><defs><style>.a{fill:#6aa1ff;}.b{clip-path:url(#a);}.c{fill:#f04d4e;}.d{fill:#d84850;}.e{fill:#c7928e;}.f{fill:#333;}.g{fill:#fecccb;}.h{fill:#2b2b2b;}.i{fill:#b6d5d0;}</style><clipPath id="a"><circle class="a" cx="60" cy="60" r="60"/></clipPath></defs><g transform="translate(-1842 -13)"><circle class="a" cx="60" cy="60" r="60" transform="translate(1842 13)"/><g class="b" transform="translate(1842 13)"><g transform="translate(9.886 16.628)"><path class="c" d="M103.741,52.06V44.385c0-15.74-24.854-20.032-24.854-20.032H28.717s-25.2,4.293-25.2,20.032V52.06s-.058,5.788,8.053,5.984,42.292,0,42.292,0,34.007.2,42.118,0S103.741,52.06,103.741,52.06Z" transform="translate(-3.515 46.384)"/><path class="d" d="M62.608,24.021H53.976l-25.259.521s-25.2,4.345-25.2,18.365v6.836s-.058,5.156,8.053,5.33,8.169-.116,8.169-.116l24.68-18.771H62.608Z" transform="translate(-3.515 45.731)"/><path class="e" d="M15.428,19.139H45.554V37.678H15.428Z" transform="translate(19.912 36.13)"/><path class="f" d="M68.432,11.731s3.824,11.7-6.6,18.713V9.472Zm-57.818,0s-2.086,11.7,6.6,18.713V9.472l-6.6,2.259Z" transform="translate(10.011 17.12)"/><path class="g" d="M12.7,26.947V48.324s5.1,18.423,23.29,18.423S59.045,47.977,59.045,47.977V28.453S60.2.644,35.987.644,12.7,26.947,12.7,26.947Z" transform="translate(14.532 -0.239)"/><path class="g" d="M35.874,66.786c-17.96,0-23.174-18.423-23.174-18.423V26.985S11.541.625,35.874.625Z" transform="translate(14.529 -0.277)"/><path class="h" d="M30.493,15.976s3.882,15.468,39.8,15.468c0,0-.579-30.937-29.778-30.937S10.39,31.445,10.39,31.445a38.35,38.35,0,0,0,20.1-15.468Z" transform="translate(10.003 -0.508)"/><path class="i" d="M21.589,20.955,12.03,30.92,27.672,42.507l9.907-7.821Z" transform="translate(13.229 39.702)"/><path class="i" d="M36.281,20.955,45.84,30.92,30.256,42.507l-9.965-7.821Z" transform="translate(29.474 39.702)"/></g></g></g></svg>
\ No newline at end of file
import { get, post,put } from './request' import { get, post,put } from './request'
//专利搜索接口
export const patents = p => get('/api/patent/patents?keyword='+p.keyword+'&page='+p.page+'&size='+p.size); export const patents = p => get('/api/patent/patents?keyword='+p.keyword+'&page='+p.page+'&size='+p.size);
//专利筛选接口
export const patentselect = p => post('/api/patent/patents',p); export const patentselect = p => post('/api/patent/patents',p);
//专利详情页面
export const patentDetail = p => get('/api/patent/patentDetail/'+p.id); export const patentDetail = p => get('/api/patent/patentDetail/'+p.id);
//导出word给后端传递base64
export const exportword = p => post('/api/patent/patentDetail/125',p); export const exportword = p => post('/api/patent/patentDetail/125',p);
// 企业搜索接口
export const enterpriseList = p => get('/api/enterprise/list?keyword='+p.keyword+'&page='+p.page+'&size='+p.size); export const enterpriseList = p => get('/api/enterprise/list?keyword='+p.keyword+'&page='+p.page+'&size='+p.size);
//企业国民经济行业接口
export const industryType = p => get('/api/common/industryType'); export const industryType = p => get('/api/common/industryType');
//企业筛选器接口
export const enterpriseSelect = p => post('/api/enterprise/list',p);
//企业详情
export const enterpriseDetail = p => get('/api/enterprise/detail/'+p.id);
...@@ -8,77 +8,103 @@ ...@@ -8,77 +8,103 @@
<div class="back_btn" @click="backbtn">返回</div> <div class="back_btn" @click="backbtn">返回</div>
<div class="details_title"> <div class="details_title">
<div class="company_num"> <div class="company_num">
<span>{{ "山西煤炭进出口集团有限公司" }}</span> <span>{{ baseinfo.company_name }}</span>
<a-tag color="#56CA95">{{ "存续(在营、开业、在册)" }}</a-tag>
<a-tag color="#6096E6">{{ "2222222" }}</a-tag> <a-tag color="#56CA95" v-if="baseinfo.high_new=='1'">{{ '高新技术企业'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.tbe=='1'">{{ '科技型中小企业'}}</a-tag>
<a-tag color="#6096E6" v-if="baseinfo.tbe_sjmy=='1'">{{ '省级民营科技企业'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.zjtx=='1'">{{ '专精特新'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.zjtg_gjjxjr=='1'">{{ '国家级专精特新小巨人企业'}}</a-tag>
<a-tag color="#6096E6" v-if="baseinfo.zjtg_sjxjr=='1'">{{ '省级专精特新小巨人企业'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.dengl=='1'">{{ '瞪羚企业'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.quoted_company=='1'">{{ '上市企业'}}</a-tag>
<a-tag color="#56CA95" v-if="baseinfo.isfive=='1'">{{ '中国500强'}}</a-tag>
<a-tag color="#6096E6" v-if="baseinfo.sxonhun=='1'">{{ '山西100强'}}</a-tag>
</div> </div>
<div class="company_basic"> <div class="company_basic">
<div>注册地址:太原市小店区长风街115号</div> <div>注册地址:{{ baseinfo.address }}</div>
<div>邮箱:zonghebangong@sxmtcoal.cn</div> <div>邮箱:{{ baseinfo.email }}</div>
<div>联系电话:0351-4645051</div> <div>联系电话:{{ baseinfo.telephone }}</div>
<div>官网:http://www.shanxicoal.cn/</div> <div>官网:{{ baseinfo.web_site }}</div>
</div> </div>
</div> </div>
<div class="btn_group"> <div class="btn_group">
<span @click="openModal"><img src="@/static/patent/icon-dc.png" alt="" />导出</span> <span style="cursor: pointer" @click="openModal"
><img src="@/static/patent/icon-dc.png" alt="" />导出</span
>
<span v-if="follow" <span v-if="follow"
><img src="@/static/patent/icon-gz.png" alt="" />关注</span ><img src="@/static/patent/icon-gz.png" alt="" />关注</span
> >
<span v-else <span v-else
><img src="@/static/patent/icon-gz-select.png" alt="" />关注</span ><img src="@/static/patent/icon-gz-select.png" alt="" />关注</span
> >
</div> </div>
<a-tabs v-model:activeKey="activeKey" style="background: #fff;"> <a-tabs v-model:activeKey="activeKey" style="background: #fff">
<a-tab-pane key="企业概况" tab="企业概况"> <a-tab-pane key="企业概况" tab="企业概况">
<companyProfile></companyProfile> <companyProfile :baseinfo="baseinfo"></companyProfile>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="研发概要" tab="研发概要"> <a-tab-pane key="研发概要" tab="研发概要">
<overview></overview> <overview></overview>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="技术合作" tab="技术合作"> <a-tab-pane key="技术合作" tab="技术合作">
<cooperation></cooperation> <cooperation></cooperation>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="科创能力评价" tab="科创能力评价"> <a-tab-pane key="科创能力评价" tab="科创能力评价">
<technology></technology> <technology></technology>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
<a-modal <a-modal
v-model:visible="visible" v-model:visible="visible"
title="导出" title="导出"
@ok="daochu(details)" @ok="daochu()"
cancelText="取消" cancelText="取消"
okText="确定" okText="确定"
@onCancel="closeModal" @onCancel="closeModal"
> >
<p>请选择报告格式,请稍后在历史记录里查看</p>
<p>报告格式&nbsp;&nbsp;&nbsp;<span class="PDF">PDF</span></p> <p>报告格式&nbsp;&nbsp;&nbsp;<span class="PDF">PDF</span></p>
<a-form <a-form :model="formState">
:model="formState"
>
<a-form-item <a-form-item
:name="'email'" :name="'email'"
label="发送给" label="发送给"
:rules="[{ type: 'email',required: true, message: '请输入正确的邮箱' }]" :rules="[
{ type: 'email', required: true, message: '请输入正确的邮箱' },
]"
> >
<a-input v-model:value="formState.email" /> <a-input
v-model:value="formState.email"
placeholder="请输入邮箱地址"
/>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script> <script>
import EchartsCloud from "../../components/EchartsCloud.vue"; import * as echarts from "echarts";
import companyProfile from "./companyProfile.vue"; import companyProfile from "./companyProfile.vue";
import { enterpriseDetail,exportword } from "../../utils/indexApi.js";
import overview from "./overview.vue"; import overview from "./overview.vue";
import cooperation from "./cooperation.vue" import { message } from "ant-design-vue";
import technology from "./technology.vue" import cooperation from "./cooperation.vue";
import technology from "./technology.vue";
import docxtemplater from "docxtemplater";
import PizZip from "pizzip";
import JSZipUtils from "jszip-utils";
import { saveAs } from "file-saver";
import ImageModule from "docxtemplater-image-module-free";
export default { export default {
name: "companyDetails", name: "companyDetails",
data() { data() {
return { return {
formState:{ formState: {
email:'' email: "",
}, },
visible: false, visible: false,
email: "", email: "",
...@@ -104,42 +130,14 @@ export default { ...@@ -104,42 +130,14 @@ export default {
value: 301, value: 301,
}, },
], ],
list: [ baseinfo: {},
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
info: "一种基于人工智能的雷达视频数据融合方法",
range:
"提供智能化科技服务,智能仓储,装直径单桩人工智能单钩硬件销售;机械设备研发",
},
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
info: "一种基于人工智能的雷达视频数据融合方法",
range:
"提供智能化科技服务,智能仓储,装直径单桩人工智能单钩硬件销售;机械设备研发",
},
],
}; };
}, },
components: { components: {
EchartsCloud,
companyProfile, companyProfile,
cooperation, cooperation,
overview, overview,
technology technology,
}, },
methods: { methods: {
openModal() { openModal() {
...@@ -149,11 +147,157 @@ export default { ...@@ -149,11 +147,157 @@ export default {
this.visible = false; this.visible = false;
}, },
//返回上一页 //返回上一页
backbtn(){ backbtn() {
this.$router.go(-1) this.$router.go(-1);
} },
//页面初始化
init(id) {
enterpriseDetail({ id: id }).then((res) => {
if (res.code == 0) {
this.baseinfo = res.data;
} else {
message.error(res.msg);
}
});
},
daochu() {
var that = this;
let date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
month = month > 9 ? month : "0" + month;
day = day < 10 ? "0" + day : day;
var today = year + "年" + month + "月" + day + "日";
// var chartDom1 = document.getElementById("techAera");
// let myChart1 = null;
// myChart1 = echarts.init(chartDom1);
// // // 第一个echrts
// myChart1.setOption({
// series: [
// {
// type: "wordCloud",
// gridSize: 10,
// sizeRange: [14, 60],
// rotationRange: [0, 0],
// //随机生成字体颜色
// // maskImage: maskImage,
// textStyle: {
// color: function () {
// return (
// "rgb(" +
// Math.round(Math.random() * 255) +
// ", " +
// Math.round(Math.random() * 255) +
// ", " +
// Math.round(Math.random() * 255) +
// ")"
// );
// },
// },
// left: "center",
// top: "center",
// right: null,
// bottom: null,
// width: "200%",
// height: "200%",
// //数据
// data: that.techArr,
// },
// ],
// });
setTimeout(() => {
// 加setTimeout是为了让echarts渲染完成后生成图片
JSZipUtils.getBinaryContent("company.docx", function (error, content) {
// 抛出异常
if (error) {
throw error;
}
const opts = {
centered: false,
fileType: "docx",
};
opts.getImage = function (tagValue) {
if (tagValue.size && tagValue.data) {
return base64DataURLToArrayBuffer(tagValue.data);
}
return base64DataURLToArrayBuffer(tagValue);
};
opts.getSize = function (_, tagValue) {
if (tagValue.size && tagValue.data) {
return tagValue.size;
}
return [630, 500];
};
// 创建一个JSZip实例,内容为模板的内容
const zip = new PizZip(content);
// 创建并加载docxtemplater实例对象
const doc = new docxtemplater().loadZip(zip);
doc.setOptions({
nullGetter: function () {
//设置空值 undefined 为''
return "";
},
});
// 设置图片模块
doc.attachModule(new ImageModule(opts));
// 设置模板变量的值
doc.setData({
...that.baseinfo,
today,
// image1: myChart1.getDataURL({
// pixelRatio: 5, //导出的图片分辨率比率,默认是1
// backgroundColor: "#fff", //图表背景色
// excludeComponents: ["toolbox"], //忽略组件的列表
// type: "png", //图片类型支持png和jpeg
// }),
});
try {
// 用模板变量的值替换所有模板变量
doc.render();
} catch (error) {
console.error("导出报表失败");
throw error;
}
// 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)
let out = doc.getZip().generate({
type: "blob",
mimeType:
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
});
//formData文件流
// that.blobToBase64(out);
// 将目标文件对象保存为目标类型的文件,并命名
saveAs(out, `公司详情报告.docx`);
});
}, 1000);
},
blobToBase64(blob) {
return new Promise((resolve, reject) => {
const fileReader = new FileReader();
fileReader.onload = (e) => {
setTimeout(function () {
exportword({ file: e.target.result }).then((res) => {});
}, 300);
};
// readAsDataURL
fileReader.readAsDataURL(blob);
fileReader.onerror = () => {
reject(new Error("文件流异常"));
};
});
},
},
created() {
let id = this.$route.query.id;
this.init(id);
}, },
created() {},
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -240,9 +384,8 @@ export default { ...@@ -240,9 +384,8 @@ export default {
} }
} }
} }
:deep(.ant-tabs > .ant-tabs-nav){ :deep(.ant-tabs > .ant-tabs-nav) {
padding-left: 30px; padding-left: 30px;
} }
} }
</style> </style>
...@@ -11,42 +11,42 @@ ...@@ -11,42 +11,42 @@
:labelStyle="{ background: '#F2F9FC' }" :labelStyle="{ background: '#F2F9FC' }"
> >
<a-descriptions-item label="法定代表人" <a-descriptions-item label="法定代表人"
>Cloud Database</a-descriptions-item >{{ baseinfo.legal }}</a-descriptions-item
> >
<a-descriptions-item label="经营状态">Prepaid</a-descriptions-item> <a-descriptions-item label="经营状态">{{ baseinfo.status }}</a-descriptions-item>
<a-descriptions-item label="成立日期">YES</a-descriptions-item> <a-descriptions-item label="成立日期">{{ baseinfo.build_date }}</a-descriptions-item>
<a-descriptions-item label="工商注册号" <a-descriptions-item label="工商注册号"
>2018-04-24 18:00:00</a-descriptions-item >{{ baseinfo.register_code }}</a-descriptions-item
> >
<a-descriptions-item label="注册资本">$80.00</a-descriptions-item> <a-descriptions-item label="注册资本">{{ baseinfo.capital }}</a-descriptions-item>
<a-descriptions-item label="实缴资本">授权日</a-descriptions-item> <a-descriptions-item label="实缴资本">{{ baseinfo.actual_capital }}</a-descriptions-item>
<a-descriptions-item label="统一社会信用代码" <a-descriptions-item label="统一社会信用代码"
>授权日</a-descriptions-item >{{ baseinfo.social_code }}</a-descriptions-item
> >
<a-descriptions-item label="纳税人识别号" <a-descriptions-item label="纳税人识别号"
>授权日</a-descriptions-item >{{ baseinfo.tax_code }}</a-descriptions-item
> >
<a-descriptions-item label="组织机构代码" <a-descriptions-item label="组织机构代码"
>授权日</a-descriptions-item >{{ baseinfo.company_code }}</a-descriptions-item
> >
<a-descriptions-item label="营业期限">授权日</a-descriptions-item> <a-descriptions-item label="营业期限">{{ baseinfo.from_time }}-{{ baseinfo.to_time }}</a-descriptions-item>
<a-descriptions-item label="纳税人资质">授权日</a-descriptions-item> <a-descriptions-item label="纳税人资质">{{ baseinfo.tax_qualification }}</a-descriptions-item>
<a-descriptions-item label="核准日期">授权日</a-descriptions-item> <a-descriptions-item label="核准日期">{{ baseinfo.approval_date }}</a-descriptions-item>
<a-descriptions-item label="企业类型">授权日</a-descriptions-item> <a-descriptions-item label="企业类型">{{ baseinfo.entype }}</a-descriptions-item>
<a-descriptions-item label="行业">授权日</a-descriptions-item> <a-descriptions-item label="行业">{{ baseinfo.company_industry }}</a-descriptions-item>
<a-descriptions-item label="人员规模">人员规模</a-descriptions-item> <a-descriptions-item label="人员规模">{{ baseinfo.staff_range }}</a-descriptions-item>
<a-descriptions-item label="参保人数">参保人数</a-descriptions-item> <a-descriptions-item label="参保人数">{{ baseinfo.bao_num }}</a-descriptions-item>
<a-descriptions-item label="登记机关">登记机关</a-descriptions-item> <a-descriptions-item label="登记机关">{{ baseinfo.register_org }}</a-descriptions-item>
<a-descriptions-item label="曾用名">曾用名</a-descriptions-item> <a-descriptions-item label="曾用名">{{ baseinfo.history_name?baseinfo.history_name:'无' }}</a-descriptions-item>
<a-descriptions-item label="英文名">英文名</a-descriptions-item> <a-descriptions-item label="英文名">{{ baseinfo.en_name }}</a-descriptions-item>
<a-descriptions-item label=""></a-descriptions-item> <a-descriptions-item label=""></a-descriptions-item>
<a-descriptions-item label=""></a-descriptions-item> <a-descriptions-item label=""></a-descriptions-item>
<a-descriptions-item label="注册地址" :span="3" <a-descriptions-item label="注册地址" :span="3"
>注册地址 >{{ baseinfo.address }}
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="经营范围" :span="3" <a-descriptions-item label="经营范围" :span="3"
>经营范围</a-descriptions-item >{{ baseinfo.business_scope }}</a-descriptions-item
> >
</a-descriptions> </a-descriptions>
</div> </div>
...@@ -130,6 +130,9 @@ ...@@ -130,6 +130,9 @@
<script> <script>
export default { export default {
name: "companyProfile", name: "companyProfile",
props:{
baseinfo:Object,
},
data() { data() {
return { return {
activeKey_shareholder: "工商登记", activeKey_shareholder: "工商登记",
......
...@@ -9,11 +9,13 @@ ...@@ -9,11 +9,13 @@
</a-select> </a-select>
</template> </template>
<template #addonAfter> <template #addonAfter>
<img <div @click="onsearch">
style="padding-right: 5px" <img
src="@/static/home/index/icon-search.png" style="padding-right: 5px"
alt="" src="@/static/home/index/icon-search.png"
/>搜索 alt=""
/>搜索
</div>
</template> </template>
</a-input> </a-input>
</div> </div>
...@@ -50,14 +52,10 @@ ...@@ -50,14 +52,10 @@
placeholder="请选择" placeholder="请选择"
></a-select> ></a-select>
</a-form-item> </a-form-item>
<a-form-item <a-form-item name="range-picker" label="注册时间">
name="range-picker"
label="注册时间"
v-bind="rangeConfig"
>
<a-config-provider :locale="zh_CN"> <a-config-provider :locale="zh_CN">
<a-range-picker <a-range-picker
v-model:value="formState['range-picker']" v-model:value="formState['rangetime1']"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/> />
</a-config-provider> </a-config-provider>
...@@ -71,17 +69,19 @@ ...@@ -71,17 +69,19 @@
></a-select> ></a-select>
</a-form-item> --> </a-form-item> -->
<a-form-item label="注册资本"> <a-form-item label="注册资本">
<a-input <a-input-number
v-model:value="formState.fieldA" v-model="formState.capital_nums_min"
style="width: 40%" :min="0"
placeholder="请输入关键词" style="width: 47%"
/> placeholder="请输入数值"
></a-input-number>
- -
<a-input <a-input-number
style="width: 40%" v-model="formState.capital_nums_max"
v-model:value="formState.fieldA" :min="0"
placeholder="请输入关键词" style="width: 47%"
/> placeholder="请输入数值"
></a-input-number>
</a-form-item> </a-form-item>
<a-form-item label="企业创新排名"> <a-form-item label="企业创新排名">
<a-select <a-select
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
class="card" class="card"
v-for="item in companylist" v-for="item in companylist"
:key="item" :key="item"
@click="openCompany(item.company_name)" @click="openCompany(item.mysql_id)"
> >
<div class="card_title">{{ item.company_name }}</div> <div class="card_title">{{ item.company_name }}</div>
<!-- 关注 --> <!-- 关注 -->
...@@ -195,7 +195,11 @@ ...@@ -195,7 +195,11 @@
<script> <script>
import dayjs from "dayjs"; import dayjs from "dayjs";
import arealist from "../../utils/map.js"; import arealist from "../../utils/map.js";
import { enterpriseList, industryType } from "../../utils/indexApi.js"; import {
enterpriseList,
industryType,
enterpriseSelect,
} 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";
dayjs.locale("zh-cn"); dayjs.locale("zh-cn");
...@@ -205,8 +209,9 @@ export default { ...@@ -205,8 +209,9 @@ export default {
return { return {
zh_CN, zh_CN,
total: 0, total: 0,
keyword: "",
type: "",
valueArea: [], valueArea: [],
value2: [],
optionsArea: [], optionsArea: [],
valueInnovation: "", valueInnovation: "",
optionsInnovation: [ optionsInnovation: [
...@@ -220,61 +225,24 @@ export default { ...@@ -220,61 +225,24 @@ export default {
{ label: "专精特新小巨人", value: "专精特新小巨人" }, { label: "专精特新小巨人", value: "专精特新小巨人" },
{ label: "上市挂牌企业", value: "上市挂牌企业" }, { label: "上市挂牌企业", value: "上市挂牌企业" },
], ],
optionsindustry:[], optionsindustry: [],
industryType:[], industryvalue: [],
valueType: [], valueType: [],
formState: { formState: {
layout: "horizontal", capital_nums_min: "",
fieldA: "", capital_nums_max: "",
fieldB: "", rangetime1: [],
}, },
filter: [], filter: [],
companylist: [ companylist: [],
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
code: "91140000110014569B",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
follow: 1,
},
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
code: "91140000110014569B",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
follow: 0,
},
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
code: "91140000110014569B",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
follow: 1,
},
],
}; };
}, },
components: {}, components: {},
methods: { methods: {
//获取企业列表 //获取企业列表
getCompanyList() { getCompanyList(keyword) {
let params = { let params = {
keyword: this.$route.params.keyword || "", keyword: keyword || "",
page: 1, page: 1,
size: 10, size: 10,
}; };
...@@ -301,79 +269,171 @@ export default { ...@@ -301,79 +269,171 @@ export default {
}); });
} }
}); });
console.log(this.optionsindustry)
}); });
}, },
//改变页码 //改变页码
onChange(page) { onChange(page) {
this.patentdata = []; //修改省份的格式
let area = [];
if (this.valueArea.length != 0) {
this.valueArea.forEach((item) => {
if (item.length == 1) {
area.push(item[0]);
} else if (item.length == 2) {
area.push(item[1]);
}
});
}
//修改国民经济行业的格式
let company_industry = [];
if (this.industryvalue.length != 0) {
this.industryvalue.forEach((item) => {
if (item.length == 1) {
company_industry.push(item[0]);
} else if (item.length == 2) {
company_industry.push(item[1]);
}
});
}
this.companylist = [];
let params = { let params = {
page: page, page: page,
size: 10, size: 10,
keyword: this.keyword ? this.keyword : null, keyword: this.keyword ? this.keyword : null,
// zl_type: this.value1, area: area,
// sqrq_start: this.formState.rangetime1 company_industry: company_industry,
// ? this.formState.rangetime1[0] qualification: this.valueType,
// : null, start_date: this.formState.rangetime1
// sqrq_end: this.formState.rangetime1 ? this.formState.rangetime1[0]
// ? this.formState.rangetime1[1] : null,
// : null, end_date: this.formState.rangetime1
// gkrq_start: this.formState.rangetime2 ? this.formState.rangetime1[1]
// ? this.formState.rangetime2[0] : null,
// : null, capital_nums_min: Number(this.formState.capital_nums_min),
// gkrq_end: this.formState.rangetime2 capital_nums_max: Number(this.formState.capital_nums_max),
// ? this.formState.rangetime2[1] innovate: this.valueInnovation,
// : null,
// zl_status: this.value2,
}; };
//请求接口
enterpriseSelect({ ...params }).then((res) => {
console.log(res);
if (res.code == 0) {
this.companylist = res.data.list;
this.total = res.data.total;
}
});
}, },
//重置筛选 //重置筛选
clearvalue() { clearvalue() {
this.valueArea = []; this.valueArea = [];
this.valueInnovation = []; this.valueInnovation = [];
this.valueType = []; this.valueType = [];
this.formState = {
capital_nums_min: "",
capital_nums_max: "",
rangetime1: [],
};
this.industryvalue = [];
}, },
//点击筛选 //点击筛选
Filter() { Filter() {
this.filter = []; //修改省份的格式
let area = [];
if (this.valueArea.length != 0) {
this.valueArea.forEach((item) => {
if (item.length == 1) {
area.push(item[0]);
} else if (item.length == 2) {
area.push(item[1]);
}
});
}
// //将筛选条件渲染到页面上 //修改国民经济行业的格式
// for (var key in parma) { let company_industry = [];
// if (key == "keyword") { if (this.industryvalue.length != 0) {
// parma.keyword ? this.filter.push(parma.keyword) : ""; this.industryvalue.forEach((item) => {
// } else if (key == "zl_type") { if (item.length == 1) {
// if (this.value1.length != 0) { company_industry.push(item[0]);
// this.value1.forEach((item) => { } else if (item.length == 2) {
// this.filter.push(item); company_industry.push(item[1]);
// }); }
// } });
// } else if (key == "zl_status") { }
// if (this.value2.length != 0) {
// this.value2.forEach((item) => { //企业结果
// this.filter.push(item); this.companylist = [];
// }); let params = {
// } page: 1,
// } size: 10,
// } keyword: this.keyword ? this.keyword : null,
area: area,
company_industry: company_industry,
qualification: this.valueType,
start_date: this.formState.rangetime1
? this.formState.rangetime1[0]
: null,
end_date: this.formState.rangetime1
? this.formState.rangetime1[1]
: null,
capital_nums_min: Number(this.formState.capital_nums_min),
capital_nums_max: Number(this.formState.capital_nums_max),
innovate: this.valueInnovation,
};
//将筛选条件渲染到页面上//搜索结果标签
let filter = [];
this.filter = [];
for (var key in params) {
filter = [
...params.area,
...params.company_industry,
...params.qualification,
];
if (key == "keyword") {
params.keyword ? filter.push(params.keyword) : "";
}
}
this.filter = filter;
//请求接口
enterpriseSelect({ ...params }).then((res) => {
console.log(res);
if (res.code == 0) {
this.companylist = res.data.list;
this.total = res.data.total;
}
});
}, },
//打开企业详情 //打开企业详情
openCompany(name) { openCompany(id) {
this.$router.push({ this.$router.push({
path: "/companyDetails", path: "/companyDetails",
query: { query: {
name: name, id: id,
}, },
}); });
}, },
onsearch() {
this.getCompanyList(this.keyword);
},
}, },
created() { created() {
this.getCompanyList();
this.getindustryType(); this.getindustryType();
this.optionsArea = arealist; this.optionsArea = arealist;
this.keyword = this.$route.query.keyword; this.keyword = this.$route.query.keyword;
this.getCompanyList(this.keyword);
this.valueInnovation = this.$route.query.valueInnovation; this.valueInnovation = this.$route.query.valueInnovation;
this.type = "企业"; this.type = "企业";
}, },
watch: {
type: function (newV, oldV) {
// console.log(newV)
if (newV == "专利") {
this.$router.push({
path: "/patent",
});
}
},
},
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
......
...@@ -110,28 +110,26 @@ export default { ...@@ -110,28 +110,26 @@ export default {
this.$router.push({ this.$router.push({
path: "/company", path: "/company",
}); });
break; break;
case "首页": case "首页":
this.$router.push({ this.$router.push({
path: "/home", path: "/home",
}); });
break; break;
case "专利": case "专利":
this.$router.push({ this.$router.push({
path: "/patent", path: "/patent",
}); });
break; break;
case "历史记录": case "历史记录":
this.$router.push({ this.$router.push({
path: "/history", path: "/history",
}); });
break; break;
case "我的关注": case "我的关注":
this.$router.push({ this.$router.push({
path: "/follow", path: "/follow",
}); });
...@@ -144,26 +142,38 @@ export default { ...@@ -144,26 +142,38 @@ export default {
let path = this.$route.path; let path = this.$route.path;
switch (path) { switch (path) {
case "/company" || "/companyDetails": case "/company" || "/companyDetails":
this.current = "企业";
localStorage.setItem('current','企业')
this.current =localStorage.getItem("current");
break; break;
case "/home": case "/home":
this.current = "首页"; // this.current = "首页";
localStorage.setItem('current','首页')
this.current =localStorage.getItem("current");
break; break;
case "/patent" || "/patentDetails": case "/patent" || "/patentDetails":
this.current = "专利"; // this.current = "专利";
localStorage.setItem('current','专利')
this.current =localStorage.getItem("current");
break; break;
case "/history": case "/history":
this.current = "历史记录"; this.current = "历史记录";
localStorage.setItem('current','历史记录')
this.current =localStorage.getItem("current");
break; break;
case "/follow": case "/follow":
this.current = "我的关注"; localStorage.setItem('current','我的关注')
this.current =localStorage.getItem("current");
break; break;
} }
}, },
}, },
mounted() {}, mounted() {
this.current =localStorage.getItem("current");
},
created() { created() {
this.username = this.$store.state.username; this.username = this.$store.state.username;
}, },
}; };
</script> </script>
......
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
:model="formState" :model="formState"
name="normal_login" name="normal_login"
class="login-form" class="login-form"
@finish="onFinish" ref="form"
@finishFailed="onFinishFailed" :rules="formRules"
> >
<a-form-item <a-form-item
name="phone" name="phone"
...@@ -161,9 +161,39 @@ export default { ...@@ -161,9 +161,39 @@ export default {
password: "", password: "",
repassword: "", repassword: "",
}, },
formRules: {
phone: [
{ required: true, message: "请输入手机号!" },
{
pattern:
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
message: "手机号格式不正确!",
validateTrigger: "onBlur",
},
],
repassword: [
{ required: true, message: "请输入密码!" },
{
validator: this.validateConfirmPassword,
message: "两次密码不匹配",
},
],
code: [{ required: true, message: "请输入验证码!" }],
password: [{ required: true, message: "请输入密码!" }],
},
}; };
}, },
methods: { methods: {
//验证两次密码
validateConfirmPassword(rule, value) {
return new Promise((resolve, reject) => {
if (value && value !== this.formState.newpwd) {
reject(new Error());
} else {
resolve();
}
});
},
//发送验证码 //发送验证码
sendCode() { sendCode() {
if (this.formState.phone) { if (this.formState.phone) {
...@@ -178,7 +208,10 @@ export default { ...@@ -178,7 +208,10 @@ export default {
this.RemainingTime = TIME_COUNT; this.RemainingTime = TIME_COUNT;
this.isSend = true; this.isSend = true;
this.timer = setInterval(() => { this.timer = setInterval(() => {
if (this.RemainingTime > 0 && this.RemainingTime <= TIME_COUNT) { if (
this.RemainingTime > 0 &&
this.RemainingTime <= TIME_COUNT
) {
this.RemainingTime--; this.RemainingTime--;
} else { } else {
this.isSend = false; this.isSend = false;
...@@ -197,22 +230,31 @@ export default { ...@@ -197,22 +230,31 @@ export default {
}, },
//reset //reset
reset() { reset() {
let param = AES_Encrypt( this.$refs.form
JSON.stringify({ .validate()
phone: this.formState.phone, .then((values) => {
code: this.formState.code, let param = AES_Encrypt(
password: this.formState.password, JSON.stringify({
re_password: this.formState.repassword, phone: this.formState.phone,
code: this.formState.code,
password: this.formState.password,
re_password: this.formState.repassword,
})
);
changePassword({ param }).then((res) => {
// console.log(res)
if (res.code == 0) {
this.resetShow = true;
} else {
message.error(res.msg);
}
});
}) })
); .catch((err) => {
changePassword({ param }).then((res) => { // console.log(err);
// console.log(res) return false;
if (res.code == 0) { // 处理验证失败的情况
this.resetShow = true; });
} else {
message.error(res.msg);
}
});
}, },
tologin() { tologin() {
this.$router.push({ this.$router.push({
......
...@@ -8,12 +8,15 @@ ...@@ -8,12 +8,15 @@
<a-select-option value="专利">查专利</a-select-option> <a-select-option value="专利">查专利</a-select-option>
</a-select> </a-select>
</template> </template>
<template #addonAfter> <template #addonAfter >
<img <div @click="onsearch">
<img
style="padding-right: 5px" style="padding-right: 5px"
src="@/static/home/index/icon-search.png" src="@/static/home/index/icon-search.png"
alt="" alt=""
/>搜索 />搜索
</div>
</template> </template>
</a-input> </a-input>
</div> </div>
...@@ -131,6 +134,7 @@ export default { ...@@ -131,6 +134,7 @@ export default {
data() { data() {
return { return {
zh_CN, zh_CN,
type:'',
value1: [], value1: [],
value2: [], value2: [],
keyword: "", keyword: "",
...@@ -188,9 +192,9 @@ export default { ...@@ -188,9 +192,9 @@ export default {
components: {}, components: {},
methods: { methods: {
//获取页面的表格 //获取页面的表格
getList() { getList(keyword) {
let params = { let params = {
keyword: this.$route.params.keyword || "", keyword: keyword|| this.$route.query.keyword,
page: 1, page: 1,
size: 10, size: 10,
}; };
...@@ -205,6 +209,9 @@ export default { ...@@ -205,6 +209,9 @@ export default {
} }
}); });
}, },
onsearch(){
this.getList(this.keyword)
},
//改变页码 //改变页码
onChange(page) { onChange(page) {
this.patentdata = []; this.patentdata = [];
...@@ -246,7 +253,9 @@ export default { ...@@ -246,7 +253,9 @@ export default {
}, },
//点击筛选 //点击筛选
Filter() { Filter() {
//搜索结果标签
this.filter = []; this.filter = [];
//专利列表
this.patentdata = []; this.patentdata = [];
let parma = { let parma = {
page: 1, page: 1,
...@@ -312,10 +321,19 @@ export default { ...@@ -312,10 +321,19 @@ export default {
}; };
}, },
}, },
watch: {
type: function (newV, oldV) {
// console.log(newV)
if (newV == "企业") {
this.$router.push({
path: "/company",
});
}
},
},
created() { created() {
this.getList();
this.keyword = this.$route.query.keyword; this.keyword = this.$route.query.keyword;
this.getList(this.keyword);
this.type = "专利"; this.type = "专利";
}, },
computed: {}, computed: {},
......
...@@ -7,49 +7,168 @@ ...@@ -7,49 +7,168 @@
</a-breadcrumb> </a-breadcrumb>
<!-- 安全设置--> <!-- 安全设置-->
<div class="personal_set"> <div class="personal_set">
<a-form <h2 class="title">安全设置</h2>
:model="formState" <a-form
name="basic" :model="formState"
:label-col="{ span: 2 }" name="basic"
:wrapper-col="{ span: 5 }" :label-col="{ span: 2 }"
autocomplete="off" :wrapper-col="{ span: 5 }"
> autocomplete="off"
<a-form-item label="手机号" name="img" class="header_label"> ref="form"
<a-input v-model:value="formState.phone" /> :rules="formRules"
</a-form-item> >
<a-form-item label="验证码" name="code"> <a-form-item label="手机号" name="phone">
<a-input v-model:value="formState.code" /> <a-input v-model:value="formState.phone" placeholder="请输入手机号" />
</a-form-item> </a-form-item>
<a-form-item label="验证码" name="code">
<a-input v-model:value="formState.code" placeholder="请输入验证码">
<template #suffix>
<span v-show="!isSend" class="code" @click="sendCode"
>获取验证码</span
>
<span v-show="isSend" class="code">
{{ RemainingTime }}
秒后重新获取
</span>
</template>
</a-input>
</a-form-item>
<a-form-item label="新密码" name="newpwd"> <a-form-item label="新密码" name="newpwd">
<a-input v-model:value="formState.newpwd" /> <a-input-password
</a-form-item> v-model:value="formState.newpwd"
<a-form-item label="确认密码" name="renewpwd"> placeholder="请输入新密码"
<a-input v-model:value="formState.renewpwd" /> />
</a-form-item> </a-form-item>
<div class="save_btn"> <a-form-item label="确认密码" name="renewpwd">
<a-button type="primary" html-type="submit" @click="save"> <a-input-password
保存 v-model:value="formState.renewpwd"
</a-button> placeholder="请再次输入新密码"
</div> />
</a-form> </a-form-item>
</div> <div class="save_btn">
<a-button type="primary" html-type="submit" @click="reset">
保存
</a-button>
</div>
</a-form>
</div>
</div> </div>
</template> </template>
<script> <script>
import { AES_Encrypt, AES_Decrypt } from "@/utils/aes_util.js";
import { message } from "ant-design-vue";
import { changePassword, sendSms } from "@/utils/loginAPI";
export default { export default {
name: "securitySetting", name: "securitySetting",
data(){ data() {
return{ return {
formState:{ isSend: "",
phone:'', RemainingTime: 0,
code:'', formState: {
newpwd:'', phone: "",
renewpwd:'' code: "",
newpwd: "",
renewpwd: "",
},
formRules: {
phone: [
{ required: true, message: "请输入手机号!" },
{
pattern:
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
message: "手机号格式不正确!",
validateTrigger: "onBlur",
},
],
renewpwd: [
{ required: true, message: "请输入密码!" },
{
validator: this.validateConfirmPassword,
message: "两次密码不匹配",
},
],
code: [{ required: true, message: "请输入验证码!" }],
newpwd: [{ required: true, message: "请输入密码!" }],
},
};
},
methods: {
//验证两次密码
validateConfirmPassword(rule, value) {
return new Promise((resolve, reject) => {
if (value && value !== this.formState.newpwd) {
reject(new Error());
} else {
resolve();
}
});
},
//发送验证码
sendCode() {
if (this.phone) {
sendSms({ phone: this.phone }).then((res) => {
// console.log(res)
if (res.code == 0) {
this.isSend = true;
const TIME_COUNT = 60;
message.success(res.msg);
//获取验证码倒计时
if (!this.timer) {
this.RemainingTime = TIME_COUNT;
this.isSend = true;
this.timer = setInterval(() => {
if (
this.RemainingTime > 0 &&
this.RemainingTime <= TIME_COUNT
) {
this.RemainingTime--;
} else {
this.isSend = false;
clearInterval(this.timer);
this.timer = null;
}
}, 1000);
}
} else {
message.error(res.msg);
}
});
} else {
message.error("请先输入手机号");
} }
} },
}
//reset
reset() {
this.$refs.form
.validate()
.then((values) => {
let param = AES_Encrypt(
JSON.stringify({
phone: this.formState.phone,
code: this.formState.code,
password: this.formState.newpwd,
re_password: this.formState.renewpwd,
})
);
changePassword({ param }).then((res) => {
// console.log(res)
if (res.code == 0) {
this.resetShow = true;
} else {
message.error(res.msg);
}
});
})
.catch((err) => {
// console.log(err);
return false;
// 处理验证失败的情况
});
},
},
}; };
</script> </script>
...@@ -70,11 +189,23 @@ export default { ...@@ -70,11 +189,23 @@ export default {
height: calc(100% - 80px); height: calc(100% - 80px);
background-color: #fff; background-color: #fff;
padding: 40px 40px; padding: 40px 40px;
.title {
color: #1c1c28;
font-size: 18px;
font-family: Microsoft YaHei UI-Bold, Microsoft YaHei UI;
font-weight: bold;
margin-left: 4%;
line-height: 28px;
margin-bottom: 2%;
}
.code {
color: #3e7bfa;
cursor: pointer;
}
} }
.save_btn { .save_btn {
padding-left: 150px; padding-left: 150px;
padding-top: 20px; padding-top: 20px;
} }
} }
</style> </style>
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