zlisen il y a 4 ans
Parent
révision
b60ec6f3dc

+ 9
- 2
babel.config.js Voir le fichier

@@ -1,5 +1,12 @@
1 1
 module.exports = {
2 2
   presets: [
3 3
     '@vue/cli-plugin-babel/preset'
4
-  ]
5
-}
4
+  ],
5
+  plugins: [
6
+    [
7
+      'import',
8
+      { libraryName: 'vant', libraryDirectory: 'es', style: (name) => `${name}/style/less` },
9
+      'vant',
10
+    ],
11
+  ],
12
+}

+ 12086
- 0
package-lock.json
Fichier diff supprimé car celui-ci est trop grand
Voir le fichier


+ 8
- 3
package.json Voir le fichier

@@ -1,5 +1,5 @@
1 1
 {
2
-  "name": "secondhanghuse",
2
+  "name": "vue3",
3 3
   "version": "0.1.0",
4 4
   "private": true,
5 5
   "scripts": {
@@ -9,7 +9,9 @@
9 9
   },
10 10
   "dependencies": {
11 11
     "core-js": "^3.6.5",
12
-    "vue": "^3.0.0"
12
+    "vant": "^3.0.0",
13
+    "vue": "^3.0.0",
14
+    "vue-router": "^4.0.0"
13 15
   },
14 16
   "devDependencies": {
15 17
     "@vue/cli-plugin-babel": "~4.5.0",
@@ -17,8 +19,11 @@
17 19
     "@vue/cli-service": "~4.5.0",
18 20
     "@vue/compiler-sfc": "^3.0.0",
19 21
     "babel-eslint": "^10.1.0",
22
+    "babel-plugin-import": "^1.13.3",
20 23
     "eslint": "^6.7.2",
21
-    "eslint-plugin-vue": "^7.0.0-0"
24
+    "eslint-plugin-vue": "^7.0.0",
25
+    "less": "^3.12.2",
26
+    "less-loader": "^7.1.0"
22 27
   },
23 28
   "eslintConfig": {
24 29
     "root": true,

+ 10
- 18
src/App.vue Voir le fichier

@@ -1,26 +1,18 @@
1 1
 <template>
2
-  <img alt="Vue logo" src="./assets/logo.png">
3
-  <HelloWorld msg="Welcome to Your Vue.js App"/>
2
+  <div id="app">
3
+    <router-view />
4
+    
5
+  </div>
4 6
 </template>
5 7
 
6
-<script>
7
-import HelloWorld from './components/HelloWorld.vue'
8
-
9
-export default {
10
-  name: 'App',
11
-  components: {
12
-    HelloWorld
13
-  }
14
-}
15
-</script>
16
-
17 8
 <style>
18
-#app {
19
-  font-family: Avenir, Helvetica, Arial, sans-serif;
9
+body {
10
+  font-size: 16px;
11
+  background-color: rgb(249, 249, 249);
12
+  text-align: center;
20 13
   -webkit-font-smoothing: antialiased;
14
+   font-family: Avenir, Helvetica, Arial, sans-serif;
21 15
   -moz-osx-font-smoothing: grayscale;
22
-  text-align: center;
23
-  color: #2c3e50;
24
-  margin-top: 60px;
16
+  height: 100%;
25 17
 }
26 18
 </style>

BIN
src/assets/password.png Voir le fichier


BIN
src/assets/user.png Voir le fichier


+ 53
- 0
src/components/contextC/index.vue Voir le fichier

@@ -0,0 +1,53 @@
1
+<template>
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
+ 
18
+  </div>
19
+</template>
20
+
21
+<script>
22
+import {Col,Row,Button } from 'vant'
23
+export default {
24
+  name: 'contextc',
25
+  components:{
26
+      [Row.name]: Row,
27
+    [Col.name]: Col,
28
+    [Button.name]: Button,
29
+     
30
+  },
31
+  props: {
32
+    options:{
33
+        type:Array,
34
+        default: () => [],
35
+    }
36
+  },
37
+  setup(){
38
+      return{}
39
+  }
40
+}
41
+</script>
42
+
43
+<!-- 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
+}
53
+</style>

+ 5
- 0
src/components/detailCompents/index.js Voir le fichier

@@ -0,0 +1,5 @@
1
+import Swiper from './swiper'
2
+
3
+export {
4
+    Swiper
5
+};

+ 136
- 0
src/components/detailCompents/swiper/index.vue Voir le fichier

@@ -0,0 +1,136 @@
1
+<template>
2
+  <div class="swiper">
3
+    <van-swipe :autoplay="3000" @change="onChange" ref="swipe">
4
+      <van-swipe-item v-for="(image, index) in images" :key="index" >
5
+        <van-image
6
+          height="300"
7
+          fit="contain"
8
+          :src="image.image"
9
+          @click="onPerView(index)"
10
+        />
11
+      </van-swipe-item>
12
+    </van-swipe>
13
+    <div class="swiper-tabs">
14
+      <van-tabs
15
+        v-model:active="current"
16
+        background="rgba(0, 0, 0, 0.69)"
17
+        line-width="0"
18
+        color="#fff"
19
+        title-active-color="#d75e3a"
20
+        
21
+        @click="onClickTab"
22
+      >
23
+        <van-tab
24
+          v-for="(image, index) in images"
25
+          :key="index"
26
+          :title="image.text"
27
+          
28
+        >
29
+          <!-- {{ image.text }} -->
30
+        </van-tab>
31
+      </van-tabs>
32
+    </div>
33
+  </div>
34
+</template>
35
+
36
+<script>
37
+import { ref, } from "vue";
38
+import {
39
+  Swipe,
40
+  SwipeItem,
41
+  Image as VanImage,
42
+  ImagePreview,
43
+  Tabs,
44
+  Tab,
45
+} from "vant";
46
+
47
+export default {
48
+  name: "swiper",
49
+  components: {
50
+    [Swipe.name]: Swipe,
51
+    [SwipeItem.name]: SwipeItem,
52
+    [VanImage.name]: VanImage,
53
+    [Tabs.name]: Tabs,
54
+    [Tab.name]: Tab,
55
+  },
56
+
57
+  //   images = [
58
+  //       'https://img.yzcdn.cn/vant/apple-1.jpg',
59
+  //       'https://img.yzcdn.cn/vant/apple-2.jpg',
60
+  //     ];
61
+
62
+  props: {
63
+    images: {
64
+      type: Array,
65
+      default: () => [
66
+        {
67
+          image: "https://img.yzcdn.cn/vant/apple-1.jpg",
68
+          text: "户型",
69
+        },
70
+        {
71
+          image: "https://img.yzcdn.cn/vant/apple-2.jpg",
72
+          text: "客厅",
73
+        },
74
+      ],
75
+    },
76
+  },
77
+
78
+  setup(props,) {
79
+    const current = ref(0);
80
+const swipe = ref();
81
+    
82
+    const onChange = (index) => {
83
+      current.value = index;
84
+  
85
+    };
86
+    const onPerView = (index) => {
87
+      ImagePreview({
88
+        images: props.images.map((x) => x.image),
89
+        startPosition: index,
90
+      });
91
+    };
92
+    const onClickTab = (index) => {
93
+      current.value=index
94
+    swipe.value.swipeTo(index)
95
+swipe.value.resize()
96
+    
97
+      console.log(index,  "ongchawng");
98
+    };
99
+
100
+    // refs.checkbox.toggle();
101
+    onPerView;
102
+    return {
103
+        swipe,
104
+      current,
105
+      onChange,
106
+      onPerView,
107
+      onClickTab,
108
+    };
109
+  },
110
+};
111
+</script>
112
+
113
+<!-- Add "scoped" attribute to limit CSS to this component only -->
114
+<style lang="less">
115
+.swiper {
116
+  width: 100%;
117
+  height: 300px;
118
+  position: relative;
119
+  .van-swipe__indicators{
120
+      display: none;
121
+  }
122
+  &-tabs {
123
+    position: absolute;
124
+    bottom: 0px;
125
+    width: 100%;
126
+
127
+  }
128
+}
129
+.swiper .van-swipe-item {
130
+  /* color: #fff;
131
+  font-size: 20px;
132
+  line-height: 150px;
133
+  text-align: center;
134
+  background-color: #39a9ed; */
135
+}
136
+</style>

+ 88
- 0
src/components/queryCompents/areaQuery/index.vue Voir le fichier

@@ -0,0 +1,88 @@
1
+<template>
2
+  <div class="areaQuery">
3
+
4
+        <van-field
5
+          v-model="state.value"
6
+          readonly
7
+          clickable
8
+          :name="name"
9
+          :label="label"
10
+          placeholder="请选择"
11
+          @click="state.showCascader = true"
12
+        />
13
+        <van-popup v-model:show="state.showCascader" position="bottom">
14
+          <van-cascader
15
+            :options="options"
16
+            @finish="onConfirm"
17
+            @close="state.showCascader = false"
18
+          />
19
+        </van-popup>
20
+    </div>
21
+</template>
22
+
23
+<script>
24
+import { reactive } from 'vue';
25
+import {  Field, Popup, Cascader } from "vant";
26
+
27
+export default {
28
+  name: "areaQuery",
29
+  components: {
30
+    [Field.name]: Field,
31
+    [Popup.name]: Popup,
32
+    [Cascader.name]: Cascader,
33
+    // [Picker.name]: Popup,
34
+  },
35
+  props: {
36
+    name:String,
37
+    label:String,
38
+    other:Object,
39
+    // placeholder:'请选择',
40
+  },
41
+
42
+  setup() {
43
+    const state = reactive({
44
+      value: '',
45
+      showCascader:false,
46
+      
47
+    });
48
+
49
+    const options = [
50
+      {
51
+        text: '浙江省',
52
+        value: '330000',
53
+        children: [{ text: '杭州市', value: '330100' }],
54
+      },
55
+      {
56
+        text: '江苏省',
57
+        value: '320000',
58
+        children: [{ text: '南京市', value: '320100' }],
59
+      },
60
+    ];
61
+
62
+    const onConfirm = ({selectedOptions}) => {
63
+      state.showCascader = false;
64
+
65
+      state.value = selectedOptions.map((option) => option.text).join('/')
66
+
67
+      console.log(selectedOptions.map((option) => option.text).join('/'),'333333')
68
+        // .filter((item) => !!item)
69
+        // .map((item) => item.name)
70
+        // .join('/');
71
+    };
72
+
73
+    return {
74
+      state,
75
+      options,
76
+      onConfirm,
77
+    };
78
+  },
79
+};
80
+</script>
81
+
82
+<!-- Add "scoped" attribute to limit CSS to this component only -->
83
+<style lang="less" scoped>
84
+.secondhandmorescreen {
85
+  text-align: left;
86
+  background-color: "#f4f4f4";
87
+}
88
+</style>

+ 131
- 0
src/components/queryCompents/cheeckButtomQuery/index.vue Voir le fichier

@@ -0,0 +1,131 @@
1
+<template>
2
+  <div class="cheeckButtomQuery">
3
+    <van-row>
4
+      <van-col
5
+        v-for="(item, index) in options"
6
+        :key="index"
7
+        span="6"
8
+        class="check-cell"
9
+      >
10
+        <van-button
11
+          class="btn"
12
+          type="default"
13
+          size="small"
14
+          @click="onClick(item.value)"
15
+          :style="{backgroundColor:modelValue.indexOf(item.value) == -1?'':'#ff9800'}"
16
+        >
17
+          {{ item.title }}
18
+        </van-button>
19
+      </van-col>
20
+      <van-col class="check-cell" span="6">
21
+        <van-button
22
+          class="btn"
23
+          type="default"
24
+          size="small"
25
+          @click="onAllClick()"
26
+           :style="{backgroundColor:modelValue.length<options.length?'':'#ff9800'}"
27
+        >
28
+          全部
29
+        </van-button>
30
+      </van-col>
31
+    </van-row>
32
+  </div>
33
+</template>
34
+
35
+<script>
36
+// import { watch } from "vue";
37
+import { button, row, col } from "vant";
38
+
39
+export default {
40
+  name: "cheeckButtomQuery",
41
+  components: {
42
+    [button.name]: button,
43
+    [row.name]: row,
44
+    [col.name]: col,
45
+  },
46
+
47
+  props: {
48
+    options: {
49
+      type: Array,
50
+      default: () => [],
51
+    },
52
+    modelValue: {
53
+      type: Array,
54
+      default: () => [],
55
+    },
56
+    name: String,
57
+    label: String,
58
+    other: Object,
59
+    // placeholder:'请选择',
60
+  },
61
+  emits: ["change", "value", "update:modelValue"],
62
+  setup(props, { emit }) {
63
+    // const { options, modelValue } = props;{ emit }
64
+
65
+    const onClick = (item) => {
66
+      console.log(props.modelValue,item, emit);
67
+
68
+      let arr = props.modelValue;
69
+      // for (let i in props.value) {
70
+      //     arr.push(props.value[i]);        //key
71
+      //     //arr.push(obj[i]); //值
72
+      // }
73
+    //   console.log(arr);
74
+      if (arr.indexOf(item) == -1) {
75
+        arr.push(item);
76
+        // console.log(arr, "000");
77
+      } else {
78
+        const newArr = arr.filter((x) => x != item);
79
+        //  console.log(newArr, arr, "arr");
80
+        emit("update:modelValue", [...newArr]);
81
+      }
82
+
83
+    //   console.log(item, arr, "arr");
84
+    };
85
+
86
+    const onAllClick = () => {
87
+      console.log("cheeckButtomQueryononAllClick");
88
+
89
+      if(props.modelValue.length<props.options.length){
90
+          emit("update:modelValue", [...props.options.map(x=>x.value)]);
91
+          
92
+      }else{
93
+           emit("update:modelValue", []);
94
+      }
95
+
96
+      
97
+
98
+    };
99
+
100
+    //  watch(
101
+    //   () => state.age,
102
+    //   (age, preAge) => {
103
+    //     console.log(age); // 100
104
+    //     console.log(preAge); // 10
105
+    //   }
106
+    // )
107
+
108
+    return {
109
+      onClick,
110
+      onAllClick,
111
+    };
112
+  },
113
+};
114
+</script>
115
+
116
+<!-- Add "scoped" attribute to limit CSS to this component only -->
117
+<style lang="less" scoped>
118
+.cheeckButtomQuery {
119
+  //   text-align: left;
120
+  background-color: "#f4f4f4";
121
+  padding: 10px;
122
+  .check-cell {
123
+    padding: 10px;
124
+  }
125
+  .btn {
126
+    padding: 0;
127
+    width: 100%;
128
+    border-radius:5px
129
+  }
130
+}
131
+</style>

+ 130
- 0
src/components/queryCompents/demandQuery/index.vue Voir le fichier

@@ -0,0 +1,130 @@
1
+<template>
2
+  <div class="demand-query">
3
+   
4
+      <!-- <template #input>
5
+        <div> -->
6
+          <van-cell
7
+            class="demand-query-cell"
8
+            title-class="demand-query-title"
9
+            value-class="demand-query-value"
10
+            title="楼层"
11
+          >
12
+            <van-field v-model="state.number1" type="number" />
13
+            -
14
+            <van-field v-model="state.number2" type="number" />
15
+          </van-cell>
16
+
17
+          <van-cell
18
+            class="demand-query-cell"
19
+            title-class="demand-query-title"
20
+            value-class="demand-query-value"
21
+            title="面积"
22
+          >
23
+            <van-field v-model="state.number3" type="number" />
24
+            -
25
+            <van-field v-model="state.number4" type="number" />
26
+
27
+            ㎡
28
+          </van-cell>
29
+          <van-cell
30
+            class="demand-query-cell"
31
+            title-class="demand-query-title"
32
+            value-class="demand-query-value"
33
+            title="总价"
34
+          >
35
+            <van-field v-model="state.number5" type="number" />
36
+            -
37
+            <van-field v-model="state.number6" type="number" />
38
+
39
+            万元
40
+          </van-cell>
41
+        <!-- </div>
42
+      </template> -->
43
+    <!-- </van-field> -->
44
+
45
+    <!-- <van-field
46
+          v-model="state.value"
47
+          readonly
48
+          clickable
49
+          :name="name"
50
+          :label="label"
51
+          placeholder="请选择"
52
+          @click="state.showCascader = true"
53
+        />
54
+        <van-popup v-model:show="state.showCascader" position="bottom">
55
+          <van-cascader
56
+            :options="options"
57
+            @finish="onConfirm"
58
+            @close="state.showCascader = false"
59
+          />
60
+        </van-popup> -->
61
+  </div>
62
+</template>
63
+
64
+<script>
65
+import { reactive } from "vue";
66
+import { Field, Popup, Cascader, Cell } from "vant";
67
+
68
+export default {
69
+  name: "demandQuery",
70
+  components: {
71
+    [Field.name]: Field,
72
+    [Popup.name]: Popup,
73
+    [Cascader.name]: Cascader,
74
+    [Cell.name]: Cell,
75
+  },
76
+  props: {
77
+    name: Object,
78
+    label: String,
79
+    other: Object,
80
+    // placeholder:'请选择',
81
+  },
82
+  data(){
83
+    return {
84
+      value:'22'
85
+    }
86
+  },
87
+
88
+  setup() {
89
+
90
+
91
+    const state = reactive({
92
+      number1: 2,
93
+      number2: "",
94
+      number3: "",
95
+      number4: "",
96
+      number5: "",
97
+      number6: "",
98
+    });
99
+
100
+ 
101
+
102
+    return {
103
+
104
+      state,
105
+     
106
+    };
107
+  },
108
+};
109
+</script>
110
+
111
+<!-- Add "scoped" attribute to limit CSS to this component only -->
112
+<style lang="less">
113
+.demand-query {
114
+  text-align: left;
115
+
116
+  &-title {
117
+    flex: inherit;
118
+    width: 70px;
119
+  }
120
+  &-value {
121
+    display: flex;
122
+    // padding: 0;
123
+    .van-cell {
124
+      padding: 0;
125
+      width: 100px;
126
+      background-color: #f4f4f4;
127
+    }
128
+  }
129
+}
130
+</style>

+ 11
- 0
src/components/queryCompents/index.js Voir le fichier

@@ -0,0 +1,11 @@
1
+import AreaQuery from './areaQuery'
2
+import DemandQuery from './demandQuery'
3
+import CheeckButtomQuery from './cheeckButtomQuery'
4
+import PositionQuery from './positionQuery'
5
+
6
+export {
7
+    AreaQuery,
8
+    DemandQuery,
9
+    CheeckButtomQuery,
10
+    PositionQuery
11
+};

+ 76
- 0
src/components/queryCompents/positionQuery/index.vue Voir le fichier

@@ -0,0 +1,76 @@
1
+<template>
2
+  <div class="position-query">
3
+   
4
+   <van-field v-model="value" label="楼号" placeholder="请输入用户名" />
5
+   <van-field v-model="value" label="单元" placeholder="请输入用户名" />
6
+   <van-field v-model="value" label="房号" placeholder="请输入用户名" />
7
+  </div>
8
+</template>
9
+
10
+<script>
11
+import { reactive } from "vue";
12
+import { Field, Popup, Cascader, Cell } from "vant";
13
+
14
+export default {
15
+  name: "positionQuery",
16
+  components: {
17
+    [Field.name]: Field,
18
+    [Popup.name]: Popup,
19
+    [Cascader.name]: Cascader,
20
+    [Cell.name]: Cell,
21
+  },
22
+  props: {
23
+    name: Object,
24
+    label: String,
25
+    other: Object,
26
+    // placeholder:'请选择',
27
+  },
28
+  data(){
29
+    return {
30
+      value:'22'
31
+    }
32
+  },
33
+
34
+  setup() {
35
+
36
+
37
+    const state = reactive({
38
+      number1: 2,
39
+      number2: "",
40
+      number3: "",
41
+      number4: "",
42
+      number5: "",
43
+      number6: "",
44
+    });
45
+
46
+ 
47
+
48
+    return {
49
+
50
+      state,
51
+     
52
+    };
53
+  },
54
+};
55
+</script>
56
+
57
+<!-- Add "scoped" attribute to limit CSS to this component only -->
58
+<style lang="less">
59
+.position-query {
60
+  text-align: left;
61
+
62
+  &-title {
63
+    flex: inherit;
64
+    width: 70px;
65
+  }
66
+  &-value {
67
+    display: flex;
68
+    // padding: 0;
69
+    .van-cell {
70
+      padding: 0;
71
+      width: 100px;
72
+      background-color: #f4f4f4;
73
+    }
74
+  }
75
+}
76
+</style>

+ 56
- 0
src/components/stepC/index.vue Voir le fichier

@@ -0,0 +1,56 @@
1
+<template>
2
+
3
+    <van-steps class="stepc" direction="vertical" :active="10" >
4
+      <van-step>
5
+        <p>【城市】物流状态1</p>
6
+        <p>2016-07-12 12:40</p>
7
+      </van-step>
8
+      <van-step>
9
+        <p>【城市】物流状态2</p>
10
+        <p>2016-07-11 10:00</p>
11
+      </van-step>
12
+      <van-step>
13
+        <p>快件已发货</p>
14
+        <p>2016-07-10 09:30</p>
15
+      </van-step>
16
+    </van-steps>
17
+ 
18
+</template>
19
+
20
+<script>
21
+import { steps, step } from "vant";
22
+export default {
23
+  name: "stepc",
24
+  components: {
25
+    [steps.name]: steps,
26
+    [step.name]: step,
27
+  },
28
+  props: {
29
+    options: {
30
+      type: Array,
31
+      default: () => [],
32
+    },
33
+  },
34
+  setup() {
35
+    return {};
36
+  },
37
+};
38
+</script>
39
+
40
+<!-- Add "scoped" attribute to limit CSS to this component only -->
41
+<style lang="less" scoped>
42
+.stepc{
43
+  background: none;
44
+
45
+  p{
46
+    padding: 0;
47
+    margin: 0;
48
+  }
49
+// font-size: 13px;
50
+//     color: #999;
51
+//     &-text{
52
+//         line-height: 24px;
53
+//         display: flex;
54
+//     }
55
+}
56
+</style>

+ 31
- 0
src/layout/index.vue Voir le fichier

@@ -0,0 +1,31 @@
1
+<template>
2
+  <div class="layout">
3
+    <router-view />
4
+
5
+    <van-tabbar route>
6
+      <van-tabbar-item replace to="/home" icon="home-o">首页</van-tabbar-item>
7
+      <van-tabbar-item replace to="/user" icon="user-o">我的</van-tabbar-item>
8
+    </van-tabbar>
9
+  </div>
10
+</template>
11
+
12
+<script>
13
+// import Vue from 'vue';
14
+import { Tabbar, TabbarItem } from "vant";
15
+
16
+export default {
17
+  name: "layout",
18
+  components: {
19
+    [Tabbar.name]: Tabbar,
20
+    [TabbarItem.name]: TabbarItem,
21
+  },
22
+  data() {
23
+    return {
24
+      msg: "222",
25
+    };
26
+  },
27
+};
28
+</script>
29
+
30
+<!-- Add "scoped" attribute to limit CSS to this component only -->
31
+<style scoped></style>

+ 7
- 3
src/main.js Voir le fichier

@@ -1,4 +1,8 @@
1
-import { createApp } from 'vue'
2
-import App from './App.vue'
3 1
 
4
-createApp(App).mount('#app')
2
+import { createApp } from 'vue';
3
+import App from './App.vue';
4
+import { router } from './router';
5
+import 'vant/lib/index.css';
6
+const app = createApp(App);
7
+app.use(router);
8
+app.mount('#app');

+ 92
- 0
src/router.js Voir le fichier

@@ -0,0 +1,92 @@
1
+import {
2
+    createRouter,
3
+    createWebHashHistory
4
+} from 'vue-router';
5
+
6
+
7
+const routes = [{
8
+        name: 'notFound',
9
+        path: '/:path(.*)+',
10
+        redirect: {
11
+            name: 'home',
12
+        },
13
+    },
14
+    {
15
+        name: 'login',
16
+        path: '/login',
17
+        component: () => import('./view/login'),
18
+        meta: {
19
+            title: '登录'
20
+        }
21
+    },
22
+    {
23
+        name: 'layout',
24
+        component: () => import('./layout'),
25
+        children: [{
26
+                path: '/home',
27
+                component: () => import('./view/home'),
28
+                meta: {
29
+                    title: '房源管理'
30
+                }
31
+            },
32
+
33
+            {
34
+                name: 'user',
35
+                path: '/user',
36
+                component: () => import('./view/user'),
37
+                meta: {
38
+                    title: '我的'
39
+                }
40
+            }
41
+        ]
42
+    },
43
+    {
44
+        path: '/secondhand/detail',
45
+        name: '/secondhand/detail',
46
+        component: () => import('./view/secondhand/detail'),
47
+        meta: {
48
+            title: '二手房详情'
49
+        }
50
+    },
51
+    {
52
+        path: '/closehouse',
53
+        name: '/closehouse',
54
+        component: () => import('./view/closehouse'),
55
+        meta: {
56
+            title: '关闭房源'
57
+        }
58
+    },
59
+    {
60
+        path: '/edithouse',
61
+        name: '/edithouse',
62
+        component: () => import('./view/secondhand/edithouse'),
63
+        meta: {
64
+            title: '关闭房源'
65
+        }
66
+    },
67
+
68
+];
69
+
70
+const router = createRouter({
71
+    routes,
72
+    history: createWebHashHistory(),
73
+});
74
+
75
+// const isAuthenticated= false
76
+
77
+router.beforeEach((to, from, next) => {
78
+    const title = to.meta && to.meta.title;
79
+    if (title) {
80
+        document.title = title;
81
+    }
82
+    // if (to.name !== 'login' && !isAuthenticated) next({
83
+    //     name: 'login'
84
+    // })
85
+    // else 
86
+    next()
87
+
88
+});
89
+
90
+export {
91
+    router
92
+};

+ 123
- 0
src/view/closehouse/index.vue Voir le fichier

@@ -0,0 +1,123 @@
1
+<template>
2
+  <div class="closehouse">
3
+    <van-form @submit="onSubmit">
4
+      <van-field
5
+        v-model="state.id"
6
+        name="id"
7
+        label="房源编号"
8
+        readonly
9
+        placeholder="房源编号"
10
+      />
11
+      <van-field
12
+        v-model="state.building"
13
+        name="building"
14
+        label="所属楼盘"
15
+        readonly
16
+        placeholder="所属楼盘"
17
+       
18
+      />
19
+      <van-field
20
+        v-model="state.address"
21
+        name="address"
22
+        label="所属楼盘"
23
+        readonly
24
+        placeholder="所属楼盘"
25
+       
26
+      />
27
+
28
+      <van-field
29
+        v-model="pickerState.value"
30
+        readonly
31
+        clickable
32
+        required
33
+        name="address"
34
+        label="所属楼盘"
35
+        placeholder="所属楼盘"
36
+        @click="pickerState.showPicker = true"
37
+        :rules="[{ required: true, message: '请选择所属楼盘' }]"
38
+      />
39
+      <van-popup v-model:show="pickerState.showPicker" position="bottom">
40
+        <van-picker
41
+          :columns="columns"
42
+          @confirm="onConfirm"
43
+          @cancel="pickerState.showPicker = false"
44
+        />
45
+      </van-popup>
46
+      <!-- <van-field
47
+        v-model="state.building"
48
+        required
49
+        name="type"
50
+        label="关闭类型"
51
+        placeholder="请选择"
52
+        :rules="[{ required: true, message: '请填写密码' }]"
53
+      /> -->
54
+      <van-field
55
+        v-model="state.explain"
56
+        required
57
+        name="explain"
58
+        label="关闭说明"
59
+        placeholder="关闭说明"
60
+        rows="3"
61
+        autosize
62
+        type="textarea"
63
+        :rules="[{ required: true, message: '请填写关闭说明' }]"
64
+      />
65
+      <div style="margin: 16px;">
66
+        <van-button round block type="primary" native-type="submit">
67
+          提交
68
+        </van-button>
69
+      </div>
70
+    </van-form>
71
+  </div>
72
+</template>
73
+
74
+<script>
75
+import { reactive } from "vue";
76
+import { Form, Button, Field, Picker, Popup } from "vant";
77
+
78
+export default {
79
+  name: "closehouse",
80
+  components: {
81
+    [Form.name]: Form,
82
+    [Button.name]: Button,
83
+    [Field.name]: Field,
84
+    [Popup.name]: Popup,
85
+    [Picker.name]: Picker,
86
+    // Secondhand:secondhand,
87
+  },
88
+  data() {
89
+    return {};
90
+  },
91
+  setup() {
92
+    const state = reactive({
93
+      id: "",
94
+      building: "",
95
+    });
96
+    const onSubmit = (values) => {
97
+      console.log("submit", values);
98
+    };
99
+
100
+    const pickerState = reactive({
101
+      value: "",
102
+      showPicker: false,
103
+    });
104
+    const columns = ["杭州", "宁波", "温州", "嘉兴", "湖州"];
105
+
106
+    const onConfirm = (value) => {
107
+      pickerState.value = value;
108
+      pickerState.showPicker = false;
109
+    };
110
+
111
+    return {
112
+      state,
113
+      pickerState,
114
+      columns,
115
+      onConfirm,
116
+      onSubmit,
117
+    };
118
+  },
119
+};
120
+</script>
121
+
122
+<!-- Add "scoped" attribute to limit CSS to this component only -->
123
+<style lang="less" scoped></style>

+ 32
- 0
src/view/home/index.vue Voir le fichier

@@ -0,0 +1,32 @@
1
+<template>
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>
6
+    </van-tabs>
7
+
8
+    
9
+  </div>
10
+</template>
11
+
12
+<script>
13
+// import Vue from 'vue';
14
+import { Tab, Tabs } from 'vant';
15
+import  secondhand  from '../secondhand';
16
+export default {
17
+  name: "home",
18
+   components: {
19
+    [Tab.name]: Tab,
20
+    [Tabs.name]: Tabs,
21
+    Secondhand:secondhand,
22
+  },
23
+  data() {
24
+    return {
25
+      msg: "222",
26
+    };
27
+  },
28
+};
29
+</script>
30
+
31
+<!-- Add "scoped" attribute to limit CSS to this component only -->
32
+<style scoped></style>

+ 32
- 0
src/view/house/index.vue Voir le fichier

@@ -0,0 +1,32 @@
1
+<template>
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>
6
+    </van-tabs>
7
+
8
+    
9
+  </div>
10
+</template>
11
+
12
+<script>
13
+// import Vue from 'vue';
14
+import { Tab, Tabs } from 'vant';
15
+import  secondhand  from '../secondhand';
16
+export default {
17
+  name: "home",
18
+   components: {
19
+    [Tab.name]: Tab,
20
+    [Tabs.name]: Tabs,
21
+    Secondhand:secondhand,
22
+  },
23
+  data() {
24
+    return {
25
+      msg: "222",
26
+    };
27
+  },
28
+};
29
+</script>
30
+
31
+<!-- Add "scoped" attribute to limit CSS to this component only -->
32
+<style scoped></style>

+ 94
- 0
src/view/login/index.vue Voir le fichier

@@ -0,0 +1,94 @@
1
+<template>
2
+  <div class="login">
3
+    <p>经纪人平台</p>
4
+    <div class="login-from"> 
5
+      <van-form @submit="onSubmit">
6
+        <van-field
7
+          v-model="username"
8
+          name="username"
9
+          label=" "
10
+          :left-icon="usericon"
11
+          label-width='20'
12
+          placeholder="请输入账号"
13
+        />
14
+        <van-field
15
+          v-model="password"
16
+          type="password"
17
+          name="password"
18
+          label=" "
19
+          label-width='20'
20
+          :left-icon="passwordicon"
21
+          placeholder="请输入密码"
22
+        />
23
+        <van-field name="remember" :border="false">
24
+          <template #input>
25
+            <van-checkbox shape="square" v-model="remember"
26
+              >记住密码</van-checkbox
27
+            >
28
+          </template>
29
+        </van-field>
30
+
31
+        <div style="margin: 16px;">
32
+          <van-button
33
+            class="loginbutton"
34
+            block
35
+            type="default"
36
+            native-type="submit"
37
+            >登录</van-button
38
+          >
39
+        </div>
40
+      </van-form>
41
+    </div>
42
+  </div>
43
+</template>
44
+
45
+<script>
46
+// import Vue from 'vue';
47
+import { Form, Button, Field, checkbox } from "vant";
48
+import usericon from "./../../assets/user.png";
49
+import passwordicon from "./../../assets/password.png";
50
+
51
+export default {
52
+  name: "login",
53
+  components: {
54
+    [Form.name]: Form,
55
+    [Button.name]: Button,
56
+    [Field.name]: Field,
57
+    [checkbox.name]: checkbox,
58
+  },
59
+  data() {
60
+    return {
61
+      usericon,
62
+      passwordicon,
63
+      username: "",
64
+      password: "",
65
+      remember: true,
66
+    };
67
+  },
68
+  methods: {
69
+    onSubmit(values) {
70
+      console.log("submit", values);
71
+
72
+      this.$router.push('home')
73
+    },
74
+  },
75
+};
76
+</script>
77
+
78
+<!-- Add "scoped" attribute to limit CSS to this component only -->
79
+<style lang="less" scoped>
80
+.login {
81
+  width: 100%;
82
+  padding-top: 15vh;
83
+  &-from{
84
+    width: 80%;
85
+margin: auto;
86
+     .loginbutton {
87
+    background: #d7693a;
88
+    color: #fff;
89
+    letter-spacing: 6px;
90
+  }
91
+  }
92
+ 
93
+}
94
+</style>

+ 27
- 0
src/view/renting/index.vue Voir le fichier

@@ -0,0 +1,27 @@
1
+<template>
2
+  <div class="renting">
3
+   123
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+// import Vue from 'vue';
9
+import { Tab, Tabs } from 'vant';
10
+
11
+export default {
12
+  name: "renting",
13
+   components: {
14
+    [Tab.name]: Tab,
15
+    [Tabs.name]: Tabs,
16
+    
17
+  },
18
+  data() {
19
+    return {
20
+      msg: "222",
21
+    };
22
+  },
23
+};
24
+</script>
25
+
26
+<!-- Add "scoped" attribute to limit CSS to this component only -->
27
+<style scoped></style>

+ 114
- 0
src/view/secondhand/components/secondhandcard/index.vue Voir le fichier

@@ -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">
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>62726元/㎡</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>

+ 228
- 0
src/view/secondhand/components/secondhandmorescreen/index.vue Voir le fichier

@@ -0,0 +1,228 @@
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
+  </div>
95
+</template>
96
+
97
+<script>
98
+import { reactive, ref } from "vue";
99
+import {
100
+  Col,
101
+  Row,
102
+  Search,
103
+  Cell,
104
+  CellGroup,
105
+  Field,
106
+  Popup,
107
+  Cascader,
108
+  Button,
109
+  Form,
110
+  ActionBar,
111
+  ActionBarIcon,
112
+  ActionBarButton,
113
+  Icon,
114
+  Popover,
115
+} from "vant";
116
+import {
117
+  AreaQuery,
118
+  DemandQuery,
119
+  CheeckButtomQuery,
120
+  PositionQuery,
121
+} from "../../../../components/queryCompents";
122
+
123
+export default {
124
+  name: "secondhandmorescreen",
125
+  components: {
126
+    [Col.name]: Col,
127
+    [Row.name]: Row,
128
+    [Search.name]: Search,
129
+    [Cell.name]: Cell,
130
+    [CellGroup.name]: CellGroup,
131
+    [Field.name]: Field,
132
+    [Popup.name]: Popup,
133
+    [Cascader.name]: Cascader,
134
+    [Button.name]: Button,
135
+    [Form.name]: Form,
136
+    [ActionBar.name]: ActionBar,
137
+    [ActionBarIcon.name]: ActionBarIcon,
138
+    [ActionBarButton.name]: ActionBarButton,
139
+    [Icon.name]: Icon,
140
+    [Popover.name]: Popover,
141
+
142
+    AreaQuery,
143
+    DemandQuery,
144
+    CheeckButtomQuery,
145
+    PositionQuery,
146
+  },
147
+  props: {
148
+    // options: [],
149
+  },
150
+  data() {
151
+    return {};
152
+  },
153
+
154
+  setup() {
155
+    const state = reactive({
156
+      housetype: [],
157
+      renovation: [],
158
+    });
159
+    const serchValue = ref("");
160
+    const searchType = ref("楼盘");
161
+    const showPopover = ref(false);
162
+
163
+    // 通过 actions 属性来定义菜单选项
164
+    const searchActions = [
165
+      { text: "楼盘", value: "1" },
166
+      { text: "房源", value: "2" },
167
+      { text: "业主电话", value: "3" },
168
+    ];
169
+    const onSearchSelect = (action) => {
170
+      console.log("housetypeChange", action);
171
+
172
+      searchType.value = action.text;
173
+    };
174
+
175
+    const onHousetypeChange = (values) => {
176
+      console.log("housetypeChange", values);
177
+
178
+      state.housetype = values;
179
+    };
180
+    const onSubmit = (values) => {
181
+      console.log(state, "submit", values);
182
+    };
183
+
184
+    const housetypeoptions = [
185
+      {
186
+        title: "1室",
187
+        value: "a",
188
+      },
189
+      {
190
+        title: "2室",
191
+        value: "b",
192
+      },
193
+      {
194
+        title: "3室",
195
+        value: "c",
196
+      },
197
+      {
198
+        title: "3室及以上",
199
+        value: "d",
200
+      },
201
+      {
202
+        title: "全部",
203
+        value: "all",
204
+      },
205
+    ];
206
+
207
+    return {
208
+      serchValue,
209
+      searchType,
210
+      state,
211
+      onSubmit,
212
+      housetypeoptions,
213
+      onHousetypeChange,
214
+      showPopover,
215
+      searchActions,
216
+      onSearchSelect,
217
+    };
218
+  },
219
+};
220
+</script>
221
+
222
+<!-- Add "scoped" attribute to limit CSS to this component only -->
223
+<style lang="less" scoped>
224
+.secondhandmorescreen {
225
+  text-align: left;
226
+  background-color: #f4f4f4;
227
+}
228
+</style>

+ 136
- 0
src/view/secondhand/components/secondhandscreen.vue Voir le fichier

@@ -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>

+ 427
- 0
src/view/secondhand/detail/index.vue Voir le fichier

@@ -0,0 +1,427 @@
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
+        <div style="float:right">
15
+          <van-popover
16
+            v-model:show="showPopover"
17
+            :actions="actions"
18
+            @select="onSelect"
19
+            placement="bottom-end"
20
+          >
21
+            <template #reference>
22
+              <van-icon name="chat-o" />
23
+            </template>
24
+          </van-popover>
25
+        </div>
26
+      </div>
27
+      <Contextc :options="housingInformationOptions"></Contextc>
28
+    </div>
29
+    <div class="detailcard">
30
+      <div class="detailcard-title">
31
+        <span>基础信息</span>
32
+      </div>
33
+      <Contextc :options="baseInformationOptions"></Contextc>
34
+    </div>
35
+    <div class="detailcard">
36
+      <div class="detailcard-title">
37
+        <span>物业信息</span>
38
+      </div>
39
+      <Contextc :options="propertyInformationOptions"></Contextc>
40
+    </div>
41
+    <div class="detailcard">
42
+      <div class="detailcard-title">
43
+        <span>角色人</span>
44
+      </div>
45
+      <Contextc :options="roleInformationOptions"></Contextc>
46
+    </div>
47
+    <div class="detailcard">
48
+      <div class="detailcard-title">
49
+        <span>委托书</span>
50
+      </div>
51
+      <Contextc :options="entrustOptions" nodata=""></Contextc>
52
+    </div>
53
+    <div class="detailcard">
54
+      <div class="detailcard-title">
55
+        <span>钥匙</span>
56
+      </div>
57
+      <Contextc :options="keyOptions" nodata=""></Contextc>
58
+    </div>
59
+
60
+    <div class="detailcard">
61
+      <div class="detailcard-title">
62
+        <van-row>
63
+          <van-col span="12"> <span>跟进记录</span></van-col>
64
+          <van-col span="12" style="line-height:26px;display: flex;">
65
+            <van-button type="default" color="#d75e3a" size="mini"
66
+              >添加跟进</van-button
67
+            ></van-col
68
+          >
69
+        </van-row>
70
+      </div>
71
+      <div>
72
+        <Stepc></Stepc>
73
+      </div>
74
+    </div>
75
+
76
+    <div class="detailcard">
77
+      <div class="detailcard-title">
78
+        <van-row>
79
+          <van-col span="12"> <span>空看记录</span></van-col>
80
+          <van-col span="12" style="line-height:26px;display: flex;">
81
+            <van-button type="default" color="#d75e3a" size="mini"
82
+              >添加空看</van-button
83
+            ></van-col
84
+          >
85
+        </van-row>
86
+      </div>
87
+      <div>
88
+        <Stepc></Stepc>
89
+      </div>
90
+    </div>
91
+  </div>
92
+</template>
93
+
94
+<script>
95
+import { ref } from "vue";
96
+import { Swiper } from "../../../components/detailCompents";
97
+import { Icon, Popover, Row, Col, Button, steps, step, Dialog } from "vant";
98
+import Contextc from "../../../components/contextC";
99
+import Stepc from "../../../components/stepC";
100
+import {router} from '../../../router'
101
+
102
+export default {
103
+  name: "secondhanddetail",
104
+  components: {
105
+    [Row.name]: Row,
106
+    [Col.name]: Col,
107
+    [Popover.name]: Popover,
108
+    [Icon.name]: Icon,
109
+    [Button.name]: Button,
110
+    [steps.name]: steps,
111
+    [step.name]: step,
112
+    Stepc: Stepc,
113
+    Contextc: Contextc,
114
+    Swiper: Swiper,
115
+  },
116
+  data() {
117
+    return {};
118
+  },
119
+
120
+  setup() {
121
+    const showPopover = ref(false);
122
+
123
+    // 通过 actions 属性来定义菜单选项
124
+    const actions = [
125
+      { text: "设置房源保护", value: "1" },
126
+      { text: "新增业主电话", value: "2" },
127
+      { text: "下架房源", value: "3" },
128
+      { text: "修改房源", value: "4" },
129
+      { text: "分享房源", value: "5" },
130
+      { text: "房源实勘", value: "6" },
131
+    ];
132
+    // 设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。
133
+    const onSelect = (action) => {
134
+      console.log(action);
135
+      if (action.value == 1) {
136
+        // 设置房源保护
137
+        Dialog.confirm({
138
+          title: "提示",
139
+          message:
140
+            "设为房源保护后,只有录入人、同部门的上级以及上级部门的上级可以看到房源敏感信息。",
141
+          theme: "round-button",
142
+        })
143
+          .then(() => {
144
+            // on close
145
+          })
146
+          .catch(() => {
147
+            // on cancel
148
+          });
149
+      } else if(action.value == 2){
150
+// 新增业主电话
151
+      }
152
+      else if(action.value == 3){
153
+        // 下架房源
154
+
155
+ router.push('/closehouse')
156
+      }
157
+      else if(action.value == 4){
158
+        // 修改房源
159
+        router.push('/edithouse')
160
+      }
161
+      else if(action.value == 5){
162
+        // 分享房源
163
+      }
164
+      else if(action.value == 6){
165
+        // 房源实勘
166
+      }
167
+    };
168
+    const onLookClick = () => {
169
+      console.log("onLookClick");
170
+    };
171
+
172
+    // 房源信息
173
+    const housingInformationOptions = [
174
+      {
175
+        name: "所属楼盘",
176
+        value: "123",
177
+        span: 24,
178
+      },
179
+      {
180
+        name: "房源id",
181
+        value: "123",
182
+      },
183
+      {
184
+        name: "楼层",
185
+        value: "123",
186
+      },
187
+      {
188
+        name: "所属区县",
189
+        value: "123",
190
+      },
191
+      {
192
+        name: "面积",
193
+        value: "123",
194
+      },
195
+      {
196
+        name: "所属商圈",
197
+        value: "123",
198
+      },
199
+      {
200
+        name: "价格",
201
+        value: "123",
202
+      },
203
+      {
204
+        name: "楼房号",
205
+        value: "123",
206
+      },
207
+      {
208
+        name: "单元",
209
+        value: "123",
210
+      },
211
+      {
212
+        name: "业主姓名",
213
+        value: "123",
214
+      },
215
+      {
216
+        name: "楼栋",
217
+        value: "123",
218
+      },
219
+      {
220
+        name: "业主电话",
221
+        value: "123",
222
+      },
223
+      {
224
+        name: "查看敏感信息",
225
+        value: "123",
226
+        type: "BUTTOM",
227
+        click: () => onLookClick(),
228
+      },
229
+    ];
230
+    // 基本信息
231
+    const baseInformationOptions = [
232
+      {
233
+        name: "户型",
234
+        value: "123",
235
+      },
236
+      {
237
+        name: "朝向",
238
+        value: "123",
239
+      },
240
+      {
241
+        name: "装修",
242
+        value: "123",
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
+        name: "税费",
262
+        value: "123",
263
+      },
264
+      {
265
+        name: "来源",
266
+        value: "123",
267
+        span: 24,
268
+      },
269
+    ];
270
+    // 物业信息
271
+    const propertyInformationOptions = [
272
+      {
273
+        name: "物业费",
274
+        value: "123",
275
+      },
276
+      {
277
+        name: "建筑年代",
278
+        value: "123",
279
+      },
280
+      {
281
+        name: "均价",
282
+        value: "123",
283
+      },
284
+      {
285
+        name: "开发商",
286
+        value: "123",
287
+      },
288
+      {
289
+        name: "物业公司",
290
+        value: "123",
291
+      },
292
+    ];
293
+    // 角色人
294
+    const roleInformationOptions = [
295
+      {
296
+        name: "首次录入人",
297
+        value: "123",
298
+      },
299
+      {
300
+        name: "时间",
301
+        value: "123",
302
+      },
303
+      {
304
+        name: "录入人",
305
+        value: "123",
306
+      },
307
+      {
308
+        name: "时间",
309
+        value: "123",
310
+      },
311
+      {
312
+        name: "维护人",
313
+        value: "123",
314
+      },
315
+      {
316
+        name: "查看电话",
317
+        value: "123",
318
+        type: "BUTTOM",
319
+        onClick: () => {},
320
+      },
321
+      {
322
+        name: "实勘人",
323
+        value: "123",
324
+      },
325
+      {
326
+        name: "时间",
327
+        value: "123",
328
+      },
329
+      {
330
+        name: "钥匙人",
331
+        value: "123",
332
+        span: 24,
333
+      },
334
+      {
335
+        name: "委托人",
336
+        value: "123",
337
+      },
338
+      {
339
+        name: "时间",
340
+        value: "123",
341
+      },
342
+      {
343
+        name: "最后修改人",
344
+        value: "123",
345
+      },
346
+      {
347
+        name: "时间",
348
+        value: "123",
349
+      },
350
+    ];
351
+
352
+    // 委托书
353
+    const entrustOptions = [
354
+      {
355
+        name: "委托书编号",
356
+        value: "123",
357
+      },
358
+      {
359
+        name: "查看委托书",
360
+        value: "123",
361
+        type: "BUTTOM",
362
+        onClick: () => {},
363
+      },
364
+      {
365
+        name: "开始时间",
366
+        value: "123",
367
+      },
368
+      {
369
+        name: "截止时间",
370
+        value: "123",
371
+      },
372
+    ];
373
+
374
+    // 钥匙
375
+    const keyOptions = [
376
+      {
377
+        name: "钥匙编号",
378
+        value: "123",
379
+        span: 24,
380
+      },
381
+
382
+      {
383
+        name: "存放地址",
384
+        value: "123",
385
+        span: 24,
386
+      },
387
+    ];
388
+
389
+    return {
390
+      housingInformationOptions,
391
+      baseInformationOptions,
392
+      propertyInformationOptions,
393
+      roleInformationOptions,
394
+      entrustOptions,
395
+      keyOptions,
396
+      actions,
397
+      onSelect,
398
+      showPopover,
399
+    };
400
+  },
401
+};
402
+</script>
403
+
404
+<!-- Add "scoped" attribute to limit CSS to this component only -->
405
+<style lang="less" scoped>
406
+.secondhanddetail {
407
+  text-align: left;
408
+}
409
+.secondhand-main::-webkit-scrollbar {
410
+  display: none; /*隐藏滚动条*/
411
+}
412
+
413
+.detailcard {
414
+  min-height: 10px;
415
+  border-top: 1px solid #5b6b73;
416
+  padding: 10px;
417
+  &-title {
418
+    font-size: 15px;
419
+    color: #d75e3a;
420
+    line-height: 30px;
421
+  }
422
+  &-context {
423
+    font-size: 13px;
424
+    color: #999;
425
+  }
426
+}
427
+</style>

+ 337
- 0
src/view/secondhand/edithouse/index.vue Voir le fichier

@@ -0,0 +1,337 @@
1
+<template>
2
+  <div class="secondhanddetail">
3
+   
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+import { ref } from "vue";
9
+
10
+import { Icon, Popover, Row, Col, Button, steps, step, Dialog } from "vant";
11
+
12
+import {router} from '../../../router'
13
+
14
+export default {
15
+  name: "secondhanddetail",
16
+  components: {
17
+    [Row.name]: Row,
18
+    [Col.name]: Col,
19
+    [Popover.name]: Popover,
20
+    [Icon.name]: Icon,
21
+    [Button.name]: Button,
22
+    [steps.name]: steps,
23
+    [step.name]: step,
24
+
25
+  },
26
+  data() {
27
+    return {};
28
+  },
29
+
30
+  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
+    };
81
+
82
+    // 房源信息
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
+    const baseInformationOptions = [
142
+      {
143
+        name: "户型",
144
+        value: "123",
145
+      },
146
+      {
147
+        name: "朝向",
148
+        value: "123",
149
+      },
150
+      {
151
+        name: "装修",
152
+        value: "123",
153
+      },
154
+      {
155
+        name: "房屋用途",
156
+        value: "123",
157
+      },
158
+      {
159
+        name: "建筑类型",
160
+        value: "123",
161
+      },
162
+      {
163
+        name: "配备电梯",
164
+        value: "123",
165
+      },
166
+      {
167
+        name: "抵押信息",
168
+        value: "123",
169
+      },
170
+      {
171
+        name: "税费",
172
+        value: "123",
173
+      },
174
+      {
175
+        name: "来源",
176
+        value: "123",
177
+        span: 24,
178
+      },
179
+    ];
180
+    // 物业信息
181
+    const propertyInformationOptions = [
182
+      {
183
+        name: "物业费",
184
+        value: "123",
185
+      },
186
+      {
187
+        name: "建筑年代",
188
+        value: "123",
189
+      },
190
+      {
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: "查看委托书",
270
+        value: "123",
271
+        type: "BUTTOM",
272
+        onClick: () => {},
273
+      },
274
+      {
275
+        name: "开始时间",
276
+        value: "123",
277
+      },
278
+      {
279
+        name: "截止时间",
280
+        value: "123",
281
+      },
282
+    ];
283
+
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
+    ];
298
+
299
+    return {
300
+      housingInformationOptions,
301
+      baseInformationOptions,
302
+      propertyInformationOptions,
303
+      roleInformationOptions,
304
+      entrustOptions,
305
+      keyOptions,
306
+      actions,
307
+      onSelect,
308
+      showPopover,
309
+    };
310
+  },
311
+};
312
+</script>
313
+
314
+<!-- Add "scoped" attribute to limit CSS to this component only -->
315
+<style lang="less" scoped>
316
+.secondhanddetail {
317
+  text-align: left;
318
+}
319
+.secondhand-main::-webkit-scrollbar {
320
+  display: none; /*隐藏滚动条*/
321
+}
322
+
323
+.detailcard {
324
+  min-height: 10px;
325
+  border-top: 1px solid #5b6b73;
326
+  padding: 10px;
327
+  &-title {
328
+    font-size: 15px;
329
+    color: #d75e3a;
330
+    line-height: 30px;
331
+  }
332
+  &-context {
333
+    font-size: 13px;
334
+    color: #999;
335
+  }
336
+}
337
+</style>

+ 161
- 0
src/view/secondhand/index.vue Voir le fichier

@@ -0,0 +1,161 @@
1
+<template>
2
+  <div class="secondhand">
3
+    <SecondHandScreen :options="options" @onShowMore="onShowMore" />
4
+    <div >
5
+      <van-list
6
+        class="secondhand-main"
7
+        v-model:loading="state.loading"
8
+        :finished="state.finished"
9
+        finished-text="没有更多了"
10
+        @load="onLoad"
11
+      >
12
+        <SecondHandCard
13
+          v-for="item in state.list"
14
+          :key="item.id"
15
+          :datas="item.datas"
16
+          @click="toDetail()"
17
+        ></SecondHandCard>
18
+      </van-list>
19
+    </div>
20
+    <van-popup
21
+      v-model:show="moreShow"
22
+      position="right"
23
+      :style="{ width: '100%', height: '100%' }"
24
+    ><SecondHandMoreScreen />
25
+    </van-popup>
26
+  </div>
27
+</template>
28
+
29
+<script>
30
+// import Vue from 'vue';
31
+import { DropdownMenu, DropdownItem, List, Popup } from "vant";
32
+import secondhandscreen from "./components/secondhandscreen";
33
+import secondhandmorescreen from "./components/secondhandmorescreen";
34
+import secondhandcard from "./components/secondhandcard";
35
+import { reactive, ref } from "vue";
36
+import {router} from '../../router'
37
+
38
+export default {
39
+  name: "secondhand",
40
+  components: {
41
+    [DropdownMenu.name]: DropdownMenu,
42
+    [DropdownItem.name]: DropdownItem,
43
+    [List.name]: List,
44
+    [Popup.name]: Popup,
45
+    SecondHandScreen: secondhandscreen,
46
+    SecondHandCard: secondhandcard,
47
+    SecondHandMoreScreen: secondhandmorescreen,
48
+  },
49
+  data() {
50
+    return {
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('/secondhand/detail')
136
+    };
137
+    
138
+
139
+    return {
140
+      state,
141
+      onLoad,
142
+      moreShow,
143
+      onShowMore,
144
+      toDetail,
145
+    };
146
+  },
147
+};
148
+</script>
149
+
150
+<!-- Add "scoped" attribute to limit CSS to this component only -->
151
+<style scoped>
152
+.secondhand-main {
153
+  width: 100%;
154
+  height: calc(100vh - 142px);
155
+  overflow: hidden;
156
+  overflow-y: auto;
157
+}
158
+.secondhand-main::-webkit-scrollbar {
159
+  display: none; /*隐藏滚动条*/
160
+}
161
+</style>

+ 21
- 0
src/view/user/index.vue Voir le fichier

@@ -0,0 +1,21 @@
1
+<template>
2
+  <div class="user">
3
+   123123
4
+  </div>
5
+</template>
6
+
7
+<script>
8
+// import Vue from 'vue';
9
+
10
+export default {
11
+  name: "user",
12
+   components: {
13
+  
14
+
15
+  },
16
+
17
+};
18
+</script>
19
+
20
+<!-- Add "scoped" attribute to limit CSS to this component only -->
21
+<style scoped></style>

+ 40
- 0
vue.config.js Voir le fichier

@@ -0,0 +1,40 @@
1
+module.exports = {
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
+  // }
15
+  css: {
16
+    loaderOptions: {
17
+      less: {
18
+        // 若 less-loader 版本小于 6.0,请移除 lessOptions 这一级,直接配置选项。
19
+        lessOptions: {
20
+          modifyVars: {
21
+            // 直接覆盖变量
22
+            // box-shadow: 0 2px 12px rgba(100,101,102,.12)
23
+            '@dropdown-menu-box-shadow': 'none',
24
+            '@tabbar-item-active-color': '#D7693A',
25
+            '@steps-background-color': 'background-color: rgb(249, 249, 249)',
26
+            // '@step-font-size':'13px'
27
+            '@step-text-color': '#999',
28
+            '@step-active-color': '#999',
29
+            '@active-color':'#999',
30
+            '@step-finish-line-color':'#999',
31
+            // 'text-color': '#111',D7693A
32
+            // 'border-color': '#eee',
33
+            // // 或者可以通过 less 文件覆盖(文件路径为绝对路径)
34
+            // hack: `true; @import "your-less-file-path.less";`,
35
+          },
36
+        },
37
+      },
38
+    },
39
+  },
40
+};

+ 123
- 9
yarn.lock Voir le fichier

@@ -819,9 +819,9 @@
819 819
     "@babel/types" "^7.4.4"
820 820
     esutils "^2.0.2"
821 821
 
822
-"@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
822
+"@babel/runtime@7.x", "@babel/runtime@^7.0.0", "@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
823 823
   version "7.13.10"
824
-  resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.13.10.tgz?cache=0&sync_timestamp=1615243220467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d"
824
+  resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d"
825 825
   integrity sha1-R9QqV7YJX0Ro2kQDiP262L6/DX0=
826 826
   dependencies:
827 827
     regenerator-runtime "^0.13.4"
@@ -913,6 +913,11 @@
913 913
   resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1609074440744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
914 914
   integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=
915 915
 
916
+"@popperjs/core@^2.5.4":
917
+  version "2.9.1"
918
+  resolved "https://registry.npm.taobao.org/@popperjs/core/download/@popperjs/core-2.9.1.tgz?cache=0&sync_timestamp=1615219280778&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.9.1.tgz#7f554e7368c9ab679a11f4a042ca17149d70cf12"
919
+  integrity sha1-f1VOc2jJq2eaEfSgQsoXFJ1wzxI=
920
+
916 921
 "@soda/friendly-errors-webpack-plugin@^1.7.1":
917 922
   version "1.8.0"
918 923
   resolved "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927401282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz#84751d82a93019d5c92c0cf0e45ac59087cd2240"
@@ -990,7 +995,7 @@
990 995
   dependencies:
991 996
     "@types/node" "*"
992 997
 
993
-"@types/json-schema@^7.0.5":
998
+"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
994 999
   version "7.0.7"
995 1000
   resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz?cache=0&sync_timestamp=1613379017372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
996 1001
   integrity sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=
@@ -1092,6 +1097,30 @@
1092 1097
     "@types/webpack-sources" "*"
1093 1098
     source-map "^0.6.0"
1094 1099
 
1100
+"@vant/icons@^1.5.3":
1101
+  version "1.5.3"
1102
+  resolved "https://registry.npm.taobao.org/@vant/icons/download/@vant/icons-1.5.3.tgz?cache=0&sync_timestamp=1613997504088&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Ficons%2Fdownload%2F%40vant%2Ficons-1.5.3.tgz#b7779f67bf608d417a82452fbede406dfa46b439"
1103
+  integrity sha1-t3efZ79gjUF6gkUvvt5AbfpGtDk=
1104
+
1105
+"@vant/lazyload@^1.0.4":
1106
+  version "1.0.4"
1107
+  resolved "https://registry.npm.taobao.org/@vant/lazyload/download/@vant/lazyload-1.0.4.tgz#f1bbd81217cf416a377ab2f928f2a147a4489259"
1108
+  integrity sha1-8bvYEhfPQWo3erL5KPKhR6RIklk=
1109
+
1110
+"@vant/popperjs@^1.0.4":
1111
+  version "1.0.4"
1112
+  resolved "https://registry.npm.taobao.org/@vant/popperjs/download/@vant/popperjs-1.0.4.tgz?cache=0&sync_timestamp=1613451837040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Fpopperjs%2Fdownload%2F%40vant%2Fpopperjs-1.0.4.tgz#49c20809a3828e7b036e23d50fb56121e997618f"
1113
+  integrity sha1-ScIICaOCjnsDbiPVD7VhIemXYY8=
1114
+  dependencies:
1115
+    "@popperjs/core" "^2.5.4"
1116
+
1117
+"@vant/use@^1.0.5":
1118
+  version "1.0.5"
1119
+  resolved "https://registry.npm.taobao.org/@vant/use/download/@vant/use-1.0.5.tgz#44bee952ebccf9396414a51c4d4b458434a9de23"
1120
+  integrity sha1-RL7pUuvM+TlkFKUcTUtFhDSp3iM=
1121
+  dependencies:
1122
+    "@babel/runtime" "7.x"
1123
+
1095 1124
 "@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
1096 1125
   version "1.2.1"
1097 1126
   resolved "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
@@ -1647,7 +1676,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
1647 1676
   resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1608062556009&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
1648 1677
   integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
1649 1678
 
1650
-ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
1679
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
1651 1680
   version "6.12.6"
1652 1681
   resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1615144138206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
1653 1682
   integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
@@ -1912,6 +1941,14 @@ babel-plugin-dynamic-import-node@^2.3.3:
1912 1941
   dependencies:
1913 1942
     object.assign "^4.1.0"
1914 1943
 
1944
+babel-plugin-import@^1.13.3:
1945
+  version "1.13.3"
1946
+  resolved "https://registry.npm.taobao.org/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz?cache=0&sync_timestamp=1606209920171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-import%2Fdownload%2Fbabel-plugin-import-1.13.3.tgz#9dbbba7d1ac72bd412917a830d445e00941d26d7"
1947
+  integrity sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=
1948
+  dependencies:
1949
+    "@babel/helper-module-imports" "^7.0.0"
1950
+    "@babel/runtime" "^7.0.0"
1951
+
1915 1952
 babel-plugin-polyfill-corejs2@^0.1.4:
1916 1953
   version "0.1.10"
1917 1954
   resolved "https://registry.npm.taobao.org/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.1.10.tgz?cache=0&sync_timestamp=1614681394532&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1"
@@ -2732,6 +2769,13 @@ cookie@0.4.0:
2732 2769
   resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
2733 2770
   integrity sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=
2734 2771
 
2772
+copy-anything@^2.0.1:
2773
+  version "2.0.3"
2774
+  resolved "https://registry.npm.taobao.org/copy-anything/download/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87"
2775
+  integrity sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=
2776
+  dependencies:
2777
+    is-what "^3.12.0"
2778
+
2735 2779
 copy-concurrently@^1.0.0:
2736 2780
   version "1.0.5"
2737 2781
   resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -3394,7 +3438,7 @@ entities@^2.0.0:
3394 3438
   resolved "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1611535322406&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
3395 3439
   integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=
3396 3440
 
3397
-errno@^0.1.3, errno@~0.1.7:
3441
+errno@^0.1.1, errno@^0.1.3, errno@~0.1.7:
3398 3442
   version "0.1.8"
3399 3443
   resolved "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
3400 3444
   integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=
@@ -3472,7 +3516,7 @@ eslint-loader@^2.2.1:
3472 3516
     object-hash "^1.1.4"
3473 3517
     rimraf "^2.6.1"
3474 3518
 
3475
-eslint-plugin-vue@^7.0.0-0:
3519
+eslint-plugin-vue@^7.0.0:
3476 3520
   version "7.7.0"
3477 3521
   resolved "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-7.7.0.tgz?cache=0&sync_timestamp=1614681250410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-7.7.0.tgz#a90df4595e670821bf243bd2750ededdb74948b8"
3478 3522
   integrity sha1-qQ30WV5nCCG/JDvSdQ7e3bdJSLg=
@@ -4564,6 +4608,11 @@ ignore@^4.0.3, ignore@^4.0.6:
4564 4608
   resolved "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
4565 4609
   integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=
4566 4610
 
4611
+image-size@~0.5.0:
4612
+  version "0.5.5"
4613
+  resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
4614
+  integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
4615
+
4567 4616
 import-cwd@^2.0.0:
4568 4617
   version "2.1.0"
4569 4618
   resolved "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -4983,6 +5032,11 @@ is-typedarray@~1.0.0:
4983 5032
   resolved "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
4984 5033
   integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
4985 5034
 
5035
+is-what@^3.12.0:
5036
+  version "3.14.1"
5037
+  resolved "https://registry.npm.taobao.org/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1615169709354&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
5038
+  integrity sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=
5039
+
4986 5040
 is-windows@^1.0.2:
4987 5041
   version "1.0.2"
4988 5042
   resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@@ -5180,6 +5234,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
5180 5234
   resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
5181 5235
   integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
5182 5236
 
5237
+klona@^2.0.4:
5238
+  version "2.0.4"
5239
+  resolved "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
5240
+  integrity sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A=
5241
+
5183 5242
 launch-editor-middleware@^2.2.1:
5184 5243
   version "2.2.1"
5185 5244
   resolved "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
@@ -5195,6 +5254,31 @@ launch-editor@^2.2.1:
5195 5254
     chalk "^2.3.0"
5196 5255
     shell-quote "^1.6.1"
5197 5256
 
5257
+less-loader@^7.1.0:
5258
+  version "7.3.0"
5259
+  resolved "https://registry.npm.taobao.org/less-loader/download/less-loader-7.3.0.tgz?cache=0&sync_timestamp=1612196787089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless-loader%2Fdownload%2Fless-loader-7.3.0.tgz#f9d6d36d18739d642067a05fb5bd70c8c61317e5"
5260
+  integrity sha1-+dbTbRhznWQgZ6Bftb1wyMYTF+U=
5261
+  dependencies:
5262
+    klona "^2.0.4"
5263
+    loader-utils "^2.0.0"
5264
+    schema-utils "^3.0.0"
5265
+
5266
+less@^3.12.2:
5267
+  version "3.13.1"
5268
+  resolved "https://registry.npm.taobao.org/less/download/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909"
5269
+  integrity sha1-DryR0qDpwMZzW4PUlrCrBYMHeQk=
5270
+  dependencies:
5271
+    copy-anything "^2.0.1"
5272
+    tslib "^1.10.0"
5273
+  optionalDependencies:
5274
+    errno "^0.1.1"
5275
+    graceful-fs "^4.1.2"
5276
+    image-size "~0.5.0"
5277
+    make-dir "^2.1.0"
5278
+    mime "^1.4.1"
5279
+    native-request "^1.0.5"
5280
+    source-map "~0.6.0"
5281
+
5198 5282
 levn@^0.3.0, levn@~0.3.0:
5199 5283
   version "0.3.0"
5200 5284
   resolved "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -5355,7 +5439,7 @@ magic-string@^0.25.7:
5355 5439
   dependencies:
5356 5440
     sourcemap-codec "^1.4.4"
5357 5441
 
5358
-make-dir@^2.0.0:
5442
+make-dir@^2.0.0, make-dir@^2.1.0:
5359 5443
   version "2.1.0"
5360 5444
   resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
5361 5445
   integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=
@@ -5496,7 +5580,7 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
5496 5580
   dependencies:
5497 5581
     mime-db "1.46.0"
5498 5582
 
5499
-mime@1.6.0:
5583
+mime@1.6.0, mime@^1.4.1:
5500 5584
   version "1.6.0"
5501 5585
   resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
5502 5586
   integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
@@ -5693,6 +5777,11 @@ nanomatch@^1.2.9:
5693 5777
     snapdragon "^0.8.1"
5694 5778
     to-regex "^3.0.1"
5695 5779
 
5780
+native-request@^1.0.5:
5781
+  version "1.0.8"
5782
+  resolved "https://registry.npm.taobao.org/native-request/download/native-request-1.0.8.tgz?cache=0&sync_timestamp=1603410586468&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnative-request%2Fdownload%2Fnative-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb"
5783
+  integrity sha1-j2a/YG4PfqJ8DlmV6y9dA+M65vs=
5784
+
5696 5785
 natural-compare@^1.4.0:
5697 5786
   version "1.4.0"
5698 5787
   resolved "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -7231,6 +7320,15 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6
7231 7320
     ajv "^6.12.4"
7232 7321
     ajv-keywords "^3.5.2"
7233 7322
 
7323
+schema-utils@^3.0.0:
7324
+  version "3.0.0"
7325
+  resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef"
7326
+  integrity sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=
7327
+  dependencies:
7328
+    "@types/json-schema" "^7.0.6"
7329
+    ajv "^6.12.5"
7330
+    ajv-keywords "^3.5.2"
7331
+
7234 7332
 select-hose@^2.0.0:
7235 7333
   version "2.0.0"
7236 7334
   resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
@@ -8022,7 +8120,7 @@ ts-pnp@^1.1.6:
8022 8120
   resolved "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
8023 8121
   integrity sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=
8024 8122
 
8025
-tslib@^1.9.0:
8123
+tslib@^1.10.0, tslib@^1.9.0:
8026 8124
   version "1.14.1"
8027 8125
   resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1609887512458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
8028 8126
   integrity sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=
@@ -8294,6 +8392,17 @@ validate-npm-package-license@^3.0.1:
8294 8392
     spdx-correct "^3.0.0"
8295 8393
     spdx-expression-parse "^3.0.0"
8296 8394
 
8395
+vant@^3.0.0:
8396
+  version "3.0.9"
8397
+  resolved "https://registry.npm.taobao.org/vant/download/vant-3.0.9.tgz?cache=0&sync_timestamp=1615255840294&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvant%2Fdownload%2Fvant-3.0.9.tgz#f946775001a834ce27843fc9fa25414368266a78"
8398
+  integrity sha1-+UZ3UAGoNM4nhD/J+iVBQ2gmang=
8399
+  dependencies:
8400
+    "@babel/runtime" "7.x"
8401
+    "@vant/icons" "^1.5.3"
8402
+    "@vant/lazyload" "^1.0.4"
8403
+    "@vant/popperjs" "^1.0.4"
8404
+    "@vant/use" "^1.0.5"
8405
+
8297 8406
 vary@~1.1.2:
8298 8407
   version "1.1.2"
8299 8408
   resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -8355,6 +8464,11 @@ vue-loader@^15.9.2:
8355 8464
     vue-hot-reload-api "^2.3.0"
8356 8465
     vue-style-loader "^4.1.0"
8357 8466
 
8467
+vue-router@^4.0.0:
8468
+  version "4.0.5"
8469
+  resolved "https://registry.npm.taobao.org/vue-router/download/vue-router-4.0.5.tgz?cache=0&sync_timestamp=1615477462125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-4.0.5.tgz#dd0a4134bc950c37aef64b973e9ee1008428d8fa"
8470
+  integrity sha1-3QpBNLyVDDeu9kuXPp7hAIQo2Po=
8471
+
8358 8472
 vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
8359 8473
   version "4.1.3"
8360 8474
   resolved "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz?cache=0&sync_timestamp=1614758618345&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-style-loader%2Fdownload%2Fvue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"