xiongzhu há 6 anos atrás
pai
commit
ab9215e85e

+ 2 - 2
pom.xml

@@ -238,12 +238,12 @@
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjrt</artifactId>
-            <version>1.7.4</version>
+            <version>1.9.0</version>
         </dependency>
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjweaver</artifactId>
-            <version>1.7.4</version>
+            <version>1.9.0</version>
         </dependency>
         <dependency>
             <groupId>cglib</groupId>

+ 1 - 2
src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java

@@ -6,8 +6,7 @@ package com.izouma.awesomeadmin.constant;
  * </p>
  */
 public interface AppConstant {
-
-    String AVATAR = "http://yuanqijjc.oss-cn-hangzhou.aliyuncs.com/yuanqijjc/images/2019-09-17-10-47-55-x35x8vl7.jpg";
+    String AVATAR = "http://yuanqijjc.oss-cn-hangzhou.aliyuncs.com/yuanqijjc/images/2019-10-10-05-13-47-7yy60krz.jpg";
 
     /**
      * 商户号

+ 6 - 15
src/main/java/com/izouma/awesomeadmin/util/Base64.java

@@ -1,9 +1,6 @@
 package com.izouma.awesomeadmin.util;
 
-import sun.misc.BASE64Decoder;
-import sun.misc.BASE64Encoder;
-
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 /**
  * Created by xiong on 2017/6/13.
@@ -12,14 +9,8 @@ public class Base64 {
     public static String getBase64(String str) {
         byte[] b = null;
         String s = null;
-        try {
-            b = str.getBytes("utf-8");
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        if (b != null) {
-            s = new BASE64Encoder().encode(b);
-        }
+        b = str.getBytes(StandardCharsets.UTF_8);
+        s = new String(java.util.Base64.getEncoder().encode(b), StandardCharsets.UTF_8);
         return s;
     }
 
@@ -28,10 +19,10 @@ public class Base64 {
         byte[] b = null;
         String result = null;
         if (s != null) {
-            BASE64Decoder decoder = new BASE64Decoder();
+            java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
             try {
-                b = decoder.decodeBuffer(s);
-                result = new String(b, "utf-8");
+                b = decoder.decode(s);
+                result = new String(b, StandardCharsets.UTF_8);
             } catch (Exception e) {
                 e.printStackTrace();
             }

+ 2 - 3
src/main/java/com/izouma/awesomeadmin/util/ImagesUtil.java

@@ -1,8 +1,7 @@
 package com.izouma.awesomeadmin.util;
 
 import java.io.*;
-
-import sun.misc.BASE64Decoder;
+import java.util.Base64;
 
 
 public class ImagesUtil {
@@ -24,7 +23,7 @@ public class ImagesUtil {
         try {
             //Base64解码
             // byte[] b = Base64.getDecoder().decode(imgStr);
-            byte[] b = new BASE64Decoder().decodeBuffer(imgStr);
+            byte[] b = Base64.getDecoder().decode(imgStr);
             for (int i = 0; i < b.length; ++i) {
                 if (b[i] < 0) {//调整异常数据
                     b[i] += 256;

+ 78 - 78
src/main/vue/src/pages/TeamInfos.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <div class="filters-container">
-        
+
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             </el-button>
@@ -28,50 +28,50 @@
             </el-dropdown>
         </div>
         <el-table
-                :data="tableData"
-                :height="tableHeight"
-                row-key="id"
-                ref="table">
+            :data="tableData"
+            :height="tableHeight"
+            row-key="id"
+            ref="table">
+            <el-table-column
+                v-if="multipleMode"
+                align="center"
+                type="selection"
+                width="50">
+            </el-table-column>
             <el-table-column
-                    v-if="multipleMode"
-                    align="center"
-                    type="selection"
-                    width="50">
+                type="index"
+                min-width="50"
+                align="center">
             </el-table-column>
+
             <el-table-column
-                    type="index"
-                    min-width="50"
-                    align="center">
+                v-if="isColumnShow('name')"
+                prop="name"
+                label="战队名"
+                min-width="100">
             </el-table-column>
-                                                                                    
-                                            <el-table-column
-                                v-if="isColumnShow('name')"
-                                prop="name"
-                                label="战队名"
-                                min-width="100">
-                        </el-table-column>
-                                                                
-                                            <el-table-column
-                                v-if="isColumnShow('leaderId')"
-                                prop="leaderId"
-                                label="队长ID"
-                                min-width="100">
-                        </el-table-column>
-                                                                
-                                            <el-table-column
-                                v-if="isColumnShow('intro')"
-                                prop="intro"
-                                label="简介"
-                                min-width="100">
-                        </el-table-column>
-                                                                                                                                                <el-table-column
-                    label="操作"
-                    align="center"
-                    fixed="right"
-                    min-width="150"
-            >
+
+            <el-table-column
+                v-if="isColumnShow('leaderId')"
+                prop="leaderId"
+                label="队长ID"
+                min-width="100">
+            </el-table-column>
+
+            <el-table-column
+                v-if="isColumnShow('intro')"
+                prop="intro"
+                label="简介"
+                min-width="100">
+            </el-table-column>
+            <el-table-column
+                label="操作"
+                align="center"
+                fixed="right"
+                min-width="150">
                 <template slot-scope="scope">
-                                        <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="$router.push({path:'/teamMemberInfos',query:{teamId:scope.row.id}})" size="mini" plain>队员</el-button>
+                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
@@ -86,14 +86,14 @@
                 </el-button-group>
             </div>
             <el-pagination
-                    background
-                    @size-change="pageSizeChange"
-                    @current-change="currentPageChange"
-                    :current-page="currentPage"
-                    :page-sizes="[10, 20, 30, 40, 50]"
-                    :page-size="pageSize"
-                    layout="total, sizes, prev, pager, next, jumper"
-                    :total="totalNumber">
+                background
+                @size-change="pageSizeChange"
+                @current-change="currentPageChange"
+                :current-page="currentPage"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalNumber">
             </el-pagination>
         </div>
         <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
@@ -207,22 +207,22 @@
                 filter1: '',
                 filter2: '',
                 tableColumns: [
-                                                                                                                                                                {
-                                label: '战队名',
-                                value: 'name',
-                                show: true
-                            },
-                                                                                                {
-                                label: '队长ID',
-                                value: 'leaderId',
-                                show: true
-                            },
-                                                                                                {
-                                label: '简介',
-                                value: 'intro',
-                                show: true
-                            },
-                                                                                                                                                                                                ],
+                    {
+                        label: '战队名',
+                        value: 'name',
+                        show: true
+                    },
+                    {
+                        label: '队长ID',
+                        value: 'leaderId',
+                        show: true
+                    },
+                    {
+                        label: '简介',
+                        value: 'intro',
+                        show: true
+                    },
+                ],
                 multipleMode: false,
                 showAdvancedQueryDialog: false,
                 advancedQueryFields: [],
@@ -230,19 +230,19 @@
                 tableSortFields: [],
                 searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
                 advancedQueryColumns: [
-                                                                                                                                                                {
-                                label: '战队名',
-                                value: 'name'
-                            },
-                                                                                                {
-                                label: '队长ID',
-                                value: 'leader_id'
-                            },
-                                                                                                {
-                                label: '简介',
-                                value: 'intro'
-                            },
-                                                                                                                                                                                                ],
+                    {
+                        label: '战队名',
+                        value: 'name'
+                    },
+                    {
+                        label: '队长ID',
+                        value: 'leader_id'
+                    },
+                    {
+                        label: '简介',
+                        value: 'intro'
+                    },
+                ],
                 advancedQuerySearchKey: '',
                 orderByStr: '',
                 imgSrc: '',
@@ -392,7 +392,7 @@
             },
             exportExcel() {
                 window.location.href = this.$baseUrl + "/teamInfo/exportExcel?searchKey="
-                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+                    + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey + "&orderByStr=" + this.orderByStr;
             },
             searchData() {
                 this.currentPage = 1;

+ 30 - 29
src/main/vue/src/pages/TeamMemberInfo.vue

@@ -6,7 +6,7 @@
                 <el-input v-model="formData.name" :disabled="'name'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="userId" label="用户ID">
-                <el-select v-model="formData.userId" clearable  placeholder="请选择" :disabled="'userId'==subColumn">
+                <el-select v-model="formData.userId" clearable placeholder="请选择" :disabled="'userId'==subColumn">
                     <el-option
                         v-for="item in userIdOptions"
                         :key="item.value"
@@ -16,7 +16,7 @@
                 </el-select>
             </el-form-item>
             <el-form-item prop="teamId" label="战队ID">
-                <el-select v-model="formData.teamId" clearable  placeholder="请选择" :disabled="'teamId'==subColumn">
+                <el-select v-model="formData.teamId" clearable placeholder="请选择" :disabled="'teamId'==subColumn">
                     <el-option
                         v-for="item in teamIdOptions"
                         :key="item.value"
@@ -32,7 +32,7 @@
                 <el-input type="textarea" v-model="formData.desp" :disabled="'desp'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="avatar" label="头像">
-                            <single-upload v-model="formData.avatar" :disabled="'avatar'==subColumn"></single-upload>
+                <single-upload v-model="formData.avatar" :disabled="'avatar'==subColumn"></single-upload>
             </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
@@ -44,8 +44,8 @@
 </template>
 <script>
     import formValidator from '../formValidator'
-    import { mapState } from 'vuex'
-    import { format } from 'date-fns'
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
     import zh from 'date-fns/locale/zh_cn'
 
     export default {
@@ -65,7 +65,7 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                this.formData = res.data;
+                        this.formData = res.data;
                         if (this.$route.query.column) {
                             this.formData[this.subColumn] = this.subValue;
                         }
@@ -75,26 +75,28 @@
                 if (this.$route.query.column) {
                     this.formData[this.subColumn] = this.subValue;
                 }
+                if (this.$route.query.teamId) {
+                    this.formData.teamId = Number(this.$route.query.teamId);
+                }
             }
 
-                                                                                                                                                                                                                                                    this.$http.get({
-                            url:'/teamInfo/all'
-                        }).then(res => {
-                            if (res.success) {
+            this.$http.get({
+                url: '/teamInfo/all'
+            }).then(res => {
+                if (res.success) {
 
-                                if (res.data.length > 0) {
-                                    res.data.forEach(item => {
-                                        this.teamIdOptions.push({label: item.name, value:item.id});
-                                    })
-                                }
-                            }
-                        });
-                                                                                                                                                                                                            },
+                    if (res.data.length > 0) {
+                        res.data.forEach(item => {
+                            this.teamIdOptions.push({label: item.name, value: item.id});
+                        })
+                    }
+                }
+            });
+        },
         data() {
             return {
                 saving: false,
-                formData: {
-                },
+                formData: {},
                 rules: {
                     name: [
                         {required: true, message: '请输入 姓名', trigger: 'blur'},
@@ -103,8 +105,8 @@
                         {required: true, message: '请输入 战队ID', trigger: 'blur'},
                     ],
                 },
-            userIdOptions:[],
-            teamIdOptions:[],
+                userIdOptions: [],
+                teamIdOptions: [],
                 subColumn: '',
                 subValue: '',
             }
@@ -123,8 +125,7 @@
                 });
             },
             logicalValidate() {
-                let logicalData = {
-                };
+                let logicalData = {};
 
                 if (JSON.stringify(logicalData) == '{}') {
                     this.submit();
@@ -148,11 +149,11 @@
                             if (logicalFlag) {
                                 this.submit();
                             } else {
-                                this.$message.warning('逻辑关键字:'+''+'验证失败')
+                                this.$message.warning('逻辑关键字:' + '' + '验证失败')
                             }
 
                         } else {
-                            this.$message.warning('逻辑关键字:'+''+'验证失败')
+                            this.$message.warning('逻辑关键字:' + '' + '验证失败')
                         }
                     });
                 }
@@ -160,7 +161,7 @@
             submit() {
                 let data = {...this.formData};
 
-                                                                                                                                                
+
                 this.$http.post({
                     url: this.formData.id ? '/teamMemberInfo/update' : '/teamMemberInfo/save',
                     data: data
@@ -174,10 +175,10 @@
                 });
             },
             onDelete() {
-                this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
                     return this.$http.post({
                         url: '/teamMemberInfo/del',
-                        data: { id: this.formData.id }
+                        data: {id: this.formData.id}
                     })
                 }).then(() => {
                     this.$message.success('删除成功');

+ 120 - 78
src/main/vue/src/pages/TeamMemberInfos.vue

@@ -1,8 +1,15 @@
 <template>
     <div>
         <div class="filters-container">
-
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
+            <el-select v-model="teamId" clearable placeholder="筛选战队" class="filter-item" size="small">
+                <el-option
+                    v-for="item in teamIdOptions"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                </el-option>
+            </el-select>
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             </el-button>
             <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
@@ -11,7 +18,7 @@
             <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
                        icon="el-icon-sort" class="filter-item">排序
             </el-button>
-            <el-button @click="$router.push({path:'/teamMemberInfo',query:{column:$route.query.column}})" type="primary"
+            <el-button @click="addRow" type="primary"
                        size="small" icon="el-icon-edit"
                        class="filter-item">添加
             </el-button>
@@ -28,50 +35,50 @@
             </el-dropdown>
         </div>
         <el-table
-                :data="tableData"
-                :height="tableHeight"
-                row-key="id"
-                ref="table">
+            :data="tableData"
+            :height="tableHeight"
+            row-key="id"
+            ref="table">
+            <el-table-column
+                v-if="multipleMode"
+                align="center"
+                type="selection"
+                width="50">
+            </el-table-column>
             <el-table-column
-                    v-if="multipleMode"
-                    align="center"
-                    type="selection"
-                    width="50">
+                type="index"
+                min-width="50"
+                align="center">
             </el-table-column>
+
+            <el-table-column
+                v-if="isColumnShow('name')"
+                prop="name"
+                label="姓名"
+                min-width="100">
+            </el-table-column>
+
             <el-table-column
-                    type="index"
-                    min-width="50"
-                    align="center">
+                v-if="isColumnShow('userId')"
+                prop="userId"
+                label="用户ID"
+                min-width="100">
             </el-table-column>
 
-                                            <el-table-column
-                                v-if="isColumnShow('name')"
-                                prop="name"
-                                label="姓名"
-                                min-width="100">
-                        </el-table-column>
-
-                                            <el-table-column
-                                v-if="isColumnShow('userId')"
-                                prop="userId"
-                                label="用户ID"
-                                min-width="100">
-                        </el-table-column>
-
-                                            <el-table-column
-                                v-if="isColumnShow('teamId')"
-                                prop="teamId"
-                                label="战队ID"
-                                min-width="100">
-                        </el-table-column>
-                                                                                                                                                <el-table-column
-                    label="操作"
-                    align="center"
-                    fixed="right"
-                    min-width="150"
+            <el-table-column
+                v-if="isColumnShow('teamId')"
+                prop="teamId"
+                label="战队ID"
+                min-width="100">
+            </el-table-column>
+            <el-table-column
+                label="操作"
+                align="center"
+                fixed="right"
+                min-width="150"
             >
                 <template slot-scope="scope">
-                                        <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
@@ -86,14 +93,14 @@
                 </el-button-group>
             </div>
             <el-pagination
-                    background
-                    @size-change="pageSizeChange"
-                    @current-change="currentPageChange"
-                    :current-page="currentPage"
-                    :page-sizes="[10, 20, 30, 40, 50]"
-                    :page-size="pageSize"
-                    layout="total, sizes, prev, pager, next, jumper"
-                    :total="totalNumber">
+                background
+                @size-change="pageSizeChange"
+                @current-change="currentPageChange"
+                :current-page="currentPage"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalNumber">
             </el-pagination>
         </div>
         <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
@@ -196,6 +203,21 @@
         name: 'TeamMemberInfos',
         created() {
             this.getData();
+            this.$http.get({
+                url: '/teamInfo/all'
+            }).then(res => {
+                if (res.success) {
+
+                    if (res.data.length > 0) {
+                        res.data.forEach(item => {
+                            this.teamIdOptions.push({label: item.name, value: item.id});
+                        })
+                    }
+                }
+            });
+            if (this.$route.query.teamId) {
+                this.teamId = Number(this.$route.query.teamId);
+            }
         },
         data() {
             return {
@@ -207,22 +229,22 @@
                 filter1: '',
                 filter2: '',
                 tableColumns: [
-                                                                                                                                                                {
-                                label: '姓名',
-                                value: 'name',
-                                show: true
-                            },
-                                                                                                {
-                                label: '用户ID',
-                                value: 'userId',
-                                show: true
-                            },
-                                                                                                {
-                                label: '战队ID',
-                                value: 'teamId',
-                                show: true
-                            },
-                                                                                                                                                                                                ],
+                    {
+                        label: '姓名',
+                        value: 'name',
+                        show: true
+                    },
+                    {
+                        label: '用户ID',
+                        value: 'userId',
+                        show: true
+                    },
+                    {
+                        label: '战队ID',
+                        value: 'teamId',
+                        show: true
+                    },
+                ],
                 multipleMode: false,
                 showAdvancedQueryDialog: false,
                 advancedQueryFields: [],
@@ -230,23 +252,25 @@
                 tableSortFields: [],
                 searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
                 advancedQueryColumns: [
-                                                                                                                                                                {
-                                label: '姓名',
-                                value: 'name'
-                            },
-                                                                                                {
-                                label: '用户ID',
-                                value: 'user_id'
-                            },
-                                                                                                {
-                                label: '战队ID',
-                                value: 'team_id'
-                            },
-                                                                                                                                                                                                ],
+                    {
+                        label: '姓名',
+                        value: 'name'
+                    },
+                    {
+                        label: '用户ID',
+                        value: 'user_id'
+                    },
+                    {
+                        label: '战队ID',
+                        value: 'team_id'
+                    },
+                ],
                 advancedQuerySearchKey: '',
                 orderByStr: '',
                 imgSrc: '',
                 imageDialogVisible: false,
+                teamIdOptions: [],
+                teamId: null
             }
         },
         computed: {
@@ -279,6 +303,9 @@
                     var tempColumn = this.$route.query.column;
                     data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
                 }
+                if (this.$route.query.teamId) {
+                    data.teamId = this.$route.query.teamId
+                }
 
                 this.$http.get({
                     url: '/teamMemberInfo/page',
@@ -392,7 +419,7 @@
             },
             exportExcel() {
                 window.location.href = this.$baseUrl + "/teamMemberInfo/exportExcel?searchKey="
-                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+                    + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey + "&orderByStr=" + this.orderByStr;
             },
             searchData() {
                 this.currentPage = 1;
@@ -431,7 +458,22 @@
                 this.imgSrc = img;
                 this.imageDialogVisible = true;
             },
-
+            addRow() {
+                this.$router.push({
+                    path: '/teamMemberInfo',
+                    query: {
+                        teamId: this.$route.query.teamId
+                    }
+                });
+            }
+        },
+        watch: {
+            teamId(val) {
+                this.$router.replace({
+                    query: {teamId: val}
+                });
+                this.getData();
+            }
         }
     }
 </script>

+ 3 - 0
src/main/vue/src/pages/User.vue

@@ -172,6 +172,9 @@
             },
             submit() {
                 var data = JSON.parse(JSON.stringify(this.formData));
+                if (!this.formData.id && this.password) {
+                    data.password = this.password;
+                }
                 this.$http.post({
                     url: this.formData.id ? '/userInfo/update' : '/userInfo/save',
                     data: data

+ 198 - 8
src/main/vue/yarn.lock

@@ -19,6 +19,13 @@
     lodash "^4.2.0"
     to-fast-properties "^2.0.0"
 
+"@chenfengyuan/vue-qrcode@^1.0.0":
+  version "1.0.1"
+  resolved "https://registry.npm.taobao.org/@chenfengyuan/vue-qrcode/download/@chenfengyuan/vue-qrcode-1.0.1.tgz#e6f757103c36630dc7c9f385494c5d9796c24d47"
+  integrity sha1-5vdXEDw2Yw3HyfOFSUxdl5bCTUc=
+  dependencies:
+    qrcode "^1.3.3"
+
 "@fortawesome/fontawesome-common-types@^0.1.7":
   version "0.1.7"
   resolved "http://registry.npm.taobao.org/@fortawesome/fontawesome-common-types/download/@fortawesome/fontawesome-common-types-0.1.7.tgz#4336c4b06d0b5608ff1215464b66fcf9f4795284"
@@ -141,14 +148,19 @@ ansi-regex@^3.0.0:
   resolved "http://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
   integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
 
+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=
+
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
   integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
 
-ansi-styles@^3.2.1:
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
   version "3.2.1"
-  resolved "http://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+  resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1566430562325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
   integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
   dependencies:
     color-convert "^1.9.0"
@@ -1372,6 +1384,11 @@ camelcase@^4.1.0:
   resolved "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
   integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
 
+camelcase@^5.0.0:
+  version "5.3.1"
+  resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+  integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=
+
 caniuse-api@^1.5.2:
   version "1.6.1"
   resolved "http://registry.npm.taobao.org/caniuse-api/download/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
@@ -1522,6 +1539,15 @@ cli-spinners@^1.0.1:
   resolved "http://registry.npm.taobao.org/cli-spinners/download/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
   integrity sha1-ACwZkJEtDVlYDJO9NsBW3pnkJZo=
 
+clipboard@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d"
+  integrity sha1-g22v1mzw/qXXHOXVsL9ulYAJES0=
+  dependencies:
+    good-listener "^1.2.2"
+    select "^1.1.2"
+    tiny-emitter "^2.0.0"
+
 cliui@^2.1.0:
   version "2.1.0"
   resolved "http://registry.npm.taobao.org/cliui/download/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
@@ -1540,6 +1566,15 @@ cliui@^3.2.0:
     strip-ansi "^3.0.1"
     wrap-ansi "^2.0.0"
 
+cliui@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+  integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=
+  dependencies:
+    string-width "^3.1.0"
+    strip-ansi "^5.2.0"
+    wrap-ansi "^5.1.0"
+
 clone@^1.0.2:
   version "1.0.4"
   resolved "http://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
@@ -2045,9 +2080,9 @@ debug@^3.1.0:
   dependencies:
     ms "^2.1.1"
 
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
   version "1.2.0"
-  resolved "http://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
   integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
 
 decode-uri-component@^0.2.0:
@@ -2121,6 +2156,11 @@ delayed-stream@~1.0.0:
   resolved "http://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
   integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 
+delegate@^3.1.2:
+  version "3.2.0"
+  resolved "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+  integrity sha1-tmtxwxWFIuirV0T3INjKDCr1kWY=
+
 delegates@^1.0.0:
   version "1.0.0"
   resolved "http://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -2170,6 +2210,11 @@ diffie-hellman@^5.0.0:
     miller-rabin "^4.0.0"
     randombytes "^2.0.0"
 
+dijkstrajs@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npm.taobao.org/dijkstrajs/download/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b"
+  integrity sha1-082BIh4+pAdCz83lVtTpnpjdxxs=
+
 dir-glob@^2.0.0:
   version "2.0.0"
   resolved "http://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
@@ -2302,10 +2347,10 @@ element-resize-detector@^1.1.10:
   dependencies:
     batch-processor "^1.0.0"
 
-element-ui@^2.4.6:
-  version "2.4.8"
-  resolved "http://registry.npm.taobao.org/element-ui/download/element-ui-2.4.8.tgz#04c684540f84983ef440b516680b0dc6a4c66eff"
-  integrity sha1-BMaEVA+EmD70QLUWaAsNxqTGbv8=
+element-ui@^2.12.0:
+  version "2.12.0"
+  resolved "https://registry.npm.taobao.org/element-ui/download/element-ui-2.12.0.tgz#a893bc11ae4f7dbb7e9d541606f23e643f131ee4"
+  integrity sha1-qJO8Ea5Pfbt+nVQWBvI+ZD8THuQ=
   dependencies:
     async-validator "~1.8.1"
     babel-helper-vue-jsx-merge-props "^2.0.0"
@@ -2327,6 +2372,11 @@ elliptic@^6.0.0:
     minimalistic-assert "^1.0.0"
     minimalistic-crypto-utils "^1.0.0"
 
+emoji-regex@^7.0.1:
+  version "7.0.3"
+  resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+  integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=
+
 emojis-list@^2.0.0:
   version "2.1.0"
   resolved "http://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -2796,6 +2846,13 @@ find-up@^2.0.0, find-up@^2.1.0:
   dependencies:
     locate-path "^2.0.0"
 
+find-up@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+  integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=
+  dependencies:
+    locate-path "^3.0.0"
+
 flatpickr@^4.5.1:
   version "4.5.2"
   resolved "http://registry.npm.taobao.org/flatpickr/download/flatpickr-4.5.2.tgz#47c8ad472a096e5fb7e74b809b0703535383f20d"
@@ -2940,6 +2997,11 @@ get-caller-file@^1.0.1:
   resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
   integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=
 
+get-caller-file@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=
+
 get-stdin@^4.0.1:
   version "4.0.1"
   resolved "http://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
@@ -3025,6 +3087,13 @@ globby@^7.1.1:
     pify "^3.0.0"
     slash "^1.0.0"
 
+good-listener@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
+  integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
+  dependencies:
+    delegate "^3.1.2"
+
 graceful-fs@^4.1.11, graceful-fs@^4.1.2:
   version "4.1.11"
   resolved "http://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -3731,6 +3800,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
   resolved "http://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
   integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
 
+isarray@^2.0.1:
+  version "2.0.5"
+  resolved "https://registry.npm.taobao.org/isarray/download/isarray-2.0.5.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+  integrity sha1-ivHkwSISRMxiRZ+vOJQNTmRKVyM=
+
 isexe@^2.0.0:
   version "2.0.0"
   resolved "http://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@@ -3976,6 +4050,14 @@ locate-path@^2.0.0:
     p-locate "^2.0.0"
     path-exists "^3.0.0"
 
+locate-path@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+  integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=
+  dependencies:
+    p-locate "^3.0.0"
+    path-exists "^3.0.0"
+
 lodash.camelcase@^4.3.0:
   version "4.3.0"
   resolved "http://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
@@ -4701,6 +4783,13 @@ p-limit@^1.0.0, p-limit@^1.1.0:
   dependencies:
     p-try "^1.0.0"
 
+p-limit@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
+  integrity sha1-qgeniMwxUck5tRMfY1cPDdIAlTc=
+  dependencies:
+    p-try "^2.0.0"
+
 p-locate@^2.0.0:
   version "2.0.0"
   resolved "http://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@@ -4708,6 +4797,13 @@ p-locate@^2.0.0:
   dependencies:
     p-limit "^1.1.0"
 
+p-locate@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+  integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=
+  dependencies:
+    p-limit "^2.0.0"
+
 p-map@^1.1.1:
   version "1.2.0"
   resolved "http://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
@@ -4718,6 +4814,11 @@ p-try@^1.0.0:
   resolved "http://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
   integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
 
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+  integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=
+
 pako@~1.0.5:
   version "1.0.6"
   resolved "http://registry.npm.taobao.org/pako/download/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
@@ -4900,6 +5001,11 @@ pkg-dir@^2.0.0:
   dependencies:
     find-up "^2.1.0"
 
+pngjs@^3.3.0:
+  version "3.4.0"
+  resolved "https://registry.npm.taobao.org/pngjs/download/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
+  integrity sha1-mcp9clll+2VYFOr2XzjxK72/VV8=
+
 portfinder@^1.0.17, portfinder@^1.0.9:
   version "1.0.17"
   resolved "http://registry.npm.taobao.org/portfinder/download/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a"
@@ -5387,6 +5493,16 @@ q@^1.1.2:
   resolved "http://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
   integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
 
+qrcode@^1.3.3:
+  version "1.4.2"
+  resolved "https://registry.npm.taobao.org/qrcode/download/qrcode-1.4.2.tgz#e7c82a60140916d666541043bd2b0b72ee4e38a6"
+  integrity sha1-58gqYBQJFtZmVBBDvSsLcu5OOKY=
+  dependencies:
+    dijkstrajs "^1.0.1"
+    isarray "^2.0.1"
+    pngjs "^3.3.0"
+    yargs "^13.2.4"
+
 qrious@^4.0.2:
   version "4.0.2"
   resolved "http://registry.npm.taobao.org/qrious/download/qrious-4.0.2.tgz#09c4d4079d2b961617f62c69cff3b9bb66a39693"
@@ -5726,6 +5842,11 @@ require-main-filename@^1.0.1:
   resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
   integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
 
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+  integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=
+
 requires-port@^1.0.0:
   version "1.0.0"
   resolved "http://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -5844,6 +5965,11 @@ select-hose@^2.0.0:
   resolved "http://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
   integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
 
+select@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npm.taobao.org/select/download/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+  integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
+
 selfsigned@^1.9.1:
   version "1.10.4"
   resolved "http://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
@@ -6039,6 +6165,11 @@ sort-keys@^1.0.0:
   dependencies:
     is-plain-obj "^1.0.0"
 
+sortablejs@^1.8.4:
+  version "1.10.1"
+  resolved "https://registry.npm.taobao.org/sortablejs/download/sortablejs-1.10.1.tgz#3d52b00f871be00f00f84d99a60d120bf3dfe52c"
+  integrity sha1-PVKwD4cb4A8A+E2Zpg0SC/Pf5Sw=
+
 source-list-map@^2.0.0:
   version "2.0.1"
   resolved "http://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@@ -6244,6 +6375,15 @@ string-width@^1.0.1, string-width@^1.0.2:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^4.0.0"
 
+string-width@^3.0.0, string-width@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+  integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE=
+  dependencies:
+    emoji-regex "^7.0.1"
+    is-fullwidth-code-point "^2.0.0"
+    strip-ansi "^5.1.0"
+
 string_decoder@^1.0.0, string_decoder@~1.1.1:
   version "1.1.1"
   resolved "http://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -6270,6 +6410,13 @@ strip-ansi@^4.0.0:
   dependencies:
     ansi-regex "^3.0.0"
 
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+  integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
+  dependencies:
+    ansi-regex "^4.1.0"
+
 strip-bom@^2.0.0:
   version "2.0.0"
   resolved "http://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -6394,6 +6541,11 @@ timers-browserify@^2.0.4:
   dependencies:
     setimmediate "^1.0.4"
 
+tiny-emitter@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+  integrity sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM=
+
 tinymce@^4.8.2:
   version "4.8.3"
   resolved "http://registry.npm.taobao.org/tinymce/download/tinymce-4.8.3.tgz#fdfe92121a5431fc6e2f295346f781cd200db3b9"
@@ -6731,6 +6883,11 @@ vue-amap@^0.5.8:
   dependencies:
     uppercamelcase "^1.1.0"
 
+vue-avatar-cropper@0.0.28:
+  version "0.0.28"
+  resolved "https://registry.npm.taobao.org/vue-avatar-cropper/download/vue-avatar-cropper-0.0.28.tgz#57015bcd1601347f134ef2974327a6f9529395e2"
+  integrity sha1-VwFbzRYBNH8TTvKXQyem+VKTleI=
+
 vue-awesome-swiper@^3.1.3:
   version "3.1.3"
   resolved "http://registry.npm.taobao.org/vue-awesome-swiper/download/vue-awesome-swiper-3.1.3.tgz#05500b501ffb3fec9bf7eb9985bcf4ae8360ed9e"
@@ -7017,6 +7174,15 @@ wrap-ansi@^2.0.0:
     string-width "^1.0.1"
     strip-ansi "^3.0.1"
 
+wrap-ansi@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+  integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=
+  dependencies:
+    ansi-styles "^3.2.0"
+    string-width "^3.0.0"
+    strip-ansi "^5.0.0"
+
 wrappy@1:
   version "1.0.2"
   resolved "http://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -7062,6 +7228,14 @@ yallist@^3.0.0, yallist@^3.0.2:
   resolved "http://registry.npm.taobao.org/yallist/download/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
   integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=
 
+yargs-parser@^13.1.1:
+  version "13.1.1"
+  resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+  integrity sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
 yargs-parser@^4.2.0:
   version "4.2.1"
   resolved "http://registry.npm.taobao.org/yargs-parser/download/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
@@ -7095,6 +7269,22 @@ yargs@6.6.0:
     y18n "^3.2.1"
     yargs-parser "^4.2.0"
 
+yargs@^13.2.4:
+  version "13.3.0"
+  resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
+  integrity sha1-TGV6VeB+Xyz5R/ijZlZ8BKDe3IM=
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.1"
+
 yargs@^8.0.2:
   version "8.0.2"
   resolved "http://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"