Commit 9a5da067 authored by shilei's avatar shilei
parents 8e3da4f4 ff4758a3
{
"strict": true,
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
},
"moduleResolution": "node"
},
"include": ["src/**/*.ts", "src/**/*.vue"],
"vueCompilerOptions": {
"target": 2
}
}
......@@ -67,12 +67,13 @@
"@dcloudio/uni-quickapp-webview": "^2.0.2-3081220230817001",
"@dcloudio/uni-stacktracey": "^2.0.2-3081220230817001",
"@dcloudio/uni-stat": "^2.0.2-3081220230817001",
"@vue/composition-api": "^1.7.2",
"@vue/shared": "^3.0.0",
"core-js": "^3.8.3",
"flyio": "^0.6.2",
"qs": "^6.11.2",
"uview-ui": "^2.0.36",
"vue": "^2.6.14",
"vue": ">= 2.6.14 < 2.7",
"vuex": "^3.2.0"
},
"devDependencies": {
......@@ -90,6 +91,7 @@
"@dcloudio/webpack-uni-pages-loader": "^2.0.2-3081220230817001",
"@vue/cli-plugin-babel": "^5.0.0",
"@vue/cli-service": "^5.0.0",
"@vue/runtime-dom": "^3.3.12",
"babel-plugin-import": "^1.11.0",
"cross-env": "^7.0.2",
"jest": "^25.4.0",
......
......@@ -213,4 +213,74 @@ button::after {
.hpct100 {
height: 100%;
}
.detail-cell {
margin-right: 30rpx;
margin-left: 30rpx;
padding: 30rpx;
background-color: white;
border-radius: 4rpx;
& ~ .detail-cell {
margin-top: 20rpx;
}
&__title {
color: #333333;
font-size: 30rpx;
font-weight: 600;
}
&__body {
margin-top: 40rpx;
}
&__info {
display: flex;
font-size: 24rpx;
font-family: PingFangSC, PingFang SC;
color: #606266;
}
&__line {
& ~ .detail-cell__line {
margin-top: 23rpx;
}
}
&__info-name {
flex: none;
}
&__word-info {
position: relative;
padding-left: 50rpx;
padding-right: 30rpx;
display: flex;
align-items: center;
height: 60rpx;
outline: 2rpx solid #e6e6e6;
font-size: 28rpx;
&::after {
content: "";
width: 20rpx;
height: 20rpx;
background: url("@/static/img/icon-green-true.png") no-repeat;
background-size: contain;
position: absolute;
left: 20rpx;
top: 20rpx;
}
}
&__list-item {
padding: 40rpx 0;
}
&__list-item ~ .detail-cell__list-item {
border-top: 2rpx solid rgba(0, 0, 0, 0.15);
}
.flex-wrap {
flex-wrap: wrap;
}
.gap-20 {
gap: 20rpx;
}
.text-26 {
font-size: 26rpx;
}
}
</style>
......@@ -7,5 +7,9 @@ export default {
// 土地列表
landList: '/postcard/api/land/v1.0/page',
// 载体列表
carrierList: '/postcard/api/carrier/v1.0/page'
carrierList: '/postcard/api/carrier/v1.0/page',
// 产业园详情
industrialDetail: '/postcard/api/parkInfo/v1.0/detail',
// 载体详情
carrierDetail: '/postcard/api/carrier/v1.0/detail',
}
<template>
<u-popup
:show="showModal"
mode="center"
@close="close"
round="10"
:safeAreaInsetBottom="false"
>
<div class="content">
<p class="title c4d f32">{{ titleName }}</p>
<p class="c4d f32">{{ phoneInfo.name }}{{ phoneInfo.phone }}</p>
<div class="btn-view" @click="call">拨打电话</div>
</div>
</u-popup>
</template>
<script>
export default {
props: {
phoneInfo: {
type: Object,
default: () => {
return {
name: "客服中心",
phone: "18703707175",
};
},
},
showCallService: {
default: false,
},
titleName: {
type: String,
default: "联系我们",
},
},
data() {
return {
showModal: false,
};
},
methods: {
close() {
this.showModal = false;
},
call() {
uni.makePhoneCall({
phoneNumber: this.phoneInfo.phone,
});
},
},
watch: {
showCallService() {
this.showModal = true;
},
},
};
</script>
<style lang="scss" scoped>
.content {
width: 650rpx;
box-sizing: border-box;
background: #ffffff;
border-radius: 10rpx;
text-align: center;
padding-top: 39rpx;
}
.title {
font-weight: 500;
margin-bottom: 80rpx;
}
.btn-view {
border-top: 1rpx solid #e6e6e6;
height: 112rpx;
box-sizing: border-box;
line-height: 111rpx;
font-size: 30rpx;
color: #bf0008;
margin-top: 98rpx;
}
</style>
......@@ -3,8 +3,10 @@ import App from './App'
import './uni.promisify.adaptor'
import fetch from './utils/request.js'
import store from './store'
import VueCompositionAPI from '@vue/composition-api'
import uView from 'uview-ui'
// import '@/utils/filters.js';
Vue.use(uView)
// 如此配置即可
// uni.$u.config.unit = 'rpx'
......@@ -16,6 +18,8 @@ uni.$u.setConfig({
},
})
Vue.use(VueCompositionAPI)
Array.prototype.removeItem = function (val) {
var index = this.indexOf(val);
......@@ -23,6 +27,14 @@ Array.prototype.removeItem = function (val) {
this.splice(index, 1);
}
}
Vue.filter('handleValue', function(value, unit = '') {
if (value || value === 0) {
return `${value}${unit}`
} else {
return '--';
}
})
Object.defineProperty(Array.prototype, 'removeItem', {
enumerable: false
})
......
......@@ -6,7 +6,7 @@
"versionCode": "100",
"transformPx": false,
"app-plus": {
/* 5+App特有相关 */ "usingComponents": true,
"usingComponents": true,
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
......@@ -14,12 +14,9 @@
"delay": 0
},
"modules": {
/* 模块配置 */
},
"distribute": {
/* 应用发布信息 */
"android": {
/* android打包配置 */
"permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
......@@ -46,18 +43,14 @@
]
},
"ios": {
/* ios打包配置 */
},
"sdkConfigs": {
/* SDK配置 */
}
}
},
"quickapp": {
/* 快应用特有相关 */
},
"mp-weixin": {
/* 微信小程序特有相关 */
"appid": "wx6d541865055a52d7",
"setting": {
"urlCheck": false
......
......@@ -2,7 +2,6 @@
"easycom": {
"autoscan": true,
"custom": {
// uni-ui 规则如下配置
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue",
"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
}
......@@ -31,6 +30,24 @@
"style": {
"navigationBarTitleText": "投资舒城"
}
},
{
"path": "pages/detail/industrialDetail",
"style": {
"navigationBarTitleText": "产业园详情"
}
},
{
"path": "pages/detail/carrierDetail",
"style": {
"navigationBarTitleText": "载体详情"
}
},
{
"path": "pages/detail/landDetail",
"style": {
"navigationBarTitleText": "土地详情"
}
}
],
"tabBar": {
......
<template>
<div class="carrier-detail">
<CommonDetail detail-type="carrier" :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.type) }}
</div>
</div>
<div class="detail-cell__info flex1">
<div class="detail-cell__info-name">建筑面积:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.area, "亩") }}
</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.structure) }}
</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">
<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.floorNumber) }}
</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(detail.floorHigh, "㎡") }}
</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(detail.singleArea, "㎡") }}
</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(detail.weight, "kg/㎡") }}
</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(detail.distance, "m") }}
</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(detail.elevatorType) }}
</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(detail.fireProtectionLevel) }}
</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(detail.fireResistant) }}
</div>
</div>
</div>
</div>
</div>
<!-- 所属产业园 -->
<div v-if="detail.carrierParkVo" class="detail-cell">
<div class="detail-cell__title">所属产业园</div>
<div class="detail-cell__body">
<div class="detail-cell__list-item">
<ListItem
:item="detail.carrierParkVo"
@to-detail="toIndustrialDetail"
>
<template>
<div class="flex">
<div class="flex align-center flex1">
<div>级别:</div>
<div>
{{ handleValue(detail.carrierParkVo.levelName) }}
</div>
</div>
<div class="flex align-center flex1">
<div>面积:</div>
<div>
{{
handleValue(detail.carrierParkVo.coverArea, "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";
export default {
name: "IndustrialDetail",
components: {
CommonDetail,
ListItem,
},
data() {
return {
queryUrl: api.carrierDetail,
};
},
methods: {
handleValue,
businessInfo(detail) {
const { investmentDetails } = detail;
return investmentDetails
? investmentDetails
.map(({ codeName, details }) => {
return `${codeName}-${details}`;
})
.join(";")
: "";
},
toIndustrialDetail({ id }) {
uni.navigateTo({
url: `/pages/detail/industrialDetail?id=${id}`,
});
},
},
};
</script>
<template>
<div v-if="detail" class="common-detail">
<div>
<u-swiper
indicator
circular
:list="detail.imgUrlList"
:height="320"
></u-swiper>
</div>
<div class="common-detail__cells">
<slot :detail="detail"></slot>
</div>
<div class="common-detail__bottom-cell">
<div class="flex align-center">
<!-- todo 图标 -->
<image
class="common-detail__icon"
src="@/static/img/icon-share.png"
></image>
<span>分享</span>
</div>
<div
class="flex align-center justify-center common-detail__contact-btn"
:class="{ disabled: !detail.contactPerson }"
>
<template v-if="!detail.contactPerson">
<!-- todo 图标 -->
<image
class="common-detail__icon"
src="@/static/img/icon-phone.png"
></image>
<span class="common-detail__contact-content" @tap="handleContact"
>电话联系对接人</span
>
</template>
<span v-else class="common-detail__contact-content">暂无对接人</span>
</div>
<!-- 联系人弹窗 -->
<call-service
:phoneInfo="phoneInfo"
:showCallService="showCallService"
:titleName="callTitle"
></call-service>
</div>
</div>
</template>
<script>
import { defineComponent } from "@vue/composition-api";
import { detailType } from "@/utils/constant.js";
import CallService from "@/components/call-service/call-service.vue";
export default defineComponent({
name: "CommonDetail",
components: {
CallService,
},
props: {
detailType: {
type: String,
},
queryUrl: {
type: String,
},
},
data() {
return {
/** @type {IndustrialParkDetailResp} */
detail: null,
detailId: "",
callTitle: "",
phoneInfo: null,
showCallService: false,
};
},
computed: {
/** 详情类型名称 */
typeName() {
const config = {
[detailType.develop]: "开发区",
[detailType.carrier]: "载体",
[detailType.industrial]: "产业园",
[detailType.land]: "土地",
};
return config[this.detailType];
},
phone() {
// todo 联系人电话
return "";
},
},
mounted() {
this.detailId = this.$root.$mp.query.id;
this.init();
},
methods: {
init() {
this.initDetail();
},
async initDetail() {
if (this.detailId) {
try {
const result = await this.$fetch({
url: `${this.queryUrl}/${this.detailId}`,
methods: "get",
});
this.detail = result;
} catch (error) {
console.log(error);
}
} else {
throw new Error("详情页id不存在");
}
},
handleContact() {
if (this.phone) {
this.callTitle = this.typeName + "对接人";
this.phoneInfo = {
name: this.detail.contactPerson,
phone: this.phone,
};
} else {
this.callTitle = "联系我们";
this.phoneInfo = {
name: "客服中心",
phone: "18703707175",
};
}
this.showCallService = !this.showCallService;
},
},
});
</script>
<style lang="scss">
.common-detail {
padding-bottom: 180rpx;
background-color: #f4f4f4;
overflow-y: auto;
overflow-x: hidden;
scroll-behavior: smooth;
&__cells {
margin-top: 20rpx;
}
&__bottom-cell {
position: fixed;
right: 0;
bottom: 0;
left: 0;
display: flex;
align-items: center;
padding: 20rpx 30rpx;
height: 120rpx;
background-color: white;
}
&__contact-btn {
margin-left: 20rpx;
width: 550rpx;
height: 80rpx;
background-color: #4374ef;
color: white;
font-size: 30rpx;
border-radius: 4px;
&.disabled {
background: #e6e6e6;
color: #bdbdbd;
}
}
&__contact-content {
margin-left: 20rpx;
}
&__icon {
width: 40rpx;
height: 40rpx;
}
}
</style>
<template>
<div class="list-item" @tap="handleClick">
<div>
<image class="list-item__main-pic" :src="item.imgUrl"></image>
</div>
<div class="list-item__right-cell flex1">
<div class="ell list-item__title">{{ item.name }}</div>
<div class="list-item__content">
<div class="flex align-center mb-20">
<div>地区:</div>
<div>{{ handleValue(address) }}</div>
</div>
<slot></slot>
</div>
</div>
<div></div>
</div>
</template>
<script>
import { handleValue } from "@/utils/utils.js";
export default {
name: "ListItem",
props: {
item: {
type: Object,
default: () => ({}),
},
},
computed: {
address() {
const { cityName, provinceName, regionName } = this.item;
return [provinceName, cityName, regionName].filter((i) => i).join("-");
},
},
methods: {
handleValue,
handleClick() {
this.$emit("to-detail", this.item);
},
},
};
</script>
<style lang="scss">
.list-item {
display: flex;
&__main-pic {
width: 178rpx;
height: 134rpx;
}
&__right-cell {
margin-left: 20rpx;
width: 0;
}
&__title {
margin-bottom: 30rpx;
color: #333333;
font-weight: 500;
font-size: 28rpx;
font-family: PingFangSC, PingFang SC;
}
&__content {
font-size: 24rpx;
font-family: PingFangSC, PingFang SC;
color: #606266;
}
.mb-20 {
margin-bottom: 20rpx;
}
}
</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.coverArea, "亩") }}
</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.parkCarrier.length > 0" class="detail-cell">
<div class="detail-cell__title">园区内配套</div>
<div class="detail-cell__body">
<div
v-for="item of detail.parkCarrier"
:key="item.id"
class="detail-cell__list-item"
>
<ListItem :item="item" @to-detail="toCarrier(item)">
<template>
<div class="flex">
<div class="flex align-center flex1">
<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";
export default {
name: "IndustrialDetail",
components: {
CommonDetail,
ListItem,
},
data() {
return {
queryUrl: api.industrialDetail,
};
},
methods: {
handleValue,
businessInfo(detail) {
const { investmentDetails } = detail;
return investmentDetails
? investmentDetails
.map(({ codeName, details }) => {
return `${codeName}-${details}`;
})
.join(";")
: "";
},
toCarrier({ id }) {
uni.navigateTo({
url: `/pages/detail/carrierDetail?id=${id}`,
});
},
},
};
</script>
<template>
<div class="land-detail">
<CommonDetail detail-type="land" :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.type) }}
</div>
</div>
<div class="detail-cell__info flex1">
<div class="detail-cell__info-name">占地面积:</div>
<div class="detail-cell__info-value">
{{ handleValue(detail.area, "亩") }}
</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.landStatus || '无' }}
</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";
export default {
name: "IndustrialDetail",
components: {
CommonDetail,
ListItem,
},
data() {
return {
queryUrl: api.carrierDetail,
};
},
methods: {
handleValue,
businessInfo(detail) {
const { investmentDetails } = detail;
return investmentDetails
? investmentDetails
.map(({ codeName, details }) => {
return `${codeName}-${details}`;
})
.join(";")
: "";
},
toIndustrialDetail({ id }) {
uni.navigateTo({
url: `/pages/detail/industrialDetail?id=${id}`,
});
},
},
};
</script>
......@@ -175,23 +175,20 @@ export default {
if (this.activeBar === 0) {
uni.navigateTo(
{
url: "/pages/detail/city?id=" + data.id,
},
true
url: "/pages/detail/industrialDetail?id=" + data.id,
}
);
} else if (this.activeBar === 1) {
uni.navigateTo(
{
url: "/pages/detail/index?id=" + data.id,
},
true
url: "/pages/detail/landDetail?id=" + data.id,
}
);
} else {
uni.navigateTo(
{
url: "/pages/detail/park?id=" + data.id,
},
true
url: "/pages/detail/carrierDetail?id=" + data.id,
}
);
}
},
......
/**
* 载体详情
*/
declare interface CarrierDetailResp {
/** 建筑面积 */
area: number;
/** 产业园信息 / 入住要求 */
carrierParkVo: {
/** 详细地址 */
address: string;
/** 亩均产值(单位:万/亩) */
averageOutputValue: string;
/** 建设周期(月) */
buildingPeriod: number;
/** 城市code */
cityCode: string;
/** 城市 */
cityName: string;
/** 联系人 */
contactPerson: string;
/** 联系电话 */
contactPhone: string;
/** 占地面积(单位:亩) */
coverArea: number;
/** 主键id */
id: number;
/** 图片 */
imgUrl: string;
/** 总投资额(亿元) */
investmentAmountTotal: number;
/** 招商方向 */
investmentDetails: string[];
/** 投资强度(单位:万/亩) */
investmentStrength: string;
/** 纬度(坐标系gcj02) */
latitude: number;
/** 园区级别名称 */
levelName: string;
/** 经度(坐标系gcj02) */
longitude: number;
/** 载体名称 */
name: string;
/** 省份code */
provinceCode: string;
/** 省份 */
provinceName: string;
/** 区/县code */
regionCode: string;
/** 区/县 */
regionName: string;
/** 税收强度(单位:万/亩) */
taxationStrength: string;
/** 能评要求(单位:tce/万元) */
valueAddedEnergy: string;
};
/** 柱距(m) */
distance: number;
/** 电梯类型 */
elevatorType: string;
/** 消防等级 */
fireProtectionLevel: string;
/** 耐火等级 */
fireResistant: string;
/** 层高(m) */
floorHigh: number;
/** 层数 */
floorNumber: number;
/** 主键id */
id: number;
/** 轮播图 */
imgUrls: string[];
/** 招商信息 */
investmentDetails: {
/** 招商类型 */
code: number;
/** 招商类型名称 */
codeName: string;
/** 招商详情 */
details: string;
}[];
/** 用户解锁额度剩余次数 */
limitNum: number;
/** 载体名称 */
name: string;
/** 单层面积(㎡) */
singleArea: number;
/** 建筑结构 */
structure: string;
/** 类型 */
type: string;
/** 轮播视频 */
videoUrlList: {
/** */
videoCover: string;
/** */
videourl: string;
}[];
/** 承重(单位:kg/㎡) */
weight: number;
/** 是否已解锁 */
isView: boolean;
/** 载体详情是否有数据 */
seeDetails: boolean;
}
/**
* 列表响应,公共字段
*/
declare interface CommonListResp<T> {
countId: string;
current: number;
maxLimit: number;
optimizeCountSql: boolean;
orders: {
asc: boolean;
column: string;
}[];
records: T[];
pages: number;
searchCount: boolean;
size: number;
total: number;
}
/**
* 列表请求, 公共参数
*/
declare interface CommonListParams<T> {
condition: T;
/** 当前页码 */
current: number;
/** 每页显示数量 */
size: number;
/** 排序 */
sorts?: {
/** 可用值:ASC,DESC */
direction?: ListOrder;
/** 排序字段 */
property?: string;
}[];
}
/** *
* 筛选项
*/
declare type FilterListItem = {
label: string;
key: string;
list: any[];
type: string;
multiple?: boolean;
value?: string | string[];
valueLabel?: string | string[];
isAddress?: boolean;
isHeightEl?: boolean;
plugin?: {
type: string;
unit: string;
value1?: number | string;
value2?: number | string;
};
};
/**
* 列表属性信息如重点企业等
*/
declare interface ListInfo<T> {
type: string;
info: T[];
}
/**
* 代表企业
*/
declare interface Enterprise {
enterpriseName: string;
industryDirection: string;
track: string;
}
/**
* 产业政策
*/
declare interface Policy {
content: string;
name: string;
type: string;
}
/**
* 招商方向
*/
declare interface Investment {
/** 招商类型 */
code?: number;
/** 招商类型名称 */
codeName: string;
/** 招商详情 */
details?: string;
}
/**
* 字典对象
*/
declare interface Dict {
dictCode: string;
dictSort: string;
dictLabel: string;
dictValue: string;
dictType: string;
isDefault: string;
status: string;
createBy: string;
createTime: string;
updateBy: string;
}
/**
* 字典请求返回值
*/
declare type DictResp = {
[index in DictType]?: Dict[];
};
/**
* 认证状态
*/
declare enum AuthStatus {
/** 未认证 */
noAuth = 1,
/** 认证中 */
inAuth = 2,
/** 已认证 */
authed = 3,
/** 已拒绝 */
reject = 4,
/** 待认证 */
waitAuth = 5,
/** 已回退 */
back = 9,
}
/**
* 详情类型
*/
declare enum DetailType {
/** 开发区 */
develop = 'develop',
/** 产业园 */
industrial = 'industrial',
/** 土地 */
land = 'land',
/** 载体 */
carrier = 'carrier',
}
declare interface StarInfo {
/** 图片 */
coverUrl: string;
/** 标题 */
title: string;
/** 描述 */
titleIntroduce: string;
}
/**
* 开发区详情
*/
declare interface DevelopZoneDetailResp {
/** 详细地址 */
address: string;
/** 亩均年产值(单位:万/亩) */
averageOutputValue: string;
/** 投资周期(月) */
buildingPeriod: number;
/** 市code */
cityCode: string;
/** 市 */
cityName: string;
/** 招商对接人 */
contactPerson: string;
/** 联系电话 */
contactPhone: string;
/** 开发区简介 */
description: string;
/** 重点企业详情 */
enterpriseList: ListInfo<Enterprise>[];
/** 环评要求 */
environmentalEquirements: string;
/** 产业基金 */
fundList: {
/** 投资方向 */
investmentDirection: string;
/** 基金名称 */
name: string;
/** 基金规模(亿元) */
scale: string;
}[];
/** 供暖单价(元/m³) */
heatingPrice: string;
/** 主键id */
id: number;
/** 轮播图 */
imgUrlList: string[];
/** 工业用电(元/㎡/天) */
industrialElectricity: string;
/** 工业用水单价(元/吨) */
industrialWaterPrice: string;
/** 总投资额(亿元) */
investmentAmountTotal: number;
/** 招商方向 */
investmentDetails: Investment[];
/** 亩均投资强度(单位:万/亩) */
investmentStrength: string;
/** 人力成本(元/月) */
laborCost: number;
/** 土地成本(万元/亩) */
landCost: number;
/** 土地分页信息 */
landPageList: {
/** 面积(亩) */
area: number;
/** */
cityCode: string;
/** */
cityName: string;
/** id */
id: number;
/** 首屏图片 */
imgUrl: string;
/** */
type: string;
/** 地块名称 */
name: string;
/** 价格 */
price: number;
/** */
provinceCode: string;
/** */
provinceName: string;
/** */
regionCode: string;
/** */
regionName: string;
/** */
typeName: string;
}[];
/** 纬度(坐标系gcj02) */
latitude: number;
/** 开发区级别 */
levelCode: string;
/** 开发区级别名称 */
levelName: string;
/** 经度(坐标系gcj02) */
longitude: number;
/** 开发区名称 */
name: string;
/** 天然气单价(元/m³) */
naturalGasPrice: string;
/** 开发区内产业园列表 */
parkPageList: {
/** 城市code */
cityCode: string;
/** 城市 */
cityName: string;
/** 占地面积(单位:亩) */
coverArea: number;
/** 主键id */
id: number;
/** 图片链接 */
imgUrl: string;
/** 招商方向 */
investmentDirection: [];
/** 园区级别 */
levelCode: string;
/** 园区级别名称 */
levelName: string;
/** 园区名称 */
name: string;
/** 省份code */
provinceCode: string;
/** 省份 */
provinceName: string;
/** 区/县code */
regionCode: string;
/** 区/县 */
regionName: string;
/** 认证状态(1-未认证;2-认证中;3-已认证;4-已拒绝) */
status: AuthStatus;
/** 认证状态名称(1-未认证;2-认证中;3-已认证;4-已拒绝) */
statusName: string;
}[];
/** 规划面积(平方公里) */
planArea: number;
/** 产业政策详情 */
policyList: ListInfo<Policy>[];
/** 主导产业 */
primaryIndustry: string;
/** 禁限目录 */
prohibitedDirectory: string;
/** 省code */
provinceCode: string;
/** 省 */
provinceName: string;
/** 区/县code */
regionCode: string;
/** 区/县 */
regionName: string;
/** 污水处理价格(元/吨) */
sewageWaterPrice: number;
/** 污水处理类别 */
sewageWaterType: string;
/** 蒸汽价格(元/m³) */
steamPrice: string;
/** 变电站级别 */
substationLevel: string[];
/** 亩均税收(单位:万/亩) */
taxationStrength: string;
/** 开发区类型 */
type: string;
/** 能评要求(单位:tce/万元) */
valueAddedEnergy: string;
/** 星级开发区相关数量 */
developmentCountVo?: {
/** 载体数量 */
carrierCount: number;
/** 土地数量 */
landCount: number;
/** 产业园数量 */
parkCount: number;
};
/** 星级开发区数据 */
starObjectExtensionInfoMap?: Record<string, StarInfo[]>;
/** 轮播视频 */
videoUrlList: {
/** */
videoCover: string;
/** */
videourl: string;
}[];
/** 供电类型 */
powerSupplyType: string;
/** vr列表 */
vrUrlList: {
/** vr封面 */
vrCover: string;
/** vr地址 */
vrUrl: string;
}[];
}
/**
* 产业园详情
*/
declare interface IndustrialParkDetailResp {
/** 详细地址 */
address: string;
/** 亩均产值(单位:万/亩) */
averageOutputValue: string;
/** 建设周期(月) */
buildingPeriod: number;
/** 轮播图 */
imgUrlList: string[];
/** 城市code */
cityCode: string;
/** 城市 */
cityName: string;
/** 联系人(区域负责人姓名) */
contactPerson: string;
/** 联系电话 */
contactPhone: string;
/** 占地面积(单位:亩) */
coverArea: number;
/** 园区简介 */
description: string;
/** 工业电价(单位:元/度) */
electricityPrice: string;
/** 代表企业 */
enterprise: string;
/** 环评要求(单位:万/亩) */
environmentalEquirements: string;
/** 天然气(单位:元/m³) */
gas: string;
/** 工业用水(单位:元/吨) */
industrialWater: number;
/** 总投资额(亿元) */
investmentAmountTotal: number;
/** 招商方向 */
investmentDetails: Investment[];
/** 投资强度(单位:万/亩) */
investmentStrength: string;
/** 园区级别 */
levelCode: string;
/** 园区级别名称 */
levelName: string;
/** 生活级污水价格 */
lifeSewagePrice: number;
/** 园区名称 */
name: string;
/** 非居民用暖价格(单位:元/㎡) */
nresidentsHeating: number;
/** 载体信息 */
parkCarrier: {
/** 地理位置 */
address: string;
/** 面积 */
area: number;
/** 楼号 */
buildingNumber: string;
/** 图片->该字段为空 字段预留 */
imgUrl: string;
/** 载体类型 */
type: string;
name: string;
id: number;
}[];
/** 产业政策 */
parkPolicy: ListInfo<Policy>[];
/** 主导产业 */
primaryIndustry: string;
/** 禁限目录 */
prohibitDirectory: string;
/** 物业费单价(单位:元/㎡/月) */
propertyPrice: number;
/** 省份code */
provinceCode: string;
/** 省份 */
provinceName: string;
/** 区/县code */
regionCode: string;
/** 区/县 */
regionName: string;
/** 租金单价(单位:元/㎡/月) */
rentPrice: string;
/** 产业支持 */
resources: string[];
/** 出售单价(元/天/㎡) */
salePrice: number;
/** 配套设施 */
setUp: string[];
/** 蒸汽(单位:元/m³) */
steam: number;
/** 变电站级别(工业用电) */
substationLevel: string;
/** 税收强度(单位:万/亩) */
taxationStrength: string;
/** 能评要求(单位:tce/万元) */
valueAddedEnergy: string;
/** 纬度 */
latitude: number;
/** 经度 */
longitude: number;
/** 用户解锁额度剩余次数 */
limitNum: number;
/** id */
id: number;
/** 是否已解锁 */
isView: boolean;
/** 供电类型 */
powerSupplyType: string;
/** 污水处理类型 */
sewageWaterType: string;
/** 要素成本是否有数据 */
seeYaosu: boolean;
/** 产业支持是否有数据 */
seeResource: boolean;
/** vr列表 */
vrUrlList: {
/** vr封面 */
vrCover: string;
/** vr地址 */
vrUrl: string;
}[];
}
/**
* 土地详情
*/
declare interface LandDetailResp {
/** 位置信息(四至信息) */
address: string;
/** */
addressDetails: string;
/** 出让年限 */
ageLimit: string;
/** 面积(亩) */
area: number;
/** */
cityCode: string;
/** */
cityName: string;
/** 建设周期 */
constructionCycle: string;
/** */
contactInformation: string;
/** 联系人 */
contacterName: string;
/** 联系电话 */
contacterPhone: string;
/** 开发程度 */
developLevel: string;
/** 土地开发区信息 */
development: {
/** 市code */
cityCode: string;
/** 市 */
cityName: string;
/** 产业方向 */
developmentInvestment: string[];
/** 图片链接 */
imgUrl: string;
/** 片区级别 */
levelCode: string;
/** 片区级别名称 */
levelName: string;
/** 片区名称 */
name: string;
/** 规划面积 */
planArea: number;
/** 省code */
provinceCode: string;
/** 省 */
provinceName: string;
/** 区/县code */
regionCode: string;
/** 区/县 */
regionName: string;
/** 类型 */
type: string;
id: number;
/** 纬度 */
latitude: number;
/** 经度 */
longitude: number;
};
/** 能评要求 */
energyRequire: string;
/** 持有方类别 */
holderType: string;
/** 首屏图片 */
imgUrl: string;
/** 轮播图 */
imgUrls: string[];
/** 产业方向 */
industryDirection: string;
/** 亩均投资强度 */
investNum: string;
/** 招商方向 */
investmentDetails: Investment[];
/** 土地证价格 */
landDeed: string;
/** 土地现状 */
landStatus: string;
/** */
landType: number;
/** 地块名称 */
name: string;
/** 亩均年产值 */
outputValue: string;
/** 价格 */
price: number;
/** */
provinceCode: string;
/** */
provinceName: string;
/** 容积率 */
ratio: string;
/** */
regionCode: string;
/** */
regionName: string;
/** 出让状态 */
shellState: string;
/** 亩均税收 */
taxRevenue: string;
/** 总投资额 */
totalInvestment: string;
/** 土地类型名称 */
type: string;
}
/**
* 详情类型
*/
export const detailType = {
/** 开发区 */
develop: "develop",
/** 产业园 */
industrial: "industrial",
/** 土地 */
land: "land",
/** 载体 */
carrier: "carrier",
};
export function handleValue(value, unit = '') {
if (value || value === 0) {
return `${value}${unit}`
} else {
return '--';
}
}
......@@ -261,7 +261,7 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.4", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.3.3":
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.3.3":
version "7.22.16"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95"
integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==
......@@ -2195,15 +2195,6 @@
semver "^7.3.4"
strip-ansi "^6.0.0"
"@vue/compiler-sfc@2.7.14":
version "2.7.14"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd"
integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==
dependencies:
"@babel/parser" "^7.18.4"
postcss "^8.4.14"
source-map "^0.6.1"
"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0":
version "3.3.0"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9"
......@@ -2220,6 +2211,40 @@
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
"@vue/composition-api@^1.7.2":
version "1.7.2"
resolved "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.2.tgz#0b656f3ec39fefc2cf40aaa8c12426bcfeae1b44"
integrity sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==
"@vue/reactivity@3.3.12":
version "3.3.12"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.12.tgz#b4a62a7678ab20c1ef32f991342ddbb8532417da"
integrity sha512-vOJORzO8DlIx88cgTnMLIf2GlLYpoXAKsuoQsK6SGdaqODjxO129pVPTd2s/N/Mb6KKZEFIHIEwWGmtN4YPs+g==
dependencies:
"@vue/shared" "3.3.12"
"@vue/runtime-core@3.3.12":
version "3.3.12"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.12.tgz#67ee6cfc2e85d656946975239ea635ec42dde5f6"
integrity sha512-5iL4w7MZrSGKEZU2wFAYhDZdZmgn+s//73EfgDXW1M+ZUOl36md7tlWp1QFK/ladiq4FvQ82shVjo0KiPDPr0A==
dependencies:
"@vue/reactivity" "3.3.12"
"@vue/shared" "3.3.12"
"@vue/runtime-dom@^3.3.12":
version "3.3.12"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.12.tgz#28a239496e589037774cba7c1b27057242eedb11"
integrity sha512-8mMzqiIdl+IYa/OXwKwk6/4ebLq7cYV1pUcwCSwBK2KerUa6cwGosen5xrCL9f8o2DJ9TfPFwbPEvH7OXzUpoA==
dependencies:
"@vue/runtime-core" "3.3.12"
"@vue/shared" "3.3.12"
csstype "^3.1.3"
"@vue/shared@3.3.12":
version "3.3.12"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.12.tgz#7c030c4e2f1db8beb638b159cbb86d0ff78c3198"
integrity sha512-6p0Yin0pclvnER7BLNOQuod9Z+cxSYh8pSh7CzHnWNjAIP6zrTlCdHRvSCb1aYEx6i3Q3kvfuWU7nG16CgG1ag==
"@vue/shared@^3.0.0":
version "3.3.4"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
......@@ -4155,10 +4180,10 @@ cssstyle@^2.0.0:
dependencies:
cssom "~0.3.6"
csstype@^3.1.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
csstype@^3.1.3:
version "3.1.3"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
cyclist@^1.0.1:
version "1.0.2"
......@@ -6559,6 +6584,11 @@ js-message@1.0.7:
resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47"
integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==
js-pinyin@^0.2.5:
version "0.2.5"
resolved "https://registry.npmmirror.com/js-pinyin/-/js-pinyin-0.2.5.tgz#cba749a40bf556064fda73176d647883a2092ecc"
integrity sha512-XuqAZ9fctWCzKx/ALgsDRtfd/xwaC/IyAwkDkW8jTXhlVNRuj+lG2tKEOWraCHLgaOSPkSFFWXB3qjfNTaMU6A==
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
......@@ -8458,7 +8488,7 @@ postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6
picocolors "^0.2.1"
source-map "^0.6.1"
postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21:
postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.21:
version "8.4.29"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd"
integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==
......@@ -10392,13 +10422,10 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
vue@^2.6.14:
version "2.7.14"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17"
integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==
dependencies:
"@vue/compiler-sfc" "2.7.14"
csstype "^3.1.0"
"vue@>= 2.6.14 < 2.7":
version "2.6.14"
resolved "https://registry.npmmirror.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"
integrity sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==
vuex@^3.2.0:
version "3.6.2"
......
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