Commit 8cd999a0 authored by shilei's avatar shilei

feat: 开发区、政策文件、首页修改

parent a6ade69f
export default {
// 首页
homeInfo: '/postcard/api/developmentInfo/v1.0/source',
homeInfo: "/postcard/api/developmentInfo/v1.0/source",
// 列表
// 开发区列表
developList: "/postcard/api/developmentInfo/v1.0/page",
// 产业园列表
parkList: '/postcard/api/parkInfo/v1.0/page',
parkList: "/postcard/api/parkInfo/v1.0/page",
// 土地列表
landList: '/postcard/api/land/v1.0/page',
landList: "/postcard/api/land/v1.0/page",
// 载体列表
carrierList: '/postcard/api/carrier/v1.0/page',
carrierList: "/postcard/api/carrier/v1.0/page",
// 开发区详情
developDetail: "/postcard/api/developmentInfo/v1.0/detail",
// 产业园详情
industrialDetail: '/postcard/api/parkInfo/v1.0/detail',
industrialDetail: "/postcard/api/parkInfo/v1.0/detail",
// 载体详情
carrierDetail: '/postcard/api/carrier/v1.0/detail',
carrierDetail: "/postcard/api/carrier/v1.0/detail",
// 土地详情
landDetail: '/postcard/api/land/v1.0/detail',
landDetail: "/postcard/api/land/v1.0/detail",
// 招商引资-招商亮点
investmentLights: '/postcard/api/developmentInfo/v1.0/detail',
investmentLights: "/postcard/api/developmentInfo/v1.0/detail",
// 提交咨询信息
infoSubmit: '/postcard/api/investClueInfo/save',
infoSubmit: "/postcard/api/investClueInfo/save",
// 查询条件列表(字典表)
queryConditionList: '/postcard/api/sysDictData/listByCodes',
queryConditionList: "/postcard/api/sysDictData/listByCodes",
// 查询是否有权限查看列表
haveAuth: '/postcard/api/investClueInfo/haveAuth',
haveAuth: "/postcard/api/investClueInfo/haveAuth",
// 查询咨询列表
queryInvestInfos: '/postcard/api/investClueInfo/page',
queryInvestInfos: "/postcard/api/investClueInfo/page",
// 联系我们列表
queryContacts: '/postcard/api/scSourceInfo/contact',
queryContacts: "/postcard/api/scSourceInfo/contact",
// 获取查询条件列表
queryFiltersList: '/postcard/api/sysDictData/listByCodes',
queryFiltersList: "/postcard/api/sysDictData/listByCodes",
/** 登录 */
login: '/postcard/user/login',
login: "/postcard/user/login",
/** 主导产业 */
queryIndustryList: '/postcard/api/parkInfo/v1.0/industryList',
}
queryIndustryList: "/postcard/api/parkInfo/v1.0/industryList",
};
<template>
<media-card
:img="detail.imgUrl || ''"
:title="detail.name || ''"
:keyWords="keyWords"
:cardId="detail.id"
@click="toDetail"
:key="detail.id"
>
<template v-slot:rightMedia>
<view>
<div class="f24 flex right-footer">
<div class="nowrap" style="width: 200rpx">
<span class="c80">开发区级别:</span>
<span>{{ detail.levelName || "--" }}</span>
</div>
<div class="nowrap" style="margin-left: 10rpx">
<span class="c80">规划面积:</span
>{{ detail.coverArea ? detail.planArea + "平方公里" : "--" }}
</div>
</div>
</view>
</template>
</media-card>
</template>
<script>
import mediaCard from "./card.vue";
export default {
components: { mediaCard },
props: {
isHeightLight: {
type: Boolean,
default: false,
},
detail: {
type: Object,
default: {},
},
keyWords: {
type: String,
default: "",
},
},
methods: {
toDetail() {
uni.navigateTo({
url: "/pages/detail/developDetail?id" + this.detail.id,
});
},
},
};
</script>
<style lang="scss" scoped>
.right-media {
color: #4d4d4d;
line-height: 34rpx;
margin-bottom: 10rpx;
}
.right-footer {
color: #4d4d4d;
line-height: 34rpx;
}
.c80 {
color: #808080;
}
.nowrap {
white-space: nowrap;
}
</style>
......@@ -4,7 +4,8 @@ switch (process.env.VUE_APP_ENV) {
baseUrl = "https://prod-postcard-api.liyeyun.com";
break;
case "development":
baseUrl = "https://test.postcard-api.liyeyun.com.cn";
baseUrl = "https://test-postcard-api.liyeyun.com";
// baseUrl = "http://58impx.natappfree.cc";
break;
}
......
......@@ -25,6 +25,12 @@
"navigationBarTitleText": "招商引资"
}
},
{
"path": "pages/detail/developDetail",
"style": {
"navigationBarTitleText": "开发区详情"
}
},
{
"path": "pages/detail/industrialDetail",
"style": {
......
<template>
<div class="industrial-detail">
<CommonDetail detail-type="industrial" :queryUrl="queryUrl">
<template #default="{ detail }">
<div v-if="detail">
<div class="detail-cell">
<div class="detail-cell__title">{{ detail.name }}</div>
<div class="detail-cell__body">
<div class="flex detail-cell__line">
<div class="detail-cell__info flex1">
<div class="detail-cell__info-name">开发区级别:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.levelName) }}
</div>
</div>
<div class="detail-cell__info flex1">
<div class="detail-cell__info-name">规划面积:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.planArea, "平方公里") }}
</div>
</div>
</div>
<div class="detail-cell__line">
<div class="detail-cell__info">
<div class="detail-cell__info-name">详细地址:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.address) }}
</div>
</div>
</div>
</div>
</div>
<!-- 园区介绍 -->
<div class="detail-cell">
<div class="detail-cell__title">园区介绍</div>
<div class="detail-cell__body text-26">
{{ detail.description }}
</div>
</div>
<!-- 产业基础 -->
<div class="detail-cell">
<div class="detail-cell__title">产业基础</div>
<div class="detail-cell__body">
<div class="detail-cell__line">
<div class="detail-cell__info text-26">
<div class="detail-cell__info-name">主导产业:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.primaryIndustry) }}
</div>
</div>
</div>
<div class="detail-cell__line">
<div class="detail-cell__info text-26">
<div class="detail-cell__info-name">招商方向:</div>
<div class="detail-cell__info-value">
{{ handleValue(businessInfo(detail)) }}
</div>
</div>
</div>
</div>
</div>
<!-- 产业支持 -->
<!-- <div v-if="detail.resources.length > 0" class="detail-cell">
<div class="detail-cell__title">产业支持</div>
<div class="detail-cell__body">
<div class="flex gap-20 flex-wrap">
<div
v-for="item of detail.resources"
:key="item"
class="detail-cell__word-info"
>
{{ item }}
</div>
</div>
</div>
</div> -->
<!-- 园内配套 -->
<!-- <div v-if="detail.setUp.length > 0" class="detail-cell">
<div class="detail-cell__title">园区内配套</div>
<div class="detail-cell__body">
<div class="flex gap-20 flex-wrap">
<div
v-for="item of detail.setUp"
:key="item"
class="detail-cell__word-info"
>
{{ item }}
</div>
</div>
</div>
</div> -->
<!-- 开发区内产业园 -->
<div v-if="detail.parkPageList.length > 0" class="detail-cell">
<div class="detail-cell__title">开发区关联的园区</div>
<div class="detail-cell__body">
<div
v-for="item of detail.parkPageList"
:key="item.id"
class="detail-cell__list-item"
@click="toIndustrial(item)"
style="margin-bottom: 20px; border-top: none; padding: 0"
>
<park-card-vue :detail="item"></park-card-vue>
<!-- <ListItem :item="item" @to-detail="toCarrier(item)" no-address>
<template>
<div>
<div
class="flex align-center flex1"
style="margin-bottom: 20rpx"
>
<div>载体类型:</div>
<div>{{ handleValue(item.type) }}</div>
</div>
<div class="flex align-center flex1">
<div>建筑面积:</div>
<div>{{ handleValue(item.area, "m²") }}</div>
</div>
</div>
</template>
</ListItem> -->
</div>
</div>
</div>
</div>
</template>
</CommonDetail>
</div>
</template>
<script>
import CommonDetail from "./components/CommonDetail.vue";
import api from "@/api/url/index.js";
import { handleValue } from "@/utils/utils.js";
import ListItem from "./components/ListItem.vue";
import parkCardVue from "../../components/media/park-card.vue";
export default {
name: "IndustrialDetail",
components: {
CommonDetail,
ListItem,
parkCardVue,
},
data() {
return {
queryUrl: api.developDetail,
};
},
methods: {
handleValue,
businessInfo(detail) {
const { investmentDetails } = detail;
return investmentDetails
? investmentDetails
.map(({ codeName, details }) => {
return `${codeName}-${details}`;
})
.join(";")
: "";
},
toIndustrial({ id }) {
uni.navigateTo({
url: `/pages/detail/industrialDetail?id=${id}`,
});
},
},
};
</script>
This diff is collapsed.
This diff is collapsed.
<template>
<div>
<view class="tab_bar">
<view class="tab_bar">
<view
class="tab_item"
:class="{ active: activeBar === index }"
......@@ -12,44 +12,84 @@
<span class="line" v-if="activeBar === index"></span>
</view>
</view>
<div style="height: 80rpx;" v-if="activeBar === 0"> </div>
<img v-if="activeBar === 0" style="width: 100vw;" mode="widthFix" src="https://cfld-hw-obs-01.obs.cn-north-4.myhuaweicloud.com/lyy/img/shucheng/zsyz_04.jpg" />
<div style="padding: 40rpx 23rpx;">
<div style="height: 80rpx" v-if="activeBar === 0"></div>
<img
v-if="activeBar === 0"
style="width: 100vw"
mode="widthFix"
src="https://cfld-hw-obs-01.obs.cn-north-4.myhuaweicloud.com/lyy/img/shucheng/zsyz_04.jpg"
/>
<div style="padding: 40rpx 23rpx">
<!-- 招商亮点 -->
<div v-if="activeBar === 0">
<div v-for="light in lights" :key="light.title">
<section-title :title="light.title"></section-title>
<p class="many-content" style="color: #606266;padding-left: 6rpx;">{{light.titleIntroduce}}</p>
<p class="many-content" style="color: #606266; padding-left: 6rpx">
{{ light.titleIntroduce }}
</p>
</div>
</div>
<!-- 重点产业 -->
<div v-if="activeBar === 1" style="padding: 40rpx 23rpx;">
<div v-if="activeBar === 1" style="padding: 40rpx 23rpx">
<div class="section-box" @click="toIndustryDetail(1)">
<img class="icon-industry" style="width: 226rpx;" src="/static/img/icon-invest-industry_3.png" alt="">
<img
class="icon-industry"
style="width: 226rpx"
src="/static/img/icon-invest-industry_3.png"
alt=""
/>
<p class="industry-name">装备制造业</p>
</div>
<div class="section-box" @click="toIndustryDetail(0)">
<img class="icon-industry" src="/static/img/icon-invest-industry_2.png" alt="">
<img
class="icon-industry"
src="/static/img/icon-invest-industry_2.png"
alt=""
/>
<p class="industry-name">电子信息产业</p>
</div>
<div class="section-box" @click="toIndustryDetail(2)">
<img class="icon-industry" src="/static/img/icon-invest-industry_4.png" alt="">
<img
class="icon-industry"
src="/static/img/icon-invest-industry_4.png"
alt=""
/>
<p class="industry-name">农副食品加工产业</p>
</div>
</div>
<!-- 招商政策 -->
<div v-if="activeBar === 2" style="padding: 60rpx 23rpx;">
<div class="section-box policy-section" style="background: #F5FAFF;" @click="toPolicyDetail(0)">
<img class="icon-industry" src="/static/img/icon-invest-policy_1.png" alt="">
<p class="industry-name" style="color: #0462C1">征地和购买厂房</p>
<div v-if="activeBar === 2" style="padding: 60rpx 23rpx">
<div class="section-box policy-section" @click="toPolicyDetail(0)">
<img
class="icon-industry"
src="/static/img/icon-invest-policy_1.png"
alt=""
/>
<p class="industry-name" style="color: #0462c1">征地和购买厂房</p>
</div>
<div class="section-box policy-section" style="background: #F2FDFC;" @click="toPolicyDetail(1)">
<img class="icon-industry" src="/static/img/icon-invest-industry_3.png" alt="">
<p class="industry-name" style="color: #01A192">租赁厂房</p>
<div class="section-box policy-section" @click="toPolicyDetail(1)">
<img
class="icon-industry"
src="/static/img/icon-invest-policy_3.png"
alt=""
/>
<p class="industry-name" style="color: #01a192">租赁厂房</p>
</div>
<div class="section-box policy-section" style="background: #F4F5FF;" @click="toPolicyDetail(2)">
<img class="icon-industry" src="/static/img/icon-invest-policy_2.png" alt="">
<p class="industry-name" style="color: #8108C0;">其他</p>
<div class="section-box policy-section" @click="toPolicyDetail(2)">
<img
class="icon-industry"
src="/static/img/icon-invest-policy_2.png"
alt=""
/>
<p class="industry-name" style="color: #8108c0">其他</p>
</div>
<div class="section-box policy-section" @click="toPolicyDetail(3)">
<img
class="icon-industry"
src="/static/img/icon-invest-industry_4.png"
alt=""
/>
<p class="industry-name" style="color: #01a192">资料文件</p>
</div>
</div>
<!-- 要素成本 -->
......@@ -57,18 +97,15 @@
<ElementCost :detail="detail"></ElementCost>
</div>
</div>
<div>
</div>
<div></div>
</div>
<!-- <div>招商引资</div> -->
</template>
<script>
import API from '@/api/url';
import sectionTitle from '../../components/section-title/section-title.vue';
import {mapMutations} from 'vuex';
import ElementCost from '@/components/element-cost/element-cost.vue';
import API from "@/api/url";
import sectionTitle from "../../components/section-title/section-title.vue";
import { mapMutations } from "vuex";
import ElementCost from "@/components/element-cost/element-cost.vue";
export default {
components: { sectionTitle, ElementCost },
data() {
......@@ -77,49 +114,44 @@ export default {
activeBar: 0,
lights: [],
detail: null,
}
};
},
mounted() {
this.$fetch({
url: API.investmentLights,
methods: 'get',
success: res => {
console.log(res)
methods: "get",
success: (res) => {
console.log(res);
this.detail = res;
this.lights = res.investmentLights;
this.setPolicyList(res.policys);
this.setPrimaryIndustryList(res.primaryIndustrys);
}
})
},
});
},
methods: {
...mapMutations(['setPolicyList', 'setPrimaryIndustryList']),
...mapMutations(["setPolicyList", "setPrimaryIndustryList"]),
changeTab(index) {
this.activeBar = index;
},
toPolicyDetail(index) {
uni.navigateTo({
url: '/pages/inviteInvestment/policyDetail?id=' + index,
success: (result) => {
},
url: "/pages/inviteInvestment/policyDetail?id=" + index,
success: (result) => {},
fail: () => {},
complete: () => {}
complete: () => {},
});
},
toIndustryDetail(index) {
uni.navigateTo({
url: '/pages/inviteInvestment/industryDetail?id=' + index,
success: (result) => {
},
url: "/pages/inviteInvestment/industryDetail?id=" + index,
success: (result) => {},
fail: () => {},
complete: () => {}
complete: () => {},
});
}
}
}
},
},
};
</script>
<style lang="scss" scoped>
.tab_bar {
......@@ -133,6 +165,7 @@ export default {
top: 0;
width: 100vw;
box-sizing: border-box;
z-index: 9;
}
.tab_item {
display: flex;
......@@ -149,7 +182,7 @@ export default {
height: 10rpx;
border-radius: 10rpx;
margin-top: -10rpx;
background: linear-gradient(to right, #4374EF 0%, rgba(0,0,0,0) 100%);
background: linear-gradient(to right, #4374ef 0%, rgba(0, 0, 0, 0) 100%);
display: inline-block;
overflow: hidden;
}
......@@ -161,17 +194,34 @@ export default {
margin-bottom: 5rpx;
}
.policy-section {
height: 180rpx;
height: 240rpx;
margin-bottom: 20rpx;
border-radius: 8rpx;
border-radius: 10rpx;
&:nth-child(1) {
background: url("/static/img/bg-invest-policy_1.png") 100% 100% no-repeat;
background-size: cover;
}
&:nth-child(2) {
background: url("/static/img/bg-invest-policy_2.png") 100% 100% no-repeat;
background-size: cover;
}
&:nth-child(3) {
background: url("/static/img/bg-invest-policy_3.png") 100% 100% no-repeat;
background-size: cover;
}
&:nth-child(4) {
background: url("/static/img/bg-invest-policy_4.png") 100% 100% no-repeat;
background-size: cover;
}
.icon-industry {
width: 127rpx;
height: 107rpx;
left: 100rpx;
top: 37rpx;
width: 154rpx;
height: 154rpx;
left: 71rpx;
top: 43rpx;
}
.industry-name {
padding-left: 304rpx;
padding-left: 363rpx;
padding-top: 100rpx;
}
}
.icon-industry {
......@@ -183,9 +233,9 @@ export default {
}
.industry-name {
font-size: 34rpx;
color: #003AB9;
color: #003ab9;
font-weight: bold;
padding-top: 73rpx;
padding-left: 216rpx;
}
</style>
\ No newline at end of file
</style>
<template>
<div style="padding: 40rpx 23rpx;">
<div v-for="policy in policyList[pageId].info" :key='policy.name'>
<section-title :title="policy.name"></section-title>
<p class="many-content" style="color: #606266;padding-left: 6rpx;">{{policy.content}}</p>
<div style="padding: 40rpx 23rpx">
<div>
<div class="section-box policy-section">
<img
class="icon-industry"
src="/static/img/icon-invest-industry_4.png"
alt=""
/>
<p class="industry-name" style="color: #01a192">资料文件</p>
</div>
</div>
<div v-for="policy in policyList[pageId].info" :key="policy.name">
<template v-if="pageId != 3">
<section-title :title="policy.name"></section-title>
<p class="many-content" style="color: #606266; padding-left: 6rpx">
{{ policy.content }}
</p>
</template>
<template v-else>
<div
class="flex align-center"
style="
height: 80rpx;
margin: 0 auto 20rpx;
color: #666;
font-size: 30rpx;
width: 608rpx;
border-bottom: 1px solid rgba(0, 0, 0, 0.15);
"
@click="openFile(policy)"
>
<img style="width: 48rpx; height: 48rpx" src="" alt="" />
<p class="flex1 ell">{{ policy.name }}</p>
</div>
</template>
</div>
</div>
</template>
<script>
import store from '@/store'
import sectionTitle from '../../components/section-title/section-title.vue'
import store from "@/store";
import sectionTitle from "../../components/section-title/section-title.vue";
export default {
components: { sectionTitle },
data() {
return {
pageId: 0
}
pageId: 0,
};
},
computed: {
policyList() {
return store.state.policyList
}
return store.state.policyList;
},
},
mounted(){
mounted() {
this.pageId = this.$root.$mp.query.id;
uni.setNavigationBarTitle({
title: this.policyList[this.pageId].type
title: this.policyList[this.pageId].type,
});
},
methods: {
openFile(policy) {
wx.downloadFile({
// 示例 url,并非真实存在
url: policy.content,
success: function (res) {
const filePath = res.tempFilePath;
wx.openDocument({
filePath: filePath,
success: function (res) {
console.log("打开文档成功");
},
});
},
});
},
},
};
</script>
<style lang="scss" scoped>
// .section-box {
// background-size: contain;
// height: 183rpx;
// position: relative;
// margin-bottom: 5rpx;
// }
.policy-section {
height: 240rpx;
margin-bottom: 20rpx;
border-radius: 10rpx;
background: url("/static/img/bg-invest-policy_4.png") 100% 100% no-repeat;
background-size: cover;
position: relative;
.icon-industry {
position: absolute;
width: 154rpx;
height: 154rpx;
left: 71rpx;
top: 43rpx;
}
.industry-name {
font-size: 34rpx;
color: #003ab9;
font-weight: bold;
padding-top: 100rpx;
padding-left: 363rpx;
}
}
</script>
<style></style>
\ No newline at end of file
</style>
This diff is collapsed.
This diff is collapsed.
src/static/img/icon-invest-policy_1.png

12.5 KB | W: | H:

src/static/img/icon-invest-policy_1.png

61.4 KB | W: | H:

src/static/img/icon-invest-policy_1.png
src/static/img/icon-invest-policy_1.png
src/static/img/icon-invest-policy_1.png
src/static/img/icon-invest-policy_1.png
  • 2-up
  • Swipe
  • Onion skin
src/static/img/icon-invest-policy_2.png

10.4 KB | W: | H:

src/static/img/icon-invest-policy_2.png

64.1 KB | W: | H:

src/static/img/icon-invest-policy_2.png
src/static/img/icon-invest-policy_2.png
src/static/img/icon-invest-policy_2.png
src/static/img/icon-invest-policy_2.png
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment