张延森 4 gadus atpakaļ
vecāks
revīzija
8576bb5304

+ 14
- 2
package-lock.json Parādīt failu

@@ -2190,6 +2190,11 @@
2190 2190
       "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=",
2191 2191
       "dev": true
2192 2192
     },
2193
+    "@zjxpcyc/vue-tiny-store": {
2194
+      "version": "1.0.1",
2195
+      "resolved": "https://registry.npm.taobao.org/@zjxpcyc/vue-tiny-store/download/@zjxpcyc/vue-tiny-store-1.0.1.tgz",
2196
+      "integrity": "sha1-nmfA8I6b3dgCvctUOijBgYHic5U="
2197
+    },
2193 2198
     "accepts": {
2194 2199
       "version": "1.3.7",
2195 2200
       "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz",
@@ -2535,6 +2540,14 @@
2535 2540
       "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
2536 2541
       "dev": true
2537 2542
     },
2543
+    "axios": {
2544
+      "version": "0.21.1",
2545
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608611162952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
2546
+      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
2547
+      "requires": {
2548
+        "follow-redirects": "^1.10.0"
2549
+      }
2550
+    },
2538 2551
     "babel-eslint": {
2539 2552
       "version": "10.1.0",
2540 2553
       "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1611946213770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz",
@@ -5585,8 +5598,7 @@
5585 5598
     "follow-redirects": {
5586 5599
       "version": "1.13.3",
5587 5600
       "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.3.tgz",
5588
-      "integrity": "sha1-5VmK1QF0wbxOhyMB6CrCzZf5Amc=",
5589
-      "dev": true
5601
+      "integrity": "sha1-5VmK1QF0wbxOhyMB6CrCzZf5Amc="
5590 5602
     },
5591 5603
     "for-in": {
5592 5604
       "version": "1.0.2",

+ 4
- 2
src/components/Shiro/index.vue Parādīt failu

@@ -19,10 +19,12 @@ export default {
19 19
   setup(props) {
20 20
     const { permissions, getPermission } = useModel('shiro')
21 21
 
22
-    const show = computed(async () => {
22
+    const show = computed(() => {
23 23
       const permission = permissions[props.name]
24 24
       if (typeof permission !== 'boolean') {
25
-        return await getPermission(props.name)
25
+        // return await getPermission(props.name)
26
+        getPermission(props.name)
27
+        return false
26 28
       }
27 29
 
28 30
       return permission

+ 50
- 36
src/components/contextC/index.vue Parādīt failu

@@ -1,53 +1,67 @@
1 1
 <template>
2 2
   <div class="contextc">
3
-
4
-        <van-row>
5
-          <van-col v-for="(item,index) in options" :key="index" :span="item.span||12"  class="contextc-text">
6
-              <van-button v-if="item.type=='BUTTOM'" type="default" color="#d75e3a" size="mini" @click="item.click">默认按钮</van-button>
7
-              <span v-else> {{item.name}}: {{item.value}}</span>
8
-              
9
-              </van-col>
10
-          <!-- <van-col span="12" class="context-text">span: 8</van-col>
11
-          <van-col span="12" class="context-text">span: 8</van-col>
12
-          <van-col span="12" class="context-text">span: 8</van-col>
13
-          <van-col span="12" class="context-text">span: 8</van-col>
14
-          <van-col span="12" class="context-text">span: 8</van-col>
15
-          <van-col span="12" class="context-text">span: 8</van-col> -->
16
-        </van-row>
17
- 
3
+    <van-row>
4
+      <van-col
5
+        v-for="(item, index) in options"
6
+        :key="index"
7
+        :span="item.span || 12"
8
+        class="contextc-text"
9
+      >
10
+        <div>
11
+          <van-button
12
+            v-if="item.type == 'BUTTOM'"
13
+            type="default"
14
+            color="#d75e3a"
15
+            size="mini"
16
+            @click="item.click"
17
+            style="display:flex"
18
+            >{{item.name}}</van-button
19
+          >
20
+          <span v-else class="static" :class="{ 'contextc--required': item.required }">
21
+            {{ item.name }}: {{ item.value }}</span
22
+          >
23
+        </div>
24
+      </van-col>
25
+    </van-row>
18 26
   </div>
19 27
 </template>
20 28
 
21 29
 <script>
22
-import {Col,Row,Button } from 'vant'
30
+import { Col, Row, Button } from "vant";
23 31
 export default {
24
-  name: 'contextc',
25
-  components:{
26
-      [Row.name]: Row,
32
+  name: "contextc",
33
+  components: {
34
+    [Row.name]: Row,
27 35
     [Col.name]: Col,
28 36
     [Button.name]: Button,
29
-     
30 37
   },
31 38
   props: {
32
-    options:{
33
-        type:Array,
34
-        default: () => [],
35
-    }
39
+    options: {
40
+      type: Array,
41
+      default: () => [],
42
+    },
43
+    
36 44
   },
37
-  setup(){
38
-      return{}
39
-  }
40
-}
45
+  setup() {
46
+    return {};
47
+  },
48
+};
41 49
 </script>
42 50
 
43 51
 <!-- Add "scoped" attribute to limit CSS to this component only -->
44
-<style lang='less' scoped>
45
-.contextc{
46
-font-size: 13px;
47
-    color: #999;
48
-    &-text{
49
-        line-height: 24px;
50
-        display: flex;
51
-    }
52
+<style lang="less" scoped>
53
+.contextc {
54
+  font-size: 13px;
55
+  color: #999;
56
+  &-text {
57
+    line-height: 24px;
58
+    display: flex;
59
+  }
60
+  &--required::before {
61
+    left: 8px;
62
+    color: #ee0a24;
63
+    font-size: 14px;
64
+    content: "*";
65
+  }
52 66
 }
53 67
 </style>

+ 118
- 0
src/components/editCompents/housetypeC/index.vue Parādīt failu

@@ -0,0 +1,118 @@
1
+<template>
2
+  <div class="pickerc">
3
+    <!-- :modelValue="modelValue" -->
4
+    <van-field
5
+      :model="modelValue"
6
+      :name="name"
7
+      readonly
8
+      :label="label"
9
+      :placeholder="placeholder"
10
+      :required="required"
11
+    >
12
+      <template #input>
13
+        <div class="house-input" style="display: flex;">
14
+          <van-field v-model="state.value[0]" @update:model-value='e=>onchange(e,0)' type="number" class="text">
15
+            <template #extra>
16
+              <div>
17
+                室
18
+              </div>
19
+            </template>
20
+          </van-field>
21
+
22
+         <van-field v-model="state.value[1]" @update:model-value='e=>onchange(e,1)' type="number" class="text">
23
+            <template #extra>
24
+              <div>
25
+                厅
26
+              </div>
27
+            </template>
28
+          </van-field>
29
+          
30
+          <van-field v-model="state.value[2]" @update:model-value='e=>onchange(e,2)' type="number" class="text">
31
+            <template #extra>
32
+              <div>
33
+                厨
34
+              </div>
35
+            </template>
36
+          </van-field>
37
+          <van-field v-model="state.value[3]" @update:model-value='e=>onchange(e,3)' type="number" class="text">
38
+            <template #extra>
39
+              <div>
40
+                卫
41
+              </div>
42
+            </template>
43
+          </van-field>
44
+          <van-field v-model="state.value[4]" @update:model-value='e=>onchange(e,4)' type="number" class="text">
45
+            <template #extra>
46
+              <div>
47
+                阳台
48
+              </div>
49
+            </template>
50
+          </van-field>
51
+        </div>
52
+      </template>
53
+    </van-field>
54
+  </div>
55
+</template>
56
+
57
+<script>
58
+import { reactive } from "vue";
59
+import { Picker, Field, Popup } from "vant";
60
+
61
+export default {
62
+  name: "pickerc",
63
+  components: {
64
+    [Picker.name]: Picker,
65
+    [Field.name]: Field,
66
+    [Popup.name]: Popup,
67
+  },
68
+  emits: ["update:modelValue"],
69
+  props: {
70
+    name: String,
71
+    modelValue: String,
72
+    label: String,
73
+    placeholder: {
74
+      type: String,
75
+      default: () => {
76
+        return "请选择";
77
+      },
78
+    },
79
+    required: Boolean,
80
+  },
81
+  setup(props, { emit }) {
82
+    console.log(props);
83
+    const state = reactive({ value: [] });
84
+
85
+    state.value = props.modelValue.split("/");
86
+
87
+    const onchange = (value,index) => {
88
+      state.value[index] = value;
89
+      console.log(value,index,emit)
90
+      emit("update:modelValue", state.value.join('/'));
91
+
92
+    };
93
+
94
+    return {
95
+      state,
96
+onchange,
97
+      
98
+    };
99
+  },
100
+};
101
+</script>
102
+
103
+<!-- Add "scoped" attribute to limit CSS to this component only -->
104
+<style lang="less">
105
+.house-input {
106
+  display: flex;
107
+  input {
108
+    background-color: #eee;
109
+  }
110
+  .van-cell {
111
+    padding: 0;
112
+  }
113
+
114
+  .van-field__body {
115
+    background-color: #eee;
116
+  }
117
+}
118
+</style>

+ 9
- 0
src/components/editCompents/index.js Parādīt failu

@@ -0,0 +1,9 @@
1
+import Pickerc from './pickerC'
2
+import Housetypec from './housetypeC'
3
+import Ladderhousec from './ladderhouseC'
4
+export {
5
+    Pickerc,
6
+    Housetypec,
7
+
8
+    Ladderhousec
9
+};

+ 102
- 0
src/components/editCompents/ladderhouseC/index.vue Parādīt failu

@@ -0,0 +1,102 @@
1
+<template>
2
+  <div class="ladderhousec">
3
+    <!-- :modelValue="modelValue" -->
4
+    <van-field
5
+      :model="modelValue"
6
+      :name="name"
7
+      readonly
8
+      :label="label"
9
+      :placeholder="placeholder"
10
+      :required="required"
11
+    >
12
+      <template #input>
13
+        <div class="house-input" style="display: flex;">
14
+          <van-field v-model="state.value[0]" @update:model-value='e=>onchange(e,0)' type="number" class="text">
15
+            <template #extra>
16
+              <div>
17
+                梯
18
+              </div>
19
+            </template>
20
+          </van-field>
21
+
22
+         <van-field v-model="state.value[1]" @update:model-value='e=>onchange(e,1)' type="number" class="text">
23
+            <template #extra>
24
+              <div>
25
+                户
26
+              </div>
27
+            </template>
28
+          </van-field>
29
+          
30
+       
31
+        </div>
32
+      </template>
33
+    </van-field>
34
+  </div>
35
+</template>
36
+
37
+<script>
38
+import { reactive } from "vue";
39
+import { Picker, Field, Popup } from "vant";
40
+
41
+export default {
42
+  name: "ladderhousec",
43
+  components: {
44
+    [Picker.name]: Picker,
45
+    [Field.name]: Field,
46
+    [Popup.name]: Popup,
47
+  },
48
+  emits: ["update:modelValue"],
49
+  props: {
50
+    name: String,
51
+    modelValue: String,
52
+    label: String,
53
+    placeholder: {
54
+      type: String,
55
+      default: () => {
56
+        return "请选择";
57
+      },
58
+    },
59
+    required: Boolean,
60
+  },
61
+  setup(props, { emit }) {
62
+    console.log(props);
63
+    const state = reactive({ value: [] });
64
+
65
+    state.value = props.modelValue.split("/");
66
+
67
+    const onchange = (value,index) => {
68
+      state.value[index] = value;
69
+      console.log(value,index,emit)
70
+      emit("update:modelValue", state.value.join('/'));
71
+
72
+    };
73
+
74
+    return {
75
+      state,
76
+onchange,
77
+      
78
+    };
79
+  },
80
+};
81
+</script>
82
+
83
+<!-- Add "scoped" attribute to limit CSS to this component only -->
84
+<style lang="less" >
85
+.ladderhousec{
86
+.house-input {
87
+  display: flex;
88
+  input {
89
+    background-color: #eee;
90
+    width: 40px;
91
+  }
92
+  .van-cell {
93
+    padding: 0;
94
+  }
95
+
96
+  .van-field__body {
97
+    background-color: #eee;
98
+  }
99
+}
100
+}
101
+
102
+</style>

+ 94
- 0
src/components/editCompents/pickerC/index.vue Parādīt failu

@@ -0,0 +1,94 @@
1
+<template>
2
+  <div class="pickerc">
3
+    <van-field
4
+      :modelValue="modelValue"
5
+      readonly
6
+      clickable
7
+      :label="label"
8
+      :placeholder="placeholder"
9
+      @click="state.showPicker = true"
10
+      :required="required"
11
+    />
12
+    <van-popup v-model:show="state.showPicker" round position="bottom">
13
+      <van-picker
14
+        :columns="columns"
15
+        @cancel="state.showPicker = false"
16
+        @confirm="onConfirm"
17
+      />
18
+    </van-popup>
19
+  </div>
20
+</template>
21
+
22
+<script>
23
+import { reactive } from "vue";
24
+import { Picker, Field, Popup } from "vant";
25
+
26
+export default {
27
+  name: "pickerc",
28
+  components: {
29
+    [Picker.name]: Picker,
30
+    [Field.name]: Field,
31
+    [Popup.name]: Popup,
32
+  },
33
+  emits: ["update:modelValue"],
34
+  props: {
35
+    modelValue: String,
36
+    columns: {
37
+      type: Array,
38
+      default: () => {
39
+        return [];
40
+      },
41
+    },
42
+    label: String,
43
+    placeholder: {
44
+      type: String,
45
+      default: () => {
46
+        return "请选择";
47
+      },
48
+    },
49
+    required:Boolean,
50
+  },
51
+  setup(props, { emit }) {
52
+    console.log(props);
53
+    const state = reactive({
54
+      showPicker: false,
55
+    });
56
+
57
+    const onConfirm = (value) => {
58
+      // state.value = value;
59
+      emit("update:modelValue", value);
60
+      state.showPicker = false;
61
+    };
62
+
63
+    return {
64
+      state,
65
+
66
+      onConfirm,
67
+    };
68
+  },
69
+};
70
+</script>
71
+
72
+<!-- Add "scoped" attribute to limit CSS to this component only -->
73
+<style lang="less" scoped>
74
+.pickerc {
75
+  width: 100%;
76
+
77
+  position: relative;
78
+  .van-swipe__indicators {
79
+    display: none;
80
+  }
81
+  &-tabs {
82
+    position: absolute;
83
+    bottom: 0px;
84
+    width: 100%;
85
+  }
86
+}
87
+.swiper .van-swipe-item {
88
+  /* color: #fff;
89
+  font-size: 20px;
90
+  line-height: 150px;
91
+  text-align: center;
92
+  background-color: #39a9ed; */
93
+}
94
+</style>

+ 34
- 0
src/components/herderC/index.vue Parādīt failu

@@ -0,0 +1,34 @@
1
+<template>
2
+  <div class="herderC">
3
+
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+import {Col,Row,Button } from 'vant'
9
+export default {
10
+  name: 'herderC',
11
+  components:{
12
+      [Row.name]: Row,
13
+    [Col.name]: Col,
14
+    [Button.name]: Button,
15
+     
16
+  },
17
+  props: {
18
+    options:{
19
+        type:Array,
20
+        default: () => [],
21
+    }
22
+  },
23
+  setup(){
24
+      return{}
25
+  }
26
+}
27
+</script>
28
+
29
+<!-- Add "scoped" attribute to limit CSS to this component only -->
30
+<style lang='less' scoped>
31
+.herderc{
32
+
33
+}
34
+</style>

+ 19
- 3
src/layout/index.vue Parādīt failu

@@ -1,9 +1,13 @@
1 1
 <template>
2 2
   <div class="layout">
3
-    <router-view />
3
+    <div>
4
+<router-view />
5
+    </div>
6
+    
4 7
 
5 8
     <van-tabbar route>
6 9
       <van-tabbar-item replace to="/home" icon="home-o">首页</van-tabbar-item>
10
+       <van-tabbar-item replace to="/addhouse" icon="add-o">录入</van-tabbar-item>
7 11
       <van-tabbar-item replace to="/user" icon="user-o">我的</van-tabbar-item>
8 12
     </van-tabbar>
9 13
   </div>
@@ -21,11 +25,23 @@ export default {
21 25
   },
22 26
   data() {
23 27
     return {
24
-      msg: "222",
28
+     
25 29
     };
26 30
   },
27 31
 };
28 32
 </script>
29 33
 
30 34
 <!-- Add "scoped" attribute to limit CSS to this component only -->
31
-<style scoped></style>
35
+<style scoped>
36
+
37
+.secondhand-main {
38
+  width: 100%;
39
+  height: calc(100vh - 142px);
40
+  overflow: hidden;
41
+  overflow-y: auto;
42
+}
43
+.secondhand-main::-webkit-scrollbar {
44
+  display: none; /*隐藏滚动条*/
45
+}
46
+
47
+</style>

+ 36
- 4
src/router.js Parādīt failu

@@ -29,7 +29,13 @@ const routes = [{
29 29
                     title: '房源管理'
30 30
                 }
31 31
             },
32
-
32
+            {
33
+                path: '/addhouse',
34
+                component: () => import('./view/addhouse'),
35
+                meta: {
36
+                    title: '房源录入'
37
+                }
38
+            },
33 39
             {
34 40
                 name: 'user',
35 41
                 path: '/user',
@@ -48,6 +54,15 @@ const routes = [{
48 54
             title: '二手房详情'
49 55
         }
50 56
     },
57
+    {
58
+        path: '/renting/detail',
59
+        name: '/renting/detail',
60
+        component: () => import('./view/renting/detail'),
61
+        meta: {
62
+            title: '租房详情'
63
+        }
64
+    },
65
+    
51 66
     {
52 67
         path: '/closehouse',
53 68
         name: '/closehouse',
@@ -56,12 +71,29 @@ const routes = [{
56 71
             title: '关闭房源'
57 72
         }
58 73
     },
74
+
59 75
     {
60
-        path: '/edithouse',
61
-        name: '/edithouse',
76
+        path: '/editsecondhandhouse',
77
+        name: '/editsecondhandhouse',
62 78
         component: () => import('./view/secondhand/edithouse'),
63 79
         meta: {
64
-            title: '关闭房源'
80
+            title: '编辑房源'
81
+        }
82
+    },
83
+    {
84
+        path: '/editrenting',
85
+        name: '/editrenting',
86
+        component: () => import('./view/renting/edithouse'),
87
+        meta: {
88
+            title: '编辑房源'
89
+        }
90
+    },
91
+    {
92
+        path: '/resc',
93
+        name: '/resc',
94
+        component: () => import('./view/resc'),
95
+        meta: {
96
+            title: '实勘上传'
65 97
         }
66 98
     },
67 99
 

+ 2
- 0
src/store/index.js Parādīt failu

@@ -2,11 +2,13 @@ import createStore from '@zjxpcyc/vue-tiny-store'
2 2
 import loading from './models/loading'
3 3
 import shiro from './models/shiro'
4 4
 import dicts from './models/dicts'
5
+import user from './models/user'
5 6
 
6 7
 const store = createStore({
7 8
   loading,
8 9
   shiro,
9 10
   dicts,
11
+  user,
10 12
 })
11 13
 
12 14
 export default store

+ 27
- 0
src/store/models/user.js Parādīt failu

@@ -0,0 +1,27 @@
1
+import {
2
+    reactive
3
+} from "vue"
4
+import request from '../../utils/request'
5
+
6
+export default () => {
7
+    const user = reactive({})
8
+
9
+    const getUser = query => {
10
+
11
+        return request({
12
+            url: '/login',
13
+            params: query,
14
+        }).then(res => {
15
+            console.log(res, 'res')
16
+            //   permissions[x] = Boolean(res)
17
+            //   return permissions[x]
18
+
19
+            return res
20
+        })
21
+    }
22
+
23
+    return {
24
+        user,
25
+        getUser
26
+    }
27
+}

+ 4
- 3
src/utils/plugins/shiro.js Parādīt failu

@@ -1,15 +1,16 @@
1 1
 import { useModel } from '@zjxpcyc/vue-tiny-store'
2 2
 
3 3
 const shiro = {
4
-  install: (app, options) => {
5
-    const { permissions, getPermission } = useModel('shiro')
4
+  install: (app) => {
6 5
 
7 6
     const removeNode = el => el.parentNode.removeChild(el)
8 7
 
9 8
     app.directive('shiro', (el, binding) => {
9
+      
10
+    const { permissions, getPermission } = useModel('shiro')
10 11
       const permission = permissions[binding.value]
11 12
       if (typeof permission !== 'boolean') {
12
-        getPermission(props.name).then(x => {
13
+        getPermission(binding.value).then(x => {
13 14
           if (!x) {
14 15
             removeNode(el)
15 16
           }

+ 22
- 8
src/utils/request/index.js Parādīt failu

@@ -1,11 +1,18 @@
1 1
 import axios from 'axios'
2
-import { useModel } from '@zjxpcyc/vue-tiny-store'
2
+import {
3
+  router
4
+} from '../../router'
5
+import {
6
+  useModel
7
+} from '@zjxpcyc/vue-tiny-store'
3 8
 
4 9
 // request 拦截器
5 10
 const requestInterceptor = config => {
6 11
   if (config.loadingId) {
7
-    const { setLoading } = useModel('loading')
8
-    
12
+    const {
13
+      setLoading
14
+    } = useModel('loading')
15
+
9 16
     config.setLoading = loading => setLoading(config.loadingId, loading)
10 17
     config.setLoading(true)
11 18
   }
@@ -15,9 +22,13 @@ const requestInterceptor = config => {
15 22
 
16 23
 // response 拦截器
17 24
 const responseInterceptor = response => {
18
-  const { data, headers } = response
25
+  const {
26
+    data,
27
+    headers
28
+  } = response
19 29
   const contentType = headers['Content-Type'] || headers['content-type'] || ''
20
-  
30
+
31
+
21 32
   if (response.config.setLoading) {
22 33
     response.config.setLoading(false)
23 34
   }
@@ -27,6 +38,9 @@ const responseInterceptor = response => {
27 38
       return data.data
28 39
     } else if ('1' === data.code) {
29 40
       return Promise.reject('账号未登录或没有权限')
41
+    } else if ('-1' === data.code) {
42
+      router.push('/login')
43
+      return
30 44
     } else {
31 45
       return Promise.reject(data.message)
32 46
     }
@@ -37,14 +51,14 @@ const responseInterceptor = response => {
37 51
 }
38 52
 
39 53
 // 错误处理
40
-const handleError = type => error => {  
54
+const handleError = type => error => {
41 55
   if (error.config.setLoading) {
42 56
     error.config.setLoading(false)
43 57
   }
44 58
 
45 59
   if (error.response) {
46 60
     console.error(`[${type}]:`)
47
-    console.error(error.response)    
61
+    console.error(error.response)
48 62
   } else {
49 63
     const errorMessage = error.message || error.msg || error
50 64
     console.error(`[${type}] ${errorMessage}`)
@@ -65,4 +79,4 @@ const request = axios.create({
65 79
 request.interceptors.request.use(requestInterceptor, handleError('REQUEST'))
66 80
 request.interceptors.response.use(responseInterceptor, handleError('RESPONSE'))
67 81
 
68
-export default request
82
+export default request

+ 347
- 0
src/view/addhouse/addrenting/index.vue Parādīt failu

@@ -0,0 +1,347 @@
1
+<template>
2
+  <div class="addrenting ">
3
+    <div class="detailcard van-hairline--bottom">
4
+      <div class="detailcard-title">
5
+        <span>房源信息</span>
6
+      </div>
7
+    </div>
8
+
9
+    <div>
10
+      <van-form @submit="onSubmit">
11
+        <van-field
12
+          v-model="state.username"
13
+          name="title"
14
+          label="标题"
15
+          placeholder="请输入"
16
+          required
17
+          :rules="[{ required: true, message: '请填写标题' }]"
18
+        />
19
+        <van-field
20
+          v-model="state.username"
21
+          name="22222"
22
+          label="选择楼盘"
23
+          required
24
+          :rules="[{ required: true, message: '请选择楼盘' }]"
25
+        >
26
+          <template #input>
27
+            <van-search
28
+              v-model="state.username"
29
+              style="pdding:0"
30
+              placeholder="请输入"
31
+            />
32
+          </template>
33
+        </van-field>
34
+
35
+        <Pickerc
36
+          v-model="state.username"
37
+          name="title"
38
+          label="朝向"
39
+          required
40
+        ></Pickerc>
41
+
42
+        <van-field
43
+          v-model="state.username"
44
+          name="title"
45
+          label="栋号"
46
+          placeholder="请输入"
47
+          required
48
+          :rules="[{ required: true, message: '请填写栋号' }]"
49
+        />
50
+        <van-field
51
+          v-model="state.username"
52
+          name="title"
53
+          label="单元"
54
+          placeholder="请输入"
55
+          required
56
+          :rules="[{ required: true, message: '请填写单元' }]"
57
+        />
58
+        <van-field
59
+          v-model="state.username"
60
+          name="title"
61
+          label="楼层"
62
+          placeholder="请输入"
63
+          required
64
+          :rules="[{ required: true, message: '请填写楼层' }]"
65
+        />
66
+        <van-field
67
+          v-model="state.username"
68
+          name="title"
69
+          label="总楼层"
70
+          placeholder="请输入"
71
+          required
72
+          :rules="[{ required: true, message: '请填写总楼层' }]"
73
+        />
74
+        <van-field
75
+          v-model="state.username"
76
+          name="title"
77
+          label="房号"
78
+          placeholder="请输入"
79
+          required
80
+          :rules="[{ required: true, message: '请填写房号' }]"
81
+        />
82
+        <van-field
83
+          v-model="state.username"
84
+          name="title"
85
+          label="业主姓名"
86
+          placeholder="请输入"
87
+          required
88
+          :rules="[{ required: true, message: '请填写业主姓名' }]"
89
+        />
90
+
91
+        <van-field v-model="state.checked" name="sex" label="业主姓别" required>
92
+          <template #input>
93
+            <van-radio-group v-model="state.checked" direction="horizontal">
94
+              <van-radio name="1">男</van-radio>
95
+              <van-radio name="0">女</van-radio>
96
+            </van-radio-group>
97
+          </template>
98
+        </van-field>
99
+
100
+        <van-field
101
+          v-model="state.username"
102
+          name="title"
103
+          label="业主电话"
104
+          placeholder="请输入"
105
+          required
106
+          :rules="[{ required: true, message: '请填写业主电话' }]"
107
+        />
108
+
109
+        <Pickerc
110
+          v-model="state.username"
111
+          name="title"
112
+          label="来源"
113
+          required
114
+        ></Pickerc>
115
+
116
+        <Pickerc
117
+          v-model="state.username"
118
+          name="title"
119
+          label="出租方式"
120
+          required
121
+        ></Pickerc>
122
+
123
+        <van-field
124
+          v-model="state.username"
125
+          name="aaaa"
126
+          label="租金"
127
+          placeholder="请输入"
128
+          required
129
+          type="number"
130
+          :rules="[{ required: true, message: '请填写租金' }]"
131
+        >
132
+          <template #extra>
133
+            元/月
134
+          </template>
135
+        </van-field>
136
+
137
+        <Pickerc
138
+          v-model="state.username"
139
+          name="title"
140
+          label="装修"
141
+          required
142
+        ></Pickerc>
143
+
144
+        <van-field
145
+          v-model="state.username"
146
+          name="aaaa"
147
+          label="面积"
148
+          placeholder="请输入"
149
+          required
150
+          type="number"
151
+          :rules="[{ required: true, message: '请填写面积' }]"
152
+        >
153
+          <template #extra>
154
+            ㎡
155
+          </template>
156
+        </van-field>
157
+
158
+        <Housetypec
159
+          v-model="state.housetype"
160
+          name="housetype"
161
+          label="户型"
162
+          placeholder="请输入"
163
+          required
164
+        ></Housetypec>
165
+
166
+        <Pickerc v-model="state.username" name="title" label="隔断"></Pickerc>
167
+
168
+        <Pickerc
169
+          v-model="state.username"
170
+          name="title"
171
+          label="付款方式"
172
+        ></Pickerc>
173
+
174
+        <Pickerc
175
+          v-model="state.username"
176
+          name="title"
177
+          label="居住现状"
178
+        ></Pickerc>
179
+
180
+        <Pickerc v-model="state.username" name="title" label="卧室"></Pickerc>
181
+
182
+        <Pickerc
183
+          v-model="state.username"
184
+          name="title"
185
+          label="性别限制"
186
+        ></Pickerc>
187
+
188
+        <Pickerc
189
+          v-model="state.username"
190
+          name="title"
191
+          label="房屋特色"
192
+        ></Pickerc>
193
+        <Ladderhousec
194
+          v-model="state.username"
195
+          name="title"
196
+          label="楼户比例"
197
+          placeholder="请输入"
198
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
199
+        >
200
+        </Ladderhousec>
201
+        <Pickerc
202
+          v-model="state.username"
203
+          name="title"
204
+          label="建筑类型"
205
+        ></Pickerc>
206
+
207
+        <Pickerc
208
+          v-model="state.username"
209
+          name="title"
210
+          label="房屋用途"
211
+        ></Pickerc>
212
+
213
+        <Pickerc
214
+          v-model="state.username"
215
+          name="title"
216
+          label="抵押信息"
217
+        ></Pickerc>
218
+        <van-field
219
+          v-model="state.username"
220
+          name="title"
221
+          label="建成年代"
222
+          placeholder="请输入"
223
+        />
224
+
225
+        <Pickerc v-model="state.username" name="title" label="电梯"></Pickerc>
226
+
227
+        <Pickerc v-model="state.username" name="title" label="车位"></Pickerc>
228
+
229
+        <Pickerc v-model="state.username" name="title" label="地下室"></Pickerc>
230
+
231
+        <Pickerc v-model="state.username" name="title" label="物业费"></Pickerc>
232
+
233
+        <Pickerc v-model="state.username" name="title" label="燃气"></Pickerc>
234
+        <Pickerc v-model="state.username" name="title" label="家电"></Pickerc>
235
+
236
+        
237
+
238
+        <div style="margin: 16px;">
239
+          <van-button round block type="primary" native-type="submit">
240
+            提交
241
+          </van-button>
242
+        </div>
243
+      </van-form>
244
+    </div>
245
+  </div>
246
+</template>
247
+
248
+<script>
249
+import { reactive } from "vue";
250
+
251
+import {
252
+  Icon,
253
+  Popover,
254
+  Row,
255
+  Col,
256
+  Button,
257
+  steps,
258
+  step,
259
+  //   Dialog,
260
+  Form,
261
+  Field,
262
+  Search,
263
+  RadioGroup,
264
+  Radio,
265
+} from "vant";
266
+
267
+import {
268
+  Pickerc,
269
+  Housetypec,
270
+  Ladderhousec,
271
+} from "../../../components/editCompents";
272
+
273
+// import { router } from "../../../router";
274
+
275
+export default {
276
+  name: "addrenting",
277
+  components: {
278
+    [Row.name]: Row,
279
+    [Col.name]: Col,
280
+    [Popover.name]: Popover,
281
+    [Icon.name]: Icon,
282
+    [Button.name]: Button,
283
+    [steps.name]: steps,
284
+    [step.name]: step,
285
+    [Form.name]: Form,
286
+    [Field.name]: Field,
287
+    [Search.name]: Search,
288
+    [RadioGroup.name]: RadioGroup,
289
+    [Radio.name]: Radio,
290
+    Housetypec: Housetypec,
291
+    Pickerc: Pickerc,
292
+    Ladderhousec: Ladderhousec,
293
+  },
294
+  data() {
295
+    return {};
296
+  },
297
+
298
+  setup() {
299
+    const state = reactive({
300
+      username: "",
301
+      password: "",
302
+      checked: "1",
303
+      housetype: "",
304
+    });
305
+
306
+    // 房源信息
307
+
308
+    const onSubmit = (values) => {
309
+      console.log("submit", values, state);
310
+    };
311
+
312
+    return {
313
+      state,
314
+      onSubmit,
315
+    };
316
+  },
317
+};
318
+</script>
319
+
320
+<!-- Add "scoped" attribute to limit CSS to this component only -->
321
+<style lang="less" scoped>
322
+.addrenting {
323
+  text-align: left;
324
+}
325
+.secondhand-main::-webkit-scrollbar {
326
+  display: none; /*隐藏滚动条*/
327
+}
328
+
329
+.detailcard {
330
+  min-height: 10px;
331
+
332
+  padding: 10px;
333
+  &-title {
334
+    font-size: 15px;
335
+    color: #d75e3a;
336
+    line-height: 30px;
337
+  }
338
+  &-context {
339
+    font-size: 13px;
340
+    color: #999;
341
+  }
342
+}
343
+
344
+.van-search {
345
+  padding: 0;
346
+}
347
+</style>

+ 346
- 0
src/view/addhouse/addsecondhand/index.vue Parādīt failu

@@ -0,0 +1,346 @@
1
+<template>
2
+  <div class="addsecondhand ">
3
+    <div class="detailcard van-hairline--bottom">
4
+      <div class="detailcard-title">
5
+        <span>房源信息</span>
6
+      </div>
7
+    </div>
8
+
9
+    <div>
10
+      <van-form @submit="onSubmit">
11
+        <van-field
12
+          v-model="state.username"
13
+          name="22222"
14
+          label="选择楼盘"
15
+          required
16
+          :rules="[{ required: true, message: '请选择楼盘' }]"
17
+        >
18
+          <template #input>
19
+            <van-search
20
+              v-model="state.username"
21
+              style="pdding:0"
22
+              placeholder="请输入"
23
+            />
24
+          </template>
25
+        </van-field>
26
+
27
+        <van-field
28
+          v-model="state.username"
29
+          name="title"
30
+          label="栋号"
31
+          placeholder="请输入"
32
+          required
33
+          :rules="[{ required: true, message: '请填写栋号' }]"
34
+        />
35
+        <van-field
36
+          v-model="state.username"
37
+          name="title"
38
+          label="单元"
39
+          placeholder="请输入"
40
+          required
41
+          :rules="[{ required: true, message: '请填写单元' }]"
42
+        />
43
+        <van-field
44
+          v-model="state.username"
45
+          name="title"
46
+          label="楼层"
47
+          placeholder="请输入"
48
+          required
49
+          :rules="[{ required: true, message: '请填写楼层' }]"
50
+        />
51
+        <van-field
52
+          v-model="state.username"
53
+          name="title"
54
+          label="总楼层"
55
+          placeholder="请输入"
56
+          required
57
+          :rules="[{ required: true, message: '请填写总楼层' }]"
58
+        />
59
+        <van-field
60
+          v-model="state.username"
61
+          name="title"
62
+          label="房号"
63
+          placeholder="请输入"
64
+          required
65
+          :rules="[{ required: true, message: '请填写房号' }]"
66
+        />
67
+        <van-field
68
+          v-model="state.username"
69
+          name="title"
70
+          label="标题"
71
+          placeholder="请输入"
72
+          required
73
+          :rules="[{ required: true, message: '请填写标题' }]"
74
+        />
75
+        <van-field
76
+          v-model="state.username"
77
+          name="aaaa"
78
+          label="面积"
79
+          placeholder="请输入"
80
+          required
81
+          type="number"
82
+          :rules="[{ required: true, message: '请填写面积' }]"
83
+        >
84
+          <template #extra>
85
+            ㎡
86
+          </template>
87
+        </van-field>
88
+        <van-field
89
+          v-model="state.username"
90
+          name="3333"
91
+          label="套内面积"
92
+          placeholder="请输入"
93
+        />
94
+        <van-field
95
+          v-model="state.username"
96
+          name="title"
97
+          label="总价"
98
+          placeholder="请输入"
99
+          type="number"
100
+          required
101
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
102
+        >
103
+          <template #extra>
104
+            万元
105
+          </template></van-field
106
+        >
107
+
108
+        <!-- <van-field
109
+          v-model="state.username"
110
+          name="title"
111
+          label="户型"
112
+          placeholder="请输入"
113
+          required
114
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
115
+        /> -->
116
+        <Housetypec
117
+          v-model="state.housetype"
118
+          name="housetype"
119
+          label="户型"
120
+          placeholder="请输入"
121
+          required
122
+        ></Housetypec>
123
+
124
+        <Pickerc
125
+          v-model="state.username"
126
+          name="title"
127
+          label="朝向"
128
+          required
129
+        ></Pickerc>
130
+
131
+        <Pickerc
132
+          v-model="state.username"
133
+          name="title"
134
+          label="房源来源"
135
+          required
136
+        ></Pickerc>
137
+
138
+        <Pickerc
139
+          v-model="state.username"
140
+          name="title"
141
+          label="装修"
142
+          required
143
+        ></Pickerc>
144
+
145
+        <Pickerc
146
+          v-model="state.username"
147
+          name="title"
148
+          label="建筑类型"
149
+        ></Pickerc>
150
+        <Ladderhousec
151
+          v-model="state.username"
152
+          name="title"
153
+          label="楼户比例"
154
+          placeholder="请输入"
155
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
156
+        >
157
+        </Ladderhousec>
158
+        <!-- <van-field
159
+          v-model="state.username"
160
+          name="title"
161
+          label="楼户比例"
162
+          placeholder="请输入"
163
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
164
+        /> -->
165
+
166
+        <Pickerc v-model="state.username" name="title" label="电梯"></Pickerc>
167
+
168
+        <Pickerc
169
+          v-model="state.username"
170
+          name="title"
171
+          label="交易属性"
172
+        ></Pickerc>
173
+
174
+        <Pickerc
175
+          v-model="state.username"
176
+          name="title"
177
+          label="房屋用途"
178
+        ></Pickerc>
179
+
180
+        <Pickerc
181
+          v-model="state.username"
182
+          name="title"
183
+          label="抵押信息"
184
+        ></Pickerc>
185
+
186
+        <Pickerc v-model="state.username" name="title" label="税费"></Pickerc>
187
+
188
+        <van-field
189
+          v-model="state.username"
190
+          name="title"
191
+          label="建成年代"
192
+          placeholder="请输入"
193
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
194
+        />
195
+
196
+        <van-field
197
+          v-model="state.username"
198
+          name="title"
199
+          label="业主姓名"
200
+          placeholder="请输入"
201
+          required
202
+          :rules="[{ required: true, message: '请填写业主姓名' }]"
203
+        />
204
+
205
+        <van-field v-model="state.checked" name="sex" label="业主姓别" required>
206
+          <template #input>
207
+            <van-radio-group v-model="state.checked" direction="horizontal">
208
+              <van-radio name="1">男</van-radio>
209
+              <van-radio name="0">女</van-radio>
210
+            </van-radio-group>
211
+          </template>
212
+        </van-field>
213
+
214
+        <van-field
215
+          v-model="state.username"
216
+          name="title"
217
+          label="业主电话1"
218
+          placeholder="请输入"
219
+          required
220
+          :rules="[{ required: true, message: '请填写业主电话' }]"
221
+        />
222
+        <van-field
223
+          v-model="state.username"
224
+          name="title"
225
+          label="业主电话1"
226
+          placeholder="请输入"
227
+       
228
+        />
229
+        <van-field
230
+          v-model="state.username"
231
+          name="title"
232
+          label="业主电话1"
233
+          placeholder="请输入"
234
+         
235
+        />
236
+
237
+        <div style="margin: 16px;">
238
+          <van-button round block type="primary" native-type="submit">
239
+            提交
240
+          </van-button>
241
+        </div>
242
+      </van-form>
243
+    </div>
244
+  </div>
245
+</template>
246
+
247
+<script>
248
+import { reactive } from "vue";
249
+
250
+import {
251
+  Icon,
252
+  Popover,
253
+  Row,
254
+  Col,
255
+  Button,
256
+  steps,
257
+  step,
258
+  //   Dialog,
259
+  Form,
260
+  Field,
261
+  Search,
262
+  RadioGroup,
263
+  Radio,
264
+} from "vant";
265
+
266
+import {
267
+  Pickerc,
268
+  Housetypec,
269
+  Ladderhousec,
270
+} from "../../../components/editCompents";
271
+
272
+// import { router } from "../../../router";
273
+
274
+export default {
275
+  name: "addsecondhand",
276
+  components: {
277
+    [Row.name]: Row,
278
+    [Col.name]: Col,
279
+    [Popover.name]: Popover,
280
+    [Icon.name]: Icon,
281
+    [Button.name]: Button,
282
+    [steps.name]: steps,
283
+    [step.name]: step,
284
+    [Form.name]: Form,
285
+    [Field.name]: Field,
286
+    [Search.name]: Search,
287
+    [RadioGroup.name]: RadioGroup,
288
+    [Radio.name]: Radio,
289
+    Housetypec: Housetypec,
290
+    Pickerc: Pickerc,
291
+    Ladderhousec: Ladderhousec,
292
+  },
293
+  data() {
294
+    return {};
295
+  },
296
+
297
+  setup() {
298
+    const state = reactive({
299
+      username: "",
300
+      password: "",
301
+      checked: "1",
302
+      housetype: "",
303
+    });
304
+
305
+    // 房源信息
306
+
307
+    const onSubmit = (values) => {
308
+      console.log("submit", values, state);
309
+    };
310
+
311
+    return {
312
+      state,
313
+      onSubmit,
314
+    };
315
+  },
316
+};
317
+</script>
318
+
319
+<!-- Add "scoped" attribute to limit CSS to this component only -->
320
+<style lang="less" scoped>
321
+.addsecondhand {
322
+  text-align: left;
323
+}
324
+.secondhand-main::-webkit-scrollbar {
325
+  display: none; /*隐藏滚动条*/
326
+}
327
+
328
+.detailcard {
329
+  min-height: 10px;
330
+
331
+  padding: 10px;
332
+  &-title {
333
+    font-size: 15px;
334
+    color: #d75e3a;
335
+    line-height: 30px;
336
+  }
337
+  &-context {
338
+    font-size: 13px;
339
+    color: #999;
340
+  }
341
+}
342
+
343
+.van-search {
344
+  padding: 0;
345
+}
346
+</style>

+ 48
- 0
src/view/addhouse/index.vue Parādīt failu

@@ -0,0 +1,48 @@
1
+<template>
2
+  <div class="addhouse">
3
+    <van-tabs v-model="active" background='#e6e4e4' color="#d75e3a" line-width='30%' title-active-color="#d75e3a">
4
+    <div class="addhouse-main">
5
+ <van-tab title="二手房"><Addsecondhand /></van-tab>
6
+      <van-tab title="租房"> <Addrenting /></van-tab>
7
+    </div>
8
+     
9
+    </van-tabs>
10
+
11
+    
12
+  </div>
13
+</template>
14
+
15
+<script>
16
+// import Vue from 'vue';
17
+import { Tab, Tabs } from 'vant';
18
+import  Addsecondhand  from './addsecondhand';
19
+import  Addrenting  from './addrenting';
20
+
21
+export default {
22
+  name: "addhouse",
23
+   components: {
24
+    [Tab.name]: Tab,
25
+    [Tabs.name]: Tabs,
26
+    Addsecondhand:Addsecondhand,
27
+    Addrenting:Addrenting,
28
+  },
29
+  data() {
30
+    return {
31
+      msg: "222",
32
+    };
33
+  },
34
+};
35
+</script>
36
+
37
+<!-- Add "scoped" attribute to limit CSS to this component only -->
38
+<style scoped>
39
+
40
+.addhouse-main {
41
+  width: 100%;
42
+  height: calc(100vh - 94px);
43
+  overflow: hidden;
44
+  overflow-y: auto;
45
+}
46
+.addhouse-main::-webkit-scrollbar {
47
+  display: none; /*隐藏滚动条*/
48
+}</style>

+ 22
- 13
src/view/home/index.vue Parādīt failu

@@ -1,29 +1,38 @@
1 1
 <template>
2 2
   <div class="home">
3
-    <van-tabs v-model="active" background='#e6e4e4' color="#d75e3a" line-width='30%' title-active-color="#d75e3a">
4
-      <van-tab title="二手房"><Secondhand/></van-tab>
5
-      <van-tab title="租房"> 34</van-tab>
3
+    <van-tabs
4
+      v-model:active="active"
5
+      background="#e6e4e4"
6
+      color="#d75e3a"
7
+      line-width="30%"
8
+      title-active-color="#d75e3a"
9
+    >
10
+      <van-tab title="二手房"><Secondhand /></van-tab>
11
+      <van-tab title="租房"> <Renting /></van-tab>
6 12
     </van-tabs>
7
-
8
-    
9 13
   </div>
10 14
 </template>
11 15
 
12 16
 <script>
13
-// import Vue from 'vue';
14
-import { Tab, Tabs } from 'vant';
15
-import  secondhand  from '../secondhand';
17
+import { ref } from "vue";
18
+import { Tab, Tabs } from "vant";
19
+import secondhand from "../secondhand";
20
+import renting from "../renting";
21
+
16 22
 export default {
17 23
   name: "home",
18
-   components: {
24
+  components: {
19 25
     [Tab.name]: Tab,
20 26
     [Tabs.name]: Tabs,
21
-    Secondhand:secondhand,
27
+    Secondhand: secondhand,
28
+    Renting: renting,
22 29
   },
23 30
   data() {
24
-    return {
25
-      msg: "222",
26
-    };
31
+    return {};
32
+  },
33
+  setup() {
34
+    const active = ref(1);
35
+    return { active };
27 36
   },
28 37
 };
29 38
 </script>

+ 44
- 23
src/view/login/index.vue Parādīt failu

@@ -1,14 +1,14 @@
1 1
 <template>
2 2
   <div class="login">
3 3
     <p>经纪人平台</p>
4
-    <div class="login-from"> 
4
+    <div class="login-from">
5 5
       <van-form @submit="onSubmit">
6 6
         <van-field
7
-          v-model="username"
8
-          name="username"
7
+          v-model="loginName"
8
+          name="loginName"
9 9
           label=" "
10 10
           :left-icon="usericon"
11
-          label-width='20'
11
+          label-width="20"
12 12
           placeholder="请输入账号"
13 13
         />
14 14
         <van-field
@@ -16,11 +16,11 @@
16 16
           type="password"
17 17
           name="password"
18 18
           label=" "
19
-          label-width='20'
19
+          label-width="20"
20 20
           :left-icon="passwordicon"
21 21
           placeholder="请输入密码"
22 22
         />
23
-        <van-field name="remember" :border="false">
23
+        <van-field :border="false">
24 24
           <template #input>
25 25
             <van-checkbox shape="square" v-model="remember"
26 26
               >记住密码</van-checkbox
@@ -43,11 +43,13 @@
43 43
 </template>
44 44
 
45 45
 <script>
46
-// import Vue from 'vue';
46
+import { reactive } from "vue";
47 47
 import { Form, Button, Field, checkbox } from "vant";
48
+import { useRouter } from "vue-router";
49
+
48 50
 import usericon from "./../../assets/user.png";
49 51
 import passwordicon from "./../../assets/password.png";
50
-
52
+import request from "../../utils/request";
51 53
 export default {
52 54
   name: "login",
53 55
   components: {
@@ -60,17 +62,37 @@ export default {
60 62
     return {
61 63
       usericon,
62 64
       passwordicon,
63
-      username: "",
64
-      password: "",
65
+      loginName: null,
66
+      password: null,
65 67
       remember: true,
66 68
     };
67 69
   },
68
-  methods: {
69
-    onSubmit(values) {
70
-      console.log("submit", values);
70
+  methods: {},
71
+
72
+  setup() {
73
+    const state = reactive({});
74
+    const router = useRouter();
75
+    const onSubmit = (values) => {
76
+      console.log(values.loginName && values.password, "submit", values);
77
+      if (values.loginName && values.password) {
78
+        request({
79
+          url: "/login",
80
+          params: values,
81
+        }).then((res) => {
82
+          console.log(res, "res");
71 83
 
72
-      this.$router.push('home')
73
-    },
84
+          router.push("/home");
85
+        });
86
+
87
+      
88
+      }
89
+    
90
+    };
91
+
92
+    return {
93
+      state,
94
+      onSubmit,
95
+    };
74 96
   },
75 97
 };
76 98
 </script>
@@ -80,15 +102,14 @@ export default {
80 102
 .login {
81 103
   width: 100%;
82 104
   padding-top: 15vh;
83
-  &-from{
105
+  &-from {
84 106
     width: 80%;
85
-margin: auto;
86
-     .loginbutton {
87
-    background: #d7693a;
88
-    color: #fff;
89
-    letter-spacing: 6px;
90
-  }
107
+    margin: auto;
108
+    .loginbutton {
109
+      background: #d7693a;
110
+      color: #fff;
111
+      letter-spacing: 6px;
112
+    }
91 113
   }
92
- 
93 114
 }
94 115
 </style>

+ 250
- 0
src/view/renting/components/edithouse/index.vue Parādīt failu

@@ -0,0 +1,250 @@
1
+<template>
2
+  <div class="secondhanddetail ">
3
+    <div class="detailcard van-hairline--bottom">
4
+      <div class="detailcard-title">
5
+        <span>基础信息</span>
6
+      </div>
7
+      <Contextc :options="baseInformationOptions"></Contextc>
8
+    </div>
9
+
10
+    <div>
11
+      <van-form @submit="onSubmit">
12
+        <van-field
13
+          v-model="state.username"
14
+          name="title"
15
+          label="标题"
16
+          placeholder="请输入"
17
+          required
18
+          :rules="[{ required: true, message: '请填写标题' }]"
19
+        />
20
+        <van-field
21
+          v-model="state.username"
22
+          name="aaaa"
23
+          label="面积"
24
+          placeholder="请输入"
25
+          required
26
+          type="number"
27
+          :rules="[{ required: true, message: '请填写面积' }]"
28
+        >
29
+          <template #extra>
30
+            ㎡
31
+          </template>
32
+        </van-field>
33
+        <van-field
34
+          v-model="state.username"
35
+          name="3333"
36
+          label="套内面积"
37
+          placeholder="请输入"
38
+        />
39
+        <van-field
40
+          v-model="state.username"
41
+          name="title"
42
+          label="户型"
43
+          placeholder="请输入"
44
+          required
45
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
46
+        />
47
+
48
+        <van-field
49
+          v-model="state.username"
50
+          name="title"
51
+          label="楼户比例"
52
+          placeholder="请输入"
53
+          required
54
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
55
+        />
56
+        <Pickerc
57
+          v-model="state.username"
58
+          name="title"
59
+          label="装修"
60
+          required
61
+        ></Pickerc>
62
+        <van-field
63
+          v-model="state.username"
64
+          name="title"
65
+          label="总价"
66
+          placeholder="请输入"
67
+          type="number"
68
+          required
69
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
70
+        >
71
+          <template #extra>
72
+            万元
73
+          </template></van-field
74
+        >
75
+        <Pickerc
76
+          v-model="state.username"
77
+          name="title"
78
+          label="朝向"
79
+          required
80
+        ></Pickerc>
81
+        <Pickerc
82
+          v-model="state.username"
83
+          name="title"
84
+          label="房源来源"
85
+          required
86
+        ></Pickerc>
87
+
88
+        <Pickerc
89
+          v-model="state.username"
90
+          name="title"
91
+          label="建筑类型"
92
+        ></Pickerc>
93
+
94
+        <Pickerc v-model="state.username" name="title" label="电梯"></Pickerc>
95
+
96
+        <Pickerc
97
+          v-model="state.username"
98
+          name="title"
99
+          label="交易属性"
100
+        ></Pickerc>
101
+
102
+        <Pickerc
103
+          v-model="state.username"
104
+          name="title"
105
+          label="房屋用途"
106
+        ></Pickerc>
107
+        <van-field
108
+          v-model="state.username"
109
+          name="title"
110
+          label="建成年代"
111
+          placeholder="请输入"
112
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
113
+        />
114
+        <Pickerc
115
+          v-model="state.username"
116
+          name="title"
117
+          label="抵押信息"
118
+        ></Pickerc>
119
+
120
+        <Pickerc v-model="state.username" name="title" label="税费"></Pickerc>
121
+
122
+        <div style="margin: 16px;">
123
+          <van-button round block type="primary" native-type="submit">
124
+            提交
125
+          </van-button>
126
+        </div>
127
+      </van-form>
128
+    </div>
129
+  </div>
130
+</template>
131
+
132
+<script>
133
+import { reactive } from "vue";
134
+
135
+import {
136
+  Icon,
137
+  Popover,
138
+  Row,
139
+  Col,
140
+  Button,
141
+  steps,
142
+  step,
143
+  //   Dialog,
144
+  Form,
145
+  Field,
146
+} from "vant";
147
+import Contextc from "../../../components/contextC";
148
+import { Pickerc } from "../../../components/editCompents";
149
+
150
+// import { router } from "../../../router";
151
+
152
+export default {
153
+  name: "secondhanddetail",
154
+  components: {
155
+    [Row.name]: Row,
156
+    [Col.name]: Col,
157
+    [Popover.name]: Popover,
158
+    [Icon.name]: Icon,
159
+    [Button.name]: Button,
160
+    [steps.name]: steps,
161
+    [step.name]: step,
162
+    [Form.name]: Form,
163
+    [Field.name]: Field,
164
+    Pickerc: Pickerc,
165
+    Contextc: Contextc,
166
+  },
167
+  data() {
168
+    return {};
169
+  },
170
+
171
+  setup() {
172
+    const state = reactive({
173
+      username: "",
174
+      password: "",
175
+    });
176
+
177
+    // 房源信息
178
+    const baseInformationOptions = [
179
+      {
180
+        name: "房源编号",
181
+        value: "123",
182
+      },
183
+      {
184
+        name: "楼盘名称",
185
+        value: "123",
186
+      },
187
+      {
188
+        name: "楼盘地址",
189
+        value: "123",
190
+        span: 24,
191
+      },
192
+      {
193
+        name: "栋号",
194
+        value: "123",
195
+        required: true,
196
+      },
197
+      {
198
+        name: "单元",
199
+        value: "123",
200
+        required: true,
201
+      },
202
+      {
203
+        name: "楼层",
204
+        value: "123",
205
+        required: true,
206
+      },
207
+      {
208
+        name: "房号",
209
+        value: "123",
210
+        required: true,
211
+      },
212
+    ];
213
+
214
+    const onSubmit = (values) => {
215
+      console.log("submit", values);
216
+    };
217
+
218
+    return {
219
+      state,
220
+      onSubmit,
221
+      baseInformationOptions,
222
+    };
223
+  },
224
+};
225
+</script>
226
+
227
+<!-- Add "scoped" attribute to limit CSS to this component only -->
228
+<style lang="less" scoped>
229
+.secondhanddetail {
230
+  text-align: left;
231
+}
232
+.secondhand-main::-webkit-scrollbar {
233
+  display: none; /*隐藏滚动条*/
234
+}
235
+
236
+.detailcard {
237
+  min-height: 10px;
238
+  border-top: 1px solid #5b6b73;
239
+  padding: 10px;
240
+  &-title {
241
+    font-size: 15px;
242
+    color: #d75e3a;
243
+    line-height: 30px;
244
+  }
245
+  &-context {
246
+    font-size: 13px;
247
+    color: #999;
248
+  }
249
+}
250
+</style>

+ 114
- 0
src/view/renting/components/rentingcard/index.vue Parādīt failu

@@ -0,0 +1,114 @@
1
+<template>
2
+  <div class="secondhandcard">
3
+    <div class="card" >
4
+      <div class="card-left">
5
+        <van-image
6
+          width="120"
7
+          height="96"
8
+          src="https://img.yzcdn.cn/vant/cat.jpeg"
9
+        />
10
+      </div>
11
+      <div class="card-right">
12
+        <p class="card-right-1">
13
+          <span style="font-size:16px;color:#101010;font-weight:500"
14
+            >楼盘名称</span
15
+          ><span style="font-size:12px;color:#AEAEAE;">在租</span>
16
+        </p>
17
+        <p class="card-right-2">三室一厅 107.1㎡ 6/6层 南北</p>
18
+        <p class="card-right-2">录入时间:</p>
19
+        <p class="card-right-2">录入人</p>
20
+        <!-- <p class="card-right-2">维护人</p> -->
21
+        <div class="card-right-end" style="margin-top:6px">
22
+          <van-tag class="card-right-end-tag" type="primary">标签</van-tag>
23
+          <van-tag class="card-right-end-tag" type="primary">标签</van-tag>
24
+          <van-tag class="card-right-end-tag" type="primary">标签</van-tag>
25
+        </div>
26
+
27
+        <div class="card-right-price">
28
+          <p>1233万元</p>
29
+          <p>整租</p>
30
+        </div>
31
+      </div>
32
+    </div>
33
+  </div>
34
+</template>
35
+
36
+<script>
37
+import { cell, Image as VanImage, Tag } from "vant";
38
+
39
+export default {
40
+  name: "secondhandcard",
41
+  components: {
42
+    [cell.name]: cell,
43
+    [VanImage.name]: VanImage,
44
+    [Tag.name]: Tag,
45
+  },
46
+  props: {
47
+    datas: {},
48
+  },
49
+  data() {
50
+    return {};
51
+  },
52
+  mounted() {},
53
+
54
+  setup() {
55
+
56
+
57
+   const toDetail = ()=>{
58
+console.log('222')
59
+   }
60
+
61
+   return {
62
+     toDetail,
63
+   }
64
+  },
65
+};
66
+</script>
67
+
68
+<!-- Add "scoped" attribute to limit CSS to this component only -->
69
+<style lang="less" scoped>
70
+.card {
71
+  //   height: 200px;
72
+
73
+border-bottom:1px solid #DCDCDC;
74
+
75
+  display: flex;
76
+  padding: 10px;
77
+  text-align: left;
78
+  &-left {
79
+    width: 130px;
80
+    padding: 5px;
81
+  }
82
+  &-right {
83
+    flex: 1;
84
+    position: relative;
85
+    &-1 {
86
+      margin: 0;
87
+      display: flex;
88
+      justify-content: space-between;
89
+
90
+      align-items: flex-end;
91
+    }
92
+    &-2 {
93
+      margin: 0;
94
+      font-size: 12px;
95
+      color: #aeaeae;
96
+      margin-top: 2px;
97
+    }
98
+    &-end {
99
+      &-tag {
100
+        margin-right: 3px;
101
+      }
102
+    }
103
+    &-price{
104
+        position: absolute;
105
+        bottom: 0;
106
+        right: 0;
107
+        color: #ff9800;
108
+        p{
109
+            margin: 0;
110
+        }
111
+    }
112
+  }
113
+}
114
+</style>

+ 233
- 0
src/view/renting/components/rentingmorescreen/index.vue Parādīt failu

@@ -0,0 +1,233 @@
1
+<template>
2
+  <div class="secondhandmorescreen">
3
+    <van-search
4
+      v-model="serchValue"
5
+      placeholder="请输入搜索关键词"
6
+      :actions="searchActions"
7
+      @select="onSearchSelect"
8
+    >
9
+      <template #label>
10
+        <van-popover
11
+          v-model:show="showPopover"
12
+          :actions="searchActions"
13
+          @select="onSearchSelect"
14
+        >
15
+          <template #reference>
16
+            <span style="width: 65px;">{{ searchType }}</span>
17
+          </template>
18
+        </van-popover>
19
+      </template>
20
+      <template #left>
21
+        <van-icon name="revoke" style="margin-right: 20px;" />
22
+      </template>
23
+    </van-search>
24
+
25
+    <div>
26
+      <van-form @submit="onSubmit">
27
+        <van-cell-group title="区位">
28
+          <AreaQuery name="area.b" label=""></AreaQuery>
29
+        </van-cell-group>
30
+        <van-cell-group title="房间要求">
31
+          <van-field name="number">
32
+            <template #input>
33
+              <DemandQuery></DemandQuery>
34
+            </template>
35
+          </van-field>
36
+        </van-cell-group>
37
+        <van-cell-group title="户型">
38
+          <CheeckButtomQuery
39
+            v-model="state.housetype"
40
+            :options="housetypeoptions"
41
+          ></CheeckButtomQuery>
42
+        </van-cell-group>
43
+        <van-cell-group title="装修">
44
+          <CheeckButtomQuery
45
+            v-model="state.renovation"
46
+            :options="housetypeoptions"
47
+          ></CheeckButtomQuery>
48
+        </van-cell-group>
49
+        <van-cell-group title="房源状态">
50
+          <CheeckButtomQuery
51
+            v-model="state.housetype"
52
+            :options="housetypeoptions"
53
+          ></CheeckButtomQuery>
54
+        </van-cell-group>
55
+        <van-cell-group title="实勘状态">
56
+          <CheeckButtomQuery
57
+            v-model="state.housetype"
58
+            :options="housetypeoptions"
59
+          ></CheeckButtomQuery>
60
+        </van-cell-group>
61
+        <van-cell-group title="房间位置">
62
+          <PositionQuery></PositionQuery>
63
+        </van-cell-group>
64
+
65
+        <div style="margin-top: 16px;">
66
+          <van-action-bar style="position: inherit;">
67
+            <van-action-bar-icon
68
+              icon="replay"
69
+              text="重置"
70
+              @click="onClickIcon"
71
+            />
72
+
73
+            <van-action-bar-button
74
+              type="danger"
75
+              text="确定"
76
+              native-type="submit"
77
+            />
78
+          </van-action-bar>
79
+          <!-- <van-row justify="center">
80
+            <van-col span="6">
81
+              <van-button block icon="replay" type="primary"
82
+                >重置</van-button
83
+              ></van-col
84
+            >
85
+            <van-col span="18">
86
+              <van-button round block type="primary" native-type="submit"
87
+                >确定</van-button
88
+              ></van-col
89
+            >
90
+          </van-row> -->
91
+        </div>
92
+      </van-form>
93
+    </div>
94
+
95
+
96
+ 
97
+  </div>
98
+</template>
99
+
100
+<script>
101
+import { reactive, ref } from "vue";
102
+import {
103
+  Col,
104
+  Row,
105
+  Search,
106
+  Cell,
107
+  CellGroup,
108
+  Field,
109
+  Popup,
110
+  Cascader,
111
+  Button,
112
+  Form,
113
+  ActionBar,
114
+  ActionBarIcon,
115
+  ActionBarButton,
116
+  Icon,
117
+  Popover,
118
+} from "vant";
119
+import {
120
+  AreaQuery,
121
+  DemandQuery,
122
+  CheeckButtomQuery,
123
+  PositionQuery,
124
+} from "../../../../components/queryCompents";
125
+
126
+export default {
127
+  name: "secondhandmorescreen",
128
+  components: {
129
+    [Col.name]: Col,
130
+    [Row.name]: Row,
131
+    [Search.name]: Search,
132
+    [Cell.name]: Cell,
133
+    [CellGroup.name]: CellGroup,
134
+    [Field.name]: Field,
135
+    [Popup.name]: Popup,
136
+    [Cascader.name]: Cascader,
137
+    [Button.name]: Button,
138
+    [Form.name]: Form,
139
+    [ActionBar.name]: ActionBar,
140
+    [ActionBarIcon.name]: ActionBarIcon,
141
+    [ActionBarButton.name]: ActionBarButton,
142
+    [Icon.name]: Icon,
143
+    [Popover.name]: Popover,
144
+
145
+    AreaQuery,
146
+    DemandQuery,
147
+    CheeckButtomQuery,
148
+    PositionQuery,
149
+  },
150
+  props: {
151
+    // options: [],
152
+  },
153
+  data() {
154
+    return {};
155
+  },
156
+
157
+  setup() {
158
+    const state = reactive({
159
+      housetype: [],
160
+      renovation: [],
161
+    });
162
+    const serchValue = ref("");
163
+    const searchType = ref("楼盘");
164
+    const showPopover = ref(false);
165
+     const phoneShow = ref(false);
166
+
167
+    // 通过 actions 属性来定义菜单选项
168
+    const searchActions = [
169
+      { text: "楼盘", value: "1" },
170
+      { text: "房源", value: "2" },
171
+      { text: "业主电话", value: "3" },
172
+    ];
173
+    const onSearchSelect = (action) => {
174
+      console.log("housetypeChange", action);
175
+
176
+      searchType.value = action.text;
177
+    };
178
+
179
+    const onHousetypeChange = (values) => {
180
+      console.log("housetypeChange", values);
181
+
182
+      state.housetype = values;
183
+    };
184
+    const onSubmit = (values) => {
185
+      console.log(state, "submit", values);
186
+    };
187
+
188
+    const housetypeoptions = [
189
+      {
190
+        title: "1室",
191
+        value: "a",
192
+      },
193
+      {
194
+        title: "2室",
195
+        value: "b",
196
+      },
197
+      {
198
+        title: "3室",
199
+        value: "c",
200
+      },
201
+      {
202
+        title: "3室及以上",
203
+        value: "d",
204
+      },
205
+      {
206
+        title: "全部",
207
+        value: "all",
208
+      },
209
+    ];
210
+
211
+    return {
212
+      phoneShow,
213
+      serchValue,
214
+      searchType,
215
+      state,
216
+      onSubmit,
217
+      housetypeoptions,
218
+      onHousetypeChange,
219
+      showPopover,
220
+      searchActions,
221
+      onSearchSelect,
222
+    };
223
+  },
224
+};
225
+</script>
226
+
227
+<!-- Add "scoped" attribute to limit CSS to this component only -->
228
+<style lang="less" scoped>
229
+.secondhandmorescreen {
230
+  text-align: left;
231
+  background-color: #f4f4f4;
232
+}
233
+</style>

+ 136
- 0
src/view/renting/components/rentingscreen.vue Parādīt failu

@@ -0,0 +1,136 @@
1
+<template>
2
+  <div class="secondhandscreen">
3
+    <van-row style="box-shadow: 0 2px 12px rgba(100,101,102,.12);">
4
+      <van-col span="18">
5
+        <van-dropdown-menu>
6
+          <van-dropdown-item
7
+            v-for="item in options"
8
+            :key="item.id"
9
+            :title="item.title"
10
+            v-model="item.value"
11
+            :options="item.option"
12
+          />
13
+        </van-dropdown-menu>
14
+      </van-col>
15
+      <van-col span="6"
16
+        ><van-cell
17
+          class="more"
18
+          title="更多"
19
+          title-class="more-title"
20
+          @click="onMore"
21
+      /></van-col>
22
+    </van-row>
23
+
24
+    
25
+  </div>
26
+</template>
27
+
28
+<script>
29
+
30
+
31
+import { DropdownMenu, DropdownItem, row, col, cell } from "vant";
32
+
33
+export default {
34
+  name: "secondhandscreen",
35
+  components: {
36
+    [cell.name]: cell,
37
+    // [popup.name]: popup,
38
+    [row.name]: row,
39
+    [col.name]: col,
40
+    [DropdownMenu.name]: DropdownMenu,
41
+    [DropdownItem.name]: DropdownItem,
42
+  },
43
+  props: {
44
+    options: [],
45
+  },
46
+  data() {
47
+    return {
48
+      overlayStyle: {
49
+        top: "88px",
50
+        position: "absolute",
51
+      },
52
+      popupStyle: {
53
+        top: "88px",
54
+        minHeight: "200px",
55
+      },
56
+      value: "0",
57
+      //   options: [
58
+      //     {
59
+      //       id: 0,
60
+      //       value: 0,
61
+      //       title: "区域",
62
+      //       option: [
63
+      //         { text: "全部商品", value: 0 },
64
+      //         { text: "新款商品", value: 1 },
65
+      //         { text: "活动商品", value: 2 },
66
+      //       ],
67
+      //     },
68
+      //     {
69
+      //       id: 2,
70
+      //       value: "a",
71
+      //       title: "价格",
72
+      //       option: [
73
+      //         { text: "默认排序", value: "a" },
74
+      //         { text: "好评排序", value: "b" },
75
+      //         { text: "销量排序", value: "c" },
76
+      //       ],
77
+      //     },
78
+      //     {
79
+      //       id: 3,
80
+      //       value: "a",
81
+      //       title: "户型",
82
+      //       mode:'multiple',
83
+      //       option: [
84
+      //         { text: "默认排序", value: "a" },
85
+      //         { text: "好评排序", value: "b" },
86
+      //         { text: "销量排序", value: "c" },
87
+      //       ],
88
+      //     },
89
+      //   ],
90
+    };
91
+  },
92
+  mounted() {},
93
+
94
+  setup(props,cex) {
95
+
96
+    const onMore=()=>{
97
+      console.log(props,cex,'3332')
98
+      cex.emit('onShowMore',333)
99
+      
100
+    }
101
+
102
+
103
+    return {
104
+    
105
+      onMore,
106
+      // options,
107
+      // onConfirm,
108
+      props
109
+    };
110
+  },
111
+};
112
+</script>
113
+
114
+<!-- Add "scoped" attribute to limit CSS to this component only -->
115
+<style lang="less" scoped>
116
+.more {
117
+  height: 48px;
118
+  display: flex;
119
+  /* padding: 0; */
120
+  flex: 1;
121
+  align-items: center;
122
+  justify-content: center;
123
+  min-width: 0;
124
+  cursor: pointer;
125
+  color: #323233;
126
+  &-title {
127
+    position: relative;
128
+    box-sizing: border-box;
129
+    max-width: 100%;
130
+    padding: 0 8px;
131
+    color: #323233;
132
+    font-size: 15px;
133
+    line-height: 22px;
134
+  }
135
+}
136
+</style>

+ 499
- 0
src/view/renting/detail/index.vue Parādīt failu

@@ -0,0 +1,499 @@
1
+<template>
2
+  <div class="secondhanddetail">
3
+    <div>
4
+      <Swiper></Swiper>
5
+    </div>
6
+
7
+    <div class="title">
8
+      <p>TITLE</p>
9
+    </div>
10
+
11
+    <div class="detailcard">
12
+      <div class="detailcard-title">
13
+        <span>房源信息</span>
14
+
15
+        <div style="float:right">
16
+          <van-popover
17
+            v-model:show="showPopover"
18
+            :actions="actions"
19
+            @select="onSelect"
20
+            placement="bottom-end"
21
+          >
22
+            <template #reference>
23
+              <van-icon name="chat-o" />
24
+            </template>
25
+          </van-popover>
26
+        </div>
27
+      </div>
28
+      <Contextc :options="housingInformationOptions"></Contextc>
29
+    </div>
30
+    <div class="detailcard">
31
+      <div class="detailcard-title">
32
+        <span>基础信息</span>
33
+      </div>
34
+      <Contextc :options="baseInformationOptions"></Contextc>
35
+    </div>
36
+    <!-- <div class="detailcard">
37
+      <div class="detailcard-title">
38
+        <span>物业信息</span>
39
+      </div>
40
+      <Contextc :options="propertyInformationOptions"></Contextc>
41
+    </div> -->
42
+    <div class="detailcard">
43
+      <div class="detailcard-title">
44
+        <span>角色人</span>
45
+      </div>
46
+      <Contextc :options="roleInformationOptions"></Contextc>
47
+    </div>
48
+    <!-- <div class="detailcard">
49
+      <div class="detailcard-title">
50
+        <span>委托书</span>
51
+      </div>
52
+      <Contextc :options="entrustOptions" nodata=""></Contextc>
53
+    </div> -->
54
+    <div class="detailcard">
55
+      <div class="detailcard-title">
56
+        <span>钥匙</span>
57
+      </div>
58
+      <Contextc :options="keyOptions" nodata=""></Contextc>
59
+    </div>
60
+
61
+    <div class="detailcard">
62
+      <div class="detailcard-title">
63
+        <van-row>
64
+          <van-col span="12"> <span>跟进记录</span></van-col>
65
+          <van-col span="12" style="line-height:26px;display: flex;">
66
+            <van-button type="default" color="#d75e3a" size="mini"
67
+              >添加跟进</van-button
68
+            ></van-col
69
+          >
70
+        </van-row>
71
+      </div>
72
+      <div>
73
+        <Stepc></Stepc>
74
+      </div>
75
+    </div>
76
+
77
+    <div class="detailcard">
78
+      <div class="detailcard-title">
79
+        <van-row>
80
+          <van-col span="12"> <span>空看记录</span></van-col>
81
+          <van-col span="12" style="line-height:26px;display: flex;">
82
+            <van-button type="default" color="#d75e3a" size="mini"
83
+              >添加空看</van-button
84
+            ></van-col
85
+          >
86
+        </van-row>
87
+      </div>
88
+      <div>
89
+        <Stepc></Stepc>
90
+      </div>
91
+    </div>
92
+
93
+    <van-share-sheet
94
+      v-model:show="showShare"
95
+      title="立即分享给好友"
96
+      :options="shareOptions"
97
+      @select="onShareSelect"
98
+    />
99
+
100
+    <van-dialog v-model:show="phoneShow" title="新增电话" show-cancel-button>
101
+     <van-field v-model="phone" type="tel" label="业主电话" placeholder="请输入电话" />
102
+    </van-dialog>
103
+  </div>
104
+</template>
105
+
106
+<script>
107
+import { ref } from "vue";
108
+import { Swiper } from "../../../components/detailCompents";
109
+import {
110
+  Icon,
111
+  Popover,
112
+  Row,
113
+  Col,
114
+  Button,
115
+  steps,
116
+  step,
117
+  Dialog,
118
+  ShareSheet,
119
+  Toast,
120
+  Field,
121
+} from "vant";
122
+import Contextc from "../../../components/contextC";
123
+import Stepc from "../../../components/stepC";
124
+import { router } from "../../../router";
125
+
126
+export default {
127
+  name: "secondhanddetail",
128
+  components: {
129
+    [Row.name]: Row,
130
+    [Col.name]: Col,
131
+    [Popover.name]: Popover,
132
+    [Icon.name]: Icon,
133
+    [Button.name]: Button,
134
+    [steps.name]: steps,
135
+    [step.name]: step,
136
+    [ShareSheet.name]: ShareSheet,
137
+     [Field.name]: Field,
138
+     [Dialog.Component.name]: Dialog.Component,
139
+
140
+    Stepc: Stepc,
141
+    Contextc: Contextc,
142
+    Swiper: Swiper,
143
+  },
144
+  data() {
145
+    return {};
146
+  },
147
+
148
+  setup() {
149
+    const showPopover = ref(false);
150
+    const showShare = ref(false);
151
+    const phoneShow = ref(false);
152
+     const phone = ref('');
153
+
154
+    // 通过 actions 属性来定义菜单选项
155
+    const actions = [
156
+      // { text: "设置房源保护", value: "1" },
157
+      { text: "新增业主电话", value: "2" },
158
+      { text: "下架房源", value: "3" },
159
+      { text: "修改房源", value: "4" },
160
+      // { text: "认领房源", value: "5" },
161
+      { text: "房源实勘", value: "6" },
162
+    ];
163
+    // 设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。
164
+    const onSelect = (action) => {
165
+      console.log(action);
166
+      if (action.value == 1) {
167
+        // 设置房源保护
168
+        Dialog.confirm({
169
+          title: "提示",
170
+          message:
171
+            "设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。",
172
+          theme: "round-button",
173
+        })
174
+          .then(() => {
175
+            // on close
176
+          })
177
+          .catch(() => {
178
+            // on cancel
179
+          });
180
+      } else if (action.value == 2) {
181
+        // 新增业主电话
182
+        phoneShow.value = true;
183
+      } else if (action.value == 3) {
184
+        // 下架房源
185
+
186
+        router.push("/closehouse");
187
+      } else if (action.value == 4) {
188
+        // 修改房源
189
+        router.push("/editrenting");
190
+      } else if (action.value == 5) {
191
+        // 分享房源
192
+        showShare.value = true;
193
+      } else if (action.value == 6) {
194
+        // 房源实勘
195
+        router.push("/resc");
196
+      }
197
+    };
198
+    const onLookClick = () => {
199
+      console.log("onLookClick");
200
+    };
201
+
202
+    // 房源信息
203
+    const housingInformationOptions = [
204
+      {
205
+        name: "所属楼盘",
206
+        value: "123",
207
+        span: 24,
208
+      },
209
+      {
210
+        name: "房源id",
211
+        value: "123",
212
+      },
213
+      {
214
+        name: "租金",
215
+        value: "123",
216
+      },
217
+      {
218
+        name: "装修",
219
+        value: "123",
220
+      },
221
+      {
222
+        name: "出租方式",
223
+        value: "123",
224
+      },
225
+      {
226
+        name: "居室",
227
+        value: "123",
228
+      },
229
+      {
230
+        name: "付款方式",
231
+        value: "123",
232
+      },
233
+      {
234
+        name: "楼房号",
235
+        value: "123",
236
+      },
237
+      {
238
+        name: "单元",
239
+        value: "123",
240
+      },
241
+      {
242
+        name: "业主姓名",
243
+        value: "123",
244
+      },
245
+      {
246
+        name: "楼栋",
247
+        value: "123",
248
+      },
249
+      {
250
+        name: "业主电话",
251
+        value: "123",
252
+      },
253
+      {
254
+        name: "查看敏感信息",
255
+        value: "123",
256
+        type: "BUTTOM",
257
+        click: () => onLookClick(),
258
+      },
259
+    ];
260
+    // 基本信息
261
+    const baseInformationOptions = [
262
+      {
263
+        name: "楼层",
264
+        value: "123",
265
+      },
266
+      {
267
+        name: "朝向",
268
+        value: "123",
269
+      },
270
+      {
271
+        name: "居住现状",
272
+        value: "123",
273
+      },
274
+      {
275
+        name: "卧室",
276
+        value: "123",
277
+      },
278
+      {
279
+        name: "性别限制",
280
+        value: "123",
281
+      },
282
+      {
283
+        name: "建筑类型",
284
+        value: "123",
285
+      },
286
+      {
287
+        name: "抵押信息",
288
+        value: "123",
289
+      },
290
+      {
291
+        name: "建成年代",
292
+        value: "123",
293
+      },
294
+      {
295
+        name: "物业费",
296
+        value: "123",
297
+      },
298
+      {
299
+        name: "配备电梯",
300
+        value: "123",
301
+      },
302
+        {
303
+        name: "车位",
304
+        value: "123",
305
+      },
306
+        {
307
+        name: "地下室",
308
+        value: "123",
309
+      },
310
+        {
311
+        name: "管道燃气",
312
+        value: "123",
313
+      },
314
+        {
315
+        name: "家电",
316
+        value: "123",
317
+      },
318
+        {
319
+        name: "隔断",
320
+        value: "123",
321
+      },
322
+        {
323
+        name: "房源来源",
324
+        value: "123",
325
+      },
326
+        {
327
+        name: "优势推荐",
328
+        value: "123",
329
+      },
330
+    ];
331
+    // 物业信息
332
+    const propertyInformationOptions = [
333
+      {
334
+        name: "物业费",
335
+        value: "123",
336
+      },
337
+      {
338
+        name: "建筑年代",
339
+        value: "123",
340
+      },
341
+      {
342
+        name: "均价",
343
+        value: "123",
344
+      },
345
+      {
346
+        name: "开发商",
347
+        value: "123",
348
+      },
349
+      {
350
+        name: "物业公司",
351
+        value: "123",
352
+      },
353
+    ];
354
+    // 角色人
355
+    const roleInformationOptions = [
356
+      {
357
+        name: "首次录入人",
358
+        value: "123",
359
+      },
360
+      {
361
+        name: "时间",
362
+        value: "123",
363
+      },
364
+      {
365
+        name: "录入人",
366
+        value: "123",
367
+      },
368
+      {
369
+        name: "时间",
370
+        value: "123",
371
+      },
372
+      {
373
+        name: "维护人",
374
+        value: "123",
375
+      },
376
+      {
377
+        name: "查看电话",
378
+        value: "123",
379
+        type: "BUTTOM",
380
+        onClick: () => {},
381
+      },
382
+      {
383
+        name: "实勘人",
384
+        value: "123",
385
+      },
386
+      {
387
+        name: "时间",
388
+        value: "123",
389
+      },
390
+      {
391
+        name: "钥匙人",
392
+        value: "123",
393
+        span: 24,
394
+      },
395
+
396
+      {
397
+        name: "最后修改人",
398
+        value: "123",
399
+      },
400
+      {
401
+        name: "时间",
402
+        value: "123",
403
+      },
404
+    ];
405
+
406
+    // 委托书
407
+    const entrustOptions = [
408
+      {
409
+        name: "委托书编号",
410
+        value: "123",
411
+      },
412
+      {
413
+        name: "查看委托书",
414
+        value: "123",
415
+        type: "BUTTOM",
416
+        onClick: () => {},
417
+      },
418
+      {
419
+        name: "开始时间",
420
+        value: "123",
421
+      },
422
+      {
423
+        name: "截止时间",
424
+        value: "123",
425
+      },
426
+    ];
427
+
428
+    // 钥匙
429
+    const keyOptions = [
430
+      {
431
+        name: "钥匙编号",
432
+        value: "123",
433
+        span: 24,
434
+      },
435
+
436
+      {
437
+        name: "存放地址",
438
+        value: "123",
439
+        span: 24,
440
+      },
441
+    ];
442
+
443
+    const shareOptions = [
444
+      { name: "微信", icon: "wechat" },
445
+      { name: "微博", icon: "weibo" },
446
+      { name: "复制链接", icon: "link" },
447
+      { name: "分享海报", icon: "poster" },
448
+      { name: "二维码", icon: "qrcode" },
449
+    ];
450
+
451
+    const onShareSelect = (option) => {
452
+      Toast(option.name);
453
+      showShare.value = false;
454
+    };
455
+
456
+    return {
457
+      phone,
458
+      housingInformationOptions,
459
+      baseInformationOptions,
460
+      propertyInformationOptions,
461
+      roleInformationOptions,
462
+      entrustOptions,
463
+      keyOptions,
464
+      actions,
465
+      onSelect,
466
+      showPopover,
467
+      showShare,
468
+      phoneShow,
469
+      onShareSelect,
470
+      shareOptions,
471
+    };
472
+  },
473
+};
474
+</script>
475
+
476
+<!-- Add "scoped" attribute to limit CSS to this component only -->
477
+<style lang="less">
478
+.secondhanddetail {
479
+  text-align: left;
480
+}
481
+.secondhand-main::-webkit-scrollbar {
482
+  display: none; /*隐藏滚动条*/
483
+}
484
+
485
+.detailcard {
486
+  min-height: 10px;
487
+  border-top: 1px solid #5b6b73;
488
+  padding: 10px;
489
+  &-title {
490
+    font-size: 15px;
491
+    color: #d75e3a;
492
+    line-height: 30px;
493
+  }
494
+  &-context {
495
+    font-size: 13px;
496
+    color: #999;
497
+  }
498
+}
499
+</style>

+ 295
- 0
src/view/renting/edithouse/index.vue Parādīt failu

@@ -0,0 +1,295 @@
1
+<template>
2
+  <div class="secondhanddetail ">
3
+    <div class="detailcard van-hairline--bottom">
4
+      <div class="detailcard-title">
5
+        <span>编辑房源信息</span>
6
+      </div>
7
+      <Contextc :options="baseInformationOptions"></Contextc>
8
+    </div>
9
+
10
+    <div>
11
+      <van-form @submit="onSubmit">
12
+        <van-field
13
+          v-model="state.username"
14
+          name="title"
15
+          label="标题"
16
+          placeholder="请输入"
17
+          required
18
+          :rules="[{ required: true, message: '请填写标题' }]"
19
+        />
20
+        <van-field
21
+          v-model="state.username"
22
+          name="aaaa"
23
+          label="面积"
24
+          placeholder="请输入"
25
+          required
26
+          type="number"
27
+          :rules="[{ required: true, message: '请填写面积' }]"
28
+        >
29
+          <template #extra>
30
+            ㎡
31
+          </template>
32
+        </van-field>
33
+        <van-field
34
+          v-model="state.username"
35
+          name="3333"
36
+          label="出租方式"
37
+          placeholder="请输入"
38
+          type="number"
39
+          :rules="[{ required: true, message: '请填写出租方式' }]"
40
+        />
41
+        <van-field
42
+          v-model="state.username"
43
+          name="aaaa"
44
+          label="租金"
45
+          placeholder="请输入"
46
+          required
47
+          type="number"
48
+          :rules="[{ required: true, message: '请填写租金' }]"
49
+        >
50
+          <template #extra>
51
+            元/月
52
+          </template>
53
+        </van-field>
54
+        <Pickerc
55
+          v-model="state.username"
56
+          name="title"
57
+          label="装修"
58
+          required
59
+        ></Pickerc>
60
+
61
+        <Pickerc
62
+          v-model="state.username"
63
+          name="title"
64
+          label="朝向"
65
+          required
66
+        ></Pickerc>
67
+
68
+        <van-field
69
+          v-model="state.username"
70
+          name="title"
71
+          label="户型"
72
+          placeholder="请输入"
73
+          required
74
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
75
+        />
76
+
77
+        <Pickerc
78
+          v-model="state.username"
79
+          name="title"
80
+          label="房源来源"
81
+          required
82
+        ></Pickerc>
83
+
84
+        <Pickerc
85
+          v-model="state.username"
86
+          name="title"
87
+          label="付款方式"
88
+        ></Pickerc>
89
+
90
+        <Pickerc
91
+          v-model="state.username"
92
+          name="title"
93
+          label="居住现状"
94
+        ></Pickerc>
95
+
96
+        <Pickerc v-model="state.username" name="title" label="卧室"></Pickerc>
97
+
98
+        <Pickerc
99
+          v-model="state.username"
100
+          name="title"
101
+          label="性别限制"
102
+        ></Pickerc>
103
+
104
+        <Pickerc
105
+          v-model="state.username"
106
+          name="title"
107
+          label="房屋特色"
108
+        ></Pickerc>
109
+
110
+        <van-field
111
+          v-model="state.username"
112
+          name="title"
113
+          label="楼户比例"
114
+          placeholder="请输入"
115
+          required
116
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
117
+        />
118
+        <Pickerc
119
+          v-model="state.username"
120
+          name="title"
121
+          label="建筑类型"
122
+        ></Pickerc>
123
+
124
+        <Pickerc
125
+          v-model="state.username"
126
+          name="title"
127
+          label="房屋用途"
128
+        ></Pickerc>
129
+        <van-field
130
+          v-model="state.username"
131
+          name="title"
132
+          label="建成年代"
133
+          placeholder="请输入"
134
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
135
+        />
136
+
137
+        <Pickerc v-model="state.username" name="title" label="电梯"></Pickerc>
138
+        <Pickerc v-model="state.username" name="title" label="车位"></Pickerc>
139
+
140
+        <Pickerc v-model="state.username" name="title" label="地下室"></Pickerc>
141
+
142
+        <van-field
143
+          v-model="state.username"
144
+          name="aaaa"
145
+          label="物业费"
146
+          placeholder="请输入"
147
+          type="number"
148
+        >
149
+          <template #extra>
150
+            元/月/平
151
+          </template>
152
+        </van-field>
153
+
154
+        <Pickerc v-model="state.username" name="title" label="燃气"></Pickerc>
155
+
156
+        <Pickerc v-model="state.username" name="title" label="家电"></Pickerc>
157
+
158
+        <van-field
159
+          v-model="state.username"
160
+          name="aaaa1"
161
+          label="物业推荐"
162
+          placeholder="请输入"
163
+          type="textarea"
164
+        >
165
+        </van-field>
166
+
167
+        <div style="margin: 16px;">
168
+          <van-button round block type="primary" native-type="submit">
169
+            提交
170
+          </van-button>
171
+        </div>
172
+      </van-form>
173
+    </div>
174
+  </div>
175
+</template>
176
+
177
+<script>
178
+import { reactive } from "vue";
179
+
180
+import {
181
+  Icon,
182
+  Popover,
183
+  Row,
184
+  Col,
185
+  Button,
186
+  steps,
187
+  step,
188
+  //   Dialog,
189
+  Form,
190
+  Field,
191
+} from "vant";
192
+import Contextc from "../../../components/contextC";
193
+import { Pickerc } from "../../../components/editCompents";
194
+
195
+// import { router } from "../../../router";
196
+
197
+export default {
198
+  name: "secondhanddetail",
199
+  components: {
200
+    [Row.name]: Row,
201
+    [Col.name]: Col,
202
+    [Popover.name]: Popover,
203
+    [Icon.name]: Icon,
204
+    [Button.name]: Button,
205
+    [steps.name]: steps,
206
+    [step.name]: step,
207
+    [Form.name]: Form,
208
+    [Field.name]: Field,
209
+    Pickerc: Pickerc,
210
+    Contextc: Contextc,
211
+  },
212
+  data() {
213
+    return {};
214
+  },
215
+
216
+  setup() {
217
+    const state = reactive({
218
+      username: "",
219
+      password: "",
220
+    });
221
+
222
+    // 房源信息
223
+    const baseInformationOptions = [
224
+      {
225
+        name: "房源编号",
226
+        value: "123",
227
+      },
228
+      {
229
+        name: "楼盘名称",
230
+        value: "123",
231
+      },
232
+      {
233
+        name: "楼盘地址",
234
+        value: "123",
235
+        span: 24,
236
+      },
237
+      {
238
+        name: "栋号",
239
+        value: "123",
240
+        required: true,
241
+      },
242
+      {
243
+        name: "单元",
244
+        value: "123",
245
+        required: true,
246
+      },
247
+      {
248
+        name: "楼层",
249
+        value: "123",
250
+        required: true,
251
+      },
252
+      {
253
+        name: "房号",
254
+        value: "123",
255
+        required: true,
256
+      },
257
+    ];
258
+
259
+    const onSubmit = (values) => {
260
+      console.log("submit", values);
261
+    };
262
+
263
+    return {
264
+      state,
265
+      onSubmit,
266
+      baseInformationOptions,
267
+    };
268
+  },
269
+};
270
+</script>
271
+
272
+<!-- Add "scoped" attribute to limit CSS to this component only -->
273
+<style lang="less" scoped>
274
+.secondhanddetail {
275
+  text-align: left;
276
+}
277
+.secondhand-main::-webkit-scrollbar {
278
+  display: none; /*隐藏滚动条*/
279
+}
280
+
281
+.detailcard {
282
+  min-height: 10px;
283
+  border-top: 1px solid #5b6b73;
284
+  padding: 10px;
285
+  &-title {
286
+    font-size: 15px;
287
+    color: #d75e3a;
288
+    line-height: 30px;
289
+  }
290
+  &-context {
291
+    font-size: 13px;
292
+    color: #999;
293
+  }
294
+}
295
+</style>

+ 142
- 8
src/view/renting/index.vue Parādīt failu

@@ -1,27 +1,161 @@
1 1
 <template>
2 2
   <div class="renting">
3
-   123
3
+    <RentingScreen :options="options" @onShowMore="onShowMore" />
4
+    <div >
5
+      <van-list
6
+        class="renting-main"
7
+        v-model:loading="state.loading"
8
+        :finished="state.finished"
9
+        finished-text="没有更多了"
10
+        @load="onLoad"
11
+      >
12
+        <RentingCard
13
+          v-for="item in state.list"
14
+          :key="item.id"
15
+          :datas="item.datas"
16
+          @click="toDetail()"
17
+        ></RentingCard>
18
+      </van-list>
19
+    </div>
20
+    <van-popup
21
+      v-model:show="moreShow"
22
+      position="right"
23
+      :style="{ width: '100%', height: '100%' }"
24
+    ><RentingMoreScreen />
25
+    </van-popup>
4 26
   </div>
5 27
 </template>
6 28
 
7 29
 <script>
8 30
 // import Vue from 'vue';
9
-import { Tab, Tabs } from 'vant';
31
+import { DropdownMenu, DropdownItem, List, Popup } from "vant";
32
+import rentingscreen from "./components/rentingscreen";
33
+import rentingmorescreen from "./components/rentingmorescreen";
34
+import rentingcard from "./components/rentingcard";
35
+import { reactive, ref } from "vue";
36
+import {router} from '../../router'
10 37
 
11 38
 export default {
12 39
   name: "renting",
13
-   components: {
14
-    [Tab.name]: Tab,
15
-    [Tabs.name]: Tabs,
16
-    
40
+  components: {
41
+    [DropdownMenu.name]: DropdownMenu,
42
+    [DropdownItem.name]: DropdownItem,
43
+    [List.name]: List,
44
+    [Popup.name]: Popup,
45
+    RentingScreen: rentingscreen,
46
+    RentingCard: rentingcard,
47
+    RentingMoreScreen: rentingmorescreen,
17 48
   },
18 49
   data() {
19 50
     return {
20
-      msg: "222",
51
+      options: [
52
+        {
53
+          id: 0,
54
+          value: 0,
55
+          title: "区域",
56
+          option: [],
57
+        },
58
+        {
59
+          id: 2,
60
+          value: "a",
61
+          title: "价格",
62
+          option: [
63
+            { text: "0-100", value: "a" },
64
+            { text: "101-200", value: "b" },
65
+            { text: "201-300", value: "c" },
66
+            { text: "301-400", value: "e" },
67
+            { text: "400以上", value: "f" },
68
+          ],
69
+        },
70
+        {
71
+          id: 3,
72
+          value: "a",
73
+          title: "户型",
74
+          mode: "multiple",
75
+          option: [
76
+            { text: "1室", value: "1" },
77
+            { text: "2室", value: "2" },
78
+            { text: "3室", value: "3" },
79
+            { text: "3室以上", value: "4" },
80
+          ],
81
+        },
82
+        // {
83
+        //   id: 4,
84
+        //   value: "a",
85
+        //   title: "更多",
86
+        //   mode: "multiple",
87
+        //   option: [
88
+        //     { text: "默认排序", value: "a" },
89
+        //     { text: "好评排序", value: "b" },
90
+        //     { text: "销量排序", value: "c" },
91
+        //   ],
92
+        // },
93
+      ],
94
+    };
95
+  },
96
+
97
+  setup(props) {
98
+    const moreShow = ref(false);
99
+
100
+    const onShowMore = () => {
101
+      console.log("22");
102
+      moreShow.value = true;
103
+      console.log(moreShow, "22");
104
+    };
105
+    const state = reactive({
106
+      list: [],
107
+      loading: false,
108
+      finished: false,
109
+    });
110
+
111
+    const onLoad = () => {
112
+      // 异步更新数据
113
+      // setTimeout 仅做示例,真实场景中一般为 ajax 请求
114
+      setTimeout(() => {
115
+        for (let i = 0; i < 10; i++) {
116
+          state.list.push({
117
+            id: state.list.length + 1,
118
+            datas: {
119
+              name: "",
120
+            },
121
+          });
122
+        }
123
+
124
+        // 加载状态结束
125
+        state.loading = false;
126
+
127
+        // 数据全部加载完成
128
+        if (state.list.length >= 40) {
129
+          state.finished = true;
130
+        }
131
+      }, 1000);
132
+    };
133
+const toDetail = () => {
134
+    console.log(props,router,'333')
135
+    router.push('/renting/detail')
136
+    };
137
+    
138
+
139
+    return {
140
+      state,
141
+      onLoad,
142
+      moreShow,
143
+      onShowMore,
144
+      toDetail,
21 145
     };
22 146
   },
23 147
 };
24 148
 </script>
25 149
 
26 150
 <!-- Add "scoped" attribute to limit CSS to this component only -->
27
-<style scoped></style>
151
+<style scoped>
152
+.renting-main {
153
+  width: 100%;
154
+  height: calc(100vh - 142px);
155
+  overflow: hidden;
156
+  overflow-y: auto;
157
+}
158
+.renting-main::-webkit-scrollbar {
159
+  display: none; /*隐藏滚动条*/
160
+}
161
+</style>

+ 110
- 0
src/view/resc/index.vue Parādīt failu

@@ -0,0 +1,110 @@
1
+<template>
2
+  <div class="resc ">
3
+    <div class="resc-top van-hairline--bottom">
4
+      <van-row>
5
+        <van-col span="12">
6
+          <p>门牌</p>
7
+          <van-uploader
8
+            v-model="houseNumberImg"
9
+            max-count="1"
10
+            :after-read="afterRead"
11
+          />
12
+        </van-col>
13
+        <van-col span="12">
14
+          <p>户型</p>
15
+          <van-uploader
16
+            v-model="houseNumberImg"
17
+            max-count="1"
18
+            :after-read="afterRead"
19
+          />
20
+        </van-col>
21
+      </van-row>
22
+    </div>
23
+    <div class="resc-top van-hairline--bottom">
24
+      <p>客厅</p>
25
+      <van-uploader v-model="houseNumberImg" :after-read="afterRead" />
26
+    </div>
27
+    <div class="resc-top van-hairline--bottom">
28
+      <p>卧室</p>
29
+      <van-uploader v-model="houseNumberImg" :after-read="afterRead" />
30
+    </div>
31
+    <div class="resc-top van-hairline--bottom">
32
+      <p>厨房</p>
33
+      <van-uploader v-model="houseNumberImg" :after-read="afterRead" />
34
+    </div>
35
+    <div class="resc-top van-hairline--bottom">
36
+      <p>卫生间</p>
37
+      <van-uploader v-model="houseNumberImg" :after-read="afterRead" />
38
+    </div>
39
+    <div class=" resc-top van-hairline--bottom">
40
+      <p>其他</p>
41
+      <van-uploader v-model="houseNumberImg" :after-read="afterRead" />
42
+    </div>
43
+    <div class=" resc-top van-hairline--bottom">
44
+      <van-button color="rgb(215, 105, 58)" round type="primary"
45
+      style="border-radius:5px"
46
+        >保存审核并提交</van-button
47
+      >
48
+    </div>
49
+  </div>
50
+</template>
51
+
52
+<script>
53
+import { ref } from "vue";
54
+//
55
+import {
56
+  Uploader,
57
+  Row,
58
+  Col,
59
+  Button,
60
+
61
+  //   Dialog,
62
+} from "vant";
63
+
64
+// import { router } from "../../../router";
65
+
66
+export default {
67
+  name: "secondhanddetail",
68
+  components: {
69
+    [Row.name]: Row,
70
+    [Col.name]: Col,
71
+
72
+    [Uploader.name]: Uploader,
73
+    [Button.name]: Button,
74
+  },
75
+  data() {
76
+    return {};
77
+  },
78
+
79
+  setup() {
80
+    const houseNumberImg = ref([]);
81
+
82
+    const fileList = ref([
83
+      { url: "https://img.yzcdn.cn/vant/leaf.jpg" },
84
+      // Uploader 根据文件后缀来判断是否为图片文件
85
+      // 如果图片 URL 中不包含类型信息,可以添加 isImage 标记来声明
86
+      { url: "https://cloud-image", isImage: true },
87
+    ]);
88
+
89
+    const afterRead = (file) => {
90
+      // 此时可以自行将文件上传至服务器
91
+      console.log(file);
92
+    };
93
+
94
+    return {
95
+      houseNumberImg,
96
+      fileList,
97
+      afterRead,
98
+    };
99
+  },
100
+};
101
+</script>
102
+
103
+<!-- Add "scoped" attribute to limit CSS to this component only -->
104
+<style lang="less" scoped>
105
+.resc {
106
+  &-top {
107
+    padding: 20px;
108
+  }
109
+}
110
+</style>

+ 5
- 0
src/view/secondhand/components/secondhandmorescreen/index.vue Parādīt failu

@@ -91,6 +91,9 @@
91 91
         </div>
92 92
       </van-form>
93 93
     </div>
94
+
95
+
96
+ 
94 97
   </div>
95 98
 </template>
96 99
 
@@ -159,6 +162,7 @@ export default {
159 162
     const serchValue = ref("");
160 163
     const searchType = ref("楼盘");
161 164
     const showPopover = ref(false);
165
+     const phoneShow = ref(false);
162 166
 
163 167
     // 通过 actions 属性来定义菜单选项
164 168
     const searchActions = [
@@ -205,6 +209,7 @@ export default {
205 209
     ];
206 210
 
207 211
     return {
212
+      phoneShow,
208 213
       serchValue,
209 214
       searchType,
210 215
       state,

+ 63
- 15
src/view/secondhand/detail/index.vue Parādīt failu

@@ -11,6 +11,7 @@
11 11
     <div class="detailcard">
12 12
       <div class="detailcard-title">
13 13
         <span>房源信息</span>
14
+
14 15
         <div style="float:right">
15 16
           <van-popover
16 17
             v-model:show="showPopover"
@@ -88,16 +89,39 @@
88 89
         <Stepc></Stepc>
89 90
       </div>
90 91
     </div>
92
+
93
+    <van-share-sheet
94
+      v-model:show="showShare"
95
+      title="立即分享给好友"
96
+      :options="shareOptions"
97
+      @select="onShareSelect"
98
+    />
99
+
100
+    <van-dialog v-model:show="phoneShow" title="新增电话" show-cancel-button>
101
+     <van-field v-model="phone" type="tel" label="业主电话" placeholder="请输入电话" />
102
+    </van-dialog>
91 103
   </div>
92 104
 </template>
93 105
 
94 106
 <script>
95 107
 import { ref } from "vue";
96 108
 import { Swiper } from "../../../components/detailCompents";
97
-import { Icon, Popover, Row, Col, Button, steps, step, Dialog } from "vant";
109
+import {
110
+  Icon,
111
+  Popover,
112
+  Row,
113
+  Col,
114
+  Button,
115
+  steps,
116
+  step,
117
+  Dialog,
118
+  ShareSheet,
119
+  Toast,
120
+  Field,
121
+} from "vant";
98 122
 import Contextc from "../../../components/contextC";
99 123
 import Stepc from "../../../components/stepC";
100
-import {router} from '../../../router'
124
+import { router } from "../../../router";
101 125
 
102 126
 export default {
103 127
   name: "secondhanddetail",
@@ -109,6 +133,10 @@ export default {
109 133
     [Button.name]: Button,
110 134
     [steps.name]: steps,
111 135
     [step.name]: step,
136
+    [ShareSheet.name]: ShareSheet,
137
+     [Field.name]: Field,
138
+     [Dialog.Component.name]: Dialog.Component,
139
+
112 140
     Stepc: Stepc,
113 141
     Contextc: Contextc,
114 142
     Swiper: Swiper,
@@ -119,6 +147,9 @@ export default {
119 147
 
120 148
   setup() {
121 149
     const showPopover = ref(false);
150
+    const showShare = ref(false);
151
+    const phoneShow = ref(false);
152
+     const phone = ref('');
122 153
 
123 154
     // 通过 actions 属性来定义菜单选项
124 155
     const actions = [
@@ -146,23 +177,22 @@ export default {
146 177
           .catch(() => {
147 178
             // on cancel
148 179
           });
149
-      } else if(action.value == 2){
150
-// 新增业主电话
151
-      }
152
-      else if(action.value == 3){
180
+      } else if (action.value == 2) {
181
+        // 新增业主电话
182
+        phoneShow.value = true;
183
+      } else if (action.value == 3) {
153 184
         // 下架房源
154 185
 
155
- router.push('/closehouse')
156
-      }
157
-      else if(action.value == 4){
186
+        router.push("/closehouse");
187
+      } else if (action.value == 4) {
158 188
         // 修改房源
159
-        router.push('/edithouse')
160
-      }
161
-      else if(action.value == 5){
189
+        router.push("/editsecondhandhouse");
190
+      } else if (action.value == 5) {
162 191
         // 分享房源
163
-      }
164
-      else if(action.value == 6){
192
+        showShare.value = true;
193
+      } else if (action.value == 6) {
165 194
         // 房源实勘
195
+        router.push("/resc");
166 196
       }
167 197
     };
168 198
     const onLookClick = () => {
@@ -386,7 +416,21 @@ export default {
386 416
       },
387 417
     ];
388 418
 
419
+    const shareOptions = [
420
+      { name: "微信", icon: "wechat" },
421
+      { name: "微博", icon: "weibo" },
422
+      { name: "复制链接", icon: "link" },
423
+      { name: "分享海报", icon: "poster" },
424
+      { name: "二维码", icon: "qrcode" },
425
+    ];
426
+
427
+    const onShareSelect = (option) => {
428
+      Toast(option.name);
429
+      showShare.value = false;
430
+    };
431
+
389 432
     return {
433
+      phone,
390 434
       housingInformationOptions,
391 435
       baseInformationOptions,
392 436
       propertyInformationOptions,
@@ -396,13 +440,17 @@ export default {
396 440
       actions,
397 441
       onSelect,
398 442
       showPopover,
443
+      showShare,
444
+      phoneShow,
445
+      onShareSelect,
446
+      shareOptions,
399 447
     };
400 448
   },
401 449
 };
402 450
 </script>
403 451
 
404 452
 <!-- Add "scoped" attribute to limit CSS to this component only -->
405
-<style lang="less" scoped>
453
+<style lang="less">
406 454
 .secondhanddetail {
407 455
   text-align: left;
408 456
 }

+ 167
- 254
src/view/secondhand/edithouse/index.vue Parādīt failu

@@ -1,15 +1,153 @@
1 1
 <template>
2
-  <div class="secondhanddetail">
3
-   
2
+  <div class="secondhanddetail ">
3
+    <div class="detailcard van-hairline--bottom">
4
+      <div class="detailcard-title">
5
+        <span>基础信息</span>
6
+      </div>
7
+      <Contextc :options="baseInformationOptions"></Contextc>
8
+    </div>
9
+
10
+    <div>
11
+      <van-form @submit="onSubmit">
12
+        <van-field
13
+          v-model="state.username"
14
+          name="title"
15
+          label="标题"
16
+          placeholder="请输入"
17
+          required
18
+          :rules="[{ required: true, message: '请填写标题' }]"
19
+        />
20
+        <van-field
21
+          v-model="state.username"
22
+          name="aaaa"
23
+          label="面积"
24
+          placeholder="请输入"
25
+          required
26
+          type="number"
27
+          :rules="[{ required: true, message: '请填写面积' }]"
28
+        >
29
+          <template #extra>
30
+            ㎡
31
+          </template>
32
+        </van-field>
33
+        <van-field
34
+          v-model="state.username"
35
+          name="3333"
36
+          label="套内面积"
37
+          placeholder="请输入"
38
+        />
39
+        <van-field
40
+          v-model="state.username"
41
+          name="title"
42
+          label="户型"
43
+          placeholder="请输入"
44
+          required
45
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
46
+        />
47
+
48
+        <van-field
49
+          v-model="state.username"
50
+          name="title"
51
+          label="楼户比例"
52
+          placeholder="请输入"
53
+          required
54
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
55
+        />
56
+        <Pickerc
57
+          v-model="state.username"
58
+          name="title"
59
+          label="装修"
60
+          required
61
+        ></Pickerc>
62
+        <van-field
63
+          v-model="state.username"
64
+          name="title"
65
+          label="总价"
66
+          placeholder="请输入"
67
+          type="number"
68
+          required
69
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
70
+        >
71
+          <template #extra>
72
+            万元
73
+          </template></van-field
74
+        >
75
+        <Pickerc
76
+          v-model="state.username"
77
+          name="title"
78
+          label="朝向"
79
+          required
80
+        ></Pickerc>
81
+        <Pickerc
82
+          v-model="state.username"
83
+          name="title"
84
+          label="房源来源"
85
+          required
86
+        ></Pickerc>
87
+
88
+        <Pickerc
89
+          v-model="state.username"
90
+          name="title"
91
+          label="建筑类型"
92
+        ></Pickerc>
93
+
94
+        <Pickerc v-model="state.username" name="title" label="电梯"></Pickerc>
95
+
96
+        <Pickerc
97
+          v-model="state.username"
98
+          name="title"
99
+          label="交易属性"
100
+        ></Pickerc>
101
+
102
+        <Pickerc
103
+          v-model="state.username"
104
+          name="title"
105
+          label="房屋用途"
106
+        ></Pickerc>
107
+        <van-field
108
+          v-model="state.username"
109
+          name="title"
110
+          label="建成年代"
111
+          placeholder="请输入"
112
+          :rules="[{ required: true, message: '请填写楼户比例' }]"
113
+        />
114
+        <Pickerc
115
+          v-model="state.username"
116
+          name="title"
117
+          label="抵押信息"
118
+        ></Pickerc>
119
+
120
+        <Pickerc v-model="state.username" name="title" label="税费"></Pickerc>
121
+
122
+        <div style="margin: 16px;">
123
+          <van-button round block type="primary" native-type="submit">
124
+            提交
125
+          </van-button>
126
+        </div>
127
+      </van-form>
128
+    </div>
4 129
   </div>
5 130
 </template>
6 131
 
7 132
 <script>
8
-import { ref } from "vue";
133
+import { reactive } from "vue";
9 134
 
10
-import { Icon, Popover, Row, Col, Button, steps, step, Dialog } from "vant";
135
+import {
136
+  Icon,
137
+  Popover,
138
+  Row,
139
+  Col,
140
+  Button,
141
+  steps,
142
+  step,
143
+  //   Dialog,
144
+  Form,
145
+  Field,
146
+} from "vant";
147
+import Contextc from "../../../components/contextC";
148
+import { Pickerc } from "../../../components/editCompents";
11 149
 
12
-import {router} from '../../../router'
150
+// import { router } from "../../../router";
13 151
 
14 152
 export default {
15 153
   name: "secondhanddetail",
@@ -21,291 +159,66 @@ export default {
21 159
     [Button.name]: Button,
22 160
     [steps.name]: steps,
23 161
     [step.name]: step,
24
-
162
+    [Form.name]: Form,
163
+    [Field.name]: Field,
164
+    Pickerc: Pickerc,
165
+    Contextc: Contextc,
25 166
   },
26 167
   data() {
27 168
     return {};
28 169
   },
29 170
 
30 171
   setup() {
31
-    const showPopover = ref(false);
32
-
33
-    // 通过 actions 属性来定义菜单选项
34
-    const actions = [
35
-      { text: "设置房源保护", value: "1" },
36
-      { text: "新增业主电话", value: "2" },
37
-      { text: "下架房源", value: "3" },
38
-      { text: "修改房源", value: "4" },
39
-      { text: "分享房源", value: "5" },
40
-      { text: "房源实勘", value: "6" },
41
-    ];
42
-    // 设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。
43
-    const onSelect = (action) => {
44
-      console.log(action);
45
-      if (action.value == 1) {
46
-        // 设置房源保护
47
-        Dialog.confirm({
48
-          title: "提示",
49
-          message:
50
-            "设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。",
51
-          theme: "round-button",
52
-        })
53
-          .then(() => {
54
-            // on close
55
-          })
56
-          .catch(() => {
57
-            // on cancel
58
-          });
59
-      } else if(action.value == 2){
60
-// 新增业主电话
61
-      }
62
-      else if(action.value == 3){
63
-        // 下架房源
64
-
65
- router.push('/closehouse')
66
-      }
67
-      else if(action.value == 4){
68
-        // 修改房源
69
-        router.push('/edithouse')
70
-      }
71
-      else if(action.value == 5){
72
-        // 分享房源
73
-      }
74
-      else if(action.value == 6){
75
-        // 房源实勘
76
-      }
77
-    };
78
-    const onLookClick = () => {
79
-      console.log("onLookClick");
80
-    };
172
+    const state = reactive({
173
+      username: "",
174
+      password: "",
175
+    });
81 176
 
82 177
     // 房源信息
83
-    const housingInformationOptions = [
84
-      {
85
-        name: "所属楼盘",
86
-        value: "123",
87
-        span: 24,
88
-      },
89
-      {
90
-        name: "房源id",
91
-        value: "123",
92
-      },
93
-      {
94
-        name: "楼层",
95
-        value: "123",
96
-      },
97
-      {
98
-        name: "所属区县",
99
-        value: "123",
100
-      },
101
-      {
102
-        name: "面积",
103
-        value: "123",
104
-      },
105
-      {
106
-        name: "所属商圈",
107
-        value: "123",
108
-      },
109
-      {
110
-        name: "价格",
111
-        value: "123",
112
-      },
113
-      {
114
-        name: "楼房号",
115
-        value: "123",
116
-      },
117
-      {
118
-        name: "单元",
119
-        value: "123",
120
-      },
121
-      {
122
-        name: "业主姓名",
123
-        value: "123",
124
-      },
125
-      {
126
-        name: "楼栋",
127
-        value: "123",
128
-      },
129
-      {
130
-        name: "业主电话",
131
-        value: "123",
132
-      },
133
-      {
134
-        name: "查看敏感信息",
135
-        value: "123",
136
-        type: "BUTTOM",
137
-        click: () => onLookClick(),
138
-      },
139
-    ];
140
-    // 基本信息
141 178
     const baseInformationOptions = [
142 179
       {
143
-        name: "户型",
144
-        value: "123",
145
-      },
146
-      {
147
-        name: "朝向",
148
-        value: "123",
149
-      },
150
-      {
151
-        name: "装修",
152
-        value: "123",
153
-      },
154
-      {
155
-        name: "房屋用途",
180
+        name: "房源编号",
156 181
         value: "123",
157 182
       },
158 183
       {
159
-        name: "建筑类型",
184
+        name: "楼盘名称",
160 185
         value: "123",
161 186
       },
162 187
       {
163
-        name: "配备电梯",
164
-        value: "123",
165
-      },
166
-      {
167
-        name: "抵押信息",
168
-        value: "123",
169
-      },
170
-      {
171
-        name: "税费",
172
-        value: "123",
173
-      },
174
-      {
175
-        name: "来源",
188
+        name: "楼盘地址",
176 189
         value: "123",
177 190
         span: 24,
178 191
       },
179
-    ];
180
-    // 物业信息
181
-    const propertyInformationOptions = [
182
-      {
183
-        name: "物业费",
184
-        value: "123",
185
-      },
186 192
       {
187
-        name: "建筑年代",
193
+        name: "栋号",
188 194
         value: "123",
195
+        required: true,
189 196
       },
190 197
       {
191
-        name: "均价",
192
-        value: "123",
193
-      },
194
-      {
195
-        name: "开发商",
196
-        value: "123",
197
-      },
198
-      {
199
-        name: "物业公司",
200
-        value: "123",
201
-      },
202
-    ];
203
-    // 角色人
204
-    const roleInformationOptions = [
205
-      {
206
-        name: "首次录入人",
207
-        value: "123",
208
-      },
209
-      {
210
-        name: "时间",
211
-        value: "123",
212
-      },
213
-      {
214
-        name: "录入人",
215
-        value: "123",
216
-      },
217
-      {
218
-        name: "时间",
219
-        value: "123",
220
-      },
221
-      {
222
-        name: "维护人",
223
-        value: "123",
224
-      },
225
-      {
226
-        name: "查看电话",
227
-        value: "123",
228
-        type: "BUTTOM",
229
-        onClick: () => {},
230
-      },
231
-      {
232
-        name: "实勘人",
233
-        value: "123",
234
-      },
235
-      {
236
-        name: "时间",
237
-        value: "123",
238
-      },
239
-      {
240
-        name: "钥匙人",
241
-        value: "123",
242
-        span: 24,
243
-      },
244
-      {
245
-        name: "委托人",
246
-        value: "123",
247
-      },
248
-      {
249
-        name: "时间",
250
-        value: "123",
251
-      },
252
-      {
253
-        name: "最后修改人",
254
-        value: "123",
255
-      },
256
-      {
257
-        name: "时间",
258
-        value: "123",
259
-      },
260
-    ];
261
-
262
-    // 委托书
263
-    const entrustOptions = [
264
-      {
265
-        name: "委托书编号",
266
-        value: "123",
267
-      },
268
-      {
269
-        name: "查看委托书",
198
+        name: "单元",
270 199
         value: "123",
271
-        type: "BUTTOM",
272
-        onClick: () => {},
200
+        required: true,
273 201
       },
274 202
       {
275
-        name: "开始时间",
203
+        name: "楼层",
276 204
         value: "123",
205
+        required: true,
277 206
       },
278 207
       {
279
-        name: "截止时间",
208
+        name: "房号",
280 209
         value: "123",
210
+        required: true,
281 211
       },
282 212
     ];
283 213
 
284
-    // 钥匙
285
-    const keyOptions = [
286
-      {
287
-        name: "钥匙编号",
288
-        value: "123",
289
-        span: 24,
290
-      },
291
-
292
-      {
293
-        name: "存放地址",
294
-        value: "123",
295
-        span: 24,
296
-      },
297
-    ];
214
+    const onSubmit = (values) => {
215
+      console.log("submit", values);
216
+    };
298 217
 
299 218
     return {
300
-      housingInformationOptions,
219
+      state,
220
+      onSubmit,
301 221
       baseInformationOptions,
302
-      propertyInformationOptions,
303
-      roleInformationOptions,
304
-      entrustOptions,
305
-      keyOptions,
306
-      actions,
307
-      onSelect,
308
-      showPopover,
309 222
     };
310 223
   },
311 224
 };

+ 13
- 12
vue.config.js Parādīt failu

@@ -1,17 +1,17 @@
1 1
 module.exports = {
2 2
 
3
-  // publicPath: './',
4
-  // devServer: {
5
-  //   disableHostCheck: true,
6
-  //   proxy:  {
7
-  //     '/api': {
8
-  //       target: 'http://localhost:8080/',
9
-  //       ws: true,
10
-  //       changeOrigin: true,
11
-  //       pathRewrite: {'^/api': ''}
12
-  //     }
13
-  //   }
14
-  // }
3
+  publicPath: './',
4
+  devServer: {
5
+    disableHostCheck: true,
6
+    proxy:  {
7
+      '/mp': {
8
+        target: 'http://10.161.7.66:8080/',
9
+        ws: true,
10
+        changeOrigin: true,
11
+        // pathRewrite: {'^/mp': ''}
12
+      }
13
+    }
14
+  },
15 15
   css: {
16 16
     loaderOptions: {
17 17
       less: {
@@ -28,6 +28,7 @@ module.exports = {
28 28
             '@step-active-color': '#999',
29 29
             '@active-color':'#999',
30 30
             '@step-finish-line-color':'#999',
31
+            // '@border-color':'#000',
31 32
             // 'text-color': '#111',D7693A
32 33
             // 'border-color': '#eee',
33 34
             // // 或者可以通过 less 文件覆盖(文件路径为绝对路径)