Browse Source

完善功能

master
lucky 4 years ago
parent
commit
1187be95e4
  1. 16
      src/components/FooterPage/FooterPage.vue
  2. 9
      src/components/FooterPage/FriendShip.vue
  3. 586
      src/components/Introduce/InformationModel.vue
  4. 5
      src/components/Introduce/PartnerShip.styl
  5. 2
      src/components/Introduce/PartnerShip.vue
  6. 12
      src/components/PlatformList/PlatformList.vue
  7. 4
      src/components/PlatformList/Tutors.vue
  8. 31
      src/components/SettledEnterprise/SettledEnterprise.vue
  9. 32
      src/config/api.js
  10. 4
      src/plugins/ant-design-vue.js
  11. 2
      src/views/About/Children/Introduce.vue
  12. 14
      src/views/Activity/Activity.vue
  13. 185
      src/views/Challenge/Children/Notice.vue
  14. 116
      src/views/Challenge/Children/Release.vue
  15. 269
      src/views/Challenge/components/Enroll.vue
  16. 206
      src/views/Challenge/components/Unveiling.vue
  17. 5
      src/views/IncubationPlatform/Children/MakerSpace.vue
  18. 23
      src/views/IncubationPlatform/Children/Products.vue
  19. 155
      src/views/IncubationPlatform/Children/Tutor.vue
  20. 10
      src/views/IncubationPlatform/Children/place/EntitySpace.vue
  21. 10
      src/views/IncubationPlatform/Children/place/VirtualSpace.vue
  22. 396
      src/views/IncubationPlatform/components/AddProject.vue
  23. 19
      src/views/Industry/Children/Serve.vue
  24. 58
      src/views/Industry/Children/Union.vue
  25. 85
      src/views/Knowledge/Knowledge.vue
  26. 127
      src/views/Knowledge/components/classify.vue
  27. 102
      src/views/Knowledge/components/knowContent.vue
  28. 7
      src/views/NewPlatform/Children/Core.vue
  29. 5
      src/views/NewPlatform/Children/Develop.vue
  30. 26
      src/views/NewPlatform/Children/Platform.vue
  31. 4
      src/views/NewPlatform/Children/Share.vue
  32. 6
      src/views/NewPlatform/Children/ShareChild/InsDet.vue
  33. 2
      src/views/NewPlatform/Children/Transfer.vue
  34. 9
      src/views/NewPlatform/components/NewModel.vue

16
src/components/FooterPage/FooterPage.vue

@ -40,9 +40,9 @@
</div> </div>
</div> </div>
<div class="xian"></div> <div class="xian"></div>
<div class="font-12 align-center text"> <div @click="jump" class="font-12 align-center text openLink">
Copyright © 2020 The Project by 晋ICP备 2021004314-1
<span style="color: #2e54ea">CCSENS</span>. All Rights Reserved <!-- <span style="color: #2e54ea">CCSENS</span>. All Rights Reserved -->
</div> </div>
</div> </div>
</template> </template>
@ -52,6 +52,12 @@ export default {
data() { data() {
return { str: '头部导航栏' }; return { str: '头部导航栏' };
}, },
methods: {
jump() {
window.open('http://beian.miit.gov.cn/');
},
},
}; };
</script> </script>
@ -89,4 +95,8 @@ export default {
text-align: center; text-align: center;
line-height: 90px; line-height: 90px;
} }
.openLink {
cursor: pointer;
}
</style> </style>

9
src/components/FooterPage/FriendShip.vue

@ -9,7 +9,12 @@
<div class="friend"> <div class="friend">
<div class="inner"> <div class="inner">
{{ str }} {{ str }}
<span :key="index" class="mx-2 item-friend" v-for="(item, index) in lists" @click="jump(item.url)">{{ item.name }}</span> <span
:key="index"
@click="jump(item.url)"
class="mx-2 item-friend"
v-for="(item, index) in lists"
>{{ item.name }}</span>
</div> </div>
</div> </div>
</template> </template>
@ -49,7 +54,7 @@ export default {
url: 'http://fgw.shanxi.gov.cn/', url: 'http://fgw.shanxi.gov.cn/',
}, },
{ {
name: '太原市科技', name: '太原市科技',
url: 'http://kjj.taiyuan.gov.cn/', url: 'http://kjj.taiyuan.gov.cn/',
}, },
{ {

586
src/components/Introduce/InformationModel.vue

@ -0,0 +1,586 @@
<template>
<div>
<a-button @click="showModal" type="primary">统计信息填报</a-button>
<a-modal
:confirm-loading="confirmLoading"
:okText="okText"
:title="title"
:visible="visible"
@cancel="handleCancel"
@ok="handleSubmit"
width="50%"
>
<!-- 公司信息 -->
<a-form :form="form" v-if="current === 0">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="公司名称"
required
>
<a-auto-complete
@search="handleSearchTasks"
@select="onSelect"
placeholder="公司名称"
v-model="company"
>
<template slot="dataSource">
<a-select-option
:key="task.id"
:value="`${task.id}`"
v-for="task in dataSource"
>{{ task.company }}</a-select-option>
</template>
</a-auto-complete>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系人"
>
<span>{{ companyInfo.name || '暂无' }}</span>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系方式"
>
<span>{{ companyInfo.phone || '暂无' }}</span>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="时间"
required
>
<a-date-picker
:open="yearShowOne"
@openChange="openChangeOne"
@panelChange="panelChangeOne"
format="YYYY"
mode="year"
placeholder="请选择年份"
v-model="platform.time"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="季度"
required
>
<a-select @select="onSelectQuarter" placeholder="请选择季度">
<a-select-option
:key="quarter.id"
:value="quarter.id"
v-for="quarter in quarters"
>{{ quarter.value }}</a-select-option>
</a-select>
</a-form-item>
</a-form>
<!-- 知识产权综合情况 -->
<a-form :form="form" v-if="current === 1">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="实用本年期初数"
>
<a-input-number
placeholder="请输入实用本年期初数..."
style="width:100%"
v-model.trim="platform.practicalNumber"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="实用当年新增"
>
<a-input-number
placeholder="请输入实用当年新增..."
style="width:100%"
v-model.trim="platform.practicalIncrease"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="发明本年期初数"
>
<a-input-number
placeholder="请输入发明本年期初数..."
style="width:100%"
v-model.trim="platform.inventionNumber"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="发明当年新增"
>
<a-input-number
placeholder="请输入发明当年新增..."
style="width:100%"
v-model.trim="platform.inventionIncrease"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="软著本年期初数"
>
<a-input-number
placeholder="请输入软著本年期初数..."
style="width:100%"
v-model.trim="platform.softNumber"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="软著当年新增"
>
<a-input-number
placeholder="请输入软著当年新增..."
style="width:100%"
v-model.trim="platform.softIncrease"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="商标本年期初数"
>
<a-input-number
placeholder="请输入商标本年期初数..."
style="width:100%"
v-model.trim="platform.brandNumber"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="商标当年新增"
>
<a-input-number
placeholder="请输入商标当年新增..."
style="width:100%"
v-model.trim="platform.brandIncrease"
/>
</a-form-item>
</a-form>
<!-- 综合职工情况 -->
<a-form :form="form" v-if="current === 2">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="人员总数"
>
<a-input-number
placeholder="请输入人员总数..."
style="width:100%"
v-model.trim="platform.totalNumber"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="科技人员"
>
<a-input-number
placeholder="请输入科技人员..."
style="width:100%"
v-model.trim="platform.sciencePersonnel"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="大专以上人数"
>
<a-input-number
placeholder="请输入大专以上人数..."
style="width:100%"
v-model.trim="platform.collegeaboveNumber"
/>
</a-form-item>
</a-form>
<!-- 综合经济指标 -->
<a-form :form="form" v-if="current === 3">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="资产总额"
>
<a-input-number
:precision="precision"
placeholder="请输入资产总额..."
step="0.01"
style="width:100%"
v-model.trim="platform.totalAssets"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="营业收入"
>
<a-input-number
:precision="precision"
placeholder="请输入营业收入..."
step="0.01"
style="width:100%"
v-model.trim="platform.operatingIncome"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="利润总额"
>
<a-input-number
:precision="precision"
placeholder="请输入利润总额..."
step="0.01"
style="width:100%"
v-model.trim="platform.profitTotal"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="上缴税金"
>
<a-input-number
:precision="precision"
placeholder="请输入上缴税金..."
step="0.01"
style="width:100%"
v-model.trim="platform.taxes"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="研发费用"
>
<a-input-number
:precision="precision"
placeholder="请输入研发费用..."
step="0.01"
style="width:100%"
v-model.trim="platform.researchCosts"
/>
</a-form-item>
</a-form>
<!-- 服务情况 -->
<a-form :form="form" v-if="current === 4">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="代理代办"
>
<a-input-number
placeholder="请输入代理代办..."
style="width:100%"
v-model.trim="platform.agentService"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="政策推送"
>
<a-input-number
placeholder="请输入政策推送..."
style="width:100%"
v-model.trim="platform.policyPush"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="双创活动"
>
<a-input-number
placeholder="请输入双创活动..."
style="width:100%"
v-model.trim="platform.doubleActivities"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="政策辅导"
>
<a-input-number
placeholder="请输入政策辅导..."
style="width:100%"
v-model.trim="platform.policyGuidance"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="项目申报"
>
<a-input-number
placeholder="请输入项目申报..."
style="width:100%"
v-model.trim="platform.projectDeclaration"
/>
</a-form-item>
</a-form>
<a-steps :current="current">
<a-step @click="current = 0" style="cursor: pointer">
<template slot="title">
<span v-if="current === 0">Waiting...</span>
<span v-else>完成</span>
</template>
<span slot="description">公司信息</span>
</a-step>
<a-step
:title="current > 1 ? '完成' : 'Waiting...'"
@click="current = 1"
description="知识产权综合情况(项)"
style="cursor: pointer"
/>
<a-step
:title="current > 2 ? '完成' : 'Waiting...'"
@click="current = 2"
description="综合职工情况(个)"
style="cursor: pointer"
/>
<a-step
:title="current > 3 ? '完成' : 'Waiting...'"
@click="current = 3"
description="综合经济指标"
style="cursor: pointer"
/>
<a-step
:title="current > 4 ? '完成' : 'Waiting...'"
@click="current = 4"
description="服务情况(次)"
style="cursor: pointer"
/>
</a-steps>
</a-modal>
</div>
</template>
<script>
import debounce from 'lodash/debounce';
import { mapState, mapMutations } from 'vuex';
import { addEnterprise, queryInfo } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
export default {
name: 'SettledModel',
data() {
this.handleSearchTasks = debounce(this.handleSearchTasks, 800);
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
current: 0,
fileList: [],
title: '统计信息填报',
formItemLayout,
formTailLayout,
confirmLoading: false,
okText: '下一步',
platform: {
//
placeId: '', // id
time: null, //
quarter: '', //
//
practicalNumber: '', //
practicalIncrease: '', //
inventionNumber: '', //
inventionIncrease: '', //
softNumber: '', //
softIncrease: '', //
brandNumber: '', //
brandIncrease: '', //
//
totalNumber: '', //
sciencePersonnel: '', //
collegeaboveNumber: '', //
//
agentService: '', //
policyPush: '', //
doubleActivities: '', //
policyGuidance: '', //
projectDeclaration: '', //
},
company: '',
dataSource: [],
companyInfo: {
company: '', //
name: '', //
phone: '', //
}, //
yearShowOne: false,
quarters: [
{ id: 1, value: '第一季度' },
{ id: 2, value: '第二季度' },
{ id: 3, value: '第三季度' },
{ id: 4, value: '第四季度' },
],
precision: 2,
};
},
computed: mapState('user', ['picCode']),
watch: {
current(val) {
if (val === 4) {
this.okText = '完成';
} else {
this.okText = '下一步';
}
},
},
methods: {
...mapMutations('home', ['setPagePath']),
//
showModal() {
const anyringToken = sessionStorage.getItem('anyringToken');
if (!anyringToken) {
this.setPagePath(this.$route.path);
this.$router.push('/login');
this.$message.warning('请先登录');
} else {
this.visible = true;
}
},
//
handleCancel(e) {
this.visible = false;
},
//
async handleSearchTasks() {
try {
const params = { param: { company: this.company } };
const res = await queryInfo(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.dataSource = data;
} else {
this.$message.error(msg);
}
} catch (error) {
console.log(error);
}
},
onSelect(value) {
const item = this.dataSource.find(item => item.id === +value);
this.platform.placeId = item.id;
this.companyInfo.company = item.company;
this.companyInfo.name = item.name;
this.companyInfo.phone = item.phone;
},
//
openChangeOne(status) {
//status
if (status) {
this.yearShowOne = true;
}
},
//
panelChangeOne(value) {
this.platform.time = this.$moment(value).format('YYYY');
this.yearShowOne = false;
},
//
onSelectQuarter(value) {
this.platform.quarter = value;
},
//
handleSubmit() {
const { placeId, time, quarter } = this.platform;
if (!placeId) {
this.$message.error('请输入公司名称');
this.current = 0;
return;
}
if (!time) {
this.$message.error('请选择时间');
this.current = 0;
return;
}
if (!quarter) {
this.$message.error('请选择季度');
this.current = 0;
return;
}
if (this.okText === '下一步') {
this.current += 1;
} else {
this.addSettled();
}
},
/**
* 添加企业统计信息填报表
* @param {object} params 提交的数据
*/
async addSettled() {
this.confirmLoading = true;
try {
const params = { param: {} };
params.param = { ...this.platform };
const res = await addEnterprise(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('添加成功');
this.visible = false;
for (let key in this.platform) {
this.platform[key] = '';
}
for (let key in this.companyInfo) {
this.companyInfo[key] = '';
}
this.company = '';
this.current = 0;
} else {
this.$message.error(msg || '添加失败');
}
this.confirmLoading = false;
} catch (error) {
console.log('error: ', error);
this.confirmLoading = false;
}
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
</style>

5
src/components/Introduce/PartnerShip.styl

@ -1,7 +1,7 @@
// //
.logo-box{ .logo-box{
width: 18%; width: 15%;
margin-right: 2.5%; margin-right: 2%;
border-radius: 2px; border-radius: 2px;
margin-bottom: 50px; margin-bottom: 50px;
@ -20,7 +20,6 @@
line-height: 20px; line-height: 20px;
} }
} }
} }
.logo-box1{ .logo-box1{

2
src/components/Introduce/PartnerShip.vue

@ -17,7 +17,7 @@
v-if="item.backendSearchList && item.backendSearchList.length > 0" v-if="item.backendSearchList && item.backendSearchList.length > 0"
> >
<div <div
:class="(i+1)%5===0? 'logo-box1' : ''" :class="(i+1)%6===0? 'logo-box1' : ''"
:key="i" :key="i"
@click="openProfile(list.name,list.description)" @click="openProfile(list.name,list.description)"
class="logo-box d-flex flex-column align-center white" class="logo-box d-flex flex-column align-center white"

12
src/components/PlatformList/PlatformList.vue

@ -32,6 +32,7 @@
<script> <script>
import { mapMutations, mapState } from 'vuex'; import { mapMutations, mapState } from 'vuex';
import { selInstrument, searchFront, selProduct } from 'config/api'; import { selInstrument, searchFront, selProduct } from 'config/api';
export default { export default {
name: 'PlatformList', name: 'PlatformList',
data() { data() {
@ -99,12 +100,16 @@ export default {
}, },
created() { created() {
this.current = this.shareCurrent; this.current = this.shareCurrent;
// console.log('this.listState: ', this.listState);
if (this.listState === 0) { if (this.listState === 0) {
console.log('0实验室');
this.getSear(); this.getSear();
} else if (this.listState === 1) { }
if (this.listState === 1) {
console.log('1仪器');
this.getSelI(); this.getSelI();
} else { }
if (this.listState === 3) {
console.log('3产品');
this.getProductLists(); this.getProductLists();
} }
}, },
@ -131,6 +136,7 @@ export default {
// console.log(error); // console.log(error);
} }
}, },
// //
async getSear() { async getSear() {
try { try {

4
src/components/PlatformList/Tutors.vue

@ -1,6 +1,5 @@
<template> <template>
<div> <div>
++{{fruitIpt}}
<div class="inner d-flex flex-wrap"> <div class="inner d-flex flex-wrap">
<div <div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" :class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
@ -44,6 +43,7 @@ export default {
props: { props: {
fruitIpt: { type: String, default: '' }, fruitIpt: { type: String, default: '' },
achList: { type: Array, default: () => [] }, achList: { type: Array, default: () => [] },
platform: { type: Number, default: 1 },
}, },
data() { data() {
@ -87,7 +87,7 @@ export default {
param: { param: {
pageNum: this.current, pageNum: this.current,
pageSize: 10, pageSize: 10,
platform: 2, platform: this.platform,
teacherName: this.fruitIpt, teacherName: this.fruitIpt,
teacherType: this.achList, teacherType: this.achList,
}, },

31
src/components/SettledEnterprise/SettledEnterprise.vue

@ -22,37 +22,14 @@
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span> <span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span>
</div> </div>
</div> </div>
<!-- <div
:key="0 + `${i}`"
@click="openProfile(item.company,item.introduce)"
class="ent-box-div"
v-for="(item, i) in lists"
>
<div class="ent-box pointer">
<p class="ent-index">{{ i + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item.company }}</span>
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span>
</div>
</div>
<div
:key="j"
@click="openProfile(item.company,item.introduce)"
class="ent-box-div"
v-for="(item, j) in lists"
>
<div class="ent-box pointer">
<p class="ent-index">{{ j + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item.company }}</span>
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span>
</div>
</div>-->
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> <company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" />
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { mapMutations } from 'vuex'; import { mapState, mapMutations } from 'vuex';
import CompanyProfile from '../Introduce/CompanyProfile.vue'; import CompanyProfile from '../Introduce/CompanyProfile.vue';
export default { export default {
@ -81,6 +58,8 @@ export default {
}; };
}, },
computed: mapState('home', ['profile']),
mounted() { mounted() {
const length = this.lists.length / 100; const length = this.lists.length / 100;
this.BBLineH = 76; this.BBLineH = 76;
@ -143,7 +122,7 @@ export default {
// //
openProfile(title, description) { openProfile(title, description) {
if (!description) return; // if (!description) return;
this.setProfile(null); this.setProfile(null);
const profile = { const profile = {
title, title,

32
src/config/api.js

@ -18,6 +18,8 @@ const service = `${greenvalley}/service`; // 服务相关接口
const user = `${greenvalley}/user`; // 用户相关接口 const user = `${greenvalley}/user`; // 用户相关接口
const product = `${greenvalley}/product`; // 产品相关接口 const product = `${greenvalley}/product`; // 产品相关接口
const tutorRelated = `${greenvalley}/tutorRelated`; // 导师相关接口 const tutorRelated = `${greenvalley}/tutorRelated`; // 导师相关接口
const academy = `${greenvalley}/academy`; // 知识平台接口
const releaseTheList = `${greenvalley}/releaseTheList`; // 发榜揭榜接口
// websocket基础地址 // websocket基础地址
export const WS_BASE_URL = msgUrl; export const WS_BASE_URL = msgUrl;
@ -119,9 +121,18 @@ export const selProduct = params => axios.post(`${product}/selProduct`, params);
// 查询 产品列表 详情 // 查询 产品列表 详情
export const selProductMes = params => axios.post(`${product}/selProductMes`, params); export const selProductMes = params => axios.post(`${product}/selProductMes`, params);
// 添加 产品
export const addProduct = params => axios.post(`${product}/addProduct`, params);
// 入驻企业申请 // 入驻企业申请
export const Settled = params => axios.post(`${greenvalley}/place/apply`, params); export const Settled = params => axios.post(`${greenvalley}/place/apply`, params);
// 查询企业简介信息(根据名字模糊搜索)
export const queryInfo = params => axios.post(`${greenvalley}/place/queryInfo`, params);
// 添加企业统计信息填报表
export const addEnterprise = params => axios.post(`${greenvalley}/place/addEnterprise`, params);
// 入驻企业名录查询 // 入驻企业名录查询
export const searchEnt = params => axios.post(`${greenvalley}/place/searchFront`, params); export const searchEnt = params => axios.post(`${greenvalley}/place/searchFront`, params);
@ -130,3 +141,24 @@ export const selTeacher = params => axios.post(`${tutorRelated}/selTeacher`, par
// 查询 导师分类 // 查询 导师分类
export const selTutor = params => axios.post(`${tutorRelated}/selTutor`, params); export const selTutor = params => axios.post(`${tutorRelated}/selTutor`, params);
// 知识平台栏目查询
export const getQueryMold = params => axios.post(`${academy}/queryMold`, params);
// 知识平台内容查询
export const back = params => axios.post(`${academy}/query/back`, params);
// 创新挑战发榜功能
export const addTelease = params => axios.post(`${releaseTheList}/addTelease`, params);
// 创新挑战发榜类型查询
export const findTypeList = params => axios.post(`${releaseTheList}/findTypeList`, params);
// 创新挑战查询发榜
export const selTelease = params => axios.post(`${releaseTheList}/selTelease`, params);
// 创新挑战揭榜功能
export const addUnveiling = params => axios.post(`${releaseTheList}/addUnveiling`, params);
// 创新挑战揭榜成功列表查询
export const selResultPublicity = params => axios.post(`${releaseTheList}/selResultPublicity`, params);

4
src/plugins/ant-design-vue.js

@ -42,6 +42,8 @@ import {
Divider, Divider,
Card, Card,
Skeleton, Skeleton,
AutoComplete,
InputNumber,
} from 'ant-design-vue'; } from 'ant-design-vue';
import { ConfigProvider } from 'ant-design-vue'; import { ConfigProvider } from 'ant-design-vue';
Vue.component(ConfigProvider.name, ConfigProvider); Vue.component(ConfigProvider.name, ConfigProvider);
@ -78,6 +80,8 @@ Vue.use(Steps);
Vue.use(Divider); Vue.use(Divider);
Vue.use(Card); Vue.use(Card);
Vue.use(Skeleton); Vue.use(Skeleton);
Vue.use(AutoComplete);
Vue.use(InputNumber);
Vue.prototype.$message = message; Vue.prototype.$message = message;
Vue.prototype.$notification = notification; Vue.prototype.$notification = notification;

2
src/views/About/Children/Introduce.vue

@ -14,7 +14,7 @@
<banner :show-page="showPage" /> <banner :show-page="showPage" />
<div class="inner"> <div class="inner">
<div class="white my-5 d-flex flex-nowrap"> <div class="white my-5 d-flex flex-nowrap">
<img src="~assets/gywm01.jpg" /> <img src="~assets/gywm01.jpg" style="height: 400px" />
<div class="d-flex flex-column pa-5"> <div class="d-flex flex-column pa-5">
<img class="mb-3" src="~assets/gywm02.png" style="width: 96px; height: 41px" /> <img class="mb-3" src="~assets/gywm02.png" style="width: 96px; height: 41px" />
<rich-text :title="title" /> <rich-text :title="title" />

14
src/views/Activity/Activity.vue

@ -5,6 +5,11 @@
--> -->
<template> <template>
<div>
<div class="inner my-1">
<bread-crumb :arr="arr" />
</div>
<div class="inner"> <div class="inner">
<div class="search-list"> <div class="search-list">
<span> <span>
@ -63,18 +68,21 @@
v-show="total > 5" v-show="total > 5"
/> />
</div> </div>
</div>
</template> </template>
<script> <script>
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import { mapState, mapMutations } from 'vuex'; import { mapState, mapMutations } from 'vuex';
import { front } from 'config/api'; import { front } from 'config/api';
import Enroll from './components/Enroll.vue'; import Enroll from './components/Enroll.vue';
export default { export default {
name: 'Activity', name: 'Activity',
components: { Enroll }, components: { BreadCrumb, Enroll },
data() { data() {
return { return {
str: '这是活动公告界面', arr: [{ name: '活动公告', url: '/Activity' }],
total: 0, total: 0,
pageSize: 20, pageSize: 20,
iptCon: '', iptCon: '',
@ -200,7 +208,7 @@ export default {
<style scoped lang="stylus"> <style scoped lang="stylus">
.inner { .inner {
margin: 40px auto; margin: 20px auto;
} }
.search-list { .search-list {

185
src/views/Challenge/Children/Notice.vue

@ -4,11 +4,7 @@
<div class="inner my-1"> <div class="inner my-1">
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<!-- <div class="top-box" style="margin-bottom: 100px; min-height: 200px"> <!-- <div class="search-background">
<div class="top-title">结果公告</div>
<div class="top-content">结果公告在建中</div>
</div>-->
<div class="search-background">
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span> <span class="ins-title">技术领域</span>
@ -21,17 +17,23 @@
>{{ item.name }}</span> >{{ item.name }}</span>
</div> </div>
</div> </div>
</div> </div>-->
<div class="inner d-flex flex-wrap"> <div class="inner d-flex flex-wrap">
<div <div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" :class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index" :key="index"
class="pro-box" class="pro-box d-flex flex-column"
v-for="(item, index) in lists" v-for="(item, index) in lists.list"
> >
<p class="pro-title">{{ item.title }}</p> <p class="pro-title">{{ item.unit }}</p>
<p class="pro-content">{{ item.content }}</p> <p class="pro-content">挑战成功</p>
<p class="pro-time">时间{{ item.time }}</p> <div class="d-flex flex-row">
<span class="pro-time">时间{{ item.times }}</span>
</div>
<div class="d-flex flex-row-reverse">
<span @click="showModal(item)" class="pro-detail">查看详情</span>
</div>
<!-- <p @click="showModal(item)" class="pro-more">查看详情</p> -->
</div> </div>
</div> </div>
<div class="inner"> <div class="inner">
@ -46,12 +48,39 @@
v-show="total > 8" v-show="total > 8"
/> />
</div> </div>
<a-modal
:confirm-loading="confirmLoading"
:footer="false"
:visible="visible"
@cancel="handleCancel"
@ok="handleCancel"
title="揭榜详情"
width="50%"
>
<a-form
:form="form"
:label-col="{ span: 5 }"
:wrapper-col="{ span: 12, offset: 5 }"
v-if="proData"
>
<a-form-item label="发榜人">{{ proData.accepterName }}</a-form-item>
<a-form-item label="发榜单位">{{ proData.phone }}</a-form-item>
<a-form-item label="介绍人">{{ proData.accepterName }}</a-form-item>
<a-form-item label="揭榜人">{{ proData.accepterName }}</a-form-item>
<a-form-item label="揭榜人联系方式">{{ proData.phone }}</a-form-item>
<a-form-item label="揭榜单位">{{ proData.unit }}</a-form-item>
<a-form-item label="揭榜方案简述">{{ proData.planIntro }}</a-form-item>
</a-form>
</a-modal>
</div> </div>
</template> </template>
<script> <script>
import HNav from './../components/HNav.vue'; import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import { selResultPublicity } from 'config/api';
export default { export default {
name: 'Release', name: 'Release',
components: { HNav, BreadCrumb }, components: { HNav, BreadCrumb },
@ -84,67 +113,92 @@ export default {
isActive: false, isActive: false,
}, },
], ],
lists: [ lists: {},
{ servics: '',
title: '需求标题', visible: false,
content: 'XXX挑战成功', confirmLoading: false,
time: '2020-11-20', proData: null,
}, formLayout: 'horizontal',
{ form: this.$form.createForm(this, { name: 'coordinated' }),
title: '需求标题', };
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
}, },
{
title: '需求标题', created() {
content: 'XXX挑战成功', this.getData();
time: '2020-11-20',
}, },
{
title: '需求标题', methods: {
content: 'XXX挑战成功', showModal(obj) {
time: '2020-11-20', this.proData = obj;
this.visible = true;
}, },
{ handleOk(e) {
title: '需求标题', this.visible = false;
content: 'XXX挑战成功',
time: '2020-11-20',
}, },
], handleCancel(e) {
}; this.visible = false;
}, },
methods: {
choose(index) { choose(index) {
const that = this; const that = this;
// that.achList = [];
const { list } = this; const { list } = this;
list[index].isActive = !list[index].isActive; list[index].isActive = !list[index].isActive;
this.list = [...list]; this.list = [...list];
// for (let i = 0; i < list.length; i++) { },
// if (list[i].isActive) {
// this.achList.push(list[i].id); //
// } async getData() {
// } try {
// this.setAchList(this.achList); const params = {
param: {
servics: this.servics,
pageNum: this.current,
pageSize: this.pageSize,
},
};
const res = await selResultPublicity(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.lists = data;
this.total = parseInt(data.total);
// console.log(data);
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error('查询失败');
}
}, },
// //
onShowSizeChange(current, size) { onShowSizeChange(current, size) {
this.current = current; this.current = current;
this.getData();
},
async submit() {
console.log(this.getParam);
try {
const params = {
param: {
companyName: this.getParam.companyName,
title: this.getParam.title,
serviccs: this.getParam.serviccs,
startTime: this.getParam.startTime,
endTime: this.getParam.endTime,
pageNum: this.current,
pageSize: 8,
},
};
const res = await selResultPublicity(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.lists = data.list;
this.total = parseInt(data.total);
} else {
console.log(msg);
this.$message.error(msg);
}
} catch {
this.$message.error('查询失败');
}
}, },
}, },
}; };
@ -196,8 +250,8 @@ export default {
} }
.pro-box { .pro-box {
width: 20.5%; width: 22%;
margin-right: 6%; margin-right: 4%;
height: auto; height: auto;
background: #FFFFFF; background: #FFFFFF;
padding: 24px 20px; padding: 24px 20px;
@ -222,7 +276,7 @@ export default {
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-weight: bold; font-weight: bold;
color: #13ACC4; color: #13ACC4;
margin-bottom: 60px; margin-bottom: 34px;
opacity: 1; opacity: 1;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 5; -webkit-line-clamp: 5;
@ -230,7 +284,6 @@ export default {
} }
.pro-time { .pro-time {
position: absolute;
font-size: 14px; font-size: 14px;
font-family: Microsoft YaHei; font-family: Microsoft YaHei;
font-weight: 400; font-weight: 400;
@ -240,6 +293,14 @@ export default {
bottom: 0; bottom: 0;
} }
.pro-detail {
cursor: pointer;
}
.pro-detail:hover {
color: #13acc4;
}
.pro-btn { .pro-btn {
position: absolute; position: absolute;
bottom: 24px; bottom: 24px;

116
src/views/Challenge/Children/Release.vue

@ -4,11 +4,7 @@
<div class="inner my-1"> <div class="inner my-1">
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<!-- <div class="top-box" style="margin-bottom: 100px; min-height: 200px"> <!-- <div class="search-background">
<div class="top-title">项目发布</div>
<div class="top-content">项目发布在建中</div>
</div>-->
<div class="search-background">
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span> <span class="ins-title">技术领域</span>
@ -21,7 +17,7 @@
>{{ item.name }}</span> >{{ item.name }}</span>
</div> </div>
</div> </div>
</div> </div>-->
<div class="inner d-flex flex-wrap"> <div class="inner d-flex flex-wrap">
<div <div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" :class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
@ -30,9 +26,10 @@
v-for="(item, index) in lists" v-for="(item, index) in lists"
> >
<p class="pro-title">{{ item.title }}</p> <p class="pro-title">{{ item.title }}</p>
<p class="pro-content">{{ item.content }}</p> <div class="pro-content" v-dompurify-html="item.content"></div>
<p class="pro-time">时间{{ item.time }}</p> <p class="pro-time">时间{{ item.deadline }}</p>
<a-button class="pro-btn" type="primary">揭榜</a-button> <unveiling :pro-id="item.bid" class="pro-btn" type="primary" />
<!-- <a-button class="pro-btn" type="primary">揭榜</a-button> -->
</div> </div>
</div> </div>
<div class="inner"> <div class="inner">
@ -53,9 +50,12 @@
<script> <script>
import HNav from './../components/HNav.vue'; import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import Unveiling from '../components/Unveiling.vue';
import { selTelease } from 'config/api';
export default { export default {
name: 'Release', name: 'Release',
components: { HNav, BreadCrumb }, components: { HNav, BreadCrumb, Unveiling },
data() { data() {
return { return {
title: '项目发布', title: '项目发布',
@ -85,59 +85,59 @@ export default {
isActive: false, isActive: false,
}, },
], ],
lists: [ lists: [],
{ companyName: '',
title: '需求标题', address: '',
content: dataTitle: '',
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', serviccs: '',
time: '2020-11-20', startTime: '',
}, endTime: '',
{ };
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
}, },
{
title: '需求标题', created() {
content: this.getData();
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
}, },
{
title: '需求标题', methods: {
content: //
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', async getData(getParam) {
time: '2020-11-20', try {
if (getParam) {
this.companyName = getParam.companyName;
this.address = getParam.address;
this.dataTitle = getParam.title;
this.serviccs = getParam.serviccs;
this.startTime = getParam.startTime;
this.endTime = getParam.endTime;
}
const params = {
param: {
companyName: this.companyName,
address: this.address,
title: this.dataTitle,
serviccs: this.serviccs,
startTime: this.startTime,
endTime: this.endTime,
pageNum: this.current,
pageSize: 8,
billboardStatus: 1,
}, },
],
}; };
const res = await selTelease(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.lists = data.list;
this.total = parseInt(data.total);
} else {
console.log(msg);
this.$message.error(msg);
}
} catch (error) {
this.$message.error('查询失败');
}
}, },
methods: {
choose(index) { choose(index) {
const that = this; const that = this;
// that.achList = []; // that.achList = [];

269
src/views/Challenge/components/Enroll.vue

@ -2,31 +2,79 @@
<div> <div>
<a-button @click="showModal" type="primary">需求征集</a-button> <a-button @click="showModal" type="primary">需求征集</a-button>
<a-modal :confirm-loading="confirmLoading" :title="title" :visible="visible" @cancel="handleCancel" @ok="handleOk" width="50%"> <a-modal
:confirm-loading="confirmLoading"
:title="title"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
width="50%"
>
<a-form :form="form"> <a-form :form="form">
<!-- 公司名称 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="公司名称"
>
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" />
</a-form-item>
<!-- 需求名称 --> <!-- 需求名称 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求名称"> <a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="需求名称"
>
<a-input placeholder="请输入需求名称..." v-model.trim="platform.needName" /> <a-input placeholder="请输入需求名称..." v-model.trim="platform.needName" />
</a-form-item> </a-form-item>
<!-- 技术领域 --> <!-- 技术领域 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="技术领域"> <a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="技术领域"
>
<a-input placeholder="请输入技术领域..." v-model.trim="platform.technicalField" /> <a-input placeholder="请输入技术领域..." v-model.trim="platform.technicalField" />
</a-form-item> </a-form-item>
<!-- 需求截止时间 --> <!-- 需求截止时间 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求截止时间"> <a-form-item
<a-date-picker @change="changeNeedTime" style="width: 100%" /> :label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="截止时间"
>
<a-date-picker
@change="changeNeedTime"
format="YYYY-MM-DD HH:mm:ss"
show-time
style="width: 100%"
/>
</a-form-item> </a-form-item>
<!-- 需求类别 --> <!-- 需求类别 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求类别"> <a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="需求类别"
>
<a-checkbox-group @change="onChange" class="line-height-30"> <a-checkbox-group @change="onChange" class="line-height-30">
<a-checkbox value="1">技术研发关键核心技术</a-checkbox> <a-checkbox
<a-checkbox value="2">产品研发产品升级新产品研发</a-checkbox> :key="index"
<a-checkbox value="3">技术改造设备研发生产条件</a-checkbox> :value="item.id"
<a-checkbox value="4">技术配套技术产品等配套合作</a-checkbox> style="width: 100%"
v-for="(item, index) in typeList"
>{{ item.name }}</a-checkbox>
</a-checkbox-group> </a-checkbox-group>
</a-form-item> </a-form-item>
<!-- 需求内容 --> <!-- 需求内容 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求内容"> <a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="需求内容"
>
<quill-editor <quill-editor
:options="editorOption" :options="editorOption"
@blur="onEditorBlur($event)" @blur="onEditorBlur($event)"
@ -36,9 +84,26 @@
ref="myQuillEditor" ref="myQuillEditor"
v-model="needContent" v-model="needContent"
></quill-editor> ></quill-editor>
<a-upload
:action="action"
:multiple="false"
@change="fileChange"
accept="image/png, image/jpeg"
name="files"
style="display: none"
>
<a-button id="upload-img">
<a-icon type="upload" />
</a-button>
</a-upload>
</a-form-item> </a-form-item>
<!-- 现有基础 --> <!-- 现有基础 -->
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="现有基础"> <a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="现有基础"
>
<a-textarea <a-textarea
placeholder="(已经开展的工作、所处阶段、投入资金和人力、仪器 设备、生产条件等)" placeholder="(已经开展的工作、所处阶段、投入资金和人力、仪器 设备、生产条件等)"
style="min-height: 100px" style="min-height: 100px"
@ -47,13 +112,27 @@
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
<a-modal
:confirm-loading="confirmLoading1"
:visible="visible1"
@cancel="handleCancel1"
@ok="handleOk1"
title="需要登录"
width="30%"
>
还没有登录请您先去登录
<span style="color: rgba(0, 0, 0, 0.45)">点击确定前往登录</span>
</a-modal>
</div> </div>
</template> </template>
<script> <script>
import { mapState } from 'vuex';
import { quillEditor } from 'vue-quill-editor'; // import { quillEditor } from 'vue-quill-editor'; //
import 'quill/dist/quill.core.css'; import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css'; import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css'; import 'quill/dist/quill.bubble.css';
import { upload, addTelease, findTypeList } from 'config/api';
const formItemLayout = { const formItemLayout = {
labelCol: { span: 5 }, labelCol: { span: 5 },
@ -63,22 +142,7 @@ const formTailLayout = {
labelCol: { span: 6 }, labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 }, wrapperCol: { span: 18, offset: 6 },
}; };
export default { const toolbarOptions = [
name: 'Enroll',
components: { quillEditor },
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
title: '需求征集',
formItemLayout,
formTailLayout,
confirmLoading: false,
needContent: ``,
editorOption: {
placeholder: '请在这里输入',
modules: {
toolbar: [
['bold', 'italic', 'underline', 'strike'], //线线 ['bold', 'italic', 'underline', 'strike'], //线线
['blockquote', 'code-block'], // ['blockquote', 'code-block'], //
[{ header: 1 }, { header: 2 }], // 12 [{ header: 1 }, { header: 2 }], // 12
@ -93,22 +157,73 @@ export default {
[{ align: [] }], // [{ align: [] }], //
['clean'], // ['clean'], //
['image', 'video'], // ['image', 'video'], //
], ];
export default {
name: 'Enroll',
components: { quillEditor },
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
visible1: false,
title: '需求征集',
action: upload,
formItemLayout,
formTailLayout,
confirmLoading: false,
confirmLoading1: false,
needContent: ``,
editorOption: {
placeholder: '在这里输入...',
modules: {
toolbar: {
container: toolbarOptions, //
handlers: {
image: function(value) {
if (value) {
// alert('');
document.getElementById('upload-img').click();
} else {
this.quill.format('image', false);
}
},
video: function(value) {
if (value) {
alert('自定义视频');
} else {
this.quill.format('image', false);
}
},
},
},
}, },
}, },
platform: { platform: {
needName: '', needName: '',
technicalField: '', technicalField: '',
basics: '', basics: '',
type: [],
buildTime: '',
}, },
hideMessage: null,
typeList: [],
}; };
}, },
computed: mapState('user', ['anyringToken']),
created() {
this.findType();
},
methods: { methods: {
// //
changeNeedTime(date, dateString) { changeNeedTime(date, dateString) {
this.platform.buildTime = this.$moment(date).unix() * 1000; console.log('dateString: ', dateString);
// console.log(this.$moment(date).unix(), dateString); console.log('date: ', date);
// this.platform.buildTime = this.$moment(date).unix() * 1000;
this.platform.buildTime = dateString;
}, },
onEditorReady(editor) { onEditorReady(editor) {
@ -120,55 +235,101 @@ export default {
// //
// console.log(this.content); // console.log(this.content);
}, },
onChange(e) {
console.log(e);
this.platform.type = e;
},
// //
fileChange(info) { fileChange(info) {
console.log(info); console.log(info);
if (info.file.status === 'uploading') {
if (!this.hideMessage) {
this.hideMessage = this.$message.loading('上传中...');
}
}
// this.fileList = info.fileList; // this.fileList = info.fileList;
// if (info.file.status === 'done') { if (info.file.status === 'done') {
// this.files = []; this.files = [];
// this.files = info.fileList[0].response.data[0].id; const img = `<img src=${info.file.response.data[0].visitUrl} >`;
// console.log(this.files); this.needContent += img;
// } setTimeout(this.hideMessage, 0);
this.$message.success('上传成功');
}
}, },
// //
showModal() { showModal() {
const storageAnyringToken = sessionStorage.getItem('anyringToken') || this.anyringToken;
if (storageAnyringToken) {
this.visible = true; this.visible = true;
} else {
this.visible1 = true;
}
}, },
// //
handleCancel(e) { handleCancel(e) {
this.visible = false; this.visible = false;
}, },
// //
handleOk() { handleOk() {
console.log(this.needContent); this.subMitAdd();
// this.subMitAdd(); // this.$message.success(',');
},
handleCancel1() {
this.visible1 = false;
},
//
handleOk1() {
this.$router.push('/login');
}, },
// //
async subMitAdd() { async subMitAdd() {
this.confirmLoading = true; this.confirmLoading = true;
try { try {
// const params = { param: {} }; const params = {
// const res = await apply(params); param: {
// const { code, msg, data } = res.data; companyName: this.platform.companyName,
// if (code === 200) { title: this.platform.needName,
// this.$message.success(''); content: this.needContent,
// this.visible = false; servics: this.platform.technicalField,
// this.confirmLoading = false; deadline: this.platform.buildTime,
// for (let key in this.platform) { existingBasis: this.platform.basics,
// this.platform[key] = ''; models: this.platform.type,
// } },
// this.platform.isTel = false; };
// } else { const res = await addTelease(params);
// throw msg; const { code, msg, data } = res.data;
// this.confirmLoading = false; if (code === 200) {
// } for (let key in this.platform) {
this.platform[key] = '';
}
this.visible = false;
this.confirmLoading = false;
this.$message.success('发榜成功,等待审核');
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) { } catch (error) {
this.$message.error(error); this.$message.error(error);
this.confirmLoading = false; this.confirmLoading = false;
} }
}, },
//
async findType() {
try {
const res = await findTypeList();
const { code, msg, data } = res.data;
if (code === 200) {
this.typeList = data;
} else {
console.log(msg);
}
} catch (error) {
console.log(error);
}
},
}, },
}; };
</script> </script>

206
src/views/Challenge/components/Unveiling.vue

@ -0,0 +1,206 @@
<template>
<div>
<a-button @click="showModal" style="width: 80px" type="primary">揭榜</a-button>
<a-modal
:confirm-loading="confirmLoading"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
title="揭榜"
width="50%"
>
<a-form :form="form" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
<a-form-item label="揭榜人姓名" required>
<a-input placeholder="请输入揭榜人姓名" v-model="setData.accepterName" />
</a-form-item>
<a-form-item label="手机号" required>
<a-input
@change="changePhone"
placeholder="请输入手机号"
type="tel"
v-decorator="['setData.phone', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item label="图片验证码" required>
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item label="短信验证码">
<div class="d-flex flex-nowrap">
<a-input
@change="changeCode"
placeholder="请输入验证码"
type="number"
v-decorator="['credential', { rules: codeRules }]"
/>
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button>
<a-button
:disabled="setData.phone && setData.phone.length !== 11"
@click="getCode"
class="ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item label="揭榜单位" required>
<a-input placeholder="请输入揭榜单位" v-model="setData.unit" />
</a-form-item>
<a-form-item label="介绍人">
<a-input placeholder="揭榜介绍人" v-model="setData.introducer" />
</a-form-item>
<a-form-item label="方案简述" required>
<a-textarea placeholder="请输入方案简述" v-model="setData.planIntro" />
</a-form-item>
<!-- <a-form-item label="揭榜时间">
<a-date-picker format="YYYY-MM-DD HH:mm:ss" show-time @ok="changeTime" />
</a-form-item>-->
</a-form>
</a-modal>
<a-modal
:confirm-loading="confirmLoading1"
:visible="visible1"
@cancel="handleCancel1"
@ok="handleOk1"
title="需要登录"
width="30%"
>
还没有登录请您先去登录
<span style="color: rgba(0, 0, 0, 0.45)">点击确定前往登录</span>
</a-modal>
</div>
</template>
<script>
import { mapActions, mapState } from 'vuex';
import { addUnveiling } from 'config/api';
import mixin from 'views/User/mixin';
export default {
name: 'Unveiling',
mixins: [mixin],
props: {
proId: {
type: Number,
default: null,
},
},
data() {
return {
formLayout: 'horizontal',
form: this.$form.createForm(this, { name: '揭榜' }),
visible: false,
visible1: false,
confirmLoading: false,
confirmLoading1: false,
codeNum: '', //
setData: {
accepterName: '', //
phone: '', //
unit: '', //
introducer: '', //
planIntro: '', //
time: '', //
},
};
},
computed: mapState('user', ['picCode', 'anyringToken']),
methods: {
...mapActions('user', ['sendCode', 'sendPicCode']),
showModal() {
const storageAnyringToken = sessionStorage.getItem('anyringToken') || this.anyringToken;
if (storageAnyringToken) {
this.visible = true;
} else {
this.visible1 = true;
}
},
handleCancel(e) {
this.visible = false;
},
handleCancel1() {
this.visible1 = false;
},
//
handleOk1() {
this.$router.push('/login');
},
changePhone(e) {
this.setData.phone = e.target.value;
},
//
async getCode() {
try {
const params = {
phone: this.setData.phone,
verificationCodeId: this.picCode.verificationCodeId,
verificationCodeValue: this.codeNum,
};
await this.sendCode(params);
this.getCodeInterval();
} catch (error) {
throw new Error(`SignIn.vue method getCode: ${error}`);
}
},
changeCode(e) {
this.setData.codeNum = e.target.value;
},
//
changePicCode() {
this.sendPicCode();
},
//
async handleOk(e) {
try {
this.confirmLoading = true;
const params = {
param: {
accepterName: this.setData.accepterName,
billboardId: this.proId,
code: this.setData.codeNum,
introducer: this.setData.introducer,
phone: this.setData.phone,
planIntro: this.setData.planIntro,
times: this.setData.time,
unit: this.setData.unit,
},
};
const res = await addUnveiling(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('揭榜信息提交成功');
for (let key in this.setData) {
this.setData[key] = '';
}
} else {
this.$message.error('提交失败');
}
} catch (error) {
this.$message.error(error);
}
this.visible = false;
this.confirmLoading = false;
},
changeTime(e) {
this.setData.time = this.$moment(e._d).format('YYYY-MM-DD HH:mm:ss');
},
},
};
</script>
<style lang="stylus" scoped>
.code_img {
height: 32px;
width: 120px;
}
</style>

5
src/views/IncubationPlatform/Children/MakerSpace.vue

@ -27,7 +27,10 @@
class="pointer baseColor" class="pointer baseColor"
>第三方专业机构</span> >第三方专业机构</span>
建立战略合作聘请 建立战略合作聘请
<span @click="$router.push('')" class="pointer baseColor">创业导师</span> <span
@click="$router.push('/IncubationPlatform/Tutor')"
class="pointer baseColor"
>创业导师</span>
30余名服务领域涵盖专业技术企业管理科创咨询财务税务法务咨询等可随时为入孵企业提供针 对性一对一创业辅导服务 30余名服务领域涵盖专业技术企业管理科创咨询财务税务法务咨询等可随时为入孵企业提供针 对性一对一创业辅导服务
</div> </div>
</div> </div>

23
src/views/IncubationPlatform/Children/Products.vue

@ -10,6 +10,7 @@
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">产品类目</span> <span class="ins-title">产品类目</span>
<span v-if="productLists && productLists.length">
<span <span
:class="item.isActive ? 'act-color' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
@ -17,6 +18,7 @@
class="ins-name" class="ins-name"
v-for="(item, index) in productLists" v-for="(item, index) in productLists"
>{{ item.name }}</span> >{{ item.name }}</span>
</span>
</div> </div>
<div class="flex-1 align-center"> <div class="flex-1 align-center">
<a-input-search <a-input-search
@ -26,13 +28,14 @@
placeholder="请输入" placeholder="请输入"
v-model="productIpt" v-model="productIpt"
/> />
<add-project @update="update" />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<p class="font-bold-24">产品展示</p> <p class="font-bold-24">产品展示</p>
</div> </div>
<platform-list /> <platform-list ref="child" />
</div> </div>
</template> </template>
@ -42,10 +45,11 @@ import { selModel } from 'config/api';
import PlatformList from 'components/PlatformList/PlatformList.vue'; import PlatformList from 'components/PlatformList/PlatformList.vue';
import HNav from './../components/HNav.vue'; import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import AddProject from '../components/AddProject.vue';
export default { export default {
name: 'Products', name: 'Products',
components: { BreadCrumb, HNav, PlatformList }, components: { BreadCrumb, HNav, PlatformList, AddProject },
data() { data() {
return { return {
arr: [ arr: [
@ -55,6 +59,7 @@ export default {
productIpt: '', // productIpt: '', //
productLists: [], // productLists: [], //
productList: [], // productList: [], //
showAddProject: false,
}; };
}, },
watch: { watch: {
@ -78,19 +83,22 @@ export default {
}, },
methods: { methods: {
...mapMutations('home', ['setProductIpt', 'setProductList', 'setListState']), ...mapMutations('home', ['setProductIpt', 'setProductList', 'setListState']),
async getType(num) { async getType(num) {
try { try {
const params = { param: { model: num } }; const params = { param: { model: num } };
const res = await selModel(params); const res = await selModel(params);
const { code, mst, data } = res.data; const { code, msg, data } = res.data;
if (code === 200) { if (code === 200) {
this.productLists = data; this.productLists = data.list;
for (let i = 0; i < this.productLists.length; i++) { for (let i = 0; i < this.productLists.length; i++) {
this.productLists[i].isActive = false; this.productLists[i].isActive = false;
} }
} else {
this.$message.error(msg || '分类获取失败');
} }
} catch (error) { } catch (error) {
// console.log(error); console.log(error);
} }
}, },
@ -127,6 +135,11 @@ export default {
}; };
this.setProductList(obj); this.setProductList(obj);
}, },
//
update() {
this.$refs.child.getProductLists();
},
}, },
}; };
</script> </script>

155
src/views/IncubationPlatform/Children/Tutor.vue

@ -1,79 +1,130 @@
<template> <template>
<div> <div>
<h-nav /> <sen-nav />
<div class="inner my-1"> <div class="inner my-1">
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<banner :show-page="showPage" /> <div>
<div class="inner"> <div class="search-background">
<div class="py-5 my-5" v-if="teachers && teachers.length > 0"> <div class="d-flex">
<div :key="teacher.categoryId" class="mb-4" v-for="teacher in teachers"> <div class="flex-3 flex-wrap">
<p class="font-bold-24 title-color">{{ teacher.categoryName }}</p> <span class="ins-title">导师分类</span>
<div class="d-flex flex-wrap mb-10" v-if="teacher.services && teacher.services.length"> <span v-if="list && list.length">
<div <span
:class="(index + 1) % 5 === 0 ? 'teacher-item1' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
class="teacher-item font-24 mb-3" @click="choose(index)"
v-for="(item, index) in teacher.services" class="ins-name"
>{{ item.name }}</div> v-for="(item, index) in list"
>{{ item.categoryName }}</span>
</span>
</div>
<div class="flex-1 align-center">
<a-input-search
@search="searchFruit"
class="item-search"
enter-button="搜索"
placeholder="搜索导师"
v-model="fruitIpt"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<tutors :achList="achList" :fruitIpt="fruitIpt" :platform="platform" ref="child" />
</div> </div>
</template> </template>
<script> <script>
import Banner from 'components/Banner/Banner.vue'; import SenNav from './components/SenNav.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import { selTeacher } from 'config/api'; import { mapMutations } from 'vuex';
import { selTutor } from 'config/api';
import Tutors from 'components/PlatformList/Tutors.vue';
// import Banner from 'components/Banner/Banner.vue';
// import HNav from './../components/HNav.vue';
// import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
// import { selTeacher } from 'config/api';
export default { export default {
name: 'Tutor', name: 'Tutor',
components: { Banner, HNav, BreadCrumb }, components: { SenNav, BreadCrumb, Tutors },
data() { data() {
return { return {
title: '孵化平台-创业导师', title: '孵化平台-创业导师',
typeOfPlatform: '孵化平台',
showPage: 44, showPage: 44,
arr: [ arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, { name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '创业导师', url: '' }, { name: '创业导师', url: '' },
], ],
teachers: [], teachers: [],
list: [],
achList: [],
fruitIpt: '',
platform: 2,
}; };
}, },
watch: {
fruitIpt(val) {
const obj = {
content: this.fruitIpt,
isBtn: 0,
};
this.setAchIpt(obj);
},
},
created() { created() {
this.handleTeacher(); this.getType();
}, },
methods: { methods: {
// ...mapMutations('home', ['setAchIpt']),
async handleTeacher() { /**
* 获取导师分类
* @param {string} categoryName 分类名称
* @param {number} recStatus 分类状态
*/
async getType() {
try { try {
const res = await selTeacher(); const params = { param: { categoryName: '', recStatus: 0 } };
const res = await selTutor(params);
const { code, msg, data } = res.data; const { code, msg, data } = res.data;
if (code === 200) { if (code === 200) {
this.teachers = data; this.list = data;
for (let i = 0; i < this.teachers.length; i++) { for (var i = 0; i < this.list.length; i++) {
const element = this.teachers[i]; this.list[i].isActive = false;
for (let j = 0; j < element.services.length; j++) {
for (let k = 0; k < element.services.length - j; k++) {
if (element.services[k].order > element.services[k + 1].order) {
let a = {};
a = element.services[k + 1].order;
element.services[k + 1].order = element.services[k].order;
element.services[k].order = a;
}
} }
} }
} catch (error) {
console.log(error);
} }
} else { },
this.$message.error(msg);
//
searchFruit() {
this.$refs.child.getData();
},
//
async choose(index) {
await this.setType(index);
await this.$refs.child.getData('teacherType', this.achList);
},
setType(index) {
const that = this;
that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
for (let i = 0; i < list.length; i++) {
if (list[i].isActive) {
this.achList.push(list[i].id);
} }
} catch (error) {
this.$message.error(error);
} }
}, },
}, },
@ -82,16 +133,38 @@ export default {
<style lang="stylus" scoped> <style lang="stylus" scoped>
.inner { .inner {
margin: 20px auto;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto; margin: 40px auto;
line-height: 44px;
}
.item-search {
width: 100%;
height: 32px;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
} }
.teacher-item { .ins-name {
width: 12%; font-size: 16px;
margin-right: 10%; color: rgba(0, 0, 0, 0.65);
text-indent: 1em; padding: 0 10px;
cursor: pointer;
} }
.teacher-item1 { .act-color {
margin-right: 0; color: #13ACC4 !important;
} }
</style> </style>

10
src/views/IncubationPlatform/Children/place/EntitySpace.vue

@ -6,13 +6,8 @@
</div> </div>
<div class="top-box"> <div class="top-box">
<banner :show-page="49" /> <banner :show-page="49" />
<!-- <add-model :value="2" class="add-mol" style="height: 32px" /> -->
<settled-model :type-num="1" class="add-mol" ref="childModel" style="height: 32px" /> <settled-model :type-num="1" class="add-mol" ref="childModel" style="height: 32px" />
<a-button <information-model class="set-mol" />
@click="$router.push('/IncubationPlatform/MakerSpace/InformationFilling')"
class="set-mol"
type="primary"
>统计信息填报</a-button>
<!-- <div class="top-title">实体众创空间</div> <!-- <div class="top-title">实体众创空间</div>
<div class="top-content"> <div class="top-content">
@ -126,13 +121,14 @@ import HNav from '../../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
// import AddModel from './../../components/AddModel.vue'; // import AddModel from './../../components/AddModel.vue';
import SettledModel from 'components/Introduce/SettledModel.vue'; import SettledModel from 'components/Introduce/SettledModel.vue';
import InformationModel from 'components/Introduce/InformationModel.vue';
import Banner from 'components/Banner/Banner.vue'; import Banner from 'components/Banner/Banner.vue';
import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue'; import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue';
import { searchEnt } from 'config/api'; import { searchEnt } from 'config/api';
export default { export default {
name: 'EntitySpace', name: 'EntitySpace',
components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise }, components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise, InformationModel },
data() { data() {
return { return {
title: '实体众创空间', title: '实体众创空间',

10
src/views/IncubationPlatform/Children/place/VirtualSpace.vue

@ -6,13 +6,8 @@
</div> </div>
<div class="top-box"> <div class="top-box">
<banner :show-page="48" /> <banner :show-page="48" />
<!-- <add-model :value="3" class="add-mol" style="height: 32px" /> -->
<settled-model :type-num="0" class="add-mol" ref="childModel" style="height: 32px" /> <settled-model :type-num="0" class="add-mol" ref="childModel" style="height: 32px" />
<a-button <information-model class="set-mol" />
@click="$router.push('/IncubationPlatform/MakerSpace/InformationFilling')"
class="set-mol"
type="primary"
>统计信息填报</a-button>
</div> </div>
<div class="center-box c-box" style="margin-bottom: 160px"> <div class="center-box c-box" style="margin-bottom: 160px">
<div class="center-title" style="top: 105px;"> <div class="center-title" style="top: 105px;">
@ -31,13 +26,14 @@ import HNav from '../../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
// import AddModel from './../../components/AddModel.vue'; // import AddModel from './../../components/AddModel.vue';
import SettledModel from 'components/Introduce/SettledModel.vue'; import SettledModel from 'components/Introduce/SettledModel.vue';
import InformationModel from 'components/Introduce/InformationModel.vue';
import Banner from 'components/Banner/Banner.vue'; import Banner from 'components/Banner/Banner.vue';
import { searchEnt } from 'config/api'; import { searchEnt } from 'config/api';
import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue'; import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue';
export default { export default {
name: 'VirtualSpace', name: 'VirtualSpace',
components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise }, components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise, InformationModel },
data() { data() {
return { return {
title: '虚拟众创空间', title: '虚拟众创空间',

396
src/views/IncubationPlatform/components/AddProject.vue

@ -0,0 +1,396 @@
<template>
<div>
<a-button @click="showModal" class="ml-3" type="primary">添加</a-button>
<a-modal
:confirm-loading="confirmLoading"
:title="title"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
width="50%"
>
<a-form :form="form">
<!-- 公司名称 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="公司名称"
>
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyname" />
</a-form-item>
<!-- 产品名称 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品名称"
>
<a-input placeholder="请输入需求名称..." v-model.trim="platform.name" />
</a-form-item>
<!-- 产品编号 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品编号"
>
<a-input placeholder="请输入产品编号..." v-model.trim="platform.identifier" />
</a-form-item>
<!-- 产品图片 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品图片"
>
<a-upload
:action="action"
:before-upload="beforeUpload"
:show-upload-list="false"
@change="handleChange"
class="avatar-uploader"
list-type="picture-card"
name="files"
>
<img :src="imageUrl" alt="avatar" v-if="imageUrl" />
<div v-else>
<a-icon :type="loading ? 'loading' : 'plus'" />
<div class="ant-upload-text">Upload</div>
</div>
</a-upload>
</a-form-item>
<!-- 产品分类 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品分类"
>
<a-checkbox-group @change="onChange" class="line-height-30">
<a-checkbox
:key="index"
:value="item.id"
v-for="(item, index) in productLists"
>{{ item.name }}</a-checkbox>
</a-checkbox-group>
</a-form-item>
<!-- 产品简介 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品简介"
>
<a-textarea
placeholder="请输入产品简介..."
style="min-height: 100px"
v-model.trim="platform.synopsis"
/>
</a-form-item>
<!-- 产品详情 -->
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="产品详情"
>
<quill-editor
:options="editorOption"
@blur="onEditorBlur($event)"
@change="onEditorChange($event)"
@focus="onEditorFocus($event)"
class="editor-box"
ref="myQuillEditor"
v-model="needContent"
></quill-editor>
<a-upload
:action="action"
:multiple="false"
@change="fileChange"
accept="image/png, image/jpeg"
name="files"
style="display: none"
>
<a-button id="upload-img">
<a-icon type="upload" />
</a-button>
</a-upload>
</a-form-item>
</a-form>
</a-modal>
<a-modal
:confirm-loading="confirmLoading1"
:visible="visible1"
@cancel="handleCancel1"
@ok="handleOk1"
title="需要登录"
width="30%"
>
还没有登录请您先去登录
<span style="color: rgba(0, 0, 0, 0.45)">点击确定前往登录</span>
</a-modal>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { quillEditor } from 'vue-quill-editor'; //
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
import { upload, addProduct, selModel } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
const toolbarOptions = [
['bold', 'italic', 'underline', 'strike'], //线线
['blockquote', 'code-block'], //
[{ header: 1 }, { header: 2 }], // 12
[{ list: 'ordered' }, { list: 'bullet' }], //
[{ script: 'sub' }, { script: 'super' }], //
[{ indent: '-1' }, { indent: '+1' }], //
[{ direction: 'rtl' }], //
// [{ size: ['small', false, 'large', 'huge'] }], //
// [{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ color: [] }, { background: [] }], //
// [{ font: [] }], //
[{ align: [] }], //
['clean'], //
['image', 'video'], //
];
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img);
}
export default {
name: 'Enroll',
components: { quillEditor },
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
visible1: false,
title: '需求征集',
action: upload,
loading: false,
imageUrl: '',
formItemLayout,
formTailLayout,
confirmLoading: false,
confirmLoading1: false,
needContent: ``,
editorOption: {
placeholder: '在这里输入...',
modules: {
toolbar: {
container: toolbarOptions, //
handlers: {
image: function(value) {
if (value) {
// alert('');
document.getElementById('upload-img').click();
} else {
this.quill.format('image', false);
}
},
video: function(value) {
if (value) {
alert('自定义视频');
} else {
this.quill.format('image', false);
}
},
},
},
},
},
platform: {
companyname: '',
name: '',
identifier: '',
pic: '',
modelIds: [],
synopsis: '',
},
hideMessage: null,
productLists: [], //
};
},
computed: mapState('user', ['anyringToken']),
created() {
this.getType(3);
},
methods: {
onEditorReady(editor) {
//
},
onEditorBlur() {}, //
onEditorFocus() {}, //
onEditorChange() {
//
// console.log(this.content);
},
onChange(e) {
console.log(e);
this.platform.modelIds = e;
},
//
handleChange(info) {
if (info.file.status === 'uploading') {
this.loading = true;
return;
}
if (info.file.status === 'done') {
// Get this url from response in real world.
getBase64(info.file.originFileObj, imageUrl => {
this.imageUrl = imageUrl;
this.loading = false;
});
if (info.fileList && info.fileList.length && info.fileList[0].response.data && info.fileList[0].response.data.length) {
this.platform.pic = info.fileList[0].response.data[0].id;
}
}
},
beforeUpload(file) {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
if (!isJpgOrPng) {
this.$message.error('You can only upload JPG file!');
}
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.$message.error('Image must smaller than 2MB!');
}
return isJpgOrPng && isLt2M;
},
//
fileChange(info) {
console.log(info);
if (info.file.status === 'uploading') {
if (!this.hideMessage) {
this.hideMessage = this.$message.loading('上传中...');
}
}
// this.fileList = info.fileList;
if (info.file.status === 'done') {
this.files = [];
const img = `<img src=${info.file.response.data[0].visitUrl} >`;
this.needContent += img;
setTimeout(this.hideMessage, 0);
this.$message.success('上传成功');
}
},
//
showModal() {
const storageAnyringToken = sessionStorage.getItem('anyringToken') || this.anyringToken;
if (storageAnyringToken) {
this.visible = true;
} else {
this.visible1 = true;
}
},
//
handleCancel(e) {
this.visible = false;
},
//
handleOk() {
this.subMitAdd();
// this.$message.success(',');
},
handleCancel1() {
this.visible1 = false;
},
//
handleOk1() {
this.$router.push('/login');
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
companyname: this.platform.companyname,
name: this.platform.name,
identifier: this.platform.identifier,
pic: this.platform.pic,
modelIds: this.platform.modelIds,
synopsis: this.platform.synopsis,
details: this.needContent,
},
};
const res = await addProduct(params);
const { code, msg, data } = res.data;
this.confirmLoading = false;
if (code === 200) {
for (let key in this.platform) {
this.platform[key] = '';
}
this.imageUrl = '';
this.needContent = ``;
this.visible = false;
this.$message.success('添加成功');
this.$emit('update');
} else {
throw msg;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
//
async getType(num) {
try {
const params = { param: { model: num } };
const res = await selModel(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.productLists = data.list;
} else {
this.$message.error(msg || '分类获取失败');
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
.ql-editor {
min-height: 600px;
max-height: 800px;
}
.editor-box >>> .ql-editor {
min-height: 150px;
}
</style>

19
src/views/Industry/Children/Serve.vue

@ -26,21 +26,20 @@
<p @click="showModal(item.id)" class="font-24 my-4" style="text-align: center"> <p @click="showModal(item.id)" class="font-24 my-4" style="text-align: center">
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</p> </p>
<div v-if="item.intro.length>45" class="font-16 textColor item-intro mb-2"> <div class="font-16 textColor item-intro mb-2" v-if="item.intro.length>45">
{{ item.intro.slice(0,45) }} {{ item.intro.slice(0,45) }}
<a-button <a-button
@click="showIntro(index)" @click="showIntro(index)"
class="font-16 baseColor" class="font-16 baseColor"
type="link"
style="height:20px;float:right;padding:0px" style="height:20px;float:right;padding:0px"
type="link"
> >
more more
<a-icon style="font-size:12px" type="right" /> <a-icon style="font-size:12px" type="right" />
</a-button> </a-button>
</div> </div>
<div v-if="item.intro.length<=45" class="font-16 textColor item-intro"> <div class="font-16 textColor item-intro" v-if="item.intro.length<=45">
<p>{{ item.intro }}</p> <p>{{ item.intro }}</p>
</div> </div>
<!-- <p <!-- <p
@ -50,7 +49,7 @@
>了解更多</p>--> >了解更多</p>-->
</div> </div>
</div> </div>
<a-modal v-model="showModelIntro" :footer="null"> <a-modal :footer="null" v-model="showModelIntro">
<p class="mt-3">{{ modelIntro }}</p> <p class="mt-3">{{ modelIntro }}</p>
</a-modal> </a-modal>
<a-modal <a-modal
@ -228,7 +227,7 @@ export default {
id: '', id: '',
}, },
showModelIntro: false, showModelIntro: false,
modelIntro: '' modelIntro: '',
}; };
}, },
@ -255,8 +254,8 @@ export default {
...mapActions('home', ['getUserSer']), ...mapActions('home', ['getUserSer']),
showIntro(index) { showIntro(index) {
this.showModelIntro = true this.showModelIntro = true;
this.modelIntro = this.list[index].intro this.modelIntro = this.list[index].intro;
}, },
// //
async getService() { async getService() {
@ -268,7 +267,7 @@ export default {
this.list = data; this.list = data;
} }
} catch (error) { } catch (error) {
console.log(data); console.log('error: ', error);
} }
}, },
// //
@ -352,7 +351,7 @@ export default {
await this.sendCode(params); await this.sendCode(params);
this.getCodeInterval(); this.getCodeInterval();
} catch (error) { } catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`); throw new Error(`Serve.vue method getCode: ${error}`);
// console.log(error); // console.log(error);
} }
}, },

58
src/views/Industry/Children/Union.vue

@ -7,70 +7,24 @@
<div class="top-box" style="margin-bottom: 100px; min-height: 200px"> <div class="top-box" style="margin-bottom: 100px; min-height: 200px">
<div class="top-title">产业创新联盟</div> <div class="top-title">产业创新联盟</div>
<div class="top-content"> <div class="top-content">
<!-- 山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业 <core-organ :title="title" />
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通 <!-- 产业技术创新联盟在建中 -->
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体-->
产业技术创新联盟在建中
</div> </div>
</div> </div>
<!-- <div class="center-box">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">加入流程</div>
</div>
<div class="center-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
<new-model class="center-btn" />
</div>
<div class="center-box c-box" style="margin-bottom: 160px">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">联盟名录</div>
</div>
<div class="center-content">
<div class="d-flex flex-wrap">
<div :class="(index + 1) % 3 === 0 ? 'margin-0' : ''" :key="index" class="ent-box" v-for="(item, index) in lists">
<p class="ent-index">{{ index + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item }}</span>
</div>
</div>
</div>
<div class="reg-box">
<a-button class style="float: left" type="primary">入驻企业注册</a-button>
<a-pagination
:current="current"
:page-size="pageSize"
:total="lists.length"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="lists.length > 18"
/>
</div>
</div>-->
</div> </div>
</template> </template>
<script> <script>
import HNav from './components/HNav.vue'; import HNav from './components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
// import NewModel from '../../NewPlatform/components/NewModel.vue'; import CoreOrgan from 'components/CoreOrgan/CoreOrgan.vue';
export default { export default {
name: 'Union', name: 'Union',
components: { HNav, BreadCrumb }, components: { HNav, BreadCrumb, CoreOrgan },
data() { data() {
return { return {
title: '产业创新联盟', title: '产业平台-产业创新联盟',
typeOfPlatform: '产业平台', typeOfPlatform: '产业平台',
arr: [ arr: [
{ name: '产业平台', url: '/Challenge/Union' }, { name: '产业平台', url: '/Challenge/Union' },

85
src/views/Knowledge/Knowledge.vue

@ -10,17 +10,32 @@
<div class="inner my-1"> <div class="inner my-1">
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<div class="dev-box"> <div class="inner">
<img src="~assets/build.png" /> <classify @getData="getData" />
<know-content :list="list" @getData="getData" />
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 2"
/>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import Classify from './components/classify.vue';
import KnowContent from './components/knowContent.vue';
import { back } from 'config/api';
export default { export default {
name: 'Knowledge', name: 'Knowledge',
components: { BreadCrumb }, components: { BreadCrumb, Classify, KnowContent },
data() { data() {
return { return {
str: '知识培训服务平台', str: '知识培训服务平台',
@ -28,8 +43,63 @@ export default {
typeOfPlatform: '知识平台', typeOfPlatform: '知识平台',
arr: [{ name: '知识平台', url: '/Knowledge' }], arr: [{ name: '知识平台', url: '/Knowledge' }],
list: [], list: [],
current: 1,
pageSize: 6,
total: 10,
bannerNum: [],
typeNum: '',
titleText: '',
}; };
}, },
created() {
this.getData();
},
methods: {
/**
* 查询创业学院内容
* @param {string} pageNum 页码
* @param {string} pageSize 每页多少条
* @param {string} banner 栏目分类
* @param {string} type 类型 1视频,2音频,3ppt
* @param {string} title 标题
*/
async getData(getParam) {
try {
const params = {
param: {
banner: this.bannerNum,
type: this.typeNum,
title: this.titleText,
pageNum: this.current,
pageSize: this.pageSize,
},
};
if (getParam) {
params.param.banner = getParam.bannerNum;
params.param.type = getParam.typeNum;
params.param.title = getParam.titleText;
}
const res = await back(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.total = parseInt(data.total);
this.list = data.list;
} else {
this.$message.error('查询失败');
}
} catch (error) {
this.$message.error(error);
}
},
//
onShowSizeChange(current, size) {
this.current = current;
this.getData();
},
},
}; };
</script> </script>
@ -38,11 +108,8 @@ export default {
margin: 20px auto; margin: 20px auto;
} }
.dev-box { .pagination {
width: 100%; margin: 40px 0;
text-align: right;
img {
width: 100%;
}
} }
</style> </style>

127
src/views/Knowledge/components/classify.vue

@ -0,0 +1,127 @@
<template>
<div class="search-list">
<span
style="height: 28px; line-height: 28px; font-size: 20px; font-weight: bold; color: rgba(0, 0, 0, 0.85)"
>栏目</span>
<a-checkbox-group @change="handleChange">
<a-checkbox
:key="index"
:value="item.moldId"
v-for="(item, index) in bannerList"
>{{ item.moldName }}</a-checkbox>
</a-checkbox-group>
<br />
<span style="font-size: 20px; font-weight: bold; color: rgba(0, 0, 0, 0.85)">类型</span>
<a-radio-group @change="handleChange1">
<a-radio :key="index" :value="index + 1" v-for="(item, index) in typeList">{{ item }}</a-radio>
</a-radio-group>
<br />
<a-input-search
@search="handleData"
class="search-ipt"
enter-button="搜索"
placeholder="搜索标题..."
style="width: 381px"
v-model="titleText"
/>
</div>
</template>
<script>
import { getQueryMold } from 'config/api';
export default {
data() {
return {
typeList: ['视频', '音频', '文档', '全部'],
typeNum: '',
bannerList: [],
bannerNum: [],
titleText: '',
timeList: ['近七天', '近一个月', '近一年', '全部'],
timeNum: '',
};
},
created() {
this.getMold();
},
methods: {
async handleChange(e) {
this.bannerNum = e;
console.log(this.bannerNum);
await this.handleData();
},
async handleChange1(e) {
console.log(e.target.value);
if (e.target.value < 4) {
this.typeNum = e.target.value;
} else {
this.typeNum = '';
}
await this.handleData();
},
//
async getMold() {
try {
const res = await getQueryMold();
const { code, data, msg } = res.data;
if (code === 200) {
this.bannerList = data;
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
},
//
handleData() {
const getParam = {
typeNum: this.typeNum,
bannerNum: this.bannerNum,
titleText: this.titleText,
};
console.log('getParam: ', getParam);
this.$emit('getData', getParam);
},
},
};
</script>
<style lang="stylus" scoped>
.search-list {
position: relative;
width: 100%;
line-height: 36px;
background: #fff;
padding: 24px;
position: relative;
}
.search-btn {
position: absolute;
right: 19px;
height: 34px;
top: 38px;
width: 80px;
font-size: 16px;
}
.ban-style {
margin-left: 10px;
cursor: pointer;
}
.ban-act {
color: #E77816;
}
.search-ipt {
position: absolute;
right: 24px;
top: 20px;
}
</style>

102
src/views/Knowledge/components/knowContent.vue

@ -0,0 +1,102 @@
<template>
<div>
<div class="d-flex flex-wrap" style="margin-top: 24px;">
<div
:class="(index + 2) % 3 === 0 ? 'mg' : ''"
:key="index"
style="width: 30%"
v-for="(item, index) in list"
>
<div style="height: 420px">
<img
:src="item.picUrl"
@click="openPage(item.contentUrl)"
alt
style="width: 100%; height: 300px; cursor: pointer"
/>
<p class="item-title">{{ item.title }}</p>
<p class="item-content">{{ item.intro }}</p>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'knowContent',
props: {
list: {
type: Array,
default: () => [],
},
},
data() {
return {
typeNum: '',
bannerNum: [],
titleText: '',
display: -1,
};
},
methods: {
openPage(url) {
window.open(url);
},
fade(index) {
console.log(index);
// var obj = document.getElementById(index)
this.display = index;
// this.list[index].contentUrl = this.list[index].contentUrl + '?autoplay=1'
// console.log(this.list[index].contentUrl)
},
},
};
</script>
<style lang="stylus" scoped>
.mg {
margin: 0 5%;
}
video {
width: 100%;
// object-fit: fill;
}
.item-title {
margin: 10px 0;
font-size: 24px;
color: rgba(0, 0, 0, 0.65);
font-family: Microsoft YaHei;
font-weight: bold;
}
.item-content {
font-size: 16px;
line-height: 36px;
font-family: Microsoft YaHei;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.cover {
width: 473px;
height: 300px;
position: absolute;
// top: -310px;
left: 0px;
}
.relative {
position: relative;
}
.none {
display: none;
}
</style>

7
src/views/NewPlatform/Children/Core.vue

@ -5,7 +5,7 @@
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<div class="top-box"> <div class="top-box">
<div class="top-title"> <div class="top-title d-flex flex-column justify-center">
协同创新中心 协同创新中心
<new-model ref="childModel" /> <new-model ref="childModel" />
</div> </div>
@ -238,6 +238,11 @@ export default {
} }
} }
.top-title {
top: auto !important;
height: 100%;
}
@media only screen and (max-width: 1400px) { @media only screen and (max-width: 1400px) {
.absolute-box { .absolute-box {
right: -40px; right: -40px;

5
src/views/NewPlatform/Children/Develop.vue

@ -9,6 +9,7 @@
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">导师分类</span> <span class="ins-title">导师分类</span>
<span v-if="list && list.length">
<span <span
:class="item.isActive ? 'act-color' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
@ -16,6 +17,7 @@
class="ins-name" class="ins-name"
v-for="(item, index) in list" v-for="(item, index) in list"
>{{ item.categoryName }}</span> >{{ item.categoryName }}</span>
</span>
</div> </div>
<div class="flex-1 align-center"> <div class="flex-1 align-center">
<a-input-search <a-input-search
@ -29,7 +31,7 @@
</div> </div>
</div> </div>
</div> </div>
<tutors :achList="achList" :fruitIpt="fruitIpt" ref="child" /> <tutors :achList="achList" :fruitIpt="fruitIpt" :platform="platform" ref="child" />
</div> </div>
</template> </template>
@ -55,6 +57,7 @@ export default {
list: [], list: [],
achList: [], achList: [],
fruitIpt: '', fruitIpt: '',
platform: 1,
}; };
}, },

26
src/views/NewPlatform/Children/Platform.vue

@ -11,7 +11,10 @@
<div class="inner my-1"> <div class="inner my-1">
<bread-crumb :arr="arr" /> <bread-crumb :arr="arr" />
</div> </div>
<div class="newBox">
<banner :show-page="showPage" /> <banner :show-page="showPage" />
<new-model :btnType="btnType" class="btn" ref="childModel" />
</div>
<div style="padding-bottom: 50px"> <div style="padding-bottom: 50px">
<div class="inner d-flex flex-nowrap justify-space-between"> <div class="inner d-flex flex-nowrap justify-space-between">
<div :key="index" @click="jump(item.url)" class="content-box" v-for="(item, index) in list"> <div :key="index" @click="jump(item.url)" class="content-box" v-for="(item, index) in list">
@ -42,9 +45,11 @@
import Banner from 'components/Banner/Banner.vue'; import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue'; import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import NewModel from './../components/NewModel.vue';
export default { export default {
name: 'News', name: 'News',
components: { HNav, Banner, BreadCrumb }, components: { HNav, Banner, BreadCrumb, NewModel },
data() { data() {
return { return {
str: '这是政策界面', str: '这是政策界面',
@ -54,6 +59,7 @@ export default {
{ name: '创新平台', url: '/NewPlatform/NewCore' }, { name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '' }, { name: '创新资源平台', url: '' },
], ],
btnType: 'default',
showPage: 32, showPage: 32,
list: [ list: [
{ {
@ -128,4 +134,22 @@ export default {
align-items: center; align-items: center;
font-size: 16px; font-size: 16px;
} }
.newBox {
position: relative;
}
.btn {
position: absolute;
top: 26%;
left: 330px;
}
@media only screen and (max-width: 1650px) {
.btn {
position: absolute;
top: 23%;
left: 233px;
}
}
</style> </style>

4
src/views/NewPlatform/Children/Share.vue

@ -9,6 +9,7 @@
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">研究开发实验室</span> <span class="ins-title">研究开发实验室</span>
<span v-if="laboratory && laboratory.length">
<span <span
:class="item.isActive ? 'act-color' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
@ -16,6 +17,7 @@
class="ins-name" class="ins-name"
v-for="(item, index) in laboratory" v-for="(item, index) in laboratory"
>{{ item.name }}</span> >{{ item.name }}</span>
</span>
</div> </div>
<div class="flex-1 align-center"> <div class="flex-1 align-center">
<a-input-search <a-input-search
@ -30,6 +32,7 @@
<div class="flex-3 flex-wrap" style="border-top: 1px solid rgba(0, 0, 0, 0.06)"> <div class="flex-3 flex-wrap" style="border-top: 1px solid rgba(0, 0, 0, 0.06)">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">大型科研设施与仪器</span> <span class="ins-title">大型科研设施与仪器</span>
<span v-if="instrument && instrument.length">
<span <span
:class="item.isActive ? 'act-color' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
@ -37,6 +40,7 @@
class="ins-name" class="ins-name"
v-for="(item, index) in instrument" v-for="(item, index) in instrument"
>{{ item.name }}</span> >{{ item.name }}</span>
</span>
</div> </div>
<div class="flex-1 align-center"> <div class="flex-1 align-center">
<a-input-search <a-input-search

6
src/views/NewPlatform/Children/ShareChild/InsDet.vue

@ -90,9 +90,9 @@ export default {
return { return {
typeOfPlatform: '设备详情', typeOfPlatform: '设备详情',
arr: [ arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' }, // { name: '', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '/NewPlatform/News' }, // { name: '', url: '/NewPlatform/News' },
{ name: '科技资源开放共享服务平台', url: '/NewPlatform/Share' }, // { name: '', url: '/NewPlatform/Share' },
{ name: '设备详情', url: '' }, { name: '设备详情', url: '' },
], ],
obj: {}, obj: {},

2
src/views/NewPlatform/Children/Transfer.vue

@ -9,6 +9,7 @@
<div class="d-flex"> <div class="d-flex">
<div class="flex-3 flex-wrap"> <div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span> <span class="ins-title">技术领域</span>
<span v-if="list && list.length">
<span <span
:class="item.isActive ? 'act-color' : ''" :class="item.isActive ? 'act-color' : ''"
:key="index" :key="index"
@ -16,6 +17,7 @@
class="ins-name" class="ins-name"
v-for="(item, index) in list" v-for="(item, index) in list"
>{{ item.name }}</span> >{{ item.name }}</span>
</span>
</div> </div>
<div class="flex-1 align-center"> <div class="flex-1 align-center">
<a-input-search <a-input-search

9
src/views/NewPlatform/components/NewModel.vue

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div style="text-align:center"> <div style="text-align:center">
<a-button @click="showModal" type="primary">{{ str }}</a-button> <a-button :type="btnType ? btnType : 'primary'" @click="showModal">{{ str }}</a-button>
</div> </div>
<a-modal <a-modal
:confirm-loading="confirmLoading" :confirm-loading="confirmLoading"
@ -169,6 +169,13 @@ const formTailLayout = {
export default { export default {
name: 'NewModel', name: 'NewModel',
props: {
btnType: {
type: String,
default: '',
},
},
data() { data() {
return { return {
form: this.$form.createForm(this, { name: 'submit' }), form: this.$form.createForm(this, { name: 'submit' }),

Loading…
Cancel
Save