Browse Source

1.解决方案H5列表页 2.解决方案详情展示

xinfeng 6 years ago
parent
commit
3a64cc73fb
8 changed files with 498 additions and 154 deletions
  1. 179 62
      assets/css/kaifain/index.scss
  2. 3 0
      nuxt.config.js
  3. 2 0
      package.json
  4. 3 1
      pages/kaifain/_tid/index.vue
  5. 188 88
      pages/kaifain/index.vue
  6. 3 2
      pages/kaifain/preview.vue
  7. 7 0
      plugins/vant.js
  8. 113 1
      yarn.lock

+ 179 - 62
assets/css/kaifain/index.scss

@@ -47,28 +47,28 @@
           cursor: pointer;
           width: webPxTvw(250);
           height: webPxTvw(60);
-          background:rgba(255,255,255,1);
-          border-radius:3px;
+          background: rgba(255, 255, 255, 1);
+          border-radius: 3px;
 
           display: flex;
           justify-content: center;
           align-items: center;
 
           p {
-            height:webPxTvw(28);
+            height: webPxTvw(28);
             font-size: webPxTvw(20);
-            font-weight:500;
-            color:rgba(48,142,255,1);
-            line-height:webPxTvw(28);
+            font-weight: 500;
+            color: rgba(48, 142, 255, 1);
+            line-height: webPxTvw(28);
           }
         }
 
-        .bePartner{
-          border:1px solid rgba(255,255,255,1);
+        .bePartner {
+          border: 1px solid rgba(255, 255, 255, 1);
           margin-left: webPxTvw(33);
           background: transparent;
           p {
-            color:rgba(255,255,255,1);
+            color: rgba(255, 255, 255, 1);
           }
         }
       }
@@ -107,10 +107,10 @@
           align-self: flex-start;
           p {
             text-align: left;
-            height:21px;
-            font-size:15px;
-            color:rgba(46,55,67,1);
-            line-height:21px;
+            height: 21px;
+            font-size: 15px;
+            color: rgba(46, 55, 67, 1);
+            line-height: 21px;
             font-weight: 500;
           }
         }
@@ -123,8 +123,8 @@
           .cell {
             width: 88px;
             height: 38px;
-            border-radius:2px;
-            border:1px solid rgba(239,239,239,1);
+            border-radius: 2px;
+            border: 1px solid rgba(239, 239, 239, 1);
             display: flex;
             justify-content: center;
             align-items: center;
@@ -139,19 +139,19 @@
             }
 
             p {
-              height:20px;
-              font-size:14px;
-              font-weight:400;
-              color:rgba(85,85,85,1);
-              line-height:20px;
+              height: 20px;
+              font-size: 14px;
+              font-weight: 400;
+              color: rgba(85, 85, 85, 1);
+              line-height: 20px;
             }
             &.selected {
-              border:1px solid rgba(48,142,255,1);
+              border: 1px solid rgba(48, 142, 255, 1);
               p {
-                color:rgba(48,142,255,1);
-                font-weight:500;
-                height:21px;
-                font-size:15px;
+                color: rgba(48, 142, 255, 1);
+                font-weight: 500;
+                height: 21px;
+                font-size: 15px;
                 line-height: 21px;
               }
             }
@@ -173,11 +173,11 @@
       margin-top: 80px;
 
       .sTitle {
-        height:25px;
-        font-size:18px;
-        font-weight:500;
-        color:rgba(34,34,34,1);
-        line-height:25px;
+        height: 25px;
+        font-size: 18px;
+        font-weight: 500;
+        color: rgba(34, 34, 34, 1);
+        line-height: 25px;
         margin-bottom: 14px;
       }
       .list {
@@ -214,42 +214,42 @@
               .titleA {
                 display: flex;
                 .title {
-                  height:28px;
-                  font-size:20px;
-                  font-weight:600;
-                  color:rgba(34,34,34,1);
-                  line-height:28px;
+                  height: 28px;
+                  font-size: 20px;
+                  font-weight: 600;
+                  color: rgba(34, 34, 34, 1);
+                  line-height: 28px;
                 }
                 .tips {
                   margin-left: 8px;
-                  background:rgba(48,142,255,0.11);
-                  height:18px;
-                  font-size:13px;
-                  font-weight:500;
-                  color:rgba(48,142,255,1);
-                  line-height:18px;
+                  background: rgba(48, 142, 255, 0.11);
+                  height: 18px;
+                  font-size: 13px;
+                  font-weight: 500;
+                  color: rgba(48, 142, 255, 1);
+                  line-height: 18px;
                   padding: 4px 17px;
                   border-radius: 2px;
                   box-sizing: content-box;
                 }
               }
-              .intro, .ep  {
+              .intro, .ep {
                 margin-top: 13px;
                 display: flex;
                 .tt {
-                  height:18px;
-                  font-size:13px;
-                  font-weight:600;
-                  color:rgba(34,34,34,1);
-                  line-height:18px;
+                  height: 18px;
+                  font-size: 13px;
+                  font-weight: 600;
+                  color: rgba(34, 34, 34, 1);
+                  line-height: 18px;
                 }
                 .value {
-                  width:656px;
-                  max-height:36px;
-                  font-size:13px;
-                  font-weight:400;
-                  color:rgba(68,68,68,1);
-                  line-height:18px;
+                  width: 656px;
+                  max-height: 36px;
+                  font-size: 13px;
+                  font-weight: 400;
+                  color: rgba(68, 68, 68, 1);
+                  line-height: 18px;
                   word-break: break-all;
                 }
               }
@@ -267,11 +267,11 @@
               }
               .word {
                 margin-left: 5px;
-                height:17px;
-                font-size:12px;
-                font-weight:400;
-                color:rgba(153,153,153,1);
-                line-height:17px;
+                height: 17px;
+                font-size: 12px;
+                font-weight: 400;
+                color: rgba(153, 153, 153, 1);
+                line-height: 17px;
 
               }
             }
@@ -287,15 +287,132 @@
     text-align: center;
   }
 
-
 }
 
 .main {
   margin-top: 0 !important;
+  &.isMobile {
+    width: 100vw;
+  }
 }
 
-@media screen and (max-width: 960px) {
-  .main {
-    min-width: 1000px;
+.kaifainMobile {
+  width: 100vw;
+  height: 100vh;
+  overflow: hidden;
+
+  .selectArea {
+
+  }
+  .listArea {
+    height: calc(100vh - 50px);
+    width: 100%;
+    overflow-x: hidden;
+    overflow-y: scroll;
+    background-color: #f6f5f8;
+
+    .cell {
+      margin-top: pxtovw(5);
+      width: 100%;
+      height: pxtovw(140);
+      padding: pxtovw(14) pxtovw(10) pxtovw(12) pxtovw(10);
+      background-color: #fff;
+
+      .bodyCont {
+        height: pxtovw(85);
+        width: 100%;
+        display: flex;
+        justify-content: flex-start;
+        align-items: center;
+
+        .left {
+          flex-shrink: 0;
+          width: pxtovw(85);
+          height: pxtovw(85);
+          font-size: 0;
+          img {
+            width: pxtovw(85);
+            height: pxtovw(85);
+            border-radius: pxtovw(2);
+          }
+        }
+        .right {
+          flex-grow: 1;
+          margin-left: pxtovw(10);
+          font-weight: 600;
+          color: rgba(34, 34, 34, 1);
+
+          .cellTitle {
+            font-size: pxtovw(15);
+            font-weight: 600;
+            color: rgba(34, 34, 34, 1);
+            text-align: left;
+            word-break: break-all;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+          }
+          .spanList {
+            margin-top: pxtovw(8);
+            display: flex;
+            .tips {
+              background: rgba(48, 142, 255, 0.11);
+              height: pxtovw(20);
+              font-size: pxtovw(12);
+              font-weight: 500;
+              color: rgba(48, 142, 255, 1);
+              line-height: pxtovw(20);
+              padding: pxtovw(4) pxtovw(10);
+              border-radius: 2px;
+              box-sizing: content-box;
+              transform-origin: left;
+              transform: scale(0.833);
+
+              //&:nth-child(n+2) {
+              //  margin-left: pxtovw(5);
+              //}
+            }
+          }
+          .desc {
+            margin-top: pxtovw(8);
+            height:pxtovw(16);
+            font-size:pxtovw(11);
+            font-weight:400;
+            color:rgba(68,68,68,1);
+            line-height:pxtovw(16);
+            display: -webkit-box;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            -webkit-box-orient: vertical;
+            -webkit-line-clamp: 2;
+
+          }
+        }
+      }
+      .bottomCont {
+        margin-top: pxtovw(11);
+        flex-shrink: 0;
+        height: pxtovw(20);
+        display: flex;
+        align-items: center;
+        .icon {
+          width: pxtovw(10);
+          height: pxtovw(10);
+          background: url('~@/assets/img/kaifain/icon_company@2x.png') no-repeat;
+          background-size: cover;
+        }
+        .word {
+          margin-left: pxtovw(3);
+          height: pxtovw(16);
+          font-size: pxtovw(12);
+          font-weight: 400;
+          color: rgba(153, 153, 153, 1);
+          line-height: pxtovw(16);
+          transform-origin: left center;
+          transform: scale(0.917);
+        }
+      }
+    }
   }
 }
+

+ 3 - 0
nuxt.config.js

@@ -63,6 +63,9 @@ module.exports = {
     'plugins/nuxtAxios',
     'plugins/deviceType',
     {
+      src: 'plugins/vant.js',
+      ssr: false
+    },{
       src: 'plugins/rem',
       ssr: false
     },

+ 2 - 0
package.json

@@ -16,6 +16,7 @@
     "@better-scroll/pull-down": "^2.0.0-beta.2",
     "@nuxtjs/axios": "^5.3.6",
     "@nuxtjs/proxy": "^1.3.1",
+    "babel-plugin-component": "^1.1.1",
     "better-scroll": "^2.0.0-beta.2",
     "cross-env": "^5.2.0",
     "css-loader": "^2.1.1",
@@ -33,6 +34,7 @@
     "qs": "^6.8.0",
     "sass-loader": "^7.1.0",
     "style-loader": "^0.23.1",
+    "vant": "^2.5.2",
     "vconsole": "^3.3.4",
     "vue-awesome-swiper": "^3.1.3",
     "vue-quill-editor": "^3.0.6"

+ 3 - 1
pages/kaifain/_tid/index.vue

@@ -22,7 +22,7 @@
          <p class="word">方案介绍</p>
          <p class="line"></p>
        </div>
-       <div class="introContent" v-html="detail.detail">
+       <div class="introContent ql-editor" v-html="detail.detail">
 
        </div>
      </div>
@@ -57,6 +57,8 @@
 </template>
 
 <script>
+  import "quill/dist/quill.core.css";
+  import "quill/dist/quill.snow.css";
   import ConnectUs from "@/components/common/connectUs"
   export default {
     layout: "opacity_header",

+ 188 - 88
pages/kaifain/index.vue

@@ -1,86 +1,134 @@
 <template>
-  <div class="kaifain" :class="{isMobile: mobile}">
-    <div class="topArea">
-      <div class="bgImage">
-        <img src="~@/assets/img/kaifain/banner_bj@2x.png" alt="">
-      </div>
-      <div class="topContent">
-        <div class="wordImg">
-          <img src="~@/assets/img/kaifain/top_name@2x.png" alt="">
+  <div :class="{isMobile: mobile}">
+    <div v-if="!mobile" class="kaifain">
+      <div class="topArea">
+        <div class="bgImage">
+          <img src="~@/assets/img/kaifain/banner_bj@2x.png" alt="">
         </div>
-        <div class="btnList">
-          <div class="freeSubmit" @click="isShowToast = true"><p>免费发布需求</p></div>
-          <div class="bePartner" @click="handleApplyBtnClick"><p>申请入驻</p></div>
+        <div class="topContent">
+          <div class="wordImg">
+            <img src="~@/assets/img/kaifain/top_name@2x.png" alt="">
+          </div>
+          <div class="btnList">
+            <div class="freeSubmit" @click="isShowToast = true"><p>免费发布需求</p></div>
+            <div class="bePartner" @click="handleApplyBtnClick"><p>申请入驻</p></div>
+          </div>
         </div>
       </div>
-    </div>
-    <div class="contentArea">
-      <div class="selectArea">
-        <div class="content" v-for="(key, i) in Object.keys(typeList)" >
-          <div class="left"><p>{{typeList[key].title}}</p></div>
-          <div class="right">
+      <div class="contentArea">
+        <div class="selectArea">
+          <div class="content" v-for="(key, i) in Object.keys(typeList)">
+            <div class="left"><p>{{typeList[key].title}}</p></div>
+            <div class="right">
+              <div class="cell"
+                v-for="(item, ii) in typeList[key].list"
+                :class="{selected: item.id === selected[key]}"
+                @click="changeIndex(key, item)"
+                v-if="ii < 8 || expansion[key]"
+              >
+                <p>{{item.name}}</p>
+              </div>
+            </div>
+            <div class="more" @click="changeExpansion(key)" v-if="typeList[key].list.length > 8">
+              {{expansion[key] ? "收起" : "更多"}}
+            </div>
+          </div>
+        </div>
+        <div class="listArea">
+          <div class="sTitle">解决方案</div>
+          <div class="list" v-loading="loading">
             <div class="cell"
-              v-for="(item, ii) in typeList[key].list"
-              :class="{selected: item.id === selected[key]}"
-              @click="changeIndex(key, item)"
-              v-if="ii < 8 || expansion[key]"
+              v-for="item in dataList"
+              :key="item.id"
+              @click="jumpToDetail(item)"
             >
-              <p>{{item.name}}</p>
+              <div class="left">
+                <img :src="item.images" alt="">
+              </div>
+              <div class="right">
+                <div class="top">
+                  <div class="titleA">
+                    <div class="title">{{item.title}}</div>
+                    <div class="tips" v-if="item.city_op_name">{{item.city_op_name}}</div>
+                    <div class="tips" v-if="item.industry_name">{{item.industry_name}}</div>
+                    <div class="tips" v-if="item.tech_type_name">{{item.tech_type_name}}</div>
+                  </div>
+                  <div class="intro">
+                    <p class="tt">介绍:</p>
+                    <p class="value">{{item.description}}</p>
+                  </div>
+                  <div class="ep">
+                    <p class="tt">案例:</p>
+                    <p class="value">
+                      <span>{{item.successCase || '暂未提供'}}</span>
+                    </p>
+                  </div>
+                </div>
+                <div class="bottom">
+                  <p class="icon" v-if="item.company_name"></p>
+                  <p class="word" v-if="item.company_name ">{{item.company_name || '' }}</p>
+                </div>
+              </div>
             </div>
           </div>
-          <div class="more" @click="changeExpansion(key)" v-if="typeList[key].list.length > 8">
-            {{expansion[key] ? "收起" : "更多"}}
-          </div>
         </div>
+        <div class="pagination">
+          <el-pagination
+            background
+            layout="prev, pager, next"
+            :total="page.total"
+            :page-size="page.size"
+            @current-change="pageChange"
+          >
+          </el-pagination>
+        </div>
+      </div>
+    </div>
+    <div class="kaifainMobile">
+      <div class="topSelect">
+        <van-dropdown-menu>
+          <van-dropdown-item v-for="(key, i) in Object.keys(typeList)" v-model="selected[key]"
+            :options="typeList[key].list" :key="key+i" @change="changeIndex"/>
+        </van-dropdown-menu>
       </div>
-      <div class="listArea">
-        <div class="sTitle">解决方案</div>
-        <div class="list" v-loading="loading">
+      <van-pull-refresh v-model="refreshing" @refresh="onRefresh" class="listArea">
+        <div style="text-align: center" v-if="firstLoading">
+          <van-loading size="24px">加载中...</van-loading>
+        </div>
+        <van-list
+          v-else
+          v-model="loading"
+          :finished="finished"
+          finished-text="没有更多了"
+          @load="onLoad"
+          :immediate-check="false"
+        >
           <div class="cell"
             v-for="item in dataList"
             :key="item.id"
             @click="jumpToDetail(item)"
           >
-            <div class="left">
-              <img :src="item.images" alt="">
-            </div>
-            <div class="right">
-              <div class="top">
-                <div class="titleA">
-                  <div class="title">{{item.title}}</div>
+            <div class="bodyCont">
+              <div class="left">
+                <img :src="item.images" alt="">
+              </div>
+              <div class="right">
+                <div class="cellTitle">{{item.title}}</div>
+                <div class="spanList">
                   <div class="tips" v-if="item.city_op_name">{{item.city_op_name}}</div>
                   <div class="tips" v-if="item.industry_name">{{item.industry_name}}</div>
                   <div class="tips" v-if="item.tech_type_name">{{item.tech_type_name}}</div>
                 </div>
-                <div class="intro">
-                  <p class="tt">介绍:</p>
-                  <p class="value">{{item.description}}</p>
-                </div>
-                <div class="ep">
-                  <p class="tt">案例:</p>
-                  <p class="value">
-                    <span>{{item.successCase || '暂未提供'}}</span>
-                  </p>
-                </div>
-              </div>
-              <div class="bottom">
-                <p class="icon" v-if="item.company_name"></p>
-                <p class="word" v-if="item.company_name ">{{item.company_name || '' }}</p>
+                <div class="desc">{{item.description}}</div>
               </div>
             </div>
+            <div class="bottomCont">
+              <p class="icon" v-if="item.company_name"></p>
+              <p class="word" v-if="item.company_name ">{{item.company_name || '' }}</p>
+            </div>
           </div>
-        </div>
-      </div>
-      <div class="pagination">
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :total="page.total"
-          :page-size="page.size"
-          @current-change="pageChange"
-        >
-        </el-pagination>
-      </div>
+        </van-list>
+      </van-pull-refresh>
     </div>
     <ConnectUs :source="'开发屋'" :isShowToast="isShowToast" @close="isShowToast=false"></ConnectUs>
     <BindMobile ref="bindMobile"></BindMobile>
@@ -90,9 +138,10 @@
 <script>
   import ConnectUs from "@/components/common/connectUs"
   import BindMobile from "@/components/common/bindMobile"
+
   export default {
     layout: "opacity_header",
-    components: {ConnectUs, BindMobile},
+    components: { ConnectUs, BindMobile },
     head() {
       return {
         title: '程序员客栈技术信用-程序员技术开发能力认证,企业程序员背调专用数据平台',
@@ -118,7 +167,7 @@
         typeList: {
           city: {
             title: '地区',
-            list:  []
+            list: []
           },
           industry: {
             title: '行业领域',
@@ -139,46 +188,71 @@
           industry: 0,
           techType: 0,
         },
-        loading: false,
+
         dataList: [],
         page: {
-          page:1,
-          size:10,
+          page: 1,
+          size: 10,
           total: 0
         },
         isShowToast: false,
         name: '',
-        phone: ''
+        phone: '',
+        loading: false,
+        finished: false,
+        refreshing: false,
+        firstLoading: false, //移动端加载loading
       }
     },
     created() {
+      this.firstLoading = true
       this.getTypeLisst()
       this.getList()
     },
     mounted() {
+      if (this.mobile) {
+        document.body.style = "overflow:hidden;"
+      }
     },
     methods: {
       changeIndex(key, item) {
-        this.selected[key] = item.id
-        this.getList()
+        this.page.page = 1
+        this.page.total = 0
+        this.firstLoading = true
+        if (item) {
+          this.selected[ key ] = item.id
+          this.getList()
+        } else {
+          this.getList()
+        }
       },
       changeExpansion(key) {
-        this.expansion[key] = !this.expansion[key]
+        this.expansion[ key ] = !this.expansion[ key ]
       },
       getTypeLisst() {
-        this.$axios.get('/api/kaifawu/get_options').then(res=>{
+        this.$axios.get('/api/kaifawu/get_options').then(res => {
           if (Number(res.data.status) === 1) {
-            res.data.data.cities.unshift({id:0, name:"全部"})
-            res.data.data.industries.unshift({id:0, name:"全部"})
-            res.data.data.tech_types.unshift({id:0, name:"全部"})
-            this.typeList.city.list = res.data.data.cities
-            this.typeList.industry.list = res.data.data.industries
-            this.typeList.techType.list = res.data.data.tech_types
+            res.data.data.cities.unshift({ id: 0, name: "全部地区" })
+            res.data.data.industries.unshift({ id: 0, name: "全部行业" })
+            res.data.data.tech_types.unshift({ id: 0, name: "全部分类" })
+            Object.keys(res.data.data).forEach(key => {
+              let item = res.data.data[ key ]
+              if (Array.isArray(item)) {
+                item.forEach(ii => {
+                  ii.text = ii.name
+                  ii.value = ii.id
+                })
+              }
+            })
+            console.log('list', res.data.data)
+            this.typeList.city.list = [ ...res.data.data.cities ]
+            this.typeList.industry.list = [ ...res.data.data.industries ]
+            this.typeList.techType.list = [ ...res.data.data.tech_types ]
           }
         })
       },
       getList() {
-        const {page, selected} = this
+        const { page, selected } = this
         let p = {
           city: selected.city,
           tech_type: selected.techType,
@@ -187,22 +261,33 @@
         }
         this.loading = true
         // let params = new URLSearchParams(p).toString()
-        this.$axios.post('/api/kaifawu/index', p).then(res=>{
+        this.$axios.post('/api/kaifawu/index', p).then(res => {
           if (Number(res.data.status) === 1) {
             let data = res.data.data
             this.page.total = data.total
             let dataList = data.providers || []
-            dataList.forEach(item=>{
-              item['successCase'] = ''
+            dataList.forEach(item => {
+              item[ 'successCase' ] = ''
               if (Array.isArray(item.successful_case)) {
-                let tem = item.successful_case.map(item =>  item.title)
-                item['successCase'] = tem.join('、')
+                let tem = item.successful_case.map(item => item.title)
+                item[ 'successCase' ] = tem.join('、')
               }
             })
-
-            this.dataList = data.providers
+            if (this.page.page === 1) {
+              this.dataList = data.providers
+            } else {
+              this.dataList = [...this.dataList, ...data.providers]
+            }
+            this.page.page += 1
+            if (this.page.total <= this.dataList.length) {
+              this.finished = true
+            }
           }
+        }).finally(()=>{
+          this.firstLoading = false
+          this.refreshing = false
           this.loading = false
+          console.log("this.finished", this.finished )
         })
       },
       pageChange(i) {
@@ -210,7 +295,7 @@
         this.getList()
       },
       handleApplyBtnClick() {
-        const {userinfo} = this.$store.state || {}
+        const { userinfo } = this.$store.state || {}
         //检查登录
         if (!userinfo || !userinfo.uid) {
           this.$message.info('请先登录!')
@@ -232,13 +317,23 @@
       },
       /** 跳转到详情 **/
       jumpToDetail(item) {
-        const {id} = item
+        const { id } = item
         if (!id) {
           this.$message.info('参数异常')
           return
         }
         location.href = `./kaifain/${id}`
-      }
+      },
+      /** 移动端下拉刷新 **/
+      onRefresh() {
+        // 清空列表数据
+        this.finished = false;
+        this.loading = true;
+        this.onLoad();
+      },
+      onLoad() {
+       this.getList()
+      },
     }
   }
 </script>
@@ -246,3 +341,8 @@
 <style scope lang="scss">
   @import "../../assets/css/kaifain/index.scss";
 </style>
+<style lang="scss">
+  .van-dropdown-menu__title {
+    color: #666;
+  }
+</style>

+ 3 - 2
pages/kaifain/preview.vue

@@ -21,12 +21,11 @@
          <p class="word">方案介绍</p>
          <p class="line"></p>
        </div>
-       <div class="introContent" v-html="detail.detail">
+       <div class="introContent ql-editor"  v-html="detail.detail">
 
        </div>
      </div>
 
-
       <div class="caseListArea" v-if="haveCase">
         <div class="title">
           <p class="word">成功案例</p>
@@ -56,6 +55,8 @@
 </template>
 
 <script>
+  import "quill/dist/quill.core.css";
+  import "quill/dist/quill.snow.css";
   import ConnectUs from "@/components/common/connectUs"
   export default {
     layout: "opacity_header",

+ 7 - 0
plugins/vant.js

@@ -0,0 +1,7 @@
+import Vue from 'vue'
+import Vant from 'vant';
+import 'vant/lib/index.css';
+
+global.Window = {}
+
+Vue.use(Vant)

+ 113 - 1
yarn.lock

@@ -179,6 +179,14 @@
   dependencies:
     "@babel/types" "^7.0.0"
 
+"@babel/helper-module-imports@7.0.0-beta.35":
+  version "7.0.0-beta.35"
+  resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a"
+  integrity sha1-MI41DnMXUs200PBY3x1wSSXGTgo=
+  dependencies:
+    "@babel/types" "7.0.0-beta.35"
+    lodash "^4.2.0"
+
 "@babel/helper-module-imports@^7.0.0":
   version "7.0.0"
   resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
@@ -641,6 +649,13 @@
     js-levenshtein "^1.1.3"
     semver "^5.5.0"
 
+"@babel/runtime@7.x":
+  version "7.8.4"
+  resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308"
+  integrity sha1-159aIED3yqJNU+VjqtScvAVYEwg=
+  dependencies:
+    regenerator-runtime "^0.13.2"
+
 "@babel/runtime@^7.4.5":
   version "7.4.5"
   resolved "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12"
@@ -669,6 +684,15 @@
     globals "^11.1.0"
     lodash "^4.17.11"
 
+"@babel/types@7.0.0-beta.35":
+  version "7.0.0-beta.35"
+  resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960"
+  integrity sha1-z5M6mpo4SEynJLM1uI2Dcm1auWA=
+  dependencies:
+    esutils "^2.0.2"
+    lodash "^4.2.0"
+    to-fast-properties "^2.0.0"
+
 "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4":
   version "7.4.4"
   resolved "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0"
@@ -997,6 +1021,11 @@
   version "1.5.2"
   resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
 
+"@vant/icons@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npm.taobao.org/@vant/icons/download/@vant/icons-1.2.1.tgz#309fecb97a4989866f045ce676b545c454701c8f"
+  integrity sha1-MJ/suXpJiYZvBFzmdrVFxFRwHI8=
+
 "@vue/babel-helper-vue-jsx-merge-props@^1.0.0":
   version "1.0.0"
   resolved "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040"
@@ -1502,6 +1531,13 @@ babel-loader@^8.0.6:
     mkdirp "^0.5.1"
     pify "^4.0.1"
 
+babel-plugin-component@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npm.taobao.org/babel-plugin-component/download/babel-plugin-component-1.1.1.tgz#9b023a23ff5c9aae0fd56c5a18b9cab8c4d45eea"
+  integrity sha1-mwI6I/9cmq4P1WxaGLnKuMTUXuo=
+  dependencies:
+    "@babel/helper-module-imports" "7.0.0-beta.35"
+
 babel-runtime@6.x:
   version "6.26.0"
   resolved "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
@@ -2782,6 +2818,11 @@ domhandler@^2.3.0:
   dependencies:
     domelementtype "1"
 
+dompurify@^1.0.8:
+  version "1.0.11"
+  resolved "https://registry.npm.taobao.org/dompurify/download/dompurify-1.0.11.tgz#fe0f4a40d147f7cebbe31a50a1357539cfc1eb4d"
+  integrity sha1-/g9KQNFH98674xpQoTV1Oc/B600=
+
 domutils@1.5.1:
   version "1.5.1"
   resolved "https://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@@ -4160,10 +4201,20 @@ isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
 
-jquery@^3.4.1:
+jquery@2.x:
+  version "2.2.4"
+  resolved "https://registry.npm.taobao.org/jquery/download/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02"
+  integrity sha1-LInWiJterFIqfuoywUUhVZxsvwI=
+
+jquery@^3.0.0, jquery@^3.4.1:
   version "3.4.1"
   resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
 
+jquery@~3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npm.taobao.org/jquery/download/jquery-3.1.1.tgz#347c1c21c7e004115e0a4da32cece041fad3c8a3"
+  integrity sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM=
+
 js-base64@^2.1.8:
   version "2.5.1"
   resolved "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
@@ -4461,6 +4512,11 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3,
   version "4.17.11"
   resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
 
+lodash@^4.2.0:
+  version "4.17.15"
+  resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+  integrity sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=
+
 longest@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/longest/download/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
@@ -6603,12 +6659,53 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 
+simditor@^2.3.28:
+  version "2.3.28"
+  resolved "https://registry.npm.taobao.org/simditor/download/simditor-2.3.28.tgz#294e86eeae3e0e57255910aac9dd9070cc495628"
+  integrity sha1-KU6G7q4+DlclWRCqyd2QcMxJVig=
+  dependencies:
+    dompurify "^1.0.8"
+    jquery "^3.4.1"
+    simple-hotkeys "^1.0.3"
+    simple-module "^3.0.3"
+    simple-uploader "^3.0.0"
+
+simple-hotkeys@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npm.taobao.org/simple-hotkeys/download/simple-hotkeys-1.0.3.tgz#47a5bc35362ca7339611bd09a84fa37818b0bbc6"
+  integrity sha1-R6W8NTYspzOWEb0JqE+jeBiwu8Y=
+  dependencies:
+    jquery "2.x"
+    simple-module "~2.0.5"
+
+simple-module@^3.0.3, simple-module@~3.0.0:
+  version "3.0.3"
+  resolved "https://registry.npm.taobao.org/simple-module/download/simple-module-3.0.3.tgz#ad52766785d27cd9427ee8645a49e41199725a92"
+  integrity sha1-rVJ2Z4XSfNlCfuhkWknkEZlyWpI=
+  dependencies:
+    jquery "^3.0.0"
+
+simple-module@~2.0.5:
+  version "2.0.6"
+  resolved "https://registry.npm.taobao.org/simple-module/download/simple-module-2.0.6.tgz#cec8250325f8c7f575f4aa75c919b38396a6037b"
+  integrity sha1-zsglAyX4x/V19Kp1yRmzg5amA3s=
+  dependencies:
+    jquery "2.x"
+
 simple-swizzle@^0.2.2:
   version "0.2.2"
   resolved "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
   dependencies:
     is-arrayish "^0.3.1"
 
+simple-uploader@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/simple-uploader/download/simple-uploader-3.0.0.tgz#c09f706f1cfcbea1fe780e35759a683b1336d4d1"
+  integrity sha1-wJ9wbxz8vqH+eA41dZpoOxM21NE=
+  dependencies:
+    jquery "~3.1.0"
+    simple-module "~3.0.0"
+
 snapdragon-node@^2.0.1:
   version "2.1.1"
   resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
@@ -7485,6 +7582,16 @@ validate-npm-package-license@^3.0.1:
     spdx-correct "^3.0.0"
     spdx-expression-parse "^3.0.0"
 
+vant@^2.5.2:
+  version "2.5.2"
+  resolved "https://registry.npm.taobao.org/vant/download/vant-2.5.2.tgz?cache=0&sync_timestamp=1582249565880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvant%2Fdownload%2Fvant-2.5.2.tgz#e8cbb6d7c4a2544e2585da6d75b4c3966b1498fb"
+  integrity sha1-6Mu218SiVE4lhdptdbTDlmsUmPs=
+  dependencies:
+    "@babel/runtime" "7.x"
+    "@vant/icons" "1.2.1"
+    "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0"
+    vue-lazyload "1.2.3"
+
 vary@~1.1.2:
   version "1.1.2"
   resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@@ -7529,6 +7636,11 @@ vue-hot-reload-api@^2.3.0:
   version "2.3.3"
   resolved "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.3.tgz#2756f46cb3258054c5f4723de8ae7e87302a1ccf"
 
+vue-lazyload@1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npm.taobao.org/vue-lazyload/download/vue-lazyload-1.2.3.tgz#901f9ec15c7e6ca78781a2bae4a343686bdedb2c"
+  integrity sha1-kB+ewVx+bKeHgaK65KNDaGve2yw=
+
 vue-lazyload@^1.0.1:
   version "1.3.2"
   resolved "https://registry.npm.taobao.org/vue-lazyload/download/vue-lazyload-1.3.2.tgz#3d6123b6a6c177aef06aa6d3ad7b6c36ce3c25ab"