46 changed files with 2556 additions and 456 deletions
@ -0,0 +1,356 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<a-modal :footer="null" v-model="showModelIntro"> |
||||
|
<p class="mt-3">{{ modelIntro }}</p> |
||||
|
</a-modal> |
||||
|
<a-modal |
||||
|
:confirm-loading="confirmLoading" |
||||
|
:visible="visible" |
||||
|
@cancel="handleCancel" |
||||
|
@ok="handleOk" |
||||
|
title="服务需求" |
||||
|
width="50%" |
||||
|
> |
||||
|
<a-form :form="form"> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="所属社区" |
||||
|
> |
||||
|
<a-radio-group @change="onChange" v-model.trim="platform.platform"> |
||||
|
<a-radio :value="1">创新社区</a-radio> |
||||
|
<a-radio :value="2">创业社区</a-radio> |
||||
|
<a-radio :value="3">产业服务</a-radio> |
||||
|
<a-radio :value="0">其他</a-radio> |
||||
|
</a-radio-group> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="公司名称" |
||||
|
> |
||||
|
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="联系人" |
||||
|
required |
||||
|
> |
||||
|
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="联系电话" |
||||
|
required |
||||
|
> |
||||
|
<a-input |
||||
|
@change="changePhone" |
||||
|
placeholder="请输入联系电话.." |
||||
|
type="tel" |
||||
|
v-decorator="['tel', { rules: phoneRules }]" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
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> |
||||
|
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> --> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="短信验证码" |
||||
|
required |
||||
|
> |
||||
|
<div class="d-flex flex-nowrap"> |
||||
|
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" /> |
||||
|
<a-button |
||||
|
class="code_img ml-2" |
||||
|
disabled |
||||
|
type="primary" |
||||
|
v-if="showInterval" |
||||
|
>重新发送 {{ interval }}</a-button> |
||||
|
<a-button |
||||
|
:disabled="platform.isTel === false" |
||||
|
@click="getCode" |
||||
|
class="code_img ml-2" |
||||
|
type="primary" |
||||
|
v-else |
||||
|
>获取验证码</a-button> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="需求描述" |
||||
|
> |
||||
|
<a-textarea |
||||
|
placeholder="请输入需求描述..." |
||||
|
style="height: 120px" |
||||
|
v-model.trim="platform.describe" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="上传附件" |
||||
|
> |
||||
|
<a-upload |
||||
|
:action="action" |
||||
|
:before-upload="beforeUpload" |
||||
|
:default-file-list="fileList" |
||||
|
@change="fileChange" |
||||
|
list-type="picture" |
||||
|
name="files" |
||||
|
> |
||||
|
<a-button> |
||||
|
<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 { mapMutations, mapState, mapActions } from 'vuex'; |
||||
|
import { serviceApply, upload } from 'config/api'; |
||||
|
|
||||
|
const formItemLayout = { |
||||
|
labelCol: { span: 5 }, |
||||
|
wrapperCol: { span: 18 }, |
||||
|
}; |
||||
|
const formTailLayout = { |
||||
|
labelCol: { span: 6 }, |
||||
|
wrapperCol: { span: 18, offset: 6 }, |
||||
|
}; |
||||
|
|
||||
|
export default { |
||||
|
props: { |
||||
|
modelIntro: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
form: this.$form.createForm(this, { name: 'submit' }), |
||||
|
action: upload, |
||||
|
fileList: [], |
||||
|
visible: false, |
||||
|
formItemLayout, |
||||
|
formTailLayout, |
||||
|
confirmLoading: false, |
||||
|
platform: { |
||||
|
companyName: '', // 公司名称 |
||||
|
manName: '', // 联系人 |
||||
|
tel: '', // 联系电话 |
||||
|
describe: '', // 项目描述 |
||||
|
code: '', // 验证码 |
||||
|
files: [], // 附件Id |
||||
|
isTel: false, |
||||
|
platform: 0, // 所属平台 |
||||
|
}, |
||||
|
codeRules: [ |
||||
|
{ required: true, message: '请输入验证码' }, |
||||
|
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
||||
|
], |
||||
|
codeNum: '', |
||||
|
showInterval: false, |
||||
|
codeTimer: null, |
||||
|
interval: 120, // 验证码有效时间倒计时 |
||||
|
phoneRules: [ |
||||
|
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
||||
|
], |
||||
|
typeData: { |
||||
|
type: 0, |
||||
|
Id: '', |
||||
|
}, |
||||
|
showModelIntro: false, |
||||
|
confirmLoading1: false, |
||||
|
visible1: false, |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('user', ['picCode', 'anyringToken']), |
||||
|
|
||||
|
methods: { |
||||
|
...mapMutations('home', ['getUserSer']), |
||||
|
...mapActions('user', ['sendCode', 'sendPicCode']), |
||||
|
showModel() { |
||||
|
this.showModelIntro = true; |
||||
|
}, |
||||
|
setTypeDataId(id) { |
||||
|
this.typeData.Id = id; |
||||
|
const storageAnyringToken = sessionStorage.getItem('anyringToken') || this.anyringToken; |
||||
|
if (storageAnyringToken) { |
||||
|
this.visible = true; |
||||
|
} else { |
||||
|
this.visible1 = true; |
||||
|
} |
||||
|
}, |
||||
|
handleCancel1() { |
||||
|
this.visible1 = false; |
||||
|
}, |
||||
|
|
||||
|
// 选择社区 |
||||
|
onChange(e) { |
||||
|
console.log('radio checked', e.target.value); |
||||
|
this.platform.platform = e.target.value; |
||||
|
}, |
||||
|
// 点击确定 |
||||
|
handleOk1() { |
||||
|
this.$router.push('/login'); |
||||
|
}, |
||||
|
// 取消显示 |
||||
|
handleCancel(e) { |
||||
|
this.visible = false; |
||||
|
}, |
||||
|
// 验证电话 |
||||
|
changePhone(e) { |
||||
|
this.platform.tel = e.target.value; |
||||
|
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
||||
|
}, |
||||
|
// 点击确定 |
||||
|
handleOk() { |
||||
|
if (!this.platform.manName) { |
||||
|
this.$message.error('请输入联系人'); |
||||
|
} else if (!this.platform.tel) { |
||||
|
this.$message.error('请输入联系电话'); |
||||
|
} else if (!this.platform.code) { |
||||
|
this.$message.error('请输入验证码'); |
||||
|
} else { |
||||
|
if (this.platform.isTel) { |
||||
|
for (var i = 0; i < this.fileList.length; i++) { |
||||
|
this.platform.files = this.platform.files.concat(this.fileList[i].response.data[0].id); |
||||
|
} |
||||
|
this.subMitAdd(); |
||||
|
} else { |
||||
|
this.$message.error('请输入正确的联系电话'); |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
// 加入接口 |
||||
|
async subMitAdd() { |
||||
|
this.confirmLoading = true; |
||||
|
try { |
||||
|
const params = { |
||||
|
param: { |
||||
|
code: this.platform.code, |
||||
|
companyName: this.platform.companyName, |
||||
|
contactName: this.platform.manName, |
||||
|
contactPhone: this.platform.tel, |
||||
|
description: this.platform.describe, |
||||
|
filesId: this.platform.files, |
||||
|
serviceId: this.typeData.Id, |
||||
|
type: this.typeData.type, |
||||
|
platform: this.platform.platform, |
||||
|
}, |
||||
|
}; |
||||
|
console.log('params: ', params); |
||||
|
const res = await serviceApply(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.typeData) { |
||||
|
this.typeData[key] = ''; |
||||
|
} |
||||
|
this.platform.isTel = false; |
||||
|
} else { |
||||
|
throw msg; |
||||
|
} |
||||
|
this.confirmLoading = false; |
||||
|
} catch (error) { |
||||
|
this.$message.error(error); |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
}, |
||||
|
// 获取验证码 |
||||
|
async getCode() { |
||||
|
try { |
||||
|
const params = { |
||||
|
phone: this.platform.tel, |
||||
|
verificationCodeId: this.picCode.verificationCodeId, |
||||
|
verificationCodeValue: this.codeNum, |
||||
|
}; |
||||
|
await this.sendCode(params); |
||||
|
this.getCodeInterval(); |
||||
|
} catch (error) { |
||||
|
// throw new Error(`SignIn.vue method getCode: ${error}`); |
||||
|
// console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 验证码倒计时 |
||||
|
getCodeInterval() { |
||||
|
this.showInterval = true; |
||||
|
this.codeTimer = setInterval(() => { |
||||
|
if (this.interval === 0) { |
||||
|
clearInterval(this.codeTimer); |
||||
|
this.codeTimer = null; |
||||
|
this.showInterval = false; |
||||
|
this.interval = 120; |
||||
|
return; |
||||
|
} |
||||
|
this.interval = this.interval - 1; |
||||
|
}, 1000); |
||||
|
}, |
||||
|
|
||||
|
// 刷新验证码 |
||||
|
changePicCode() { |
||||
|
this.sendPicCode(); |
||||
|
}, |
||||
|
beforeUpload(file) { |
||||
|
return new Promise((resolve, reject) => { |
||||
|
const isLt5M = file.size / 1024 / 1024 < 5; |
||||
|
if (!isLt5M) { |
||||
|
this.$message.warning('上传附件大小不能超过5m!'); |
||||
|
return reject(false); |
||||
|
} |
||||
|
return resolve(true); |
||||
|
}); |
||||
|
}, |
||||
|
fileChange(info) { |
||||
|
this.fileList = info.fileList; |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.code_img { |
||||
|
height: 32px; |
||||
|
width: 120px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,278 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<div class="inner my-1"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
</div> |
||||
|
|
||||
|
<div class="inner"> |
||||
|
<div class="policy-box"> |
||||
|
<div |
||||
|
:key="index" |
||||
|
class="list-box d-flex flex-row flex-nowrap align-center" |
||||
|
v-for="(item, index) in lists" |
||||
|
> |
||||
|
<div @click="jumpDetails(item)" class="date-box pointer" v-if="item.releaseTime"> |
||||
|
<p class="date-mon">{{ monthEnglish[item.releaseTime.split('-')[1] - 1] }}.</p> |
||||
|
<p class="date-day">{{ item.releaseTime.split(' ')[0].split('-')[2] }}</p> |
||||
|
</div> |
||||
|
<div class="d-flex flex-column flex-1"> |
||||
|
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<a-pagination |
||||
|
:current="actCurrent" |
||||
|
:page-size="pageSize" |
||||
|
:total="total" |
||||
|
@change="onShowSizeChange" |
||||
|
class="pagination" |
||||
|
show-less-items |
||||
|
show-quick-jumper |
||||
|
v-show="total > 5" |
||||
|
/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import { mapState, mapMutations } from 'vuex'; |
||||
|
import { frontInfo } from 'config/api'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Briefing', |
||||
|
components: { BreadCrumb }, |
||||
|
data() { |
||||
|
return { |
||||
|
arr: [{ name: '企业简报', url: '/Briefing' }], |
||||
|
total: 0, |
||||
|
pageSize: 20, |
||||
|
iptCon: '', |
||||
|
sta: { |
||||
|
ly: 0, |
||||
|
jz: 0, |
||||
|
sl: 0, |
||||
|
}, |
||||
|
aList: [], |
||||
|
lists: [], |
||||
|
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'], |
||||
|
nowData: '', |
||||
|
}; |
||||
|
}, |
||||
|
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']), |
||||
|
|
||||
|
created() { |
||||
|
this.iptCon = this.actIpCon; |
||||
|
this.aList = this.actList; |
||||
|
for (var i = 0; i < this.aList.length; i++) { |
||||
|
if (this.aList[i] === 0) { |
||||
|
this.sta.ly = 1; |
||||
|
} |
||||
|
if (this.aList[i] === 1) { |
||||
|
this.sta.jz = 1; |
||||
|
} |
||||
|
if (this.aList[i] === 2) { |
||||
|
this.sta.sl = 1; |
||||
|
} |
||||
|
} |
||||
|
this.getData(); |
||||
|
|
||||
|
// 获取当前时间 |
||||
|
var aData = new Date(); |
||||
|
// console.log(aData); //Wed Aug 21 2019 10:00:58 GMT+0800 (中国标准时间) |
||||
|
this.nowData = |
||||
|
aData.getFullYear() + |
||||
|
'-' + |
||||
|
(aData.getMonth() + 1) + |
||||
|
'-' + |
||||
|
aData.getDate() + |
||||
|
' ' + |
||||
|
aData.getHours() + |
||||
|
':' + |
||||
|
aData.getMinutes() + |
||||
|
':' + |
||||
|
aData.getSeconds(); |
||||
|
// console.log(this.nowData); //2019-8-20 |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapMutations('home', ['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']), |
||||
|
// 获取企业简报列表 |
||||
|
async getData() { |
||||
|
try { |
||||
|
this.setActIpCon(this.iptCon); |
||||
|
const params = { |
||||
|
param: { |
||||
|
pageNum: this.actCurrent, |
||||
|
pageSize: 20, |
||||
|
}, |
||||
|
}; |
||||
|
const res = await frontInfo(params); |
||||
|
const { data, msg, code } = res.data; |
||||
|
if (code === 200) { |
||||
|
this.lists = data.list; |
||||
|
this.total = parseInt(data.total); |
||||
|
} else { |
||||
|
this.$message.error(msg || '获取失败'); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
// 改变当前所选类型 |
||||
|
cSta(index) { |
||||
|
this.aList = []; |
||||
|
if (this.sta[index] === 0) { |
||||
|
this.sta[index] = 1; |
||||
|
// console.log(this.sta); |
||||
|
} else { |
||||
|
this.sta[index] = 0; |
||||
|
// console.log(this.sta); |
||||
|
} |
||||
|
if (this.sta.ly === 1) { |
||||
|
this.aList = this.aList.concat(0); |
||||
|
} |
||||
|
if (this.sta.jz === 1) { |
||||
|
this.aList = this.aList.concat(1); |
||||
|
} |
||||
|
if (this.sta.sl === 1) { |
||||
|
this.aList = this.aList.concat(2); |
||||
|
} |
||||
|
this.setActList(this.aList); |
||||
|
this.getData(); |
||||
|
}, |
||||
|
|
||||
|
// 改变当前显示页数 |
||||
|
onShowSizeChange(current, size) { |
||||
|
this.setActCurrent(current); |
||||
|
this.getData(); |
||||
|
}, |
||||
|
|
||||
|
// 跳转到详情界面 |
||||
|
jumpDetails(item) { |
||||
|
this.setActDetail(item); |
||||
|
this.$router.push('/BriefingDetails'); |
||||
|
}, |
||||
|
|
||||
|
// 转换时间戳 |
||||
|
formatDate() { |
||||
|
var date = new Date('2020-04-07 18:08:58'); |
||||
|
// 有三种方式获取 |
||||
|
var time1 = date.getTime(); |
||||
|
var time2 = date.valueOf(); |
||||
|
var time3 = Date.parse(date); |
||||
|
// console.log(time1); //1586254138000 |
||||
|
// console.log(time2); //1586254138000 |
||||
|
// console.log(time3); //1586254138000 |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped lang="stylus"> |
||||
|
.inner { |
||||
|
margin: 20px auto; |
||||
|
} |
||||
|
|
||||
|
.policy-box { |
||||
|
.list-box { |
||||
|
width: 100%; |
||||
|
overflow: hidden; |
||||
|
background: #fff; |
||||
|
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
||||
|
margin-top: 24px; |
||||
|
padding: 10px 25px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.item-title { |
||||
|
margin-bottom: 10px; |
||||
|
font-size: 24px; |
||||
|
color: rgba(0, 0, 0, 0.65); |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.item-content { |
||||
|
text-indent: 2em; |
||||
|
font-size: 16px; |
||||
|
line-height: 36px; |
||||
|
color: rgba(0, 0, 0, 0.35); |
||||
|
font-family: Microsoft YaHei; |
||||
|
overflow: hidden; |
||||
|
display: -webkit-box; |
||||
|
-webkit-line-clamp: 2; |
||||
|
-webkit-box-orient: vertical; |
||||
|
} |
||||
|
|
||||
|
.source { |
||||
|
cursor: pointer; |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: 400; |
||||
|
opacity: 1; |
||||
|
margin-right: 24px; |
||||
|
} |
||||
|
|
||||
|
.time { |
||||
|
font-size: 14px; |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: 400; |
||||
|
color: rgba(0, 0, 0, 0.25); |
||||
|
opacity: 1; |
||||
|
} |
||||
|
|
||||
|
.original { |
||||
|
font-size: 14px; |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: 400; |
||||
|
line-height: 22px; |
||||
|
opacity: 1; |
||||
|
margin-bottom: 0; |
||||
|
|
||||
|
span { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.date-box { |
||||
|
width: 160px !important; |
||||
|
text-align: center; |
||||
|
box-shadow: none !important; |
||||
|
margin-top: 0 !important; |
||||
|
padding: 0 !important; |
||||
|
|
||||
|
p { |
||||
|
margin-bottom: 0 !important; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.date-mon { |
||||
|
font-size: 26px; |
||||
|
height: 26px; |
||||
|
line-height: 26px; |
||||
|
font-weight: 500; |
||||
|
color: #13ACC4; |
||||
|
} |
||||
|
|
||||
|
.date-day { |
||||
|
font-size: 46px; |
||||
|
height: 56px; |
||||
|
line-height: 56px; |
||||
|
font-weight: bold; |
||||
|
color: #13ACC4; |
||||
|
} |
||||
|
|
||||
|
.source-time { |
||||
|
margin-bottom: 0; |
||||
|
} |
||||
|
|
||||
|
.pagination { |
||||
|
margin-top: 68px; |
||||
|
text-align: right; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,182 @@ |
|||||
|
<template> |
||||
|
<div class="box"> |
||||
|
<div> |
||||
|
<div class="policy-title"> |
||||
|
<span>{{ actDetail.title }}</span> |
||||
|
</div> |
||||
|
<!-- && hdDetail.content --> |
||||
|
<div v-if="hdDetail !== null"> |
||||
|
<div class="policy-info"> |
||||
|
<div> |
||||
|
<span> |
||||
|
<a-icon |
||||
|
class="baseColor" |
||||
|
style="font-size: 14px; margin-right: 10px" |
||||
|
type="clock-circle" |
||||
|
/> |
||||
|
<span> |
||||
|
{{ hdDetail.releaseTime }} |
||||
|
<span v-if="hdDetail.closeTime">- {{ hdDetail.closeTime }}</span> |
||||
|
</span> |
||||
|
</span> |
||||
|
<span style="margin-left: 60px"> |
||||
|
<a-icon class="baseColor" style="margin-right: 10px" type="environment" /> |
||||
|
<span>{{ hdDetail.address }}</span> |
||||
|
</span> |
||||
|
</div> |
||||
|
<!-- </div> --> |
||||
|
<!-- <div class="policy-info"> --> |
||||
|
</div> |
||||
|
<div class="policy-content" v-dompurify-html="hdDetail.content"></div> |
||||
|
<div class="policy-other"> |
||||
|
<div> |
||||
|
<span style="font-size: 14px">会议主题:</span> |
||||
|
<span>{{ hdDetail.theme }}</span> |
||||
|
</div> |
||||
|
<div> |
||||
|
<span>{{ hdDetail.organization }}</span> |
||||
|
</div> |
||||
|
<div> |
||||
|
<span style="font-size: 14px">主讲嘉宾:</span> |
||||
|
<span>{{ hdDetail.name }}</span> |
||||
|
</div> |
||||
|
<div v-if="hdDetail.other">其他事宜:{{ hdDetail.other }}</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState } from 'vuex'; |
||||
|
import { activeDetail } from 'config/api'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'BriefingDetails', |
||||
|
data() { |
||||
|
return { nowData: '', hdDetail: null }; |
||||
|
}, |
||||
|
computed: mapState('home', ['actDetail']), |
||||
|
async created() { |
||||
|
await this.getData(); |
||||
|
// 获取当前时间 |
||||
|
var aData = new Date(); |
||||
|
// console.log(aData); //Wed Aug 21 2019 10:00:58 GMT+0800 (中国标准时间) |
||||
|
this.nowData = |
||||
|
aData.getFullYear() + |
||||
|
'-' + |
||||
|
(aData.getMonth() + 1) + |
||||
|
'-' + |
||||
|
aData.getDate() + |
||||
|
' ' + |
||||
|
aData.getHours() + |
||||
|
':' + |
||||
|
aData.getMinutes() + |
||||
|
':' + |
||||
|
aData.getSeconds(); |
||||
|
// console.log(this.nowData); //2019-8-20 |
||||
|
}, |
||||
|
methods: { |
||||
|
// 获取企业简报列表 |
||||
|
async getData() { |
||||
|
try { |
||||
|
const params = { param: { activityId: this.actDetail.activityId } }; |
||||
|
const res = await activeDetail(params); |
||||
|
const { data, msg, code } = res.data; |
||||
|
if (code === 200) { |
||||
|
this.hdDetail = data; |
||||
|
} |
||||
|
} catch (error) { |
||||
|
// console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.box { |
||||
|
width: 1260px; |
||||
|
position: relative; |
||||
|
margin: 80px auto; |
||||
|
background: #fff; |
||||
|
min-height: 1037px; |
||||
|
overflow: hidden; |
||||
|
opacity: 1; |
||||
|
padding-bottom: 480px; |
||||
|
} |
||||
|
|
||||
|
.back-btn { |
||||
|
width: 80px; |
||||
|
position: absolute; |
||||
|
right: 0; |
||||
|
} |
||||
|
|
||||
|
.policy-title { |
||||
|
height: 120px; |
||||
|
font-size: 24px; |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: 400; |
||||
|
color: rgba(0, 0, 0, 0.85); |
||||
|
opacity: 1; |
||||
|
text-align: center; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
padding: 0 150px; |
||||
|
border-bottom: 1px solid #707070; |
||||
|
} |
||||
|
|
||||
|
.policy-info { |
||||
|
height: 76px; |
||||
|
line-height: 76px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.policy-content { |
||||
|
padding: 0 25px; |
||||
|
font-size: 16px; |
||||
|
color: rgba(0, 0, 0, 0.65); |
||||
|
font-weight: 400; |
||||
|
font-family: Microsoft YaHei; |
||||
|
} |
||||
|
|
||||
|
.coms-style { |
||||
|
height: 480px; |
||||
|
padding: 25px 0; |
||||
|
border-top: 2px solid #ccc; |
||||
|
position: absolute; |
||||
|
bottom: 0; |
||||
|
width: 100%; |
||||
|
} |
||||
|
|
||||
|
.coms-top { |
||||
|
height: 280px; |
||||
|
padding: 0 25px; |
||||
|
overflow: auto; |
||||
|
box-shadow: 0 0 5px #ccc; |
||||
|
} |
||||
|
|
||||
|
.coms-btm { |
||||
|
margin-top: 20px; |
||||
|
padding: 0 10px; |
||||
|
} |
||||
|
|
||||
|
.coms-content { |
||||
|
background: rgba(19, 172, 196, 0.1); |
||||
|
} |
||||
|
|
||||
|
.sub { |
||||
|
position: absolute; |
||||
|
right: 20px; |
||||
|
bottom: 20px; |
||||
|
} |
||||
|
|
||||
|
.policy-other { |
||||
|
margin: 50px 25px; |
||||
|
font-size: 16px; |
||||
|
color: rgba(0, 0, 0, 0.65); |
||||
|
font-weight: 400; |
||||
|
font-family: Microsoft YaHei; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,321 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<a-button @click="showModal" 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" |
||||
|
label="活动名称" |
||||
|
> |
||||
|
<a-input :value="actName" disabled /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="申请单位" |
||||
|
required |
||||
|
> |
||||
|
<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="参加人员" |
||||
|
required |
||||
|
> |
||||
|
<div :key="index" class="d-flex flex-nowrap mb-3" v-for="(item, index) in people"> |
||||
|
<a-input class="flex-1 mr-3" placeholder="姓名" v-model.trim="item.name" /> |
||||
|
<a-input class="flex-1 mr-3" placeholder="职称" v-model.trim="item.duties" /> |
||||
|
<a-input class="flex-1 mr-3" placeholder="职务" v-model.trim="item.positional" /> |
||||
|
<a-button |
||||
|
@click="changePerson(index)" |
||||
|
icon="plus" |
||||
|
type="link" |
||||
|
v-if="index === people.length - 1" |
||||
|
/> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
|
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="联系人" |
||||
|
required |
||||
|
> |
||||
|
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="联系电话" |
||||
|
required |
||||
|
> |
||||
|
<a-input |
||||
|
@change="changePhone" |
||||
|
placeholder="请输入联系电话.." |
||||
|
type="tel" |
||||
|
v-decorator="['tel', { rules: phoneRules }]" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
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> |
||||
|
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> --> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="短信验证码" |
||||
|
required |
||||
|
> |
||||
|
<div class="d-flex flex-nowrap"> |
||||
|
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" /> |
||||
|
<a-button |
||||
|
class="code_img ml-2" |
||||
|
disabled |
||||
|
type="primary" |
||||
|
v-if="showInterval" |
||||
|
>重新发送 {{ interval }}</a-button> |
||||
|
<a-button |
||||
|
:disabled="platform.isTel === false" |
||||
|
@click="getCode" |
||||
|
class="code_img ml-2" |
||||
|
type="primary" |
||||
|
v-else |
||||
|
>获取验证码</a-button> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
</a-form> |
||||
|
</a-modal> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import { mapState, mapActions } from 'vuex'; |
||||
|
import { apply } from 'config/api'; |
||||
|
const formItemLayout = { |
||||
|
labelCol: { span: 5 }, |
||||
|
wrapperCol: { span: 18 }, |
||||
|
}; |
||||
|
const formTailLayout = { |
||||
|
labelCol: { span: 6 }, |
||||
|
wrapperCol: { span: 18, offset: 6 }, |
||||
|
}; |
||||
|
export default { |
||||
|
name: 'Enroll', |
||||
|
props: { |
||||
|
activityId: { |
||||
|
type: Number, |
||||
|
default: 0, |
||||
|
}, |
||||
|
actName: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
form: this.$form.createForm(this, { name: 'submit' }), |
||||
|
visible: false, |
||||
|
title: '活动报名', |
||||
|
formItemLayout, |
||||
|
formTailLayout, |
||||
|
confirmLoading: false, |
||||
|
// 参加人员 |
||||
|
people: [ |
||||
|
{ |
||||
|
name: '', |
||||
|
duties: '', |
||||
|
positional: '', |
||||
|
}, |
||||
|
], |
||||
|
platform: { |
||||
|
companyName: '', // 申请单位 |
||||
|
manName: '', // 联系人 |
||||
|
tel: '', // 联系电话 |
||||
|
code: '', // 验证码 |
||||
|
isTel: false, |
||||
|
}, |
||||
|
codeRules: [ |
||||
|
{ required: true, message: '请输入验证码' }, |
||||
|
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
||||
|
], |
||||
|
codeNum: '', |
||||
|
showInterval: false, |
||||
|
codeTimer: null, |
||||
|
interval: 120, // 验证码有效时间倒计时 |
||||
|
phoneRules: [ |
||||
|
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('user', ['picCode']), |
||||
|
|
||||
|
async created() { |
||||
|
this.sendPicCode(); |
||||
|
await this.getUserSer(); |
||||
|
if (this.userSer) { |
||||
|
if (this.userSer.name) { |
||||
|
this.platform.manName = this.userSer.name; |
||||
|
} |
||||
|
if (this.userSer.phone) { |
||||
|
this.platform.tel = this.userSer.phone; |
||||
|
} |
||||
|
if (this.userSer.companyName) { |
||||
|
this.platform.companyName = this.userSer.companyName; |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapActions('user', ['sendCode', 'sendPicCode']), |
||||
|
...mapActions('home', ['getUserSer']), |
||||
|
|
||||
|
changePerson(index) { |
||||
|
// if (this.people[index].name && this.people[index].positional && this.people[index].duties) { |
||||
|
const a = { name: '', positional: '', duties: '' }; |
||||
|
this.people.push(a); |
||||
|
// } |
||||
|
}, |
||||
|
// 显示表单输入框 |
||||
|
showModal() { |
||||
|
this.visible = true; |
||||
|
}, |
||||
|
// 取消显示 |
||||
|
handleCancel(e) { |
||||
|
this.visible = false; |
||||
|
}, |
||||
|
// 验证电话 |
||||
|
changePhone(e) { |
||||
|
this.platform.tel = e.target.value; |
||||
|
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
||||
|
}, |
||||
|
// 点击确定 |
||||
|
handleOk() { |
||||
|
if (!this.platform.companyName) { |
||||
|
this.$message.error('请输入申请单位'); |
||||
|
} else if (!this.people[0].name || !this.people[0].positional || !this.people[0].duties) { |
||||
|
this.$message.error('请至少输入一名参加人员'); |
||||
|
} else if (!this.platform.tel) { |
||||
|
this.$message.error('请输入联系电话'); |
||||
|
} else if (!this.platform.code) { |
||||
|
this.$message.error('请输入验证码'); |
||||
|
} else { |
||||
|
if (this.platform.isTel) { |
||||
|
this.subMitAdd(); |
||||
|
} else { |
||||
|
this.$message.error('请输入正确的联系电话'); |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
// 加入接口 |
||||
|
async subMitAdd() { |
||||
|
this.confirmLoading = true; |
||||
|
try { |
||||
|
const { activityId, platform, people } = this; |
||||
|
people.forEach(item => { |
||||
|
item.activityId = activityId; |
||||
|
}); |
||||
|
const params = { |
||||
|
param: { |
||||
|
activityId, |
||||
|
code: platform.code, |
||||
|
companyName: platform.companyName, |
||||
|
contactName: platform.manName, |
||||
|
contactPhone: platform.tel, |
||||
|
peoples: people, |
||||
|
}, |
||||
|
}; |
||||
|
// console.log('params: ', params); |
||||
|
const res = await apply(params); |
||||
|
const { code, msg, data } = res.data; |
||||
|
if (code === 200) { |
||||
|
this.$message.success('申请成功'); |
||||
|
this.visible = false; |
||||
|
this.confirmLoading = false; |
||||
|
for (let key in this.platform) { |
||||
|
this.platform[key] = ''; |
||||
|
} |
||||
|
this.platform.isTel = false; |
||||
|
} else { |
||||
|
throw msg; |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
} catch (error) { |
||||
|
this.$message.error(error); |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
}, |
||||
|
// 获取验证码 |
||||
|
async getCode() { |
||||
|
// console.log(111); |
||||
|
try { |
||||
|
const params = { |
||||
|
phone: this.platform.tel, |
||||
|
verificationCodeId: this.picCode.verificationCodeId, |
||||
|
verificationCodeValue: this.codeNum, |
||||
|
}; |
||||
|
await this.sendCode(params); |
||||
|
this.getCodeInterval(); |
||||
|
} catch (error) { |
||||
|
// throw new Error(`SignIn.vue method getCode: ${error}`); |
||||
|
// console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 验证码倒计时 |
||||
|
getCodeInterval() { |
||||
|
this.showInterval = true; |
||||
|
this.codeTimer = setInterval(() => { |
||||
|
if (this.interval === 0) { |
||||
|
clearInterval(this.codeTimer); |
||||
|
this.codeTimer = null; |
||||
|
this.showInterval = false; |
||||
|
this.interval = 120; |
||||
|
return; |
||||
|
} |
||||
|
this.interval = this.interval - 1; |
||||
|
}, 1000); |
||||
|
}, |
||||
|
|
||||
|
// 刷新验证码 |
||||
|
changePicCode() { |
||||
|
this.sendPicCode(); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.must-color { |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.code_img { |
||||
|
height: 32px; |
||||
|
width: 120px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,47 @@ |
|||||
|
<!-- |
||||
|
* @Author: wally |
||||
|
* @email: 18603454788@163.com |
||||
|
* @Date: 2021-01-13 17:21:29 |
||||
|
* @LastEditors: wally |
||||
|
* @LastEditTime: 2021-01-20 09:56:56 |
||||
|
--> |
||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner my-1"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
</div> |
||||
|
|
||||
|
<div style="padding-bottom: 50px"> |
||||
|
<community /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import Community from '../../Community/Community.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'News', |
||||
|
components: { HNav, BreadCrumb, Community }, |
||||
|
data() { |
||||
|
return { |
||||
|
typeOfPlatform: '创业社区', |
||||
|
arr: [ |
||||
|
{ name: '创业社区', url: '/IncubationPlatform/MakerSpace' }, |
||||
|
{ name: '交流社区', url: '' }, |
||||
|
], |
||||
|
btnType: 'default', |
||||
|
}; |
||||
|
}, |
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 10px auto 15px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,47 @@ |
|||||
|
<!-- |
||||
|
* @Author: wally |
||||
|
* @email: 18603454788@163.com |
||||
|
* @Date: 2021-01-13 17:21:29 |
||||
|
* @LastEditors: wally |
||||
|
* @LastEditTime: 2021-01-20 09:56:56 |
||||
|
--> |
||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner my-1"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
</div> |
||||
|
|
||||
|
<div style="padding-bottom: 50px"> |
||||
|
<community /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import HNav from './components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import Community from '../../Community/Community.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'News', |
||||
|
components: { HNav, BreadCrumb, Community }, |
||||
|
data() { |
||||
|
return { |
||||
|
typeOfPlatform: '产业社区', |
||||
|
arr: [ |
||||
|
{ name: '产业社区', url: '/Industry/Union' }, |
||||
|
{ name: '交流社区', url: '' }, |
||||
|
], |
||||
|
btnType: 'default', |
||||
|
}; |
||||
|
}, |
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 10px auto 15px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,183 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner my-1"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
</div> |
||||
|
<div class="inner"> |
||||
|
<div> |
||||
|
<div class="search-background"> |
||||
|
<div class="d-flex"> |
||||
|
<div class="flex-3 flex-wrap"> |
||||
|
<span class="ins-title">产品类目:</span> |
||||
|
<span v-if="productLists && productLists.length"> |
||||
|
<span |
||||
|
:class="item.isActive ? 'act-color' : ''" |
||||
|
:key="index" |
||||
|
@click="choose(index)" |
||||
|
class="ins-name" |
||||
|
v-for="(item, index) in productLists" |
||||
|
>{{ item.name }}</span> |
||||
|
</span> |
||||
|
</div> |
||||
|
<div class="flex-1 align-center"> |
||||
|
<a-input-search |
||||
|
@search="searchProduct" |
||||
|
class="item-search" |
||||
|
enter-button="搜索" |
||||
|
placeholder="请输入" |
||||
|
v-model="productIpt" |
||||
|
/> |
||||
|
<add-project @update="update" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<p class="font-bold-24">产品展示</p> |
||||
|
</div> |
||||
|
<platform-list ref="child" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapMutations } from 'vuex'; |
||||
|
import { selModel } from 'config/api'; |
||||
|
import PlatformList from 'components/PlatformList/PlatformList.vue'; |
||||
|
import HNav from './components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import AddProject from '../components/AddProject.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Products', |
||||
|
components: { BreadCrumb, HNav, PlatformList, AddProject }, |
||||
|
data() { |
||||
|
return { |
||||
|
arr: [ |
||||
|
{ name: '产业社区', url: '/Industry/Union' }, |
||||
|
{ name: '产品展示', url: '' }, |
||||
|
], |
||||
|
productIpt: '', // 产品搜索框内容 |
||||
|
productLists: [], // 产品类目 |
||||
|
productList: [], // 产品类型选择列表 |
||||
|
showAddProject: false, |
||||
|
}; |
||||
|
}, |
||||
|
watch: { |
||||
|
productIpt(val) { |
||||
|
const obj = { |
||||
|
content: this.productIpt, |
||||
|
isBtn: 0, |
||||
|
}; |
||||
|
this.setProductIpt(obj); |
||||
|
}, |
||||
|
}, |
||||
|
created() { |
||||
|
const obj = { |
||||
|
content: '', |
||||
|
isBtn: 0, |
||||
|
}; |
||||
|
this.setListState(3); |
||||
|
this.setProductList([]); |
||||
|
this.setProductIpt(obj); |
||||
|
this.getType(3); |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapMutations('home', ['setProductIpt', 'setProductList', 'setListState']), |
||||
|
|
||||
|
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; |
||||
|
for (let i = 0; i < this.productLists.length; i++) { |
||||
|
this.productLists[i].isActive = false; |
||||
|
} |
||||
|
} else { |
||||
|
this.$message.error(msg || '分类获取失败'); |
||||
|
} |
||||
|
} catch (error) { |
||||
|
console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 选中类型时触发 |
||||
|
choose(index) { |
||||
|
this.productList = []; |
||||
|
const { productLists } = this; |
||||
|
for (let i = 0; i < productLists.length; i++) { |
||||
|
productLists[i].isActive = false; |
||||
|
} |
||||
|
this.setListState(3); |
||||
|
productLists[index].isActive = !productLists[index].isActive; |
||||
|
this.productLists = [...productLists]; |
||||
|
for (let i = 0; i < productLists.length; i++) { |
||||
|
if (productLists[i].isActive) { |
||||
|
this.productList.push(productLists[i].id); |
||||
|
} |
||||
|
} |
||||
|
this.setProductList(this.productList); |
||||
|
}, |
||||
|
|
||||
|
// 搜索 |
||||
|
searchProduct() { |
||||
|
const { productLists } = this; |
||||
|
for (let i = 0; i < productLists.length; i++) { |
||||
|
productLists[i].isActive = false; |
||||
|
} |
||||
|
this.productLists = [...productLists]; |
||||
|
this.setListState(3); |
||||
|
this.productIpt = ''; |
||||
|
const obj = { |
||||
|
content: this.productIpt, |
||||
|
isBtn: 1, |
||||
|
}; |
||||
|
this.setProductList(obj); |
||||
|
}, |
||||
|
|
||||
|
// 更新 |
||||
|
update() { |
||||
|
this.$refs.child.getProductLists(); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 40px 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: 100%; |
||||
|
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); |
||||
|
} |
||||
|
|
||||
|
.ins-name { |
||||
|
font-size: 16px; |
||||
|
color: rgba(0, 0, 0, 0.65); |
||||
|
padding: 0 10px; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.act-color { |
||||
|
color: #13ACC4 !important; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,228 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<a-button @click="showModal" style="height: 100%; width: 100%" type="primary" v-if="value !== 1">{{ str }}</a-button> |
||||
|
<a-modal :confirm-loading="confirmLoading" :title="title" :visible="visible" @cancel="handleCancel" @ok="handleOk" width="50%"> |
||||
|
<p style="text-align: center" v-show="value === 1"> |
||||
|
<a-radio-group style="margin-bottom: 20px !important" v-model="platform.val"> |
||||
|
<a-radio :value="2" style="margin-right: 100px">实体空间</a-radio> |
||||
|
<a-radio :value="3">虚拟空间</a-radio> |
||||
|
</a-radio-group> |
||||
|
</p> |
||||
|
<a-form :form="form"> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="公司名称"> |
||||
|
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系人" required> |
||||
|
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系电话" required> |
||||
|
<a-input @change="changePhone" placeholder="请输入联系电话.." type="tel" v-decorator="['tel', { rules: phoneRules }]" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" 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> |
||||
|
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> --> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required> |
||||
|
<div class="d-flex flex-nowrap"> |
||||
|
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" /> |
||||
|
<a-button class="code_img ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
||||
|
<a-button :disabled="platform.isTel === false" @click="getCode" class="code_img ml-2" type="primary" v-else> |
||||
|
获取验证码 |
||||
|
</a-button> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="合作信息简述"> |
||||
|
<a-textarea placeholder="请输入合作信息简述..." style="height: 120px" v-model.trim="platform.describe" /> |
||||
|
</a-form-item> |
||||
|
</a-form> |
||||
|
</a-modal> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapActions } from 'vuex'; |
||||
|
import { JoinPlatform } from 'config/api'; |
||||
|
const formItemLayout = { |
||||
|
labelCol: { span: 5 }, |
||||
|
wrapperCol: { span: 18 }, |
||||
|
}; |
||||
|
const formTailLayout = { |
||||
|
labelCol: { span: 6 }, |
||||
|
wrapperCol: { span: 18, offset: 6 }, |
||||
|
}; |
||||
|
export default { |
||||
|
name: 'AddModel', |
||||
|
props: { |
||||
|
value: { |
||||
|
type: Number, |
||||
|
default: 1, |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
form: this.$form.createForm(this, { name: 'submit' }), |
||||
|
visible: false, |
||||
|
title: '申请加入', |
||||
|
str: '加入我们', |
||||
|
formItemLayout, |
||||
|
formTailLayout, |
||||
|
confirmLoading: false, |
||||
|
platform: { |
||||
|
companyName: '', // 公司名称 |
||||
|
manName: '', // 联系人 |
||||
|
tel: '', // 联系电话 |
||||
|
describe: '', // 项目描述 |
||||
|
code: '', // 验证码 |
||||
|
val: 0, |
||||
|
isTel: false, |
||||
|
}, |
||||
|
codeRules: [ |
||||
|
{ required: true, message: '请输入验证码' }, |
||||
|
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
||||
|
], |
||||
|
codeNum: '', |
||||
|
showInterval: false, |
||||
|
codeTimer: null, |
||||
|
interval: 120, // 验证码有效时间倒计时 |
||||
|
phoneRules: [ |
||||
|
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
computed: mapState('user', ['picCode']), |
||||
|
async created() { |
||||
|
this.sendPicCode(); |
||||
|
await this.getUserSer(); |
||||
|
if (this.userSer) { |
||||
|
if (this.userSer.name) { |
||||
|
this.platform.manName = this.userSer.name; |
||||
|
} |
||||
|
if (this.userSer.phone) { |
||||
|
this.platform.tel = this.userSer.phone; |
||||
|
} |
||||
|
if (this.userSer.companyName) { |
||||
|
this.platform.companyName = this.userSer.companyName; |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapActions('user', ['sendCode', 'sendPicCode']), |
||||
|
...mapActions('home', ['getUserSer']), |
||||
|
// 显示表单输入框 |
||||
|
showModal() { |
||||
|
this.visible = true; |
||||
|
}, |
||||
|
// 取消显示 |
||||
|
handleCancel(e) { |
||||
|
this.visible = false; |
||||
|
}, |
||||
|
// 验证电话 |
||||
|
changePhone(e) { |
||||
|
this.platform.tel = e.target.value; |
||||
|
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
||||
|
}, |
||||
|
// 点击确定 |
||||
|
handleOk() { |
||||
|
if (!this.platform.manName) { |
||||
|
this.$message.error('请输入联系人'); |
||||
|
} else if (!this.platform.tel) { |
||||
|
this.$message.error('请输入联系电话'); |
||||
|
} else if (!this.platform.code) { |
||||
|
this.$message.error('请输入验证码'); |
||||
|
} else if (!this.platform.val) { |
||||
|
this.$message.error('请选择孵化器'); |
||||
|
} else { |
||||
|
if (this.platform.isTel) { |
||||
|
this.subMitAdd(); |
||||
|
} else { |
||||
|
this.$message.error('请输入正确的联系电话'); |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
// 加入接口 |
||||
|
async subMitAdd() { |
||||
|
this.confirmLoading = true; |
||||
|
try { |
||||
|
const params = { |
||||
|
param: { |
||||
|
code: this.platform.code, |
||||
|
companyName: this.platform.companyName, |
||||
|
contactName: this.platform.manName, |
||||
|
contactPhone: this.platform.tel, |
||||
|
description: this.platform.describe, |
||||
|
type: this.platform.val, |
||||
|
}, |
||||
|
}; |
||||
|
const res = await JoinPlatform(params); |
||||
|
const { code, msg, data } = res.data; |
||||
|
if (code === 200) { |
||||
|
this.$message.success('申请成功'); |
||||
|
this.visible = false; |
||||
|
this.confirmLoading = false; |
||||
|
for (let key in this.platform) { |
||||
|
this.platform[key] = ''; |
||||
|
} |
||||
|
this.platform.isTel = false; |
||||
|
} else { |
||||
|
throw msg; |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
} catch (error) { |
||||
|
this.$message.error(error); |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
}, |
||||
|
// 获取验证码 |
||||
|
async getCode() { |
||||
|
// console.log(111); |
||||
|
try { |
||||
|
const params = { |
||||
|
phone: this.platform.tel, |
||||
|
verificationCodeId: this.picCode.verificationCodeId, |
||||
|
verificationCodeValue: this.codeNum, |
||||
|
}; |
||||
|
await this.sendCode(params); |
||||
|
this.getCodeInterval(); |
||||
|
} catch (error) { |
||||
|
// throw new Error(`SignIn.vue method getCode: ${error}`); |
||||
|
// console.log(error); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 验证码倒计时 |
||||
|
getCodeInterval() { |
||||
|
this.showInterval = true; |
||||
|
this.codeTimer = setInterval(() => { |
||||
|
if (this.interval === 0) { |
||||
|
clearInterval(this.codeTimer); |
||||
|
this.codeTimer = null; |
||||
|
this.showInterval = false; |
||||
|
this.interval = 120; |
||||
|
return; |
||||
|
} |
||||
|
this.interval = this.interval - 1; |
||||
|
}, 1000); |
||||
|
}, |
||||
|
|
||||
|
// 刷新验证码 |
||||
|
changePicCode() { |
||||
|
this.sendPicCode(); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.must-color { |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.code_img { |
||||
|
height: 32px; |
||||
|
width: 120px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,464 @@ |
|||||
|
<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="公司名称" |
||||
|
required |
||||
|
> |
||||
|
<a-auto-complete |
||||
|
@search="handleSearchTasks" |
||||
|
@select="onSelect" |
||||
|
placeholder="公司名称" |
||||
|
v-model="platform.companyname" |
||||
|
> |
||||
|
<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-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="产品名称" |
||||
|
required |
||||
|
> |
||||
|
<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="产品图片" |
||||
|
required |
||||
|
> |
||||
|
<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="产品分类" |
||||
|
required |
||||
|
> |
||||
|
<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="产品简介" |
||||
|
required |
||||
|
> |
||||
|
<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="产品详情" |
||||
|
required |
||||
|
> |
||||
|
<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 debounce from 'lodash/debounce'; |
||||
|
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, queryInfo } 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 }], // 标题,键值对的形式;1、2表示字体大小 |
||||
|
[{ 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() { |
||||
|
this.handleSearchTasks = debounce(this.handleSearchTasks, 500); |
||||
|
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: [], // 产品类目 |
||||
|
dataSource: [], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('user', ['anyringToken']), |
||||
|
|
||||
|
created() { |
||||
|
this.getType(3); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
// 模糊搜索 选择公司信息 |
||||
|
async handleSearchTasks() { |
||||
|
try { |
||||
|
const params = { param: { company: this.platform.companyname } }; |
||||
|
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.companyname = item.company; |
||||
|
}, |
||||
|
|
||||
|
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; |
||||
|
}, |
||||
|
// 点击确定 |
||||
|
async handleOk() { |
||||
|
const { companyname, name, pic, modelIds, synopsis, needContent } = this.platform; |
||||
|
if (!companyname) { |
||||
|
this.$message.error('请输入公司名称'); |
||||
|
return; |
||||
|
} |
||||
|
if (!name) { |
||||
|
this.$message.error('请输入产品名称'); |
||||
|
return; |
||||
|
} |
||||
|
if (!pic) { |
||||
|
this.$message.error('请上传产品图片'); |
||||
|
return; |
||||
|
} |
||||
|
if (!modelIds) { |
||||
|
this.$message.error('请输入产品分类'); |
||||
|
return; |
||||
|
} |
||||
|
if (!synopsis) { |
||||
|
this.$message.error('请输入产品简介'); |
||||
|
return; |
||||
|
} |
||||
|
if (!needContent) { |
||||
|
this.$message.error('请输入产品详情'); |
||||
|
return; |
||||
|
} |
||||
|
await this.subMitAdd(); |
||||
|
}, |
||||
|
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> |
@ -0,0 +1,47 @@ |
|||||
|
<!-- |
||||
|
* @Author: wally |
||||
|
* @email: 18603454788@163.com |
||||
|
* @Date: 2021-01-13 17:21:29 |
||||
|
* @LastEditors: wally |
||||
|
* @LastEditTime: 2021-01-20 09:56:56 |
||||
|
--> |
||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner my-1"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
</div> |
||||
|
|
||||
|
<div style="padding-bottom: 50px"> |
||||
|
<community /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import Community from '../../Community/Community.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'News', |
||||
|
components: { HNav, BreadCrumb, Community }, |
||||
|
data() { |
||||
|
return { |
||||
|
typeOfPlatform: '创新社区', |
||||
|
arr: [ |
||||
|
{ name: '创新社区', url: '/NewPlatform/NewCore' }, |
||||
|
{ name: '交流社区', url: '' }, |
||||
|
], |
||||
|
btnType: 'default', |
||||
|
}; |
||||
|
}, |
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 10px auto 15px; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue