123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- <template>
- <div class="page_home">
- <div class="home_bg">
- <div class="bg_title">
- <div class="title_info">
- <van-image
- :src="require('@/assets/position.svg')"
- width="16"
- height="16"
- fit="contain"
- />
- <span>{{ name }}</span>
- <van-image
- :src="require('@/assets/arrow-right.svg')"
- width="24"
- height="24"
- fit="contain"
- />
- </div>
- <div class="user_info" @click="toPath">
- <van-image
- :src="require('@/assets/user.svg')"
- width="16"
- height="16"
- fit="contain"
- />
- </div>
- </div>
- </div>
- <div class="home_info">
- <div class="info_content">
- <div
- class="content_item"
- v-for="(item, index) in functionList"
- :key="index"
- >
- <van-image :src="item.src" width="36" height="36" fit="contain" />
- <span>{{ item.label }}</span>
- </div>
- </div>
- </div>
- <div class="card_list">
- <div class="sub_title">
- <span>工单待办</span>
- <div class="function_btn">
- <span>立即处理</span>
- <van-image
- :src="require('@/assets/btn-arrow-right.svg')"
- width="24"
- height="24"
- fit="contain"
- />
- </div>
- </div>
- <div class="list_item">
- <div
- class="item_info"
- v-for="(item, index) in workList"
- :key="item + '_' + index"
- >
- <span class="label">{{ item.label }}</span>
- <v-count-up
- :end-val="Number(item['count'])"
- class="count_up"
- :options="item['options']"
- />
- </div>
- </div>
- <div class="sub_title">
- <span>设备异常</span>
- <div class="function_btn">
- <span>立即处理</span>
- <van-image
- :src="require('@/assets/btn-arrow-right.svg')"
- width="24"
- height="24"
- fit="contain"
- />
- </div>
- </div>
- <div class="list_item">
- <div
- class="item_info"
- v-for="(item, index) in deviceErrorList"
- :key="item + '-' + index"
- >
- <span class="label">{{ item.label }}</span>
- <v-count-up
- :end-val="Number(item['count'])"
- class="count_up"
- :options="item['options']"
- style="color: #fa5555"
- />
- </div>
- </div>
- <div class="sub_title">
- <span>欠费待收</span>
- <div class="function_btn">
- <span>立即处理</span>
- <van-image
- :src="require('@/assets/btn-arrow-right.svg')"
- width="24"
- height="24"
- fit="contain"
- />
- </div>
- </div>
- <div class="list_item list_table">
- <div class="table_info">
- <div class="table_header">
- <span>欠费类型</span>
- <span>欠费租户数</span>
- <span>累计欠费</span>
- </div>
- <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
- <van-list
- v-model:loading="loading"
- :finished="finished"
- :error="error"
- error-text="请求失败,点击重新加载"
- finished-text="没有更多了"
- @load="onLoad"
- >
- <van-row v-for="item in list" :key="item.id">
- <van-cell :value="item.type" />
- <van-cell :value="item.fee" />
- <van-cell :value="item.totalFee" />
- </van-row>
- </van-list>
- </van-pull-refresh>
- </div>
- </div>
- </div>
- <van-tabbar
- v-model="activeTab"
- active-color="#5776E6"
- inactive-color="#333333"
- >
- <van-tabbar-item name="home" :icon="require('@/assets/home.svg')" to=""
- >首页</van-tabbar-item
- >
- <van-tabbar-item
- name="rentBill"
- :icon="require('@/assets/rent-bill.svg')"
- to=""
- >租户账单</van-tabbar-item
- >
- <van-tabbar-item
- name="remoteControl"
- :icon="require('@/assets/remote-control.svg')"
- to=""
- >远程管控</van-tabbar-item
- >
- </van-tabbar>
- </div>
- </template>
- <script>
- import VCountUp from "./CountUp";
- export default {
- components: {
- "v-count-up": VCountUp,
- },
- data() {
- return {
- name: "电商园四期-B座",
- activeTab: "rentBill",
- functionList: [
- { src: require("@/assets/repair-online.svg"), label: "线上报修" },
- { src: require("@/assets/check-review.svg"), label: "巡检记录" },
- { src: require("@/assets/reduce-record.svg"), label: "扣缴记录" },
- ],
- workList: [
- {
- label: "待指派",
- count: 3,
- options: {
- separator: ",",
- },
- },
- {
- label: "待维修",
- count: 2,
- options: {
- separator: ",",
- },
- },
- {
- label: "已维修",
- count: 1,
- options: {
- separator: ",",
- },
- },
- ],
- deviceErrorList: [
- {
- label: "异常总数",
- count: 7,
- options: {
- separator: ",",
- },
- },
- {
- label: "电表异常",
- count: 5,
- options: {
- separator: ",",
- },
- },
- {
- label: "水表异常",
- count: 2,
- options: {
- separator: ",",
- },
- },
- ],
- list: [],
- loading: false,
- refreshing: false,
- finished: false,
- };
- },
- methods: {
- onLoad() {
- setTimeout(() => {
- if (this.refreshing.value) {
- this.list.value = [];
- this.refreshing.value = false;
- }
- for (let i = 0; i < 10; i++) {
- this.list.value.push(this.list.value.length + 1);
- }
- this.loading.value = false;
- if (this.list.value.length >= 40) {
- this.finished.value = true;
- }
- }, 1000);
- },
- onRefresh() {
- // 清空列表数据
- this.finished.value = false;
- // 重新加载数据
- // 将 loading 设置为 true,表示处于加载状态
- this.loading.value = true;
- this.onLoad();
- },
- toPath() {
- this.$router.push("/userInfo");
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .page_home {
- position: relative;
- .home_bg {
- width: 100%;
- height: 102px;
- background: #5c8fff;
- border-radius: 0px 0px 16px 16px;
- padding-top: 12px;
- margin-bottom: 42px;
- .bg_title {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 16px;
- .title_info {
- display: flex;
- align-items: center;
- span {
- height: 24px;
- font-size: 16px;
- font-weight: 600;
- color: #ffffff;
- line-height: 24px;
- text-align: center;
- text-indent: 4px;
- text-shadow: 0px 2px 4px rgba(0, 0, 0, 0.04);
- }
- }
- .user-info {
- }
- }
- }
- .home_info {
- position: absolute;
- top: 52px;
- width: calc(100% - 32px);
- padding: 0 16px;
- .info_content {
- background: #ffffff;
- box-shadow: 0px 0px 8px 0px rgba(51, 51, 51, 0.08);
- border-radius: 4px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 16px 30px;
- .content_item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- span {
- height: 20px;
- font-size: 14px;
- font-weight: 400;
- color: #697081;
- line-height: 20px;
- margin-top: 4px;
- }
- }
- }
- }
- .card_list {
- padding: 0 16px;
- .sub_title {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin: 12px 0 6px 0;
- span {
- height: 20px;
- font-size: 14px;
- font-weight: 600;
- color: #0c1935;
- line-height: 20px;
- }
- .function_btn {
- display: flex;
- align-items: center;
- span {
- height: 16px;
- font-size: 12px;
- font-weight: 400;
- color: #2e69eb;
- line-height: 16px;
- }
- }
- }
- .list_item {
- background: #ffffff;
- box-shadow: 0px 0px 4px 0px rgba(51, 51, 51, 0.08);
- border-radius: 4px;
- padding: 16px 30px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- .item_info {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- .label {
- height: 16px;
- font-size: 12px;
- font-weight: 400;
- color: #697081;
- line-height: 16px;
- }
- .count_up {
- margin-top: 4px;
- height: 22px;
- font-size: 20px;
- font-weight: 500;
- color: #0c1935;
- line-height: 22px;
- }
- }
- }
- .list_table {
- padding: 16px 20px;
- .table_info {
- .table_header {
- display: flex;
- justify-content: space-between;
- padding-bottom: 8px;
- border-bottom: 1px solid #eeeeee;
- span {
- height: 16px;
- font-size: 12px;
- font-weight: 600;
- color: #9da0ac;
- line-height: 16px;
- }
- }
- }
- }
- }
- }
- </style>
|