|
@@ -1,480 +0,0 @@
|
|
|
-<template>
|
|
|
- <div class="market-container">
|
|
|
- <div class="title-value">市场动态</div>
|
|
|
- <div class="content">
|
|
|
- <div class="icon-bg"></div>
|
|
|
- <div class="top-summary">
|
|
|
- <div class="summary-card">
|
|
|
- <div class="circle circle-supply"></div>
|
|
|
- <div class="title title-supply">招拍挂出让:</div>
|
|
|
- <div class="summary">
|
|
|
- <div class="text">
|
|
|
- 昨日:
|
|
|
- <div
|
|
|
- class="value value-supply"
|
|
|
- v-login-required
|
|
|
- v-display-control="numberFormatter(landSummary.dayTotal)"
|
|
|
- @click="jumpToLandMarket('', 1)"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.dayTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- <div class="text">
|
|
|
- 本月:
|
|
|
- <div
|
|
|
- class="value value-supply"
|
|
|
- @click="jumpToLandMarket('', 2)"
|
|
|
- v-login-required
|
|
|
- v-display-control="[numberFormatter(landSummary.monthTotal), '*']"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.monthTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="summary-card m">
|
|
|
- <div class="circle circle-business"></div>
|
|
|
- <div class="title title-business">商业用地:</div>
|
|
|
- <div class="summary">
|
|
|
- <div class="text">
|
|
|
- 昨日:
|
|
|
- <div
|
|
|
- v-display-control="numberFormatter(landSummary.syDayTotal)"
|
|
|
- v-login-required
|
|
|
- class="value value-supply"
|
|
|
- @click="jumpToLandMarket('商服用地', 1)"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.syDayTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- <div class="text">
|
|
|
- 本月:
|
|
|
- <div
|
|
|
- class="value value-supply"
|
|
|
- @click="jumpToLandMarket('商服用地', 2)"
|
|
|
- v-login-required
|
|
|
- v-display-control="numberFormatter(landSummary.syMonthTotal)"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.syMonthTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="summary-card">
|
|
|
- <div class="circle circle-residence"></div>
|
|
|
- <div class="title title-residence">住宅用地:</div>
|
|
|
- <div class="summary">
|
|
|
- <div class="text">
|
|
|
- 昨日:
|
|
|
- <div
|
|
|
- class="value value-supply"
|
|
|
- @click="jumpToLandMarket('住宅用地', 1)"
|
|
|
- v-login-required
|
|
|
- v-display-control="numberFormatter(landSummary.zzDayTotal)"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.zzDayTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- <div class="text">
|
|
|
- 本月:
|
|
|
- <div
|
|
|
- class="value value-supply"
|
|
|
- @click="jumpToLandMarket('住宅用地', 2)"
|
|
|
- v-login-required
|
|
|
- v-display-control="numberFormatter(landSummary.zzMonthTotal)"
|
|
|
- >
|
|
|
- {{ numberFormatter(landSummary.zzMonthTotal) }}
|
|
|
- </div>
|
|
|
- 个
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="bottom-summary">
|
|
|
-
|
|
|
- <div class="home-title">
|
|
|
- <span
|
|
|
- :class="{ title: true, 'title-more': true, active: currentTab0 == 1 }"
|
|
|
- @click="tabClickHandle0(1)"
|
|
|
- ><span class="txt">昨日成交</span></span
|
|
|
- >
|
|
|
- <span
|
|
|
- :class="{ title: true, 'title-more': true, active: currentTab0 == 2 }"
|
|
|
- @click="tabClickHandle0(2)"
|
|
|
- ><span class="txt">昨日推出</span></span
|
|
|
- >
|
|
|
- <div class="right_box">
|
|
|
- <span @click="reloadHandle"><RedoOutlined style="margin-right: 3px" />换一换</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="data_box">
|
|
|
- <ul>
|
|
|
- <li v-for="(item, index) in transactionSummaryList" :key="index">
|
|
|
- <div>
|
|
|
- <p class="title">
|
|
|
- <span style="font-weight: bold" v-display-control="item['region']">{{
|
|
|
- item['region']
|
|
|
- }}</span
|
|
|
- ><span class="time"
|
|
|
- >({{ dayjs().subtract(1, 'day').format('YYYY-MM-DD') }})</span
|
|
|
- >
|
|
|
- </p>
|
|
|
- <p>
|
|
|
- <span class="title">{{ currentTab0 === 1 ? '成交' : '推出' }}宗数:</span>
|
|
|
- <span class="numberBox">
|
|
|
- <span class="number" v-display-control="item['total']">{{
|
|
|
- item['total']
|
|
|
- }}</span>
|
|
|
- <span class="unit">宗</span>
|
|
|
- </span>
|
|
|
- </p>
|
|
|
- <p>
|
|
|
- <span class="title">{{ currentTab0 === 1 ? '成交' : '推出' }}面积:</span>
|
|
|
- <span class="numberBox">
|
|
|
- <span class="number" v-display-control="item['totalPrice'].toFixed(2)">{{
|
|
|
- item['totalPrice'].toFixed(2)
|
|
|
- }}</span>
|
|
|
- <span class="unit">亩</span>
|
|
|
- </span>
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </li>
|
|
|
- </ul>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script setup>
|
|
|
-import { numberFormatter } from '@/utils/common';
|
|
|
-import dayjs from 'dayjs';
|
|
|
-import SummaryAPI from '@/api/summary';
|
|
|
-import { getLandTransactionSummary } from '@/api/server/land';
|
|
|
-
|
|
|
-import { RedoOutlined } from '@ant-design/icons-vue';
|
|
|
-
|
|
|
-const landSummary = ref({
|
|
|
- dayTotal: 0,
|
|
|
- monthTotal: 0,
|
|
|
- syDayTotal: 0,
|
|
|
- syMonthTotal: 0,
|
|
|
- zzDayTotal: 0,
|
|
|
- zzMonthTotal: 0,
|
|
|
- gyDayTotal: 0,
|
|
|
- gyMonthTotal: 0
|
|
|
-});
|
|
|
-/**
|
|
|
- * 换一换
|
|
|
- */
|
|
|
-const reloadIndex = ref(1);
|
|
|
-const reloadHandle = () => {
|
|
|
- reloadIndex.value++;
|
|
|
- getLandTransactionSummaryAjax();
|
|
|
-};
|
|
|
-const getYesterdayAndLastMonthSummary = () => {
|
|
|
- SummaryAPI.getYesterdayAndLastMonthSummary().then((res) => {
|
|
|
- if (res?.success) {
|
|
|
- landSummary.value = res?.data || {
|
|
|
- dayTotal: 0,
|
|
|
- monthTotal: 0,
|
|
|
- syDayTotal: 0,
|
|
|
- syMonthTotal: 0,
|
|
|
- zzDayTotal: 0,
|
|
|
- zzMonthTotal: 0,
|
|
|
- gyDayTotal: 0,
|
|
|
- gyMonthTotal: 0
|
|
|
- };
|
|
|
- }
|
|
|
- });
|
|
|
-};
|
|
|
-const jumpToLandMarket = (yt, dateType) => {
|
|
|
- const today = dayjs();
|
|
|
- const from =
|
|
|
- dateType === 1
|
|
|
- ? today.subtract(1, 'day').format('YYYY-MM-DD')
|
|
|
- : today.format('YYYY-MM-') + '01';
|
|
|
- const to =
|
|
|
- dateType === 1
|
|
|
- ? today.subtract(1, 'day').format('YYYY-MM-DD')
|
|
|
- : today.endOf('month').format('YYYY-MM-DD');
|
|
|
-
|
|
|
- window.open(window.AppGlobalConfig.links.landMarketUrl + `?yt=${yt}&from=${from}&to=${to}&zt=3`);
|
|
|
-};
|
|
|
-const currentTab0 = ref(1);
|
|
|
-const transactionSummaryList = ref(new Array(5).fill({ totalPrice: 0 }));
|
|
|
-const tabClickHandle0 = (type) => {
|
|
|
- currentTab0.value = type;
|
|
|
- reloadIndex.value = 1;
|
|
|
- getLandTransactionSummaryAjax();
|
|
|
-};
|
|
|
-const getLandTransactionSummaryAjax = (regionType = 'city') => {
|
|
|
- getLandTransactionSummary({
|
|
|
- type: currentTab0.value,
|
|
|
- regionType,
|
|
|
- index: reloadIndex.value,
|
|
|
- date: dayjs().subtract(1, 'day').format('YYYY-MM-DD'),
|
|
|
- regions: ''
|
|
|
- }).then((result) => {
|
|
|
- if (result.code === 200) {
|
|
|
- transactionSummaryList.value = result.data;
|
|
|
- }
|
|
|
- });
|
|
|
-};
|
|
|
-onBeforeMount(() => {
|
|
|
- getYesterdayAndLastMonthSummary();
|
|
|
- getLandTransactionSummaryAjax();
|
|
|
-});
|
|
|
-</script>
|
|
|
-<style scoped lang="scss">
|
|
|
-.market-container {
|
|
|
- width: 100%;
|
|
|
- margin-bottom: 68px;
|
|
|
- .title-value {
|
|
|
- height: 30px;
|
|
|
- font-family: PingFang SC, PingFang SC;
|
|
|
- font-weight: 600;
|
|
|
- font-size: 22px;
|
|
|
- color: #212121;
|
|
|
- }
|
|
|
- .content {
|
|
|
- width: 100%;
|
|
|
- margin-top: 24px;
|
|
|
- height: 280px;
|
|
|
- background: linear-gradient(180deg, #e0eeff 0%, #eaf3ff 29%, #ffffff 100%);
|
|
|
- box-shadow: 0px 4px 8px 1px rgba(0, 52, 105, 0.05);
|
|
|
- border-radius: 6px 6px 6px 6px;
|
|
|
- padding: 0px 41px 0px 39px;
|
|
|
- border: 1px solid #ffffff;
|
|
|
- position: relative;
|
|
|
- .icon-bg {
|
|
|
- width: 260px;
|
|
|
- height: 260px;
|
|
|
- position: absolute;
|
|
|
- pointer-events: none;
|
|
|
- top: 0px;
|
|
|
- right: 0px;
|
|
|
- background: url('/images/home/icon-market.png') no-repeat;
|
|
|
- background-size: 100% 100%;
|
|
|
- }
|
|
|
- .top-summary {
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- height: 80px;
|
|
|
- align-items: center;
|
|
|
- border-bottom: 1px solid #dce6f4;
|
|
|
-
|
|
|
- .summary-card {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- .circle {
|
|
|
- width: 8px;
|
|
|
- height: 8px;
|
|
|
- margin-right: 11px;
|
|
|
- background: #2ea4ff;
|
|
|
- border-radius: 10px 10px 10px 10px;
|
|
|
- &-supply {
|
|
|
- background: #2ea4ff;
|
|
|
- }
|
|
|
-
|
|
|
- &-business {
|
|
|
- background: #ff9d19;
|
|
|
- }
|
|
|
-
|
|
|
- &-residence {
|
|
|
- background: #37c98c;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .title {
|
|
|
- font-family: PingFang SC, PingFang SC;
|
|
|
- font-weight: 600;
|
|
|
- font-size: 18px;
|
|
|
- height: 80px;
|
|
|
- margin-right: 6px;
|
|
|
- line-height: 80px;
|
|
|
- color: #111111;
|
|
|
- font-style: normal;
|
|
|
- text-transform: none;
|
|
|
- }
|
|
|
-
|
|
|
- .summary {
|
|
|
- display: flex;
|
|
|
- height: 80px;
|
|
|
- align-items: center;
|
|
|
- .text {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- font-family: PingFang SC, PingFang SC;
|
|
|
- font-weight: 400;
|
|
|
- font-size: 15px;
|
|
|
- color: #343434;
|
|
|
- text-align: left;
|
|
|
- font-style: normal;
|
|
|
- text-transform: none;
|
|
|
- &:last-of-type {
|
|
|
- margin-left: 12px;
|
|
|
- }
|
|
|
- .value {
|
|
|
- margin-right: 7px;
|
|
|
- font-family: PingFang SC, PingFang SC;
|
|
|
- font-weight: 600;
|
|
|
- font-size: 18px;
|
|
|
- text-align: left;
|
|
|
- font-style: normal;
|
|
|
- text-transform: none;
|
|
|
- cursor: pointer;
|
|
|
-
|
|
|
- &:hover {
|
|
|
- }
|
|
|
-
|
|
|
- &-supply {
|
|
|
- color: #31a2ff;
|
|
|
- }
|
|
|
-
|
|
|
- &-business {
|
|
|
- color: #27c5f4;
|
|
|
- }
|
|
|
-
|
|
|
- &-residence {
|
|
|
- color: #1acc7a;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- .m {
|
|
|
- margin: 0px 50px;
|
|
|
- }
|
|
|
- }
|
|
|
- .bottom-summary {
|
|
|
- padding-top: 29px;
|
|
|
- .home-title {
|
|
|
- padding-bottom: 10px;
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- &.between {
|
|
|
- justify-content: space-between;
|
|
|
- }
|
|
|
- > span {
|
|
|
- &.title {
|
|
|
- color: #27282c;
|
|
|
- font-size: 20px;
|
|
|
- position: relative;
|
|
|
- margin-right: 40px;
|
|
|
- height: 23px;
|
|
|
- > .txt {
|
|
|
- position: relative;
|
|
|
- z-index: 999;
|
|
|
- }
|
|
|
- &.active,
|
|
|
- &:not(.title-more) {
|
|
|
- font-weight: bold;
|
|
|
- &::after {
|
|
|
- content: '';
|
|
|
- display: block;
|
|
|
- position: absolute;
|
|
|
- bottom: -3px;
|
|
|
- width: 100%;
|
|
|
- height: 10px;
|
|
|
- background: rgba(70, 134, 237, 0.5);
|
|
|
- }
|
|
|
- &::before {
|
|
|
- content: '';
|
|
|
- display: block;
|
|
|
- position: absolute;
|
|
|
- bottom: -3px;
|
|
|
- right: -10px;
|
|
|
- border: 5px solid transparent;
|
|
|
- border-left-color: rgba(70, 134, 237, 0.5);
|
|
|
- border-bottom-color: rgba(70, 134, 237, 0.5);
|
|
|
- width: 0px;
|
|
|
- height: 0px;
|
|
|
- }
|
|
|
- }
|
|
|
- &.title-more {
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- }
|
|
|
- &.more {
|
|
|
- color: #0c78f7;
|
|
|
- font-size: 15px;
|
|
|
- cursor: pointer;
|
|
|
- }
|
|
|
- }
|
|
|
- > .right_box {
|
|
|
- flex: 1;
|
|
|
- text-align: right;
|
|
|
- color: #596471;
|
|
|
- font-size: 14px;
|
|
|
- cursor: pointer;
|
|
|
- display: flex;
|
|
|
- justify-content: flex-end;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- .year-picker {
|
|
|
- margin-right: 10px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- > .data_box {
|
|
|
- > ul {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- padding: 15px 0px 0px 0px;
|
|
|
- > li {
|
|
|
- flex: 1.1;
|
|
|
- border-left: 1px solid #dbe0e5;
|
|
|
- text-align: center;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- &:first-child {
|
|
|
- border-left: 0px;
|
|
|
- flex: 0.9;
|
|
|
- justify-content: left;
|
|
|
- }
|
|
|
- > div {
|
|
|
- text-align: left;
|
|
|
- font-size: 14px;
|
|
|
- color: #27282c;
|
|
|
- > p {
|
|
|
- margin: 5px 0px;
|
|
|
- &.title {
|
|
|
- color: #0c78f7;
|
|
|
- font-size: 18px;
|
|
|
- }
|
|
|
- > .time {
|
|
|
- color: #27282f;
|
|
|
- font-size: 14px;
|
|
|
- }
|
|
|
- .numberBox {
|
|
|
- > span {
|
|
|
- display: inline-block;
|
|
|
- }
|
|
|
- > .number {
|
|
|
- color: #27282c;
|
|
|
- font-size: 18px;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
- > .unit {
|
|
|
- font-size: 14px;
|
|
|
- color: #27282c;
|
|
|
- margin-left: 2px;
|
|
|
- font-weight: 500;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-</style>
|