张延森 4 anos atrás
pai
commit
42c3467964

+ 141
- 0
src/components/RoomTag/index.vue Ver arquivo

@@ -0,0 +1,141 @@
1
+<template>
2
+  <van-tag
3
+    v-show="roomInfo.metroNear == '1'"
4
+    class="room-tag labelItem0"
5
+    type="primary"
6
+    >铁</van-tag
7
+  >
8
+  <van-tag
9
+    v-show="roomInfo.schoolNear == '1'"
10
+    class="room-tag labelItem1"
11
+    type="primary"
12
+    >学</van-tag
13
+  >
14
+  <van-tag
15
+    v-show="roomInfo.keyStatus == '0'"
16
+    class="room-tag labelItem2"
17
+    type="primary"
18
+    >钥</van-tag
19
+  >
20
+  <van-tag
21
+    v-show="roomInfo.rescStatus == '0'"
22
+    class="room-tag labelItem0"
23
+    type="primary"
24
+    >勘</van-tag
25
+  >
26
+  <van-tag
27
+    v-show="roomInfo.authStatus == '0'"
28
+    class="room-tag labelItem1"
29
+    type="primary"
30
+    >委</van-tag
31
+  >
32
+  <van-tag
33
+    v-show="roomInfo.buildTime == '4'"
34
+    class="room-tag labelItem2"
35
+    type="primary"
36
+    >满五减一</van-tag
37
+  >
38
+  <van-tag
39
+    v-show="roomInfo.buildTime == '3'"
40
+    class="room-tag labelItem2"
41
+    type="primary"
42
+    >满五</van-tag
43
+  >
44
+  <van-tag
45
+    v-show="roomInfo.buildTime == '2'"
46
+    class="room-tag labelItem2"
47
+    type="primary"
48
+    >满二</van-tag
49
+  >
50
+  <van-tag
51
+    v-show="roomInfo.status == '7'"
52
+    class="room-tag labelItem2"
53
+    type="primary"
54
+    >锁</van-tag
55
+  >
56
+  <van-tag
57
+    v-show="roomInfo.souFangHouseId != null && roomInfo.souFangHouseId != ''"
58
+    class="room-tag labelItem0"
59
+    type="primary"
60
+    >关</van-tag
61
+  >
62
+  <van-tag v-show="roomInfo.status == '7'" class="room-tag" type="primary">
63
+    <img src="~@/assets/favicon.png" style="height: 16px" alt="" srcset="" />
64
+  </van-tag>
65
+  <van-tag
66
+    v-show="
67
+      roomInfo.fiveEightHouseId != null && roomInfo.fiveEightHouseId != ''
68
+    "
69
+    class="room-tag"
70
+    type="primary"
71
+  >
72
+    <img src="~@/assets/58.png" style="height: 16px" alt="" srcset="" />
73
+  </van-tag>
74
+  <van-tag
75
+    v-show="
76
+      roomInfo.threeSixFiveHouseId != null && roomInfo.threeSixFiveHouseId != ''
77
+    "
78
+    class="room-tag"
79
+    type="primary"
80
+  >
81
+    <img src="~@/assets/365.png" style="height: 16px" alt="" srcset="" />
82
+  </van-tag>
83
+  <van-tag
84
+    v-show="roomInfo.toutiaoHouseId != null && roomInfo.toutiaoHouseId != ''"
85
+    class="room-tag"
86
+    type="primary"
87
+  >
88
+    <img src="~@/assets/toutiao.png" style="height: 16px" alt="" srcset="" />
89
+  </van-tag>
90
+  <van-tag
91
+    v-show="roomInfo.protectionFlag == '1'"
92
+    class="room-tag labelItem0"
93
+    type="primary"
94
+    >保</van-tag
95
+  >
96
+  <van-tag v-show="roomInfo.collectFlag == '1'" class="room-tag" type="primary">
97
+    <img src="~@/assets/collect.png" style="height: 16px" alt="" srcset="" />
98
+  </van-tag>
99
+</template>
100
+
101
+<script>
102
+import { Tag } from 'vant'
103
+
104
+export default {
105
+  components: {
106
+    [Tag.name]: Tag,
107
+  },
108
+  props: {
109
+    roomInfo: {
110
+      type: Object,
111
+      default: () => ({}),
112
+    },
113
+  },
114
+  setup() {
115
+    // todo
116
+  },
117
+}
118
+</script>
119
+
120
+<style lang="less" scoped>
121
+.room-tag {
122
+  & + & {
123
+    margin-left: 3px;
124
+  }
125
+}
126
+
127
+.labelItem0 {
128
+  background-color: rgba(89, 171, 253, 0.15);
129
+  color: rgb(89, 171, 253);
130
+}
131
+
132
+.labelItem1 {
133
+  background-color: rgba(242, 161, 47, 0.15);
134
+  color: rgb(242, 161, 47);
135
+}
136
+
137
+.labelItem2 {
138
+  background-color: rgba(51, 190, 133, 0.15);
139
+  color: rgb(51, 190, 133);
140
+}
141
+</style>

+ 6
- 8
src/store/models/room.js Ver arquivo

@@ -13,7 +13,7 @@ export default () => {
13 13
 
14 14
   const getList = (data) => {
15 15
     loading.value = true
16
-    request({
16
+    return request({
17 17
       loadingId: 'room.list',
18 18
       url: '/room/list',
19 19
       data: {
@@ -23,18 +23,16 @@ export default () => {
23 23
       },
24 24
     })
25 25
       .then((res) => {
26
-        const { pageNo, pageSize, endRow, result } = res || {}
27
-        Object.assign(page, {
28
-          pageNo,
29
-          pageSize,
30
-          endRow,
31
-        })
32
-        list.value = pageNo <= 1 ? result : list.value.concat(list.value)
26
+        const { result, ...pageInfo } = res || {}
27
+        Object.assign(page, pageInfo)
28
+        list.value = pageInfo.pageNo <= 1 ? result : list.value.concat(list.value)
33 29
         loading.value = false
30
+        return res
34 31
       })
35 32
       .catch((e) => {
36 33
         console.error(e)
37 34
         loading.value = false
35
+        return Promise.reject(e)
38 36
       })
39 37
   }
40 38
 

+ 20
- 20
src/utils/request/index.js Ver arquivo

@@ -1,12 +1,12 @@
1
-import axios from "axios"
2
-import { Toast } from "vant"
3
-import { router } from "@/router"
4
-import store from "@/store"
5
-import { showDanger } from "../"
1
+import axios from 'axios'
2
+import { Toast } from 'vant'
3
+import { router } from '@/router'
4
+import store from '@/store'
5
+import { showDanger } from '../'
6 6
 
7 7
 // request 拦截器
8 8
 const requestInterceptor = (config) => {
9
-  const loading = store.getState("loading")
9
+  const loading = store.getState('loading')
10 10
 
11 11
   if (config.loadingId) {
12 12
     config.setLoading = (state) => loading.setLoading(config.loadingId, state)
@@ -28,8 +28,8 @@ const requestInterceptor = (config) => {
28 28
 // response 拦截器
29 29
 const responseInterceptor = (response) => {
30 30
   const { data, headers } = response
31
-  const contentType = headers["Content-Type"] || headers["content-type"] || ""
32
-  console.log(headers, "headers")
31
+  const contentType = headers['Content-Type'] || headers['content-type'] || ''
32
+  console.log(headers, 'headers')
33 33
 
34 34
   if (response.config.setLoading) {
35 35
     response.config.setLoading(false)
@@ -40,23 +40,23 @@ const responseInterceptor = (response) => {
40 40
   }
41 41
 
42 42
   if (/json/.test(contentType)) {
43
-    if ("0" === data.code) {
43
+    if ('0' === data.code) {
44 44
       return data.data
45
-    } else if ("-1" === data.code) {
46
-      router.push("/login")
45
+    } else if ('-1' === data.code) {
46
+      router.push('/login')
47 47
       // return Promise.reject(data.message)
48 48
     } else {
49 49
       return Promise.reject(data)
50 50
     }
51 51
   } else {
52
-    console.log(data, "router1")
53
-    if ("-1" === data.code) {
54
-      console.log(router, "router")
55
-      router.push("/login")
52
+    console.log(data, 'router1')
53
+    if ('-1' === data.code) {
54
+      console.log(router, 'router')
55
+      router.push('/login')
56 56
       // return
57 57
       return Promise.reject(data.message)
58 58
     }
59
-    return Promise.reject("账号未登录或没有权限")
59
+    return Promise.reject('账号未登录或没有权限')
60 60
   }
61 61
 }
62 62
 
@@ -84,14 +84,14 @@ const handleError = (type) => (error) => {
84 84
 
85 85
 const request = axios.create({
86 86
   // 通用前缀
87
-  baseURL: "/mp",
87
+  baseURL: '/mp',
88 88
   // 允许 cookie
89 89
   withCredentials: true,
90 90
   // 全部都是 post 请求
91
-  method: "post",
91
+  method: 'post',
92 92
 })
93 93
 
94
-request.interceptors.request.use(requestInterceptor, handleError("REQUEST"))
95
-request.interceptors.response.use(responseInterceptor, handleError("RESPONSE"))
94
+request.interceptors.request.use(requestInterceptor, handleError('REQUEST'))
95
+request.interceptors.response.use(responseInterceptor, handleError('RESPONSE'))
96 96
 
97 97
 export default request

+ 9
- 133
src/view/secondhand/components/secondhandcard/index.vue Ver arquivo

@@ -24,132 +24,7 @@
24 24
         <p class="card-right-2">录入人:{{ data.recordName }}</p>
25 25
         <p class="card-right-2">维护人:{{ data.belongName }}</p>
26 26
         <div class="card-right-end">
27
-          <van-tag
28
-            v-show="datas.metroNear == '1'"
29
-            class="card-right-end-tag labelItem0"
30
-            type="primary"
31
-            >铁</van-tag
32
-          >
33
-          <van-tag
34
-            v-show="datas.schoolNear == '1'"
35
-            class="card-right-end-tag labelItem1"
36
-            type="primary"
37
-            >学</van-tag
38
-          >
39
-          <van-tag
40
-            v-show="datas.keyStatus == '0'"
41
-            class="card-right-end-tag labelItem2"
42
-            type="primary"
43
-            >钥</van-tag
44
-          >
45
-          <van-tag
46
-            v-show="datas.rescStatus == '0'"
47
-            class="card-right-end-tag labelItem0"
48
-            type="primary"
49
-            >勘</van-tag
50
-          >
51
-          <van-tag
52
-            v-show="datas.authStatus == '0'"
53
-            class="card-right-end-tag labelItem1"
54
-            type="primary"
55
-            >委</van-tag
56
-          >
57
-          <van-tag
58
-            v-show="datas.buildTime == '4'"
59
-            class="card-right-end-tag labelItem2"
60
-            type="primary"
61
-            >满五减一</van-tag
62
-          >
63
-          <van-tag
64
-            v-show="datas.buildTime == '3'"
65
-            class="card-right-end-tag labelItem2"
66
-            type="primary"
67
-            >满五</van-tag
68
-          >
69
-          <van-tag
70
-            v-show="datas.buildTime == '2'"
71
-            class="card-right-end-tag labelItem2"
72
-            type="primary"
73
-            >满二</van-tag
74
-          >
75
-          <van-tag
76
-            v-show="datas.status == '7'"
77
-            class="card-right-end-tag labelItem2"
78
-            type="primary"
79
-            >锁</van-tag
80
-          >
81
-          <van-tag
82
-            v-show="datas.souFangHouseId != null && datas.souFangHouseId != ''"
83
-            class="card-right-end-tag labelItem0"
84
-            type="primary"
85
-            >关</van-tag
86
-          >
87
-          <van-tag
88
-            v-show="data.status == '7'"
89
-            class="card-right-end-tag"
90
-            type="primary"
91
-          >
92
-            <img
93
-              src="~@/assets/favicon.png"
94
-              style="height: 16px"
95
-              alt=""
96
-              srcset=""
97
-            />
98
-          </van-tag>
99
-          <van-tag
100
-            v-show="
101
-              datas.fiveEightHouseId != null && datas.fiveEightHouseId != ''
102
-            "
103
-            class="card-right-end-tag"
104
-            type="primary"
105
-          >
106
-            <img src="~@/assets/58.png" style="height: 16px" alt="" srcset="" />
107
-          </van-tag>
108
-          <van-tag
109
-            v-show="
110
-              datas.threeSixFiveHouseId != null &&
111
-              datas.threeSixFiveHouseId != ''
112
-            "
113
-            class="card-right-end-tag"
114
-            type="primary"
115
-          >
116
-            <img
117
-              src="~@/assets/365.png"
118
-              style="height: 16px"
119
-              alt=""
120
-              srcset=""
121
-            />
122
-          </van-tag>
123
-          <van-tag
124
-            v-show="datas.toutiaoHouseId != null && datas.toutiaoHouseId != ''"
125
-            class="card-right-end-tag"
126
-            type="primary"
127
-          >
128
-            <img
129
-              src="~@/assets/toutiao.png"
130
-              style="height: 16px"
131
-              alt=""
132
-              srcset=""
133
-            />
134
-          </van-tag>
135
-          <van-tag
136
-            v-show="datas.protectionFlag == '1'"
137
-            class="card-right-end-tag labelItem0"
138
-            type="primary"
139
-            >保</van-tag
140
-          >
141
-          <van-tag
142
-            v-show="datas.collectFlag == '1'"
143
-            class="card-right-end-tag"
144
-            type="primary"
145
-          >
146
-            <img
147
-              src="~@/assets/collect.png"
148
-              style="height: 16px"
149
-              alt=""
150
-              srcset=""
151
-            />
152
-          </van-tag>
27
+          <RoomTag :room-info="datas" />
153 28
         </div>
154 29
 
155 30
         <div class="card-right-price">
@@ -162,15 +37,16 @@
162 37
 </template>
163 38
 
164 39
 <script>
165
-import { computed } from "vue"
166
-import { cell, Image as VanImage, Tag } from "vant"
40
+import { computed } from 'vue'
41
+import { cell, Image as VanImage } from 'vant'
42
+import RoomTag from '@/components/RoomTag'
167 43
 
168 44
 export default {
169
-  name: "secondhandcard",
45
+  name: 'secondhandcard',
170 46
   components: {
171 47
     [cell.name]: cell,
172 48
     [VanImage.name]: VanImage,
173
-    [Tag.name]: Tag,
49
+    RoomTag,
174 50
   },
175 51
   props: {
176 52
     datas: {
@@ -182,9 +58,9 @@ export default {
182 58
   setup(props) {
183 59
     const data = computed(() => ({
184 60
       title: props.datas.estateName, //标题
185
-      roomType: props.datas.roomType.split(","), //户型
61
+      roomType: props.datas.roomType.split(','), //户型
186 62
       acreage: Number(props.datas.acreage || 0).toFixed(2), //面积
187
-      roomFloor: props.datas.roomFloor.split(","), //楼层
63
+      roomFloor: props.datas.roomFloor.split(','), //楼层
188 64
       aspect: props.datas.aspect, //方向
189 65
       recordTime: props.datas.recordTime, //录入时间
190 66
       recordName: props.datas.recordName, //录入人
@@ -196,7 +72,7 @@ export default {
196 72
       ).toFixed(2),
197 73
       imgUrl:
198 74
         props.datas.imgUrl ||
199
-        "https://img.yzcdn.cn/vant/empty-image-default.png",
75
+        'https://img.yzcdn.cn/vant/empty-image-default.png',
200 76
     }))
201 77
 
202 78
     return {

+ 29
- 12
src/view/secondhand/index.vue Ver arquivo

@@ -37,16 +37,16 @@
37 37
 
38 38
 <script>
39 39
 // import Vue from 'vue';
40
-import { useModel } from "@zjxpcyc/vue-tiny-store"
41
-import { DropdownMenu, DropdownItem, List, Popup, Progress } from "vant"
42
-import secondhandscreen from "./components/secondhandscreen"
43
-import secondhandmorescreen from "./components/secondhandmorescreen"
44
-import secondhandcard from "./components/secondhandcard"
45
-import { computed, onMounted, ref } from "vue"
46
-import { router } from "../../router"
40
+import { useModel } from '@zjxpcyc/vue-tiny-store'
41
+import { DropdownMenu, DropdownItem, List, Popup, Progress, Toast } from 'vant'
42
+import secondhandscreen from './components/secondhandscreen'
43
+import secondhandmorescreen from './components/secondhandmorescreen'
44
+import secondhandcard from './components/secondhandcard'
45
+import { computed, onMounted, ref } from 'vue'
46
+import { router } from '../../router'
47 47
 
48 48
 export default {
49
-  name: "secondhand",
49
+  name: 'secondhand',
50 50
   components: {
51 51
     [DropdownMenu.name]: DropdownMenu,
52 52
     [DropdownItem.name]: DropdownItem,
@@ -63,12 +63,14 @@ export default {
63 63
 
64 64
   setup() {
65 65
     const moreShow = ref(false)
66
-    const { list, loading, page, getList } = useModel("room")
66
+    const { list, loading, page, getList } = useModel('room')
67 67
     const searchParams = ref({})
68 68
 
69
-    const finished = computed(() => page.pageNo && page.pageNo === page.endRow)
69
+    const finished = computed(() => {
70
+      return page.currentPage ? page.currentPage >= page.totalPages : true
71
+    })
70 72
     const percent = computed(() =>
71
-      page.pageNo ? (page.pageNo * 100) / page.endRow : 100
73
+      page.currentPage ? (page.currentPage * 100) / page.totalPages : 100
72 74
     )
73 75
 
74 76
     const onShowMore = () => {
@@ -76,12 +78,27 @@ export default {
76 78
     }
77 79
 
78 80
     const onLoad = () => {
79
-      getList({
81
+      return getList({
80 82
         pageNo: page.pageNo + 1,
81 83
         ...searchParams.value,
82 84
       })
83 85
     }
84 86
 
87
+    onMounted(() => {
88
+      const loadInst = Toast.loading({
89
+        message: '请稍候...',
90
+        forbidClick: true,
91
+        overlay: true,
92
+        duration: 0,
93
+      })
94
+
95
+      onLoad()
96
+        .then(() => {
97
+          loadInst.clear()
98
+        })
99
+        .catch(() => loadInst.clear())
100
+    })
101
+
85 102
     const toDetail = (item) => {
86 103
       router.push(`/secondhand/detail?roomId=${item.id}`)
87 104
     }

+ 55
- 0
src/view/user/Header.vue Ver arquivo

@@ -0,0 +1,55 @@
1
+<template>
2
+  <div>
3
+    <van-cell>
4
+      <template #title>
5
+        <van-image
6
+          width="64"
7
+          height="64"
8
+          :src="user.headImg || 'https://img.yzcdn.cn/vant/cat.jpeg'"
9
+        />
10
+      </template>
11
+      <template #default>
12
+        <div class="page-mine-body">
13
+          <div class="user-name">{{ user.userName }}</div>
14
+          <div>{{ user.departmentName }}</div>
15
+          <div>工号: {{ user.employeeNum }}</div>
16
+        </div>
17
+      </template>
18
+    </van-cell>
19
+  </div>
20
+</template>
21
+
22
+<script>
23
+import { Cell, Image } from 'vant'
24
+
25
+export default {
26
+  components: {
27
+    [Cell.name]: Cell,
28
+    [Image.name]: Image,
29
+  },
30
+  props: {
31
+    user: {
32
+      type: Object,
33
+      default: () => ({}),
34
+    },
35
+  },
36
+}
37
+</script>
38
+
39
+<style lang="less" scoped>
40
+.page-mine-body {
41
+  text-align: left;
42
+  padding: 0 1.5em;
43
+  line-height: 1.6em;
44
+
45
+  .user-name {
46
+    font-size: 1.2em;
47
+    font-weight: 500;
48
+    color: #000;
49
+  }
50
+}
51
+
52
+:deep(.van-cell__title) {
53
+  flex: none;
54
+}
55
+</style>

+ 37
- 6
src/view/user/index.vue Ver arquivo

@@ -1,15 +1,46 @@
1 1
 <template>
2
-  <div class="user">123123</div>
2
+  <div class="page-mine">
3
+    <van-cell-group title=" ">
4
+      <x-loading x-id="user.info">
5
+        <Header :user="user" />
6
+      </x-loading>
7
+    </van-cell-group>
8
+    <van-cell-group title=" ">
9
+      <van-empty description="客官请稍候, 新功能马上就来 ~" />
10
+    </van-cell-group>
11
+  </div>
3 12
 </template>
4 13
 
5 14
 <script>
6
-// import Vue from 'vue';
15
+import { ref } from 'vue'
16
+import { CellGroup, Empty } from 'vant'
17
+import request from '@/utils/request'
18
+import Header from './Header'
7 19
 
8 20
 export default {
9
-  name: "user",
10
-  components: {},
21
+  components: {
22
+    [CellGroup.name]: CellGroup,
23
+    [Empty.name]: Empty,
24
+    Header,
25
+  },
26
+  setup() {
27
+    const user = ref()
28
+    request({
29
+      url: '/user/current',
30
+      loadingId: 'user.info',
31
+    }).then((res) => {
32
+      user.value = res
33
+    })
34
+
35
+    return {
36
+      user,
37
+    }
38
+  },
11 39
 }
12 40
 </script>
13 41
 
14
-<!-- Add "scoped" attribute to limit CSS to this component only -->
15
-<style scoped></style>
42
+<style lang="less" scoped>
43
+.page-mine {
44
+  letter-spacing: 1px;
45
+}
46
+</style>