xy 2 years ago
parent 6d7cd933c5
commit dfaf74cfd7

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="64255" width="200" height="200"><path d="M882.346667 721.92c-9.386667 0-18.048 2.048-25.728 6.016l-187.776 72.789333a11.093333 11.093333 0 0 0-5.077334 4.224c-19.712 31.957333-51.498667 31.957333-51.498666 31.957334H415.573333a10.112 10.112 0 0 1-10.325333-10.026667c0-5.632 4.565333-10.069333 10.325333-10.069333h186.325334a10.112 10.112 0 0 0 10.368-10.026667v-32.64c0-27.989333-23.338667-50.858667-52.48-50.858667h-80.896a10.581333 10.581333 0 0 1-8.405334-4.181333c-48.64-64.426667-235.221333-64.853333-280.448-64.170667a10.069333 10.069333 0 0 0-10.112 10.026667v244.693333c0 4.437333 3.114667 8.405333 7.466667 9.6 32.469333 8.618667 161.024 43.136 219.733333 65.536 63.146667 24.021333 149.546667 6.784 160.597334 4.224l2.432-0.725333 333.653333-161.664c20.48-8.149333 34.901333-27.52 34.901333-50.346667 0-29.866667-25.301333-54.4-56.32-54.4zM136.533333 940.714667H63.146667a20.138667 20.138667 0 0 1-20.48-19.84v-277.376c0-10.965333 9.130667-19.84 20.48-19.84H136.533333c11.349333 0 20.48 8.874667 20.48 19.84v277.589333a20.266667 20.266667 0 0 1-20.48 19.626667zM810.88 534.058667h-42.410667V296.661333a40.106667 40.106667 0 0 0-13.866666-30.421333l-211.968-186.752a43.008 43.008 0 0 0-28.544-10.709333c-10.538667 0-20.736 3.84-28.501334 10.709333L273.621333 266.24a40.106667 40.106667 0 0 0-13.866666 30.378667v237.44h-42.410667a21.546667 21.546667 0 0 0-14.933333 6.016 20.224 20.224 0 0 0 0 29.013333c3.925333 3.882667 9.344 6.058667 14.933333 6.058667h593.493333c5.674667 0 11.050667-2.133333 15.018667-6.016a20.224 20.224 0 0 0 0-29.013334 21.546667 21.546667 0 0 0-14.976-6.058666z m-233.173333 0h-127.189334V410.794667c0-5.461333 2.218667-10.666667 6.186667-14.506667a21.546667 21.546667 0 0 1 15.018667-6.016h84.778666c5.632 0 11.008 2.133333 14.976 5.973333 3.968 3.84 6.229333 9.088 6.229334 14.549334v123.264z" fill="currentColor" p-id="64256"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="99647" width="200" height="200"><path d="M261.851429 109.714286a69.851429 69.851429 0 0 0-69.485715 63.268571l-26.697143 292.571429h283.428572L481.645714 109.714286zM526.262857 717.165714A236.617143 236.617143 0 0 1 877.714286 512l-30.72-337.554286A69.851429 69.851429 0 0 0 777.874286 109.714286h-224.548572l-73.142857 786.285714h126.537143a235.885714 235.885714 0 0 1-80.457143-178.834286zM133.485714 819.931429a69.851429 69.851429 0 0 0 69.485715 76.068571h207.36l32.548571-357.302857H159.085714z" fill="currentColor" p-id="99648"></path><path d="M884.662857 583.314286a178.834286 178.834286 0 1 0 59.977143 134.217143 180.297143 180.297143 0 0 0-59.977143-134.217143z m-24.137143 131.291428l-136.777143 131.291429a10.24 10.24 0 0 1-12.8 0 9.508571 9.508571 0 0 1-4.388571-10.605714l25.234286-98.742858h-59.611429a9.874286 9.874286 0 0 1-9.142857-6.582857 10.24 10.24 0 0 1 2.56-11.702857l136.777143-131.291428a12.8 12.8 0 0 1 12.068571-2.56 9.874286 9.874286 0 0 1 5.485715 11.702857l-25.965715 98.742857h59.611429a9.874286 9.874286 0 0 1 9.142857 6.582857 10.24 10.24 0 0 1-2.194286 13.165714z" fill="currentColor" p-id="99649"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1 @@
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="60544" width="200" height="200"><path d="M357.44 252.672h258.432s19.584-54.848 141.312-141.44c-23.296-11.52-56.832 6.4-70.656-4.288-14.784-11.392-12.032-51.904-48.128-56.256-36.032-4.352-73.6 43.264-73.6 43.264s-33.024 28.864-48.064-15.808C501.696 33.28 446.08 29.056 428.032 29.056c-18.048 0-62.72 12.992-70.656 68.16-3.392 17.28-22.528 23.808-38.272 15.168-15.808-8.64-37.248-15.168-69.888-11.904 38.336 40.384 135.232 129.088 108.16 152.192z m491.392 524.352s1.536-203.392 0-217.792C843.584 455.36 627.2 316.8 627.2 316.8H361.92c-95.424 51.904-214.144 166.592-226.944 244.48-1.088 4.096-8.96 171.712-12.032 228.672-3.008 56.96-42.048 110.4-42.048 110.4s97.664 67.072 418.56 69.184c320.832 2.176 366.72-53.312 398.976-71.36-43.52 1.408-49.6-121.216-49.6-121.216z m-227.264-37.056c-4.352 26.88-19.904 85.504-104.128 91.392v51.328h-59.456v-50.944a581.76 581.76 0 0 1-101.952-24.448l17.856-67.072c26.688 9.984 61.824 20.672 92.8 24.128 41.984 4.672 70.272-3.584 72.96-32.832 5.952-51.2-181.12-60.16-179.392-152.576-2.56-67.84 48.768-97.472 99.84-101.568v-53.376h59.52v50.944c33.728 0.384 60.48 7.424 86.528 18.304l-16.512 63.232c-26.112-9.472-52.928-18.304-84.928-18.304-20.736 0-64.256 0-65.728 27.456 0 47.232 82.304 49.664 109.696 60.8 19.904 8.128 33.792 16.128 48 29.44 24.768 23.232 29.888 53.12 24.896 84.096z" fill="currentColor" p-id="60545"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -608,8 +608,13 @@ export default {
if (this.firstAdjustTable) {
const data = this.$refs['xyTable'].getListData();
if (data.length === 0) return;
this.form.forEach((i) => {
let lengthTemp = data[0][i.field]?.length??0;
this.form.filter(i => i.list_show).forEach((i) => {
let lengthTemp;
let temp = 0;
while (!lengthTemp || temp < data.length) {
lengthTemp = data[temp][i.field]?.length??0;
temp++;
}
for (let j = 0;j < data.length;j++) {
if (/^-?\d+\.\d+/.test(data[j][i.field])) {
this.table.find(a => a.prop === i.field).align = 'right';

@ -33,6 +33,7 @@ import right1 from "./right1.vue";
import right2 from "./right2.vue";
import btns from "./btns.vue";
import leftBottom from "./leftBottom.vue"
import { index } from '@/api/system/baseForm';
export default {
components: {
MapComponent,
@ -43,19 +44,44 @@ export default {
leftBottom
},
mixins: [drawMixin],
provide() {
return {
assets: () => this.assetsData
}
},
data() {
return {
loading: true,
assetsData: [[],[]],
}
},
methods: {
async getData () {
await Promise.all([
index({
table_name: "houses",
page: 1,
page_size: 999
},false),
index({
table_name: "lands",
page: 1,
page_size: 999
})
]).then(res => {
const [houses,lands] = res;
this.assetsData = [houses.data,lands.data];
})
},
},
computed: {},
mounted() {
setTimeout(() => {
this.loading = false;
},500)
},
created() {
this.getData();
}
}
</script>

@ -13,15 +13,17 @@
<div class="card-left">
<p class="card__title">{{ item.text }}</p>
<p class="card__text">
<span class="card__text--num">{{ item.num }}</span>
<span class="card__text--num">{{ total(item.tag) }}</span>
<span class="card__text--unit">{{ item.unit }}</span>
</p>
</div>
<div class="card-right">
<SvgIcon icon-class="house" class="img"></SvgIcon>
<SvgIcon :icon-class="item.icon" class="img"></SvgIcon>
<div class="img-base">
<div class="square3"></div>
<div class="square1"></div>
<div class="square2"></div>
</div>
</div>
</div>
@ -35,29 +37,57 @@ export default {
components: {
SvgIcon
},
inject: ["assets"],
data() {
return {
items: [
{
text: "资产总量",
num: 36650,
unit: "平方"
tag: "total",
unit: "平方",
icon: "zichan"
},
{
text: "土地资产",
num: 99966,
unit: "亩"
unit: "亩",
tag: "land",
icon: "tudi"
},
{
text: "房屋资产",
num: 8888,
unit: "平方"
unit: "平方",
tag: "house",
icon: "fangwu"
}
]
}
},
methods: {},
computed: {}
computed: {
total () {
return function(tag) {
let total = 0;
const [houses,lands] = this.assets()
switch (tag) {
case "total":
total += houses.reduce((a,b) => a + parseFloat(b.dengjimianji ?? 0),0)
total += lands.reduce((a,b) => a + parseFloat(b.dengjimianji ?? 0),0)
return total.toFixed(2);
case "land":
total += lands.reduce((a,b) => a + parseFloat(b.dengjimianji ?? 0),0)
return total.toFixed(2);
case "house":
total += houses.reduce((a,b) => a + parseFloat(b.dengjimianji ?? 0),0)
return total.toFixed(2);
default:
return total.toFixed(2);
}
}
}
}
}
</script>
@ -67,12 +97,13 @@ export default {
align-items: center;
justify-content: space-between;
padding: 20px 30px;
padding: 20px 22px;
&__title {
line-height: 2;
font-size: 22px;
font-weight: 600;
color: #73f3df;
padding: 6px 0;
}
&__text {
color: #fff;
@ -81,59 +112,100 @@ export default {
&--num {
font-size: 28px;
font-weight: 600;
padding-right: 10px;
padding-right: 6px;
}
}
& > .card-right {
z-index: 2;
position: relative;
top: 0;
& > .img {
color: #73f3e0;
width: 60px;
height: 60px;
width: 54px;
height: 54px;
z-index: 3;
transform: translateY(-8px);
transform: translate(-19px,-10px);
position: relative;
}
.img-base {
width: 100%;
perspective: 100px;
perspective: 200px;
z-index: 1;
position: absolute;
left: 0;
right: 0;
bottom: 0;
left: -12px;
bottom: -14px;
&::before {
content: "";
width: 100%;
height: 100%;
background: linear-gradient(to bottom, #00000033 , #61b9ac);
transform: translateY(-96%);
position: absolute;
left: 0%;
top: 0;
}
.square1 {
background: linear-gradient(to bottom, #00000033 ,#4fa497);
width: 100%;
height: 34px;
background: linear-gradient(135deg, #00000066 ,#4fa497);
width: 40px;
height: 40px;
box-shadow: 0 0 2px 2px #7ddacd;
transform: rotateX(45deg);
transform: rotateX(45deg) rotateZ(45deg)skew(-15deg, -15deg);
position: relative;
&::after {
content: "";
width: 120%;
height: 136%;
width: 146%;
height: 146%;
filter: drop-shadow(2px 2px 6px #9ce8de);
background: transparent;
border: 2px solid #7ddacd;
border: 3px solid #25aba8;
position: absolute;
left: -10%;
top: -18%;
left: -22%;
top: -22%;
}
}
.square2 {
background: linear-gradient(135deg, #ffffff33 , #1da4a1);
width: 52px;
height: 50px;
transform: rotateX(45deg) rotateZ(45deg)skew(-15deg, -15deg);
box-shadow: 0 0 2px 2px #86bdb5;
position: absolute;
left: -6px;
top: -16px;
}
.square3 {
content: "";
width: 104px;
height: 46px;
background: linear-gradient(to bottom, #00000022 , #61b9ac66);
filter: drop-shadow(0 2px 6px #9ce8de);
position: absolute;
left: -32px;
bottom: 20px;
}
//&::before {
// content: "";
// width: 100%;
// height: 100%;
// background: linear-gradient(to bottom, #00000033 , #61b9ac);
// filter: drop-shadow(0 2px 6px #9ce8de);
// transform: translateY(-96%);
// position: absolute;
// left: 0%;
// top: 0;
//}
//.square1 {
// background: linear-gradient(to bottom, #00000033 ,#4fa497);
// width: 100%;
// height: 34px;
// box-shadow: 0 0 2px 2px #7ddacd;
// transform: rotateX(45deg);
// position: relative;
//
// &::after {
// content: "";
// width: 120%;
// height: 136%;
// filter: drop-shadow(0 4px 6px #9ce8de);
// background: transparent;
// border: 2px solid #7ddacd;
// position: absolute;
// left: -10%;
// top: -18%;
// }
//}
}
}
}

@ -12,6 +12,7 @@ export default {
return {}
},
methods: {
initMap () {
echarts.registerMap("wuxi", WUXI);
let chart = echarts.init(document.querySelector("#map"))
@ -41,7 +42,6 @@ export default {
emphasis: {
// hover ( labelitemStyle )
label: {
// TODO label
show: true
// textStyle: {
// color: '#fff', //
@ -49,7 +49,6 @@ export default {
// }
},
itemStyle: {
// TODO itemStyle
color: '#587683' //
}
},
@ -74,7 +73,7 @@ export default {
color: '#fff', // [ default: #fff ]
intensity: 0.5 // [ default: 0.2 ]
}
}
},
}],
})
chart.on("click", (params) => {

@ -0,0 +1,291 @@
<template>
<div>
<!-- 查询配置 -->
<div>
<div ref="lxHeader">
<LxHeader
:icon="$route.meta.icon"
:text="$route.meta.title"
style="margin-bottom: 10px; border: 0px; margin-top: 15px"
>
<div slot="content"></div>
<slot>
<header-content :auths="auths_auth_mixin">
<template #search>
<el-date-picker
size="small"
style="padding-bottom: 0;padding-top: 0;"
v-model="daterange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
@change="daterangePick">
</el-date-picker>
<Button
style="margin-left: 6px;"
type="primary"
@click="getData"
>查询</Button
>
</template>
</header-content>
</slot>
</LxHeader>
</div>
</div>
<xy-table ref="xyTable"
:is-page="false"
:table-item="table"
:list="list"
:span-method="spanMethod"
:auths="auths_auth_mixin"></xy-table>
</div>
</template>
<script>
import LxHeader from '@/components/LxHeader';
import headerContent from '@/components/LxHeader/XyContent.vue'
import { authMixin } from '@/mixin/authMixin';
import { index } from "@/api/system/baseForm"
export default {
mixins: [authMixin],
components: {
headerContent,
LxHeader
},
data() {
return {
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit('pick', [start, end]);
}
},{
text: '最近一年',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
picker.$emit('pick', [start, end]);
}
}]
},
daterange: "",
select: {
table_name: 'leases',
sort_name: 'land_id',
page: 1,
page_size: 999,
filter: [
{
key: "zulinkaishiqixian",
op: "range",
value: ""
},
{
key: "zulinjieshuqixian",
op: "range",
value: ""
}
]
},
table: [
{
prop: "area",
label: "区域",
customFn: row => {
if (row.land_id) {
return (
<span>{ this.areas.get(row.land_id_lands_id_relation?.area) }</span>
)
} else {
return (
<span>{ this.areas.get(row.house_id_houses_id_relation?.area) }</span>
)
}
}
},
{
prop: "asset",
label: "资产名称",
customFn: row => {
if (row.land_id) {
return (
<span>土地{ row.land_id_lands_id_relation?.name }</span>
)
} else {
return (
<span>房产{ row.house_id_houses_id_relation?.name }</span>
)
}
}
},
{
prop: "zulinshijian",
label: "租赁时间",
customFn: row => {
return (
<span>{ row.zulinkaishiqixian } ~ { row.zulinjieshuqixian }</span>
)
}
},
{
prop: "shijimianji",
label: "实际面积",
customFn: row => {
if (row.land_id) {
return (
<span>{ row.land_id_lands_id_relation?.shijimianji }</span>
)
} else {
return (
<span>{ row.house_id_houses_id_relation?.shijimianji }</span>
)
}
}
},
{
prop: "zulinmianji",
label: "租赁面积",
},
{
prop: "rate",
label: "出租率",
customFn: row => {
function getRate(a,b) {
if (!parseFloat(a) || !parseFloat(b)) {
return "0.00%"
}
return ((parseFloat(a) / parseFloat(b)) * 100).toFixed(2) + "%"
}
if (row.land_id) {
return (
<span>{ getRate(row.zulinmianji, row.land_id_lands_id_relation?.shijimianji) }</span>
)
} else {
return (
<span>{ getRate(row.zulingmianji, row.house_id_houses_id_relation?.shijimianji) }</span>
)
}
}
}
],
list: [],
spanArr: [],
pos: 0,
spanArr1: [],
pos1: 0,
areas: new Map([
[1,"宜兴市"],
[2,"惠山区"],
[3,"新吴区"],
[4,"梁溪区"],
[5,"江阴市"],
[6,"滨湖区"],
[7,"锡山区"]
])
}
},
methods: {
index,
async getData () {
this.spanArr = [];
this.spanArr1 = [];
this.pos = 0;
this.pos1 = 0;
const res = await index(this.select);
let temp = res.data;
for (let i in temp) {
if (Number(i) === 0) {
this.spanArr.push(1);
this.pos = 0;
this.spanArr1.push(1);
this.pos1 = 0;
} else {
if(temp[i].land_id ? (temp[i].land_id === temp[i - 1].land_id) : (temp[i].house_id === temp[i - 1].house_id)){
this.spanArr[this.pos] += 1;
this.spanArr.push(0)
}else{
this.spanArr.push(1);
this.pos = i;
}
if(temp[i].land_id ? (temp[i].land_id_lands_id_relation.area === temp[i - 1].land_id_lands_id_relation?.area) : (temp[i].house_id_houses_id_relation.area === temp[i - 1].house_id_houses_id_relation?.area)){
this.spanArr1[this.pos1] += 1;
this.spanArr1.push(0)
}else{
this.spanArr1.push(1);
this.pos1 = i;
}
}
}
this.list = temp;
this.$nextTick(() => {
this.$refs.xyTable.doLayout();
})
},
daterangePick (e) {
if (e && e[0] && e[1]) {
this.select.filter[0].value = `${this.$moment(e[0]).format('YYYY-MM-DD HH:mm:ss')},2999-01-01 00:00:00`;
this.select.filter[1].value = `${this.$moment(0).format('YYYY-MM-DD HH:mm:ss')},${this.$moment(e[1]).format('YYYY-MM-DD HH:mm:ss')}`;
} else {
this.select.filter[0].value = "";
this.select.filter[1].value = "";
}
},
spanMethod({ row, column, rowIndex, columnIndex }) {
if (column.property === "asset") {
const _row = this.spanArr[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
if (column.property === "area") {
const _row = this.spanArr1[rowIndex];
const _col = _row > 0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
}
},
computed: {},
created() {
this.getData();
}
}
</script>
<style scoped lang="scss">
</style>
Loading…
Cancel
Save