You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

386 lines
12 KiB

5 years ago
<template>
<div>
<h-nav />
5 years ago
<div class="inner my-1">
5 years ago
<bread-crumb :arr="arr" />
</div>
5 years ago
<banner :show-page="showPage" />
5 years ago
<div class="flow-path">
<div class="flow-title">服务流程</div>
5 years ago
<div class="flow-content1">
5 years ago
<img src="~assets/image.png" style="width: 100%" />
5 years ago
</div>
</div>
<div class="inner d-flex flex-wrap">
5 years ago
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8 pointer d-flex flex-column"
5 years ago
style="position: relative"
5 years ago
v-for="(item, index) in list"
>
5 years ago
<img
:src="item.picUrl"
:title="item.intro"
@click="showModal(item.id)"
style="height: 220px; width: 100%; border: 1px solid #ccc"
5 years ago
/>
<p @click="showModal(item.id)" class="font-24 my-4">{{ item.name }}</p>
<p class="font-16 mb-4 textColor line-height-30 item-intro">{{ item.intro }}</p>
<p @click="showDiv(index)" class="baseColor d-flex flex-row-reverse">{{ showList[index] }}</p>
5 years ago
</div>
</div>
<div class="inner">
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
5 years ago
v-show="total > 8"
5 years ago
/>
</div>
5 years ago
<a-modal :confirm-loading="confirmLoading" :visible="visible" @cancel="handleCancel" @ok="handleOk" title="产品购买" width="50%">
5 years ago
<a-form :form="form">
5 years ago
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="公司名称">
5 years ago
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" />
</a-form-item>
5 years ago
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系人" required>
5 years ago
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" />
</a-form-item>
5 years ago
<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 }]" />
5 years ago
</a-form-item>
5 years ago
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required>
5 years ago
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
5 years ago
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" />
5 years ago
<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>
5 years ago
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required>
5 years ago
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" />
5 years ago
<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
>
5 years ago
</div>
</a-form-item>
5 years ago
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="需求描述">
<a-textarea placeholder="请输入需求描述..." style="height: 120px" v-model.trim="platform.describe" />
5 years ago
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="上传附件"
v-show="typeData.type === 0"
>
<a-upload
:action="action"
:default-file-list="fileList"
:before-upload="beforeUpload"
@change="fileChange"
list-type="picture"
name="files"
>
5 years ago
<a-button> <a-icon type="upload" />点击上传附件 </a-button>
5 years ago
</a-upload>
</a-form-item>
</a-form>
</a-modal>
5 years ago
</div>
</template>
<script>
5 years ago
import { mapMutations, mapState, mapActions } from 'vuex';
import { selService, serviceApply, upload } from 'config/api';
5 years ago
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
5 years ago
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
5 years ago
export default {
name: 'Services',
components: { Banner, HNav, BreadCrumb },
data() {
return {
title: '创业服务',
showPage: 46,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
5 years ago
{ name: '创业服务', url: '/IncubationPlatform/Services' },
5 years ago
],
list: [],
current: 1,
pageSize: 8,
total: 0,
5 years ago
intro: '',
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,
},
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: '请输入正确的手机号' },
],
5 years ago
showList: ['查看全部', '查看全部', '查看全部', '查看全部'],
5 years ago
typeData: {
type: 0,
id: '',
},
5 years ago
};
},
5 years ago
computed: mapState('user', ['picCode']),
5 years ago
5 years ago
async created() {
5 years ago
this.getService();
5 years ago
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;
}
}
5 years ago
},
5 years ago
methods: {
5 years ago
...mapMutations('home', ['setServiceArr']),
5 years ago
...mapActions('user', ['sendCode', 'sendPicCode']),
...mapActions('home', ['getUserSer']),
5 years ago
// 改变单当前页数
onShowSizeChange(current, size) {
this.current = current;
},
5 years ago
// 获取服务列表
async getService() {
try {
const params = { param: { serviceType: 2 } };
const res = await selService(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.list = data;
}
} catch (error) {
5 years ago
// console.log(data);
5 years ago
}
},
5 years ago
// 查看 服务 详情
jump(id) {
5 years ago
// console.log(id);
5 years ago
this.setServiceArr([]);
this.setServiceArr(this.arr);
5 years ago
this.$router.push({
path: '/NewPlatform/ServiceDet',
name: 'ServiceDet',
params: { id },
});
},
5 years ago
// 显示表单输入框
showModal(id) {
this.typeData.id = id;
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.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();
// console.log(this.platform.files);
} 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,
},
};
const res = await serviceApply(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() {
5 years ago
// console.log(111);
5 years ago
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}`);
5 years ago
// console.log(error);
5 years ago
}
},
// 验证码倒计时
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);
});
},
5 years ago
fileChange(info) {
this.fileList = info.fileList;
},
5 years ago
showDiv(index) {
var divs = document.getElementsByClassName('item-intro');
let list = ['查看全部', '查看全部', '查看全部', '查看全部'];
for (let i = 0; i < divs.length; i++) {
if (index === i) {
if (divs[index].style.height === '90px' || divs[index].style.height === '') {
list[i] = '收起';
divs[i].style.height = 'auto';
} else {
divs[i].style.height = '90px';
list[i] = '查看全部';
}
} else {
divs[i].style.height = '90px';
list[i] = '查看全部';
}
}
this.showList = list;
},
5 years ago
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
.pagination {
text-align: right;
}
.item-box {
5 years ago
width: 22%;
margin-right: 4%;
5 years ago
border-radius: 4px;
5 years ago
text-align: center;
5 years ago
}
5 years ago
.margin-0 {
margin-right: 0 !important;
}
5 years ago
.item-intro {
display: -webkit-box;
5 years ago
// -webkit-line-clamp: 3;
// -webkit-box-orient: vertical;
text-align: left;
5 years ago
height: 90px;
5 years ago
overflow: hidden;
}
5 years ago
</style>