Sfoglia il codice sorgente

删除未用到的components

萤火科技 3 anni fa
parent
commit
c087fdb74e
66 ha cambiato i file con 1 aggiunte e 3600 eliminazioni
  1. 0 89
      src/components/ArticleListContent/ArticleListContent.vue
  2. 0 3
      src/components/ArticleListContent/index.js
  3. 0 46
      src/components/AvatarList/Item.vue
  4. 0 99
      src/components/AvatarList/List.vue
  5. 0 4
      src/components/AvatarList/index.js
  6. 0 60
      src/components/AvatarList/index.less
  7. 0 64
      src/components/AvatarList/index.md
  8. 0 62
      src/components/Charts/Bar.vue
  9. 0 120
      src/components/Charts/ChartCard.vue
  10. 0 67
      src/components/Charts/Liquid.vue
  11. 0 56
      src/components/Charts/MiniArea.vue
  12. 0 57
      src/components/Charts/MiniBar.vue
  13. 0 75
      src/components/Charts/MiniProgress.vue
  14. 0 40
      src/components/Charts/MiniSmoothArea.vue
  15. 0 68
      src/components/Charts/Radar.vue
  16. 0 77
      src/components/Charts/RankList.vue
  17. 0 113
      src/components/Charts/TagCloud.vue
  18. 0 64
      src/components/Charts/TransferBar.vue
  19. 0 82
      src/components/Charts/Trend.vue
  20. 0 13
      src/components/Charts/chart.less
  21. 0 14
      src/components/Charts/smooth.area.less
  22. 0 102
      src/components/CountDown/CountDown.vue
  23. 0 3
      src/components/CountDown/index.js
  24. 0 34
      src/components/CountDown/index.md
  25. 0 153
      src/components/DescriptionList/DescriptionList.vue
  26. 0 2
      src/components/DescriptionList/index.js
  27. 0 64
      src/components/Ellipsis/Ellipsis.vue
  28. 0 3
      src/components/Ellipsis/index.js
  29. 0 38
      src/components/Ellipsis/index.md
  30. 0 30
      src/components/FooterToolbar/FooterToolBar.vue
  31. 0 4
      src/components/FooterToolbar/index.js
  32. 0 23
      src/components/FooterToolbar/index.less
  33. 0 48
      src/components/FooterToolbar/index.md
  34. 0 86
      src/components/IconSelector/IconSelector.vue
  35. 0 48
      src/components/IconSelector/README.md
  36. 0 36
      src/components/IconSelector/icons.js
  37. 0 2
      src/components/IconSelector/index.js
  38. 0 90
      src/components/NoticeIcon/NoticeIcon.vue
  39. 0 2
      src/components/NoticeIcon/index.js
  40. 0 202
      src/components/PageHeader/PageHeader.vue
  41. 0 2
      src/components/PageHeader/index.js
  42. 0 109
      src/components/Result/Result.vue
  43. 0 2
      src/components/Result/index.js
  44. 0 63
      src/components/Search/GlobalSearch.jsx
  45. 0 25
      src/components/Search/index.less
  46. 0 352
      src/components/SettingDrawer/SettingDrawer.vue
  47. 0 38
      src/components/SettingDrawer/SettingItem.vue
  48. 0 2
      src/components/SettingDrawer/index.js
  49. 0 108
      src/components/SettingDrawer/settingConfig.js
  50. 0 24
      src/components/SettingDrawer/themeColor.js
  51. 0 122
      src/components/StandardFormRow/StandardFormRow.vue
  52. 0 3
      src/components/StandardFormRow/index.js
  53. 0 45
      src/components/TagSelect/TagSelectOption.jsx
  54. 0 113
      src/components/TagSelect/index.jsx
  55. 0 69
      src/components/TextArea/index.jsx
  56. 0 12
      src/components/TextArea/style.less
  57. 0 48
      src/components/index.js
  58. 0 5
      src/components/tools/DetailList.vue
  59. 0 67
      src/components/tools/HeadInfo.vue
  60. 0 46
      src/components/tools/LangSelect.vue
  61. 0 89
      src/components/tools/TwoStepCaptcha.vue
  62. 0 5
      src/components/tools/UserMenu.vue
  63. 1 1
      src/config/router.config.js
  64. 0 2
      src/layouts/BasicLayout.vue
  65. 0 4
      src/layouts/PageView.vue
  66. 0 1
      src/router/README.md

+ 0 - 89
src/components/ArticleListContent/ArticleListContent.vue

@@ -1,89 +0,0 @@
-<template>
-  <div class="antd-pro-components-article-list-content-index-listContent">
-    <div class="description">
-      <slot>
-        {{ description }}
-      </slot>
-    </div>
-    <div class="extra">
-      <a-avatar :src="avatar" size="small" />
-      <a :href="href">{{ owner }}</a> 发布在 <a :href="href">{{ href }}</a>
-      <em>{{ updateAt | moment }}</em>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'ArticleListContent',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'antd-pro-components-article-list-content-index-listContent'
-    },
-    description: {
-      type: String,
-      default: ''
-    },
-    owner: {
-      type: String,
-      required: true
-    },
-    avatar: {
-      type: String,
-      required: true
-    },
-    href: {
-      type: String,
-      required: true
-    },
-    updateAt: {
-      type: String,
-      required: true
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-@import '../index.less';
-
-.antd-pro-components-article-list-content-index-listContent {
-  .description {
-    max-width: 720px;
-    line-height: 22px;
-  }
-  .extra {
-    margin-top: 16px;
-    color: @text-color-secondary;
-    line-height: 22px;
-
-    & /deep/ .ant-avatar {
-      position: relative;
-      top: 1px;
-      width: 20px;
-      height: 20px;
-      margin-right: 8px;
-      vertical-align: top;
-    }
-
-    & > em {
-      margin-left: 16px;
-      color: @disabled-color;
-      font-style: normal;
-    }
-  }
-}
-
-@media screen and (max-width: @screen-xs) {
-  .antd-pro-components-article-list-content-index-listContent {
-    .extra {
-      & > em {
-        display: block;
-        margin-top: 8px;
-        margin-left: 0;
-      }
-    }
-  }
-}
-</style>

+ 0 - 3
src/components/ArticleListContent/index.js

@@ -1,3 +0,0 @@
-import ArticleListContent from './ArticleListContent'
-
-export default ArticleListContent

+ 0 - 46
src/components/AvatarList/Item.vue

@@ -1,46 +0,0 @@
-<template>
-  <tooltip v-if="tips !== ''">
-    <template slot="title">{{ tips }}</template>
-    <avatar :size="avatarSize" :src="src" />
-  </tooltip>
-  <avatar v-else :size="avatarSize" :src="src" />
-</template>
-
-<script>
-import Avatar from 'ant-design-vue/es/avatar'
-import Tooltip from 'ant-design-vue/es/tooltip'
-
-export default {
-  name: 'AvatarItem',
-  components: {
-    Avatar,
-    Tooltip
-  },
-  props: {
-    tips: {
-      type: String,
-      default: '',
-      required: false
-    },
-    src: {
-      type: String,
-      default: ''
-    }
-  },
-  data () {
-    return {
-      size: this.$parent.size
-    }
-  },
-  computed: {
-    avatarSize () {
-      return this.size !== 'mini' && this.size || 20
-    }
-  },
-  watch: {
-    '$parent.size' (val) {
-      this.size = val
-    }
-  }
-}
-</script>

+ 0 - 99
src/components/AvatarList/List.vue

@@ -1,99 +0,0 @@
-<!--
-<template>
-  <div :class="[prefixCls]">
-    <ul>
-      <slot></slot>
-      <template v-for="item in filterEmpty($slots.default).slice(0, 3)"></template>
-
-      <template v-if="maxLength > 0 && filterEmpty($slots.default).length > maxLength">
-        <avatar-item :size="size">
-          <avatar :size="size !== 'mini' && size || 20" :style="excessItemsStyle">{{ `+${maxLength}` }}</avatar>
-        </avatar-item>
-      </template>
-    </ul>
-  </div>
-</template>
--->
-
-<script>
-import Avatar from 'ant-design-vue/es/avatar'
-import AvatarItem from './Item'
-import { filterEmpty } from '@/components/_util/util'
-
-export default {
-  AvatarItem,
-  name: 'AvatarList',
-  components: {
-    Avatar,
-    AvatarItem
-  },
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-avatar-list'
-    },
-    /**
-       * 头像大小 类型: large、small 、mini, default
-       * 默认值: default
-       */
-    size: {
-      type: [String, Number],
-      default: 'default'
-    },
-    /**
-       * 要显示的最大项目
-       */
-    maxLength: {
-      type: Number,
-      default: 0
-    },
-    /**
-       * 多余的项目风格
-       */
-    excessItemsStyle: {
-      type: Object,
-      default: () => {
-        return {
-          color: '#f56a00',
-          backgroundColor: '#fde3cf'
-        }
-      }
-    }
-  },
-  data () {
-    return {}
-  },
-  methods: {
-    getItems (items) {
-      const classString = {
-        [`${this.prefixCls}-item`]: true,
-        [`${this.size}`]: true
-      }
-
-      if (this.maxLength > 0) {
-        items = items.slice(0, this.maxLength)
-        items.push((<Avatar size={ this.size } style={ this.excessItemsStyle }>{`+${this.maxLength}`}</Avatar>))
-      }
-      const itemList = items.map((item) => (
-        <li class={ classString }>{ item }</li>
-      ))
-      return itemList
-    }
-  },
-  render () {
-    const { prefixCls, size } = this.$props
-    const classString = {
-      [`${prefixCls}`]: true,
-      [`${size}`]: true
-    }
-    const items = filterEmpty(this.$slots.default)
-    const itemsDom = items && items.length ? <ul class={`${prefixCls}-items`}>{ this.getItems(items) }</ul> : null
-
-    return (
-      <div class={ classString }>
-        { itemsDom }
-      </div>
-    )
-  }
-}
-</script>

+ 0 - 4
src/components/AvatarList/index.js

@@ -1,4 +0,0 @@
-import AvatarList from './List'
-import './index.less'
-
-export default AvatarList

+ 0 - 60
src/components/AvatarList/index.less

@@ -1,60 +0,0 @@
-@import "../index";
-
-@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list";
-@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item";
-
-.@{avatar-list-prefix-cls} {
-  display: inline-block;
-
-  ul {
-    list-style: none;
-    display: inline-block;
-    padding: 0;
-    margin: 0 0 0 8px;
-    font-size: 0;
-  }
-}
-
-.@{avatar-list-item-prefix-cls} {
-  display: inline-block;
-  font-size: @font-size-base;
-  margin-left: -8px;
-  width: @avatar-size-base;
-  height: @avatar-size-base;
-
-  :global {
-    .ant-avatar {
-      border: 1px solid #fff;
-      cursor: pointer;
-    }
-  }
-
-  &.large {
-    width: @avatar-size-lg;
-    height: @avatar-size-lg;
-  }
-
-  &.small {
-    width: @avatar-size-sm;
-    height: @avatar-size-sm;
-  }
-
-  &.mini {
-    width: 20px;
-    height: 20px;
-
-    :global {
-      .ant-avatar {
-        width: 20px;
-        height: 20px;
-        line-height: 20px;
-
-        .ant-avatar-string {
-          font-size: 12px;
-          line-height: 18px;
-        }
-      }
-    }
-  }
-}
-

+ 0 - 64
src/components/AvatarList/index.md

@@ -1,64 +0,0 @@
-# AvatarList 用户头像列表
-
-
-一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。
-
-
-
-引用方式:
-
-```javascript
-import AvatarList from '@/components/AvatarList'
-const AvatarListItem = AvatarList.AvatarItem
-
-export default {
-    components: {
-        AvatarList,
-        AvatarListItem
-    }
-}
-```
-
-
-
-## 代码演示  [demo](https://pro.loacg.com/test/home)
-
-```html
-<avatar-list size="mini">
-    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
-    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-</avatar-list>
-```
-或
-```html
-<avatar-list :max-length="3">
-    <avatar-list-item tips="Jake" src="https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png" />
-    <avatar-list-item tips="Andy" src="https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-    <avatar-list-item tips="Niko" src="https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png" />
-</avatar-list>
-```
-
-
-
-## API
-
-### AvatarList
-
-| 参数               | 说明       | 类型                                 | 默认值       |
-| ---------------- | -------- | ---------------------------------- | --------- |
-| size             | 头像大小     | `large`、`small` 、`mini`, `default` | `default` |
-| maxLength        | 要显示的最大项目 | number                             | -         |
-| excessItemsStyle | 多余的项目风格  | CSSProperties                      | -         |
-
-### AvatarList.Item
-
-| 参数   | 说明     | 类型        | 默认值 |
-| ---- | ------ | --------- | --- |
-| tips | 头像展示文案 | string | -   |
-| src  | 头像图片连接 | string    | -   |
-

+ 0 - 62
src/components/Charts/Bar.vue

@@ -1,62 +0,0 @@
-<template>
-  <div :style="{ padding: '0 0 32px 32px' }">
-    <h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
-    <v-chart
-      height="254"
-      :data="data"
-      :forceFit="true"
-      :padding="['auto', 'auto', '40', '50']">
-      <v-tooltip />
-      <v-axis />
-      <v-bar position="x*y"/>
-    </v-chart>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Bar',
-  props: {
-    title: {
-      type: String,
-      default: ''
-    },
-    data: {
-      type: Array,
-      default: () => {
-        return []
-      }
-    },
-    scale: {
-      type: Array,
-      default: () => {
-        return [{
-          dataKey: 'x',
-          min: 2
-        }, {
-          dataKey: 'y',
-          title: '时间',
-          min: 1,
-          max: 22
-        }]
-      }
-    },
-    tooltip: {
-      type: Array,
-      default: () => {
-        return [
-          'x*y',
-          (x, y) => ({
-            name: x,
-            value: y
-          })
-        ]
-      }
-    }
-  },
-  data () {
-    return {
-    }
-  }
-}
-</script>

+ 0 - 120
src/components/Charts/ChartCard.vue

@@ -1,120 +0,0 @@
-<template>
-  <a-card :loading="loading" :body-style="{ padding: '20px 24px 8px' }" :bordered="false">
-    <div class="chart-card-header">
-      <div class="meta">
-        <span class="chart-card-title">
-          <slot name="title">
-            {{ title }}
-          </slot>
-        </span>
-        <span class="chart-card-action">
-          <slot name="action"></slot>
-        </span>
-      </div>
-      <div class="total">
-        <slot name="total">
-          <span>{{ typeof total === 'function' && total() || total }}</span>
-        </slot>
-      </div>
-    </div>
-    <div class="chart-card-content">
-      <div class="content-fix">
-        <slot></slot>
-      </div>
-    </div>
-    <div class="chart-card-footer">
-      <div class="field">
-        <slot name="footer"></slot>
-      </div>
-    </div>
-  </a-card>
-</template>
-
-<script>
-export default {
-  name: 'ChartCard',
-  props: {
-    title: {
-      type: String,
-      default: ''
-    },
-    total: {
-      type: [Function, Number, String],
-      required: false,
-      default: null
-    },
-    loading: {
-      type: Boolean,
-      default: false
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .chart-card-header {
-    position: relative;
-    overflow: hidden;
-    width: 100%;
-
-    .meta {
-      position: relative;
-      overflow: hidden;
-      width: 100%;
-      color: rgba(0, 0, 0, .45);
-      font-size: 14px;
-      line-height: 22px;
-    }
-  }
-
-  .chart-card-action {
-    cursor: pointer;
-    position: absolute;
-    top: 0;
-    right: 0;
-  }
-
-  .chart-card-footer {
-    border-top: 1px solid #e8e8e8;
-    padding-top: 9px;
-    margin-top: 8px;
-
-    > * {
-      position: relative;
-    }
-
-    .field {
-      white-space: nowrap;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      margin: 0;
-    }
-  }
-
-  .chart-card-content {
-    margin-bottom: 12px;
-    position: relative;
-    height: 46px;
-    width: 100%;
-
-    .content-fix {
-      position: absolute;
-      left: 0;
-      bottom: 0;
-      width: 100%;
-    }
-  }
-
-  .total {
-    overflow: hidden;
-    text-overflow: ellipsis;
-    word-break: break-all;
-    white-space: nowrap;
-    color: #000;
-    margin-top: 4px;
-    margin-bottom: 0;
-    font-size: 30px;
-    line-height: 38px;
-    height: 38px;
-  }
-</style>

+ 0 - 67
src/components/Charts/Liquid.vue

@@ -1,67 +0,0 @@
-<template>
-  <div>
-    <v-chart
-      :forceFit="true"
-      :height="height"
-      :width="width"
-      :data="data"
-      :scale="scale"
-      :padding="0">
-      <v-tooltip />
-      <v-interval
-        :shape="['liquid-fill-gauge']"
-        position="transfer*value"
-        color=""
-        :v-style="{
-          lineWidth: 10,
-          opacity: 0.75
-        }"
-        :tooltip="[
-          'transfer*value',
-          (transfer, value) => {
-            return {
-              name: transfer,
-              value,
-            };
-          },
-        ]"
-      ></v-interval>
-      <v-guide
-        v-for="(row, index) in data"
-        :key="index"
-        type="text"
-        :top="true"
-        :position="{
-          gender: row.transfer,
-          value: 45
-        }"
-        :content="row.value + '%'"
-        :v-style="{
-          fontSize: 100,
-          textAlign: 'center',
-          opacity: 0.75,
-        }"
-      />
-    </v-chart>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Liquid',
-  props: {
-    height: {
-      type: Number,
-      default: 0
-    },
-    width: {
-      type: Number,
-      default: 0
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 56
src/components/Charts/MiniArea.vue

@@ -1,56 +0,0 @@
-<template>
-  <div class="antv-chart-mini">
-    <div class="chart-wrapper" :style="{ height: 46 }">
-      <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 0, 18, 0]">
-        <v-tooltip />
-        <v-smooth-area position="x*y" />
-      </v-chart>
-    </div>
-  </div>
-</template>
-
-<script>
-import moment from 'moment'
-const data = []
-const beginDay = new Date().getTime()
-
-for (let i = 0; i < 10; i++) {
-  data.push({
-    x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
-    y: Math.round(Math.random() * 10)
-  })
-}
-
-const tooltip = [
-  'x*y',
-  (x, y) => ({
-    name: x,
-    value: y
-  })
-]
-const scale = [{
-  dataKey: 'x',
-  min: 2
-}, {
-  dataKey: 'y',
-  title: '时间',
-  min: 1,
-  max: 22
-}]
-
-export default {
-  name: 'MiniArea',
-  data () {
-    return {
-      data,
-      tooltip,
-      scale,
-      height: 100
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "chart";
-</style>

+ 0 - 57
src/components/Charts/MiniBar.vue

@@ -1,57 +0,0 @@
-<template>
-  <div class="antv-chart-mini">
-    <div class="chart-wrapper" :style="{ height: 46 }">
-      <v-chart :force-fit="true" :height="height" :data="data" :padding="[36, 5, 18, 5]">
-        <v-tooltip />
-        <v-bar position="x*y" />
-      </v-chart>
-    </div>
-  </div>
-</template>
-
-<script>
-import moment from 'moment'
-const data = []
-const beginDay = new Date().getTime()
-
-for (let i = 0; i < 10; i++) {
-  data.push({
-    x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
-    y: Math.round(Math.random() * 10)
-  })
-}
-
-const tooltip = [
-  'x*y',
-  (x, y) => ({
-    name: x,
-    value: y
-  })
-]
-
-const scale = [{
-  dataKey: 'x',
-  min: 2
-}, {
-  dataKey: 'y',
-  title: '时间',
-  min: 1,
-  max: 30
-}]
-
-export default {
-  name: 'MiniBar',
-  data () {
-    return {
-      data,
-      tooltip,
-      scale,
-      height: 100
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "chart";
-</style>

+ 0 - 75
src/components/Charts/MiniProgress.vue

@@ -1,75 +0,0 @@
-<template>
-  <div class="chart-mini-progress">
-    <div class="target" :style="{ left: target + '%'}">
-      <span :style="{ backgroundColor: color }" />
-      <span :style="{ backgroundColor: color }"/>
-    </div>
-    <div class="progress-wrapper">
-      <div class="progress" :style="{ backgroundColor: color, width: percentage + '%', height: height }"></div>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'MiniProgress',
-  props: {
-    target: {
-      type: Number,
-      default: 0
-    },
-    height: {
-      type: String,
-      default: '10px'
-    },
-    color: {
-      type: String,
-      default: '#13C2C2'
-    },
-    percentage: {
-      type: Number,
-      default: 0
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .chart-mini-progress {
-    padding: 5px 0;
-    position: relative;
-    width: 100%;
-
-    .target {
-      position: absolute;
-      top: 0;
-      bottom: 0;
-
-      span {
-        border-radius: 100px;
-        position: absolute;
-        top: 0;
-        left: 0;
-        height: 4px;
-        width: 2px;
-
-        &:last-child {
-          top: auto;
-          bottom: 0;
-        }
-      }
-    }
-    .progress-wrapper {
-      background-color: #f5f5f5;
-      position: relative;
-
-      .progress {
-        transition: all .4s cubic-bezier(.08,.82,.17,1) 0s;
-        border-radius: 1px 0 0 1px;
-        background-color: #1890ff;
-        width: 0;
-        height: 100%;
-      }
-    }
-  }
-</style>

+ 0 - 40
src/components/Charts/MiniSmoothArea.vue

@@ -1,40 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <div class="chart-wrapper" :style="{ height: 46 }">
-      <v-chart :force-fit="true" :height="100" :data="dataSource" :scale="scale" :padding="[36, 0, 18, 0]">
-        <v-tooltip />
-        <v-smooth-line position="x*y" :size="2" />
-        <v-smooth-area position="x*y" />
-      </v-chart>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'MiniSmoothArea',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-smooth-area'
-    },
-    scale: {
-      type: [Object, Array],
-      required: true
-    },
-    dataSource: {
-      type: Array,
-      required: true
-    }
-  },
-  data () {
-    return {
-      height: 100
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "smooth.area.less";
-</style>

+ 0 - 68
src/components/Charts/Radar.vue

@@ -1,68 +0,0 @@
-<template>
-  <v-chart :forceFit="true" height="400" :data="data" :padding="[20, 20, 95, 20]" :scale="scale">
-    <v-tooltip></v-tooltip>
-    <v-axis :dataKey="axis1Opts.dataKey" :line="axis1Opts.line" :tickLine="axis1Opts.tickLine" :grid="axis1Opts.grid" />
-    <v-axis :dataKey="axis2Opts.dataKey" :line="axis2Opts.line" :tickLine="axis2Opts.tickLine" :grid="axis2Opts.grid" />
-    <v-legend dataKey="user" marker="circle" :offset="30" />
-    <v-coord type="polar" radius="0.8" />
-    <v-line position="item*score" color="user" :size="2" />
-    <v-point position="item*score" color="user" :size="4" shape="circle" />
-  </v-chart>
-</template>
-
-<script>
-const axis1Opts = {
-  dataKey: 'item',
-  line: null,
-  tickLine: null,
-  grid: {
-    lineStyle: {
-      lineDash: null
-    },
-    hideFirstLine: false
-  }
-}
-const axis2Opts = {
-  dataKey: 'score',
-  line: null,
-  tickLine: null,
-  grid: {
-    type: 'polygon',
-    lineStyle: {
-      lineDash: null
-    }
-  }
-}
-
-const scale = [
-  {
-    dataKey: 'score',
-    min: 0,
-    max: 80
-  }, {
-    dataKey: 'user',
-    alias: '类型'
-  }
-]
-
-export default {
-  name: 'Radar',
-  props: {
-    data: {
-      type: Array,
-      default: null
-    }
-  },
-  data () {
-    return {
-      axis1Opts,
-      axis2Opts,
-      scale
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 77
src/components/Charts/RankList.vue

@@ -1,77 +0,0 @@
-<template>
-  <div class="rank">
-    <h4 class="title">{{ title }}</h4>
-    <ul class="list">
-      <li :key="index" v-for="(item, index) in list">
-        <span :class="index < 3 ? 'active' : null">{{ index + 1 }}</span>
-        <span>{{ item.name }}</span>
-        <span>{{ item.total }}</span>
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'RankList',
-  // ['title', 'list']
-  props: {
-    title: {
-      type: String,
-      default: ''
-    },
-    list: {
-      type: Array,
-      default: null
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-  .rank {
-    padding: 0 32px 32px 72px;
-
-    .list {
-      margin: 25px 0 0;
-      padding: 0;
-      list-style: none;
-
-      li {
-        margin-top: 16px;
-
-        span {
-          color: rgba(0, 0, 0, .65);
-          font-size: 14px;
-          line-height: 22px;
-
-          &:first-child {
-            background-color: #f5f5f5;
-            border-radius: 20px;
-            display: inline-block;
-            font-size: 12px;
-            font-weight: 600;
-            margin-right: 24px;
-            height: 20px;
-            line-height: 20px;
-            width: 20px;
-            text-align: center;
-          }
-          &.active {
-            background-color: #314659;
-            color: #fff;
-          }
-          &:last-child {
-            float: right;
-          }
-        }
-      }
-    }
-  }
-
-  .mobile .rank {
-    padding: 0 32px 32px 32px;
-  }
-
-</style>

+ 0 - 113
src/components/Charts/TagCloud.vue

@@ -1,113 +0,0 @@
-<template>
-  <v-chart :width="width" :height="height" :padding="[0]" :data="data" :scale="scale">
-    <v-tooltip :show-title="false" />
-    <v-coord type="rect" direction="TL" />
-    <v-point position="x*y" color="category" shape="cloud" tooltip="value*category" />
-  </v-chart>
-</template>
-
-<script>
-import { registerShape } from 'viser-vue'
-const DataSet = require('@antv/data-set')
-
-const imgUrl = 'https://gw.alipayobjects.com/zos/rmsportal/gWyeGLCdFFRavBGIDzWk.png'
-
-const scale = [
-  { dataKey: 'x', nice: false },
-  { dataKey: 'y', nice: false }
-]
-
-registerShape('point', 'cloud', {
-  draw (cfg, container) {
-    return container.addShape('text', {
-      attrs: {
-        fillOpacity: cfg.opacity,
-        fontSize: cfg.origin._origin.size,
-        rotate: cfg.origin._origin.rotate,
-        text: cfg.origin._origin.text,
-        textAlign: 'center',
-        fontFamily: cfg.origin._origin.font,
-        fill: cfg.color,
-        textBaseline: 'Alphabetic',
-        ...cfg.style,
-        x: cfg.x,
-        y: cfg.y
-      }
-    })
-  }
-})
-
-export default {
-  name: 'TagCloud',
-  props: {
-    tagList: {
-      type: Array,
-      required: true
-    },
-    height: {
-      type: Number,
-      default: 400
-    },
-    width: {
-      type: Number,
-      default: 640
-    }
-  },
-  data () {
-    return {
-      data: [],
-      scale
-    }
-  },
-  watch: {
-    tagList: function (val) {
-      if (val.length > 0) {
-        this.initTagCloud(val)
-      }
-    }
-  },
-  mounted () {
-    if (this.tagList.length > 0) {
-      this.initTagCloud(this.tagList)
-    }
-  },
-  methods: {
-    initTagCloud (dataSource) {
-      const { height, width } = this
-
-      const dv = new DataSet.View().source(dataSource)
-      const range = dv.range('value')
-      const min = range[0]
-      const max = range[1]
-      const imageMask = new Image()
-      imageMask.crossOrigin = ''
-      imageMask.src = imgUrl
-      imageMask.onload = () => {
-        dv.transform({
-          type: 'tag-cloud',
-          fields: ['name', 'value'],
-          size: [width, height],
-          imageMask,
-          font: 'Verdana',
-          padding: 0,
-          timeInterval: 5000, // max execute time
-          rotate () {
-            let random = ~~(Math.random() * 4) % 4
-            if (random === 2) {
-              random = 0
-            }
-            return random * 90 // 0, 90, 270
-          },
-          fontSize (d) {
-            if (d.value) {
-              return ((d.value - min) / (max - min)) * (32 - 8) + 8
-            }
-            return 0
-          }
-        })
-        this.data = dv.rows
-      }
-    }
-  }
-}
-</script>

+ 0 - 64
src/components/Charts/TransferBar.vue

@@ -1,64 +0,0 @@
-<template>
-  <div :style="{ padding: '0 0 32px 32px' }">
-    <h4 :style="{ marginBottom: '20px' }">{{ title }}</h4>
-    <v-chart
-      height="254"
-      :data="data"
-      :scale="scale"
-      :forceFit="true"
-      :padding="['auto', 'auto', '40', '50']">
-      <v-tooltip />
-      <v-axis />
-      <v-bar position="x*y"/>
-    </v-chart>
-  </div>
-</template>
-
-<script>
-const tooltip = [
-  'x*y',
-  (x, y) => ({
-    name: x,
-    value: y
-  })
-]
-const scale = [{
-  dataKey: 'x',
-  title: '日期(天)',
-  alias: '日期(天)',
-  min: 2
-}, {
-  dataKey: 'y',
-  title: '流量(Gb)',
-  alias: '流量(Gb)',
-  min: 1
-}]
-
-export default {
-  name: 'Bar',
-  props: {
-    title: {
-      type: String,
-      default: ''
-    }
-  },
-  data () {
-    return {
-      data: [],
-      scale,
-      tooltip
-    }
-  },
-  created () {
-    this.getMonthBar()
-  },
-  methods: {
-    getMonthBar () {
-      this.$http.get('/analysis/month-bar')
-        .then(res => {
-          this.data = res.result
-        })
-    }
-  }
-}
-</script>

+ 0 - 82
src/components/Charts/Trend.vue

@@ -1,82 +0,0 @@
-<template>
-  <div class="chart-trend">
-    {{ term }}
-    <span>{{ rate }}%</span>
-    <span :class="['trend-icon', trend]"><a-icon :type="'caret-' + trend"/></span>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Trend',
-  props: {
-    term: {
-      type: String,
-      default: '',
-      required: true
-    },
-    percentage: {
-      type: Number,
-      default: null
-    },
-    type: {
-      type: Boolean,
-      default: null
-    },
-    target: {
-      type: Number,
-      default: 0
-    },
-    value: {
-      type: Number,
-      default: 0
-    },
-    fixed: {
-      type: Number,
-      default: 2
-    }
-  },
-  data () {
-    return {
-      trend: this.type && 'up' || 'down',
-      rate: this.percentage
-    }
-  },
-  created () {
-    const type = this.type === null ? this.value >= this.target : this.type
-    this.trend = type ? 'up' : 'down'
-    this.rate = (this.percentage === null ? Math.abs(this.value - this.target) * 100 / this.target : this.percentage).toFixed(this.fixed)
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .chart-trend {
-    display: inline-block;
-    font-size: 14px;
-    line-height: 22px;
-
-    .trend-icon {
-      font-size: 12px;
-
-      &.up, &.down {
-        margin-left: 4px;
-        position: relative;
-        top: 1px;
-
-        i {
-          font-size: 12px;
-          transform: scale(.83);
-        }
-      }
-
-      &.up {
-        color: #f5222d;
-      }
-      &.down {
-        color: #52c41a;
-        top: -1px;
-      }
-    }
-  }
-</style>

+ 0 - 13
src/components/Charts/chart.less

@@ -1,13 +0,0 @@
-.antv-chart-mini {
-  position: relative;
-  width: 100%;
-
-  .chart-wrapper {
-    position: absolute;
-    bottom: -28px;
-    width: 100%;
-
-/*    margin: 0 -5px;
-    overflow: hidden;*/
-  }
-}

+ 0 - 14
src/components/Charts/smooth.area.less

@@ -1,14 +0,0 @@
-@import "../index";
-
-@smoothArea-prefix-cls: ~"@{ant-pro-prefix}-smooth-area";
-
-.@{smoothArea-prefix-cls} {
-    position: relative;
-    width: 100%;
-
-    .chart-wrapper {
-        position: absolute;
-        bottom: -28px;
-        width: 100%;
-    }
-}

+ 0 - 102
src/components/CountDown/CountDown.vue

@@ -1,102 +0,0 @@
-<template>
-  <span>
-    {{ lastTime | format }}
-  </span>
-</template>
-
-<script>
-
-function fixedZero (val) {
-  return val * 1 < 10 ? `0${val}` : val
-}
-
-export default {
-  name: 'CountDown',
-  props: {
-    format: {
-      type: Function,
-      default: undefined
-    },
-    target: {
-      type: [Date, Number],
-      required: true
-    },
-    onEnd: {
-      type: Function,
-      default: () => ({})
-    }
-  },
-  data () {
-    return {
-      dateTime: '0',
-      originTargetTime: 0,
-      lastTime: 0,
-      timer: 0,
-      interval: 1000
-    }
-  },
-  filters: {
-    format (time) {
-      const hours = 60 * 60 * 1000
-      const minutes = 60 * 1000
-
-      const h = Math.floor(time / hours)
-      const m = Math.floor((time - h * hours) / minutes)
-      const s = Math.floor((time - h * hours - m * minutes) / 1000)
-      return `${fixedZero(h)}:${fixedZero(m)}:${fixedZero(s)}`
-    }
-  },
-  created () {
-    this.initTime()
-    this.tick()
-  },
-  methods: {
-    initTime () {
-      let lastTime = 0
-      let targetTime = 0
-      this.originTargetTime = this.target
-      try {
-        if (Object.prototype.toString.call(this.target) === '[object Date]') {
-          targetTime = this.target
-        } else {
-          targetTime = new Date(this.target).getTime()
-        }
-      } catch (e) {
-        throw new Error('invalid target prop')
-      }
-
-      lastTime = targetTime - new Date().getTime()
-
-      this.lastTime = lastTime < 0 ? 0 : lastTime
-    },
-    tick () {
-      const { onEnd } = this
-
-      this.timer = setTimeout(() => {
-        if (this.lastTime < this.interval) {
-          clearTimeout(this.timer)
-          this.lastTime = 0
-          if (typeof onEnd === 'function') {
-            onEnd()
-          }
-        } else {
-          this.lastTime -= this.interval
-          this.tick()
-        }
-      }, this.interval)
-    }
-  },
-  beforeUpdate () {
-    if (this.originTargetTime !== this.target) {
-      this.initTime()
-    }
-  },
-  beforeDestroy () {
-    clearTimeout(this.timer)
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 0 - 3
src/components/CountDown/index.js

@@ -1,3 +0,0 @@
-import CountDown from './CountDown'
-
-export default CountDown

+ 0 - 34
src/components/CountDown/index.md

@@ -1,34 +0,0 @@
-# CountDown 倒计时
-
-倒计时组件。
-
-
-
-引用方式:
-
-```javascript
-import CountDown from '@/components/CountDown/CountDown'
-
-export default {
-    components: {
-        CountDown
-    }
-}
-```
-
-
-
-## 代码演示  [demo](https://pro.loacg.com/test/home)
-
-```html
-<count-down :target="new Date().getTime() + 3000000" :on-end="onEndHandle" />
-```
-
-
-
-## API
-
-| 参数      | 说明                                      | 类型         | 默认值 |
-|----------|------------------------------------------|-------------|-------|
-| target | 目标时间 | Date | - |
-| onEnd |  倒计时结束回调 | funtion | -|

+ 0 - 153
src/components/DescriptionList/DescriptionList.vue

@@ -1,153 +0,0 @@
-<template>
-  <div :class="['description-list', size, layout === 'vertical' ? 'vertical': 'horizontal']">
-    <div v-if="title" class="title">{{ title }}</div>
-    <a-row>
-      <slot></slot>
-    </a-row>
-  </div>
-</template>
-
-<script>
-import { Col } from 'ant-design-vue/es/grid/'
-
-const Item = {
-  name: 'DetailListItem',
-  props: {
-    term: {
-      type: String,
-      default: '',
-      required: false
-    }
-  },
-  inject: {
-    col: {
-      type: Number
-    }
-  },
-  render () {
-    return (
-      <Col {...{ props: responsive[this.col] }}>
-        <div class="term">{this.$props.term}</div>
-        <div class="content">{this.$slots.default}</div>
-      </Col>
-    )
-  }
-}
-
-const responsive = {
-  1: { xs: 24 },
-  2: { xs: 24, sm: 12 },
-  3: { xs: 24, sm: 12, md: 8 },
-  4: { xs: 24, sm: 12, md: 6 }
-}
-
-export default {
-  name: 'DetailList',
-  Item: Item,
-  components: {
-    Col
-  },
-  props: {
-    title: {
-      type: String,
-      default: '',
-      required: false
-    },
-    col: {
-      type: Number,
-      required: false,
-      default: 3
-    },
-    size: {
-      type: String,
-      required: false,
-      default: 'large'
-    },
-    layout: {
-      type: String,
-      required: false,
-      default: 'horizontal'
-    }
-  },
-  provide () {
-    return {
-      col: this.col > 4 ? 4 : this.col
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-  .description-list {
-
-    .title {
-      color: rgba(0,0,0,.85);
-      font-size: 14px;
-      font-weight: 500;
-      margin-bottom: 16px;
-    }
-
-    /deep/ .term {
-      color: rgba(0,0,0,.85);
-      display: table-cell;
-      line-height: 20px;
-      margin-right: 8px;
-      padding-bottom: 16px;
-      white-space: nowrap;
-
-      &:not(:empty):after {
-        content: ":";
-        margin: 0 8px 0 2px;
-        position: relative;
-        top: -.5px;
-      }
-    }
-
-    /deep/ .content {
-      color: rgba(0,0,0,.65);
-      display: table-cell;
-      min-height: 22px;
-      line-height: 22px;
-      padding-bottom: 16px;
-      width: 100%;
-      &:empty {
-        content: ' ';
-        height: 38px;
-        padding-bottom: 16px;
-      }
-    }
-
-    &.small {
-
-      .title {
-        font-size: 14px;
-        color: rgba(0, 0, 0, .65);
-        font-weight: normal;
-        margin-bottom: 12px;
-      }
-      /deep/ .term, .content {
-        padding-bottom: 8px;
-      }
-    }
-
-    &.large {
-      /deep/ .term, .content {
-        padding-bottom: 16px;
-      }
-
-      .title {
-        font-size: 16px;
-      }
-    }
-
-    &.vertical {
-      .term {
-        padding-bottom: 8px;
-      }
-      /deep/ .term, .content {
-        display: block;
-      }
-    }
-  }
-</style>

+ 0 - 2
src/components/DescriptionList/index.js

@@ -1,2 +0,0 @@
-import DescriptionList from './DescriptionList'
-export default DescriptionList

+ 0 - 64
src/components/Ellipsis/Ellipsis.vue

@@ -1,64 +0,0 @@
-<script>
-import Tooltip from 'ant-design-vue/es/tooltip'
-import { cutStrByFullLength, getStrFullLength } from '@/components/_util/util'
-/*
-    const isSupportLineClamp = document.body.style.webkitLineClamp !== undefined;
-
-    const TooltipOverlayStyle = {
-      overflowWrap: 'break-word',
-      wordWrap: 'break-word',
-    };
-  */
-
-export default {
-  name: 'Ellipsis',
-  components: {
-    Tooltip
-  },
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-ellipsis'
-    },
-    tooltip: {
-      type: Boolean
-    },
-    length: {
-      type: Number,
-      required: true
-    },
-    lines: {
-      type: Number,
-      default: 1
-    },
-    fullWidthRecognition: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    getStrDom (str, fullLength) {
-      return (
-        <span>{ cutStrByFullLength(str, this.length) + (fullLength > this.length ? '...' : '') }</span>
-      )
-    },
-    getTooltip (fullStr, fullLength) {
-      return (
-        <Tooltip>
-          <template slot="title">{ fullStr }</template>
-          { this.getStrDom(fullStr, fullLength) }
-        </Tooltip>
-      )
-    }
-  },
-  render () {
-    const { tooltip, length } = this.$props
-    const str = this.$slots.default.map(vNode => vNode.text).join('')
-    const fullLength = getStrFullLength(str)
-    const strDom = tooltip && fullLength > length ? this.getTooltip(str, fullLength) : this.getStrDom(str, fullLength)
-    return (
-      strDom
-    )
-  }
-}
-</script>

+ 0 - 3
src/components/Ellipsis/index.js

@@ -1,3 +0,0 @@
-import Ellipsis from './Ellipsis'
-
-export default Ellipsis

+ 0 - 38
src/components/Ellipsis/index.md

@@ -1,38 +0,0 @@
-# Ellipsis 文本自动省略号
-
-文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。
-
-
-
-引用方式:
-
-```javascript
-import Ellipsis from '@/components/Ellipsis'
-
-export default {
-    components: {
-        Ellipsis
-    }
-}
-```
-
-
-
-## 代码演示  [demo](https://pro.loacg.com/test/home)
-
-```html
-<ellipsis :length="100" tooltip>
-        There were injuries alleged in three cases in 2015, and a
-        fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall.
-</ellipsis>
-```
-
-
-
-## API
-
-
-参数 | 说明 | 类型 | 默认值
-----|------|-----|------
-tooltip | 移动到文本展示完整内容的提示 | boolean | -
-length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | -

+ 0 - 30
src/components/FooterToolbar/FooterToolBar.vue

@@ -1,30 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <div style="float: left">
-      <slot name="extra">{{ extra }}</slot>
-    </div>
-    <div style="float: right">
-      <slot></slot>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'FooterToolBar',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-footer-toolbar'
-    },
-    extra: {
-      type: [String, Object],
-      default: ''
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-</style>

+ 0 - 4
src/components/FooterToolbar/index.js

@@ -1,4 +0,0 @@
-import FooterToolBar from './FooterToolBar'
-import './index.less'
-
-export default FooterToolBar

+ 0 - 23
src/components/FooterToolbar/index.less

@@ -1,23 +0,0 @@
-@import "../index";
-
-@footer-toolbar-prefix-cls: ~"@{ant-pro-prefix}-footer-toolbar";
-
-.@{footer-toolbar-prefix-cls} {
-  position: fixed;
-  width: 100%;
-  bottom: 0;
-  right: 0;
-  height: 56px;
-  line-height: 56px;
-  box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03);
-  background: #fff;
-  border-top: 1px solid #e8e8e8;
-  padding: 0 24px;
-  z-index: 9;
-
-  &:after {
-    content: "";
-    display: block;
-    clear: both;
-  }
-}

+ 0 - 48
src/components/FooterToolbar/index.md

@@ -1,48 +0,0 @@
-# FooterToolbar 底部工具栏
-
-固定在底部的工具栏。
-
-
-
-## 何时使用
-
-固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。
-
-
-
-引用方式:
-
-```javascript
-import FooterToolBar from '@/components/FooterToolbar'
-
-export default {
-    components: {
-        FooterToolBar
-    }
-}
-```
-
-
-
-## 代码演示
-
-```html
-<footer-tool-bar>
-    <a-button type="primary" @click="validate" :loading="loading">提交</a-button>
-</footer-tool-bar>
-```
-或
-```html
-<footer-tool-bar extra="扩展信息提示">
-    <a-button type="primary" @click="validate" :loading="loading">提交</a-button>
-</footer-tool-bar>
-```
-
-
-## API
-
-参数 | 说明 | 类型 | 默认值
-----|------|-----|------
-children (slot) | 工具栏内容,向右对齐 | - | -
-extra | 额外信息,向左对齐 | String, Object | -
-

+ 0 - 86
src/components/IconSelector/IconSelector.vue

@@ -1,86 +0,0 @@
-<template>
-  <div :class="prefixCls">
-    <a-tabs v-model="currentTab" @change="handleTabChange">
-      <a-tab-pane v-for="v in icons" :tab="v.title" :key="v.key">
-        <ul>
-          <li v-for="(icon, key) in v.icons" :key="`${v.key}-${key}`" :class="{ 'active': selectedIcon==icon }" @click="handleSelectedIcon(icon)" >
-            <a-icon :type="icon" :style="{ fontSize: '36px' }" />
-          </li>
-        </ul>
-      </a-tab-pane>
-    </a-tabs>
-  </div>
-</template>
-
-<script>
-import icons from './icons'
-
-export default {
-  name: 'IconSelect',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-icon-selector'
-    },
-    // eslint-disable-next-line
-    value: {
-      type: String
-    }
-  },
-  data () {
-    return {
-      selectedIcon: this.value || '',
-      currentTab: 'directional',
-      icons
-    }
-  },
-  watch: {
-    value (val) {
-      this.selectedIcon = val
-      this.autoSwitchTab()
-    }
-  },
-  created () {
-    if (this.value) {
-      this.autoSwitchTab()
-    }
-  },
-  methods: {
-    handleSelectedIcon (icon) {
-      this.selectedIcon = icon
-      this.$emit('change', icon)
-    },
-    handleTabChange (activeKey) {
-      this.currentTab = activeKey
-    },
-    autoSwitchTab () {
-      icons.some(item => item.icons.some(icon => icon === this.value) && (this.currentTab = item.key))
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "../index.less";
-
-  ul{
-    list-style: none;
-    padding: 0;
-    overflow-y: scroll;
-    height: 250px;
-
-    li{
-      display: inline-block;
-      padding: @padding-sm;
-      margin: 3px 0;
-      border-radius: @border-radius-base;
-
-      &:hover, &.active{
-        // box-shadow: 0px 0px 5px 2px @primary-color;
-        cursor: pointer;
-        color: @white;
-        background-color: @primary-color;
-      }
-    }
-  }
-</style>

+ 0 - 48
src/components/IconSelector/README.md

@@ -1,48 +0,0 @@
-IconSelector
-====
-
-> 图标选择组件,常用于为某一个数据设定一个图标时使用
-> eg: 设定菜单列表时,为每个菜单设定一个图标
-
-该组件由 [@Saraka](https://github.com/saraka-tsukai) 封装
-
-
-
-### 使用方式
-
-```vue
-<template>
-	<div>
-       <icon-selector @change="handleIconChange"/>
-    </div>
-</template>
-
-<script>
-import IconSelector from '@/components/IconSelector'
-
-export default {
-  name: 'YourView',
-  components: {
-    IconSelector
-  },
-  data () {
-    return {
-    }
-  },
-  methods: {
-    handleIconChange (icon) {
-      console.log('change Icon', icon)
-    }
-  }
-}
-</script>
-```
-
-
-
-### 事件
-
-
-| 名称   | 说明                       | 类型   | 默认值 |
-| ------ | -------------------------- | ------ | ------ |
-| change | 当改变了 `icon` 选中项触发 | String | -      |

+ 0 - 36
src/components/IconSelector/icons.js

@@ -1,36 +0,0 @@
-/**
- * 增加新的图标时,请遵循以下数据结构
- * Adding new icon please follow the data structure below
- */
-export default [
-  {
-    key: 'directional',
-    title: '方向性图标',
-    icons: ['step-backward', 'step-forward', 'fast-backward', 'fast-forward', 'shrink', 'arrows-alt', 'down', 'up', 'left', 'right', 'caret-up', 'caret-down', 'caret-left', 'caret-right', 'up-circle', 'down-circle', 'left-circle', 'right-circle', 'double-right', 'double-left', 'vertical-left', 'vertical-right', 'forward', 'backward', 'rollback', 'enter', 'retweet', 'swap', 'swap-left', 'swap-right', 'arrow-up', 'arrow-down', 'arrow-left', 'arrow-right', 'play-circle', 'up-square', 'down-square', 'left-square', 'right-square', 'login', 'logout', 'menu-fold', 'menu-unfold', 'border-bottom', 'border-horizontal', 'border-inner', 'border-left', 'border-right', 'border-top', 'border-verticle', 'pic-center', 'pic-left', 'pic-right', 'radius-bottomleft', 'radius-bottomright', 'radius-upleft', 'fullscreen', 'fullscreen-exit']
-  },
-  {
-    key: 'suggested',
-    title: '提示建议性图标',
-    icons: ['question', 'question-circle', 'plus', 'plus-circle', 'pause', 'pause-circle', 'minus', 'minus-circle', 'plus-square', 'minus-square', 'info', 'info-circle', 'exclamation', 'exclamation-circle', 'close', 'close-circle', 'close-square', 'check', 'check-circle', 'check-square', 'clock-circle', 'warning', 'issues-close', 'stop']
-  },
-  {
-    key: 'editor',
-    title: '编辑类图标',
-    icons: ['edit', 'form', 'copy', 'scissor', 'delete', 'snippets', 'diff', 'highlight', 'align-center', 'align-left', 'align-right', 'bg-colors', 'bold', 'italic', 'underline', 'strikethrough', 'redo', 'undo', 'zoom-in', 'zoom-out', 'font-colors', 'font-size', 'line-height', 'colum-height', 'dash', 'small-dash', 'sort-ascending', 'sort-descending', 'drag', 'ordered-list', 'radius-setting']
-  },
-  {
-    key: 'data',
-    title: '数据类图标',
-    icons: ['area-chart', 'pie-chart', 'bar-chart', 'dot-chart', 'line-chart', 'radar-chart', 'heat-map', 'fall', 'rise', 'stock', 'box-plot', 'fund', 'sliders']
-  },
-  {
-    key: 'brand_logo',
-    title: '网站通用图标',
-    icons: ['lock', 'unlock', 'bars', 'book', 'calendar', 'cloud', 'cloud-download', 'code', 'copy', 'credit-card', 'delete', 'desktop', 'download', 'ellipsis', 'file', 'file-text', 'file-unknown', 'file-pdf', 'file-word', 'file-excel', 'file-jpg', 'file-ppt', 'file-markdown', 'file-add', 'folder', 'folder-open', 'folder-add', 'hdd', 'frown', 'meh', 'smile', 'inbox', 'laptop', 'appstore', 'link', 'mail', 'mobile', 'notification', 'paper-clip', 'picture', 'poweroff', 'reload', 'search', 'setting', 'share-alt', 'shopping-cart', 'tablet', 'tag', 'tags', 'to-top', 'upload', 'user', 'video-camera', 'home', 'loading', 'loading-3-quarters', 'cloud-upload', 'star', 'heart', 'environment', 'eye', 'camera', 'save', 'team', 'solution', 'phone', 'filter', 'exception', 'export', 'customer-service', 'qrcode', 'scan', 'like', 'dislike', 'message', 'pay-circle', 'calculator', 'pushpin', 'bulb', 'select', 'switcher', 'rocket', 'bell', 'disconnect', 'database', 'compass', 'barcode', 'hourglass', 'key', 'flag', 'layout', 'printer', 'sound', 'usb', 'skin', 'tool', 'sync', 'wifi', 'car', 'schedule', 'user-add', 'user-delete', 'usergroup-add', 'usergroup-delete', 'man', 'woman', 'shop', 'gift', 'idcard', 'medicine-box', 'red-envelope', 'coffee', 'copyright', 'trademark', 'safety', 'wallet', 'bank', 'trophy', 'contacts', 'global', 'shake', 'api', 'fork', 'dashboard', 'table', 'profile', 'alert', 'audit', 'branches', 'build', 'border', 'crown', 'experiment', 'fire', 'money-collect', 'property-safety', 'read', 'reconciliation', 'rest', 'security-scan', 'insurance', 'interation', 'safety-certificate', 'project', 'thunderbolt', 'block', 'cluster', 'deployment-unit', 'dollar', 'euro', 'pound', 'file-done', 'file-exclamation', 'file-protect', 'file-search', 'file-sync', 'gateway', 'gold', 'robot', 'shopping']
-  },
-  {
-    key: 'application',
-    title: '品牌和标识',
-    icons: ['android', 'apple', 'windows', 'ie', 'chrome', 'github', 'aliwangwang', 'dingding', 'weibo-square', 'weibo-circle', 'taobao-circle', 'html5', 'weibo', 'twitter', 'wechat', 'youtube', 'alipay-circle', 'taobao', 'skype', 'qq', 'medium-workmark', 'gitlab', 'medium', 'linkedin', 'google-plus', 'dropbox', 'facebook', 'codepen', 'code-sandbox', 'amazon', 'google', 'codepen-circle', 'alipay', 'ant-design', 'aliyun', 'zhihu', 'slack', 'slack-square', 'behance', 'behance-square', 'dribbble', 'dribbble-square', 'instagram', 'yuque', 'alibaba', 'yahoo']
-  }
-]

+ 0 - 2
src/components/IconSelector/index.js

@@ -1,2 +0,0 @@
-import IconSelector from './IconSelector'
-export default IconSelector

+ 0 - 90
src/components/NoticeIcon/NoticeIcon.vue

@@ -1,90 +0,0 @@
-<template>
-  <a-popover
-    v-model="visible"
-    trigger="click"
-    placement="bottomRight"
-    overlayClassName="header-notice-wrapper"
-    :getPopupContainer="() => $refs.noticeRef.parentElement"
-    :autoAdjustOverflow="true"
-    :arrowPointAtCenter="true"
-    :overlayStyle="{ width: '300px', top: '50px' }"
-  >
-    <template slot="content">
-      <a-spin :spinning="loading">
-        <a-tabs>
-          <a-tab-pane tab="通知" key="1">
-            <a-list>
-              <a-list-item>
-                <a-list-item-meta title="你收到了 14 份新周报" description="一年前">
-                  <a-avatar style="background-color: white" slot="avatar" src="https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"/>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item>
-                <a-list-item-meta title="你推荐的 曲妮妮 已通过第三轮面试" description="一年前">
-                  <a-avatar style="background-color: white" slot="avatar" src="https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png"/>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item>
-                <a-list-item-meta title="这种模板可以区分多种通知类型" description="一年前">
-                  <a-avatar style="background-color: white" slot="avatar" src="https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png"/>
-                </a-list-item-meta>
-              </a-list-item>
-            </a-list>
-          </a-tab-pane>
-          <a-tab-pane tab="消息" key="2">
-            123
-          </a-tab-pane>
-          <a-tab-pane tab="待办" key="3">
-            123
-          </a-tab-pane>
-        </a-tabs>
-      </a-spin>
-    </template>
-    <span @click="fetchNotice" class="header-notice" ref="noticeRef" style="padding: 0 18px">
-      <a-badge count="12">
-        <a-icon style="font-size: 16px; padding: 4px" type="bell" />
-      </a-badge>
-    </span>
-  </a-popover>
-</template>
-
-<script>
-export default {
-  name: 'HeaderNotice',
-  data () {
-    return {
-      loading: false,
-      visible: false
-    }
-  },
-  methods: {
-    fetchNotice () {
-      if (!this.visible) {
-        this.loading = true
-        setTimeout(() => {
-          this.loading = false
-        }, 2000)
-      } else {
-        this.loading = false
-      }
-      this.visible = !this.visible
-    }
-  }
-}
-</script>
-
-<style lang="css">
-  .header-notice-wrapper {
-    top: 50px !important;
-  }
-</style>
-<style lang="less" scoped>
-  .header-notice{
-    display: inline-block;
-    transition: all 0.3s;
-
-    span {
-      vertical-align: initial;
-    }
-  }
-</style>

+ 0 - 2
src/components/NoticeIcon/index.js

@@ -1,2 +0,0 @@
-import NoticeIcon from './NoticeIcon'
-export default NoticeIcon

+ 0 - 202
src/components/PageHeader/PageHeader.vue

@@ -1,202 +0,0 @@
-<template>
-  <div class="page-header">
-    <div class="page-header-index-wide">
-      <s-breadcrumb />
-      <div class="detail">
-        <div class="main" v-if="!$route.meta.hiddenHeaderContent">
-          <div class="row">
-            <img v-if="logo" :src="logo" class="logo"/>
-            <h1 v-if="title" class="title">{{ title }}</h1>
-            <div class="action">
-              <slot name="action"></slot>
-            </div>
-          </div>
-          <div class="row">
-            <div v-if="avatar" class="avatar">
-              <a-avatar :src="avatar" />
-            </div>
-            <div v-if="this.$slots.content" class="headerContent">
-              <slot name="content"></slot>
-            </div>
-            <div v-if="this.$slots.extra" class="extra">
-              <slot name="extra"></slot>
-            </div>
-          </div>
-          <div>
-            <slot name="pageMenu"></slot>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import Breadcrumb from '@/components/tools/Breadcrumb'
-
-export default {
-  name: 'PageHeader',
-  components: {
-    's-breadcrumb': Breadcrumb
-  },
-  props: {
-    title: {
-      type: [String, Boolean],
-      default: true,
-      required: false
-    },
-    logo: {
-      type: String,
-      default: '',
-      required: false
-    },
-    avatar: {
-      type: String,
-      default: '',
-      required: false
-    }
-  },
-  data () {
-    return {}
-  }
-}
-</script>
-
-<style lang="less" scoped>
-.page-header {
-  background: #fff;
-  padding: 16px 32px 0;
-  border-bottom: 1px solid #e8e8e8;
-
-  .breadcrumb {
-    margin-bottom: 16px;
-  }
-
-  .detail {
-    display: flex;
-    /*margin-bottom: 16px;*/
-
-    .avatar {
-      flex: 0 1 72px;
-      margin: 0 24px 8px 0;
-
-      & > span {
-        border-radius: 72px;
-        display: block;
-        width: 72px;
-        height: 72px;
-      }
-    }
-
-    .main {
-      width: 100%;
-      flex: 0 1 auto;
-
-      .row {
-        display: flex;
-        width: 100%;
-
-        .avatar {
-          margin-bottom: 16px;
-        }
-      }
-
-      .title {
-        font-size: 20px;
-        font-weight: 500;
-
-        font-size: 20px;
-        line-height: 28px;
-        font-weight: 500;
-        color: rgba(0, 0, 0, 0.85);
-        margin-bottom: 16px;
-        flex: auto;
-      }
-      .logo {
-        width: 28px;
-        height: 28px;
-        border-radius: 4px;
-        margin-right: 16px;
-      }
-      .content,
-      .headerContent {
-        flex: auto;
-        color: rgba(0, 0, 0, 0.45);
-        line-height: 22px;
-
-        .link {
-          margin-top: 16px;
-          line-height: 24px;
-
-          a {
-            font-size: 14px;
-            margin-right: 32px;
-          }
-        }
-      }
-      .extra {
-        flex: 0 1 auto;
-        margin-left: 88px;
-        min-width: 242px;
-        text-align: right;
-      }
-      .action {
-        margin-left: 56px;
-        min-width: 266px;
-        flex: 0 1 auto;
-        text-align: right;
-        &:empty {
-          display: none;
-        }
-      }
-    }
-  }
-}
-
-.mobile .page-header {
-  .main {
-    .row {
-      flex-wrap: wrap;
-
-      .avatar {
-        flex: 0 1 25%;
-        margin: 0 2% 8px 0;
-      }
-
-      .content,
-      .headerContent {
-        flex: 0 1 70%;
-
-        .link {
-          margin-top: 16px;
-          line-height: 24px;
-
-          a {
-            font-size: 14px;
-            margin-right: 10px;
-          }
-        }
-      }
-
-      .extra {
-        flex: 1 1 auto;
-        margin-left: 0;
-        min-width: 0;
-        text-align: right;
-      }
-
-      .action {
-        margin-left: unset;
-        min-width: 266px;
-        flex: 0 1 auto;
-        text-align: left;
-        margin-bottom: 12px;
-
-        &:empty {
-          display: none;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 2
src/components/PageHeader/index.js

@@ -1,2 +0,0 @@
-import PageHeader from './PageHeader'
-export default PageHeader

+ 0 - 109
src/components/Result/Result.vue

@@ -1,109 +0,0 @@
-<template>
-  <div class="result">
-    <div>
-      <a-icon :class="{ 'icon': true, [`${type}`]: true }" :type="localIsSuccess ? 'check-circle' : 'close-circle'"/>
-    </div>
-    <div class="title">
-      <slot name="title">
-        {{ title }}
-      </slot>
-    </div>
-    <div class="description">
-      <slot name="description">
-        {{ description }}
-      </slot>
-    </div>
-    <div class="extra" v-if="$slots.default">
-      <slot></slot>
-    </div>
-    <div class="action" v-if="$slots.action">
-      <slot name="action"></slot>
-    </div>
-  </div>
-</template>
-
-<script>
-const resultEnum = ['success', 'error']
-
-export default {
-  name: 'Result',
-  props: {
-    /** @Deprecated */
-    isSuccess: {
-      type: Boolean,
-      default: false
-    },
-    type: {
-      type: String,
-      default: resultEnum[0],
-      validator (val) {
-        return (val) => resultEnum.includes(val)
-      }
-    },
-    title: {
-      type: String,
-      default: ''
-    },
-    description: {
-      type: String,
-      default: ''
-    }
-  },
-  computed: {
-    localIsSuccess: function () {
-      return this.type === resultEnum[0]
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .result {
-    text-align: center;
-    width: 72%;
-    margin: 0 auto;
-    padding: 24px 0 8px;
-
-    .icon {
-      font-size: 72px;
-      line-height: 72px;
-      margin-bottom: 24px;
-    }
-    .success {
-      color: #52c41a;
-    }
-    .error {
-      color: red;
-    }
-    .title {
-      font-size: 24px;
-      color: rgba(0, 0, 0, .85);
-      font-weight: 500;
-      line-height: 32px;
-      margin-bottom: 16px;
-    }
-    .description {
-      font-size: 14px;
-      line-height: 22px;
-      color: rgba(0, 0, 0, 0.45);
-      margin-bottom: 24px;
-    }
-    .extra {
-      background: #fafafa;
-      padding: 24px 40px;
-      border-radius: 2px;
-      text-align: left;
-    }
-    .action {
-      margin-top: 32px;
-    }
-  }
-
-  .mobile {
-    .result {
-      width: 100%;
-      margin: 0 auto;
-      padding: unset;
-    }
-  }
-</style>

+ 0 - 2
src/components/Result/index.js

@@ -1,2 +0,0 @@
-import Result from './Result.vue'
-export default Result

+ 0 - 63
src/components/Search/GlobalSearch.jsx

@@ -1,63 +0,0 @@
-import { Select } from 'ant-design-vue'
-import './index.less'
-
-const GlobalSearch = {
-  name: 'GlobalSearch',
-  data () {
-    return {
-      visible: false
-    }
-  },
-  mounted () {
-    const keyboardHandle = (e) => {
-      e.preventDefault()
-      e.stopPropagation()
-      const { ctrlKey, shiftKey, altKey, keyCode } = e
-      console.log('keyCode:', e.keyCode, e)
-      // key is `K` and hold ctrl
-      if (keyCode === 75 && ctrlKey && !shiftKey && !altKey) {
-        this.visible = !this.visible
-      }
-    }
-    document.addEventListener('keydown', keyboardHandle)
-  },
-  render () {
-    const { visible } = this
-    const handleSearch = (e) => {
-      this.$emit('search', e)
-    }
-
-    const handleChange = (e) => {
-      this.$emit('change', e)
-    }
-    if (!visible) {
-      return null
-    }
-    return (
-      <div class={'global-search global-search-wrapper'}>
-        <div class={'global-search-box'}>
-          <Select
-            size={'large'}
-            showSearch
-            placeholder="Input search text.."
-            style={{ width: '100%' }}
-            defaultActiveFirstOption={false}
-            showArrow={false}
-            filterOption={false}
-            onSearch={handleSearch}
-            onChange={handleChange}
-            notFoundContent={null}
-          >
-          </Select>
-          <div class={'global-search-tips'}>Open with Ctrl/⌘ + K</div>
-        </div>
-      </div>
-    )
-  }
-}
-
-GlobalSearch.install = function (Vue) {
-  Vue.component(GlobalSearch.name, GlobalSearch)
-}
-
-export default GlobalSearch

+ 0 - 25
src/components/Search/index.less

@@ -1,25 +0,0 @@
-@import "~ant-design-vue/es/style/themes/default";
-
-.global-search-wrapper {
-  position: fixed;
-  top: 0;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  z-index: @zindex-modal-mask;
-  background: @modal-mask-bg;
-
-  .global-search-box {
-    position: absolute;
-    top: 20%;
-    left: 50%;
-    width: 450px;
-    transform: translate(-50%, -50%);
-
-    .global-search-tips {
-      color: @white;
-      font-size: @font-size-lg;
-      text-align: right;
-    }
-  }
-}

+ 0 - 352
src/components/SettingDrawer/SettingDrawer.vue

@@ -1,352 +0,0 @@
-<template>
-  <div class="setting-drawer">
-    <a-drawer
-      width="300"
-      placement="right"
-      @close="onClose"
-      :closable="false"
-      :visible="visible"
-      :drawer-style="{ position: 'absolute' }"
-      style="position: absolute"
-    >
-      <div class="setting-drawer-index-content">
-
-        <div :style="{ marginBottom: '24px' }">
-          <h3 class="setting-drawer-index-title">整体风格设置</h3>
-
-          <div class="setting-drawer-index-blockChecbox">
-            <a-tooltip>
-              <template slot="title">
-                暗色菜单风格
-              </template>
-              <div class="setting-drawer-index-item" @click="handleMenuTheme('dark')">
-                <img src="https://gw.alipayobjects.com/zos/rmsportal/LCkqqYNmvBEbokSDscrm.svg" alt="dark">
-                <div class="setting-drawer-index-selectIcon" v-if="navTheme === 'dark'">
-                  <a-icon type="check"/>
-                </div>
-              </div>
-            </a-tooltip>
-
-            <a-tooltip>
-              <template slot="title">
-                亮色菜单风格
-              </template>
-              <div class="setting-drawer-index-item" @click="handleMenuTheme('light')">
-                <img src="https://gw.alipayobjects.com/zos/rmsportal/jpRkZQMyYRryryPNtyIC.svg" alt="light">
-                <div class="setting-drawer-index-selectIcon" v-if="navTheme !== 'dark'">
-                  <a-icon type="check"/>
-                </div>
-              </div>
-            </a-tooltip>
-          </div>
-        </div>
-
-        <div :style="{ marginBottom: '24px' }">
-          <h3 class="setting-drawer-index-title">主题色</h3>
-
-          <div style="height: 20px">
-            <a-tooltip class="setting-drawer-theme-color-colorBlock" v-for="(item, index) in colorList" :key="index">
-              <template slot="title">
-                {{ item.key }}
-              </template>
-              <a-tag :color="item.color" @click="changeColor(item.color)">
-                <a-icon type="check" v-if="item.color === primaryColor"></a-icon>
-              </a-tag>
-            </a-tooltip>
-
-          </div>
-        </div>
-        <a-divider />
-
-        <div :style="{ marginBottom: '24px' }">
-          <h3 class="setting-drawer-index-title">导航模式</h3>
-
-          <div class="setting-drawer-index-blockChecbox">
-            <a-tooltip>
-              <template slot="title">
-                侧边栏导航
-              </template>
-              <div class="setting-drawer-index-item" @click="handleLayout('sidemenu')">
-                <img src="https://gw.alipayobjects.com/zos/rmsportal/JopDzEhOqwOjeNTXkoje.svg" alt="sidemenu">
-                <div class="setting-drawer-index-selectIcon" v-if="layoutMode === 'sidemenu'">
-                  <a-icon type="check"/>
-                </div>
-              </div>
-            </a-tooltip>
-
-            <a-tooltip>
-              <template slot="title">
-                顶部栏导航
-              </template>
-              <div class="setting-drawer-index-item" @click="handleLayout('topmenu')">
-                <img src="https://gw.alipayobjects.com/zos/rmsportal/KDNDBbriJhLwuqMoxcAr.svg" alt="topmenu">
-                <div class="setting-drawer-index-selectIcon" v-if="layoutMode !== 'sidemenu'">
-                  <a-icon type="check"/>
-                </div>
-              </div>
-            </a-tooltip>
-          </div>
-          <div :style="{ marginTop: '24px' }">
-            <a-list :split="false">
-              <a-list-item>
-                <a-tooltip slot="actions">
-                  <template slot="title">
-                    该设定仅 [顶部栏导航] 时有效
-                  </template>
-                  <a-select size="small" style="width: 80px;" :defaultValue="contentWidth" @change="handleContentWidthChange">
-                    <a-select-option value="Fixed">固定</a-select-option>
-                    <a-select-option value="Fluid" v-if="layoutMode !== 'sidemenu'">流式</a-select-option>
-                  </a-select>
-                </a-tooltip>
-                <a-list-item-meta>
-                  <div slot="title">内容区域宽度</div>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item>
-                <a-switch slot="actions" size="small" :defaultChecked="fixedHeader" @change="handleFixedHeader" />
-                <a-list-item-meta>
-                  <div slot="title">固定 Header</div>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item>
-                <a-switch slot="actions" size="small" :disabled="!fixedHeader" :defaultChecked="autoHideHeader" @change="handleFixedHeaderHidden" />
-                <a-list-item-meta>
-                  <a-tooltip slot="title" placement="left">
-                    <template slot="title">固定 Header 时可配置</template>
-                    <div :style="{ opacity: !fixedHeader ? '0.5' : '1' }">下滑时隐藏 Header</div>
-                  </a-tooltip>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item >
-                <a-switch slot="actions" size="small" :disabled="(layoutMode === 'topmenu')" :defaultChecked="fixSiderbar" @change="handleFixSiderbar" />
-                <a-list-item-meta>
-                  <div slot="title" :style="{ textDecoration: layoutMode === 'topmenu' ? 'line-through' : 'unset' }">固定侧边菜单</div>
-                </a-list-item-meta>
-              </a-list-item>
-            </a-list>
-          </div>
-        </div>
-        <a-divider />
-
-        <div :style="{ marginBottom: '24px' }">
-          <h3 class="setting-drawer-index-title">其他设置</h3>
-          <div>
-            <a-list :split="false">
-              <a-list-item>
-                <a-switch slot="actions" size="small" :defaultChecked="colorWeak" @change="onColorWeak" />
-                <a-list-item-meta>
-                  <div slot="title">色弱模式</div>
-                </a-list-item-meta>
-              </a-list-item>
-              <a-list-item>
-                <a-switch slot="actions" size="small" :defaultChecked="multiTab" @change="onMultiTab" />
-                <a-list-item-meta>
-                  <div slot="title">多页签模式</div>
-                </a-list-item-meta>
-              </a-list-item>
-            </a-list>
-          </div>
-        </div>
-        <a-divider />
-        <div :style="{ marginBottom: '24px' }">
-          <a-button
-            @click="doCopy"
-            icon="copy"
-            block
-          >拷贝设置</a-button>
-          <a-alert type="warning" :style="{ marginTop: '24px' }">
-            <span slot="message">
-              配置栏只在开发环境用于预览,生产环境不会展现,请手动修改配置文件。修改配置文件后,需要清空本地缓存和LocalStorage
-              <a href="https://github.com/sendya/ant-design-pro-vue/blob/master/src/config/defaultSettings.js" target="_blank">src/config/defaultSettings.js</a>
-            </span>
-          </a-alert>
-        </div>
-      </div>
-      <div class="setting-drawer-index-handle" @click="toggle" slot="handle">
-        <a-icon type="setting" v-if="!visible"/>
-        <a-icon type="close" v-else/>
-      </div>
-    </a-drawer>
-  </div>
-</template>
-
-<script>
-import { DetailList } from '@/components'
-import SettingItem from './SettingItem'
-import config from '@/config/defaultSettings'
-import { updateTheme, updateColorWeak, colorList } from './settingConfig'
-import { mixin, mixinDevice } from '@/utils/mixin'
-
-export default {
-  components: {
-    DetailList,
-    SettingItem
-  },
-  mixins: [mixin, mixinDevice],
-  data () {
-    return {
-      visible: false,
-      colorList
-    }
-  },
-  watch: {
-
-  },
-  mounted () {
-    updateTheme(this.primaryColor)
-    if (this.colorWeak !== config.colorWeak) {
-      updateColorWeak(this.colorWeak)
-    }
-  },
-  methods: {
-    showDrawer () {
-      this.visible = true
-    },
-    onClose () {
-      this.visible = false
-    },
-    toggle () {
-      this.visible = !this.visible
-    },
-    onColorWeak (checked) {
-      this.$store.dispatch('ToggleWeak', checked)
-      updateColorWeak(checked)
-    },
-    onMultiTab (checked) {
-      this.$store.dispatch('ToggleMultiTab', checked)
-    },
-    handleMenuTheme (theme) {
-      this.$store.dispatch('ToggleTheme', theme)
-    },
-    doCopy () {
-      // get current settings from mixin or this.$store.state.app, pay attention to the property name
-      const text = `export default {
-  primaryColor: '${this.primaryColor}', // primary color of ant design
-  navTheme: '${this.navTheme}', // theme for nav menu
-  layout: '${this.layoutMode}', // nav menu position: sidemenu or topmenu
-  contentWidth: '${this.contentWidth}', // layout of content: Fluid or Fixed, only works when layout is topmenu
-  fixedHeader: ${this.fixedHeader}, // sticky header
-  fixSiderbar: ${this.fixSiderbar}, // sticky siderbar
-  autoHideHeader: ${this.autoHideHeader}, //  auto hide header
-  colorWeak: ${this.colorWeak},
-  multiTab: ${this.multiTab},
-  production: process.env.NODE_ENV === 'production' && process.env.VUE_APP_PREVIEW !== 'true',
-  // vue-ls options
-  storageOptions: {
-    namespace: 'pro__',
-    name: 'ls',
-    storage: 'local',
-  }
-}`
-      this.$copyText(text).then(message => {
-        console.log('copy', message)
-        this.$message.success('复制完毕')
-      }).catch(err => {
-        console.log('copy.err', err)
-        this.$message.error('复制失败')
-      })
-    },
-    handleLayout (mode) {
-      this.$store.dispatch('ToggleLayoutMode', mode)
-      // 因为顶部菜单不能固定左侧菜单栏,所以强制关闭
-      this.handleFixSiderbar(false)
-    },
-    handleContentWidthChange (type) {
-      this.$store.dispatch('ToggleContentWidth', type)
-    },
-    changeColor (color) {
-      if (this.primaryColor !== color) {
-        this.$store.dispatch('ToggleColor', color)
-        updateTheme(color)
-      }
-    },
-    handleFixedHeader (fixed) {
-      this.$store.dispatch('ToggleFixedHeader', fixed)
-    },
-    handleFixedHeaderHidden (autoHidden) {
-      this.$store.dispatch('ToggleFixedHeaderHidden', autoHidden)
-    },
-    handleFixSiderbar (fixed) {
-      if (this.layoutMode === 'topmenu') {
-        this.$store.dispatch('ToggleFixSiderbar', false)
-        return
-      }
-      this.$store.dispatch('ToggleFixSiderbar', fixed)
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-  .setting-drawer-index-content {
-
-    .setting-drawer-index-blockChecbox {
-      display: flex;
-
-      .setting-drawer-index-item {
-        margin-right: 16px;
-        position: relative;
-        border-radius: 4px;
-        cursor: pointer;
-
-        img {
-          width: 48px;
-        }
-
-        .setting-drawer-index-selectIcon {
-          position: absolute;
-          top: 0;
-          right: 0;
-          width: 100%;
-          padding-top: 15px;
-          padding-left: 24px;
-          height: 100%;
-          color: #1890ff;
-          font-size: 14px;
-          font-weight: 700;
-        }
-      }
-    }
-    .setting-drawer-theme-color-colorBlock {
-      width: 20px;
-      height: 20px;
-      border-radius: 2px;
-      float: left;
-      cursor: pointer;
-      margin-right: 8px;
-      padding-left: 0px;
-      padding-right: 0px;
-      text-align: center;
-      color: #fff;
-      font-weight: 700;
-
-      i {
-        font-size: 14px;
-      }
-    }
-  }
-
-  .setting-drawer-index-handle {
-    position: absolute;
-    top: 240px;
-    background: #1890ff;
-    width: 48px;
-    height: 48px;
-    right: 300px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    cursor: pointer;
-    pointer-events: auto;
-    z-index: 1001;
-    text-align: center;
-    font-size: 16px;
-    border-radius: 4px 0 0 4px;
-
-    i {
-      color: rgb(255, 255, 255);
-      font-size: 20px;
-    }
-  }
-</style>

+ 0 - 38
src/components/SettingDrawer/SettingItem.vue

@@ -1,38 +0,0 @@
-<template>
-  <div class="setting-drawer-index-item">
-    <h3 class="setting-drawer-index-title">{{ title }}</h3>
-    <slot></slot>
-    <a-divider v-if="divider"/>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'SettingItem',
-  props: {
-    title: {
-      type: String,
-      default: ''
-    },
-    divider: {
-      type: Boolean,
-      default: false
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-  .setting-drawer-index-item {
-    margin-bottom: 24px;
-
-    .setting-drawer-index-title {
-      font-size: 14px;
-      color: rgba(0, 0, 0, .85);
-      line-height: 22px;
-      margin-bottom: 12px;
-    }
-
-  }
-</style>

+ 0 - 2
src/components/SettingDrawer/index.js

@@ -1,2 +0,0 @@
-import SettingDrawer from './SettingDrawer'
-export default SettingDrawer

+ 0 - 108
src/components/SettingDrawer/settingConfig.js

@@ -1,108 +0,0 @@
-import { message } from 'ant-design-vue/es'
-// import defaultSettings from '../defaultSettings';
-import themeColor from './themeColor.js'
-
-// let lessNodesAppended
-
-const colorList = [
-  {
-    key: '薄暮', color: '#F5222D'
-  },
-  {
-    key: '火山', color: '#FA541C'
-  },
-  {
-    key: '日暮', color: '#FAAD14'
-  },
-  {
-    key: '明青', color: '#13C2C2'
-  },
-  {
-    key: '极光绿', color: '#52C41A'
-  },
-  {
-    key: '拂晓蓝(默认)', color: '#1890FF'
-  },
-  {
-    key: '极客蓝', color: '#2F54EB'
-  },
-  {
-    key: '酱紫', color: '#722ED1'
-  }
-]
-
-const updateTheme = newPrimaryColor => {
-  const hideMessage = message.loading('正在切换主题!', 0)
-  themeColor.changeColor(newPrimaryColor).finally(t => {
-    setTimeout(() => {
-      hideMessage()
-    }, 10)
-  })
-}
-
-/*
-const updateTheme = primaryColor => {
-  // Don't compile less in production!
-  /* if (process.env.NODE_ENV === 'production') {
-    return;
-  } * /
-  // Determine if the component is remounted
-  if (!primaryColor) {
-    return
-  }
-  const hideMessage = message.loading('正在编译主题!', 0)
-  function buildIt () {
-    if (!window.less) {
-      return
-    }
-    setTimeout(() => {
-      window.less
-        .modifyVars({
-          '@primary-color': primaryColor
-        })
-        .then(() => {
-          hideMessage()
-        })
-        .catch(() => {
-          message.error('Failed to update theme')
-          hideMessage()
-        })
-    }, 200)
-  }
-  if (!lessNodesAppended) {
-    // insert less.js and color.less
-    const lessStyleNode = document.createElement('link')
-    const lessConfigNode = document.createElement('script')
-    const lessScriptNode = document.createElement('script')
-    lessStyleNode.setAttribute('rel', 'stylesheet/less')
-    lessStyleNode.setAttribute('href', '/color.less')
-    lessConfigNode.innerHTML = `
-      window.less = {
-        async: true,
-        env: 'production',
-        javascriptEnabled: true
-      };
-    `
-    lessScriptNode.src = 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js'
-    lessScriptNode.async = true
-    lessScriptNode.onload = () => {
-      buildIt()
-      lessScriptNode.onload = null
-    }
-    document.body.appendChild(lessStyleNode)
-    document.body.appendChild(lessConfigNode)
-    document.body.appendChild(lessScriptNode)
-    lessNodesAppended = true
-  } else {
-    buildIt()
-  }
-}
-*/
-
-const updateColorWeak = colorWeak => {
-  // document.body.className = colorWeak ? 'colorWeak' : '';
-  const app = document.body.querySelector('#app')
-  colorWeak ? app.classList.add('colorWeak') : app.classList.remove('colorWeak')
-}
-
-export { updateTheme, colorList, updateColorWeak }

+ 0 - 24
src/components/SettingDrawer/themeColor.js

@@ -1,24 +0,0 @@
-import client from 'webpack-theme-color-replacer/client'
-import generate from '@ant-design/colors/lib/generate'
-
-export default {
-  getAntdSerials (color) {
-    // 淡化(即less的tint)
-    const lightens = new Array(9).fill().map((t, i) => {
-      return client.varyColor.lighten(color, i / 10)
-    })
-    // colorPalette变换得到颜色值
-    const colorPalettes = generate(color)
-    const rgb = client.varyColor.toNum3(color.replace('#', '')).join(',')
-    return lightens.concat(colorPalettes).concat(rgb)
-  },
-  changeColor (newColor) {
-    var options = {
-      newColors: this.getAntdSerials(newColor), // new colors array, one-to-one corresponde with `matchColors`
-      changeUrl (cssUrl) {
-        return `/${cssUrl}` // while router is not `hash` mode, it needs absolute path
-      }
-    }
-    return client.changer.changeColor(options, Promise)
-  }
-}

+ 0 - 122
src/components/StandardFormRow/StandardFormRow.vue

@@ -1,122 +0,0 @@
-<template>
-  <div :class="[prefixCls, lastCls, blockCls, gridCls]">
-    <div v-if="title" class="antd-pro-components-standard-form-row-index-label">
-      <span>{{ title }}</span>
-    </div>
-    <div class="antd-pro-components-standard-form-row-index-content">
-      <slot></slot>
-    </div>
-  </div>
-</template>
-
-<script>
-const classes = [
-  'antd-pro-components-standard-form-row-index-standardFormRowBlock',
-  'antd-pro-components-standard-form-row-index-standardFormRowGrid',
-  'antd-pro-components-standard-form-row-index-standardFormRowLast'
-]
-export default {
-  name: 'StandardFormRow',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'antd-pro-components-standard-form-row-index-standardFormRow'
-    },
-    title: {
-      type: String,
-      default: undefined
-    },
-    last: {
-      type: Boolean
-    },
-    block: {
-      type: Boolean
-    },
-    grid: {
-      type: Boolean
-    }
-  },
-  computed: {
-    lastCls () {
-      return this.last ? classes[2] : null
-    },
-    blockCls () {
-      return this.block ? classes[0] : null
-    },
-    gridCls () {
-      return this.grid ? classes[1] : null
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-@import '../index.less';
-
-.antd-pro-components-standard-form-row-index-standardFormRow {
-  display: flex;
-  margin-bottom: 16px;
-  padding-bottom: 16px;
-  border-bottom: 1px dashed @border-color-split;
-
-  /deep/ .ant-form-item {
-    margin-right: 24px;
-  }
-  /deep/ .ant-form-item-label label {
-    margin-right: 0;
-    color: @text-color;
-  }
-  /deep/ .ant-form-item-label,
-  .ant-form-item-control {
-    padding: 0;
-    line-height: 32px;
-  }
-
-  .antd-pro-components-standard-form-row-index-label {
-    flex: 0 0 auto;
-    margin-right: 24px;
-    color: @heading-color;
-    font-size: @font-size-base;
-    text-align: right;
-    & > span {
-      display: inline-block;
-      height: 32px;
-      line-height: 32px;
-      &::after {
-        content: ':';
-      }
-    }
-  }
-
-  .antd-pro-components-standard-form-row-index-content {
-    flex: 1 1 0;
-    /deep/ .ant-form-item:last-child {
-      margin-right: 0;
-    }
-  }
-
-  &.antd-pro-components-standard-form-row-index-standardFormRowLast {
-    margin-bottom: 0;
-    padding-bottom: 0;
-    border: none;
-  }
-
-  &.antd-pro-components-standard-form-row-index-standardFormRowBlock {
-    /deep/ .ant-form-item,
-    div.ant-form-item-control-wrapper {
-      display: block;
-    }
-  }
-
-  &.antd-pro-components-standard-form-row-index-standardFormRowGrid {
-      /deep/ .ant-form-item,
-      div.ant-form-item-control-wrapper {
-        display: block;
-      }
-      /deep/ .ant-form-item-label {
-        float: left;
-      }
-  }
-}
-
-</style>

+ 0 - 3
src/components/StandardFormRow/index.js

@@ -1,3 +0,0 @@
-import StandardFormRow from './StandardFormRow'
-
-export default StandardFormRow

+ 0 - 45
src/components/TagSelect/TagSelectOption.jsx

@@ -1,45 +0,0 @@
-import { Tag } from 'ant-design-vue'
-const { CheckableTag } = Tag
-
-export default {
-  name: 'TagSelectOption',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-tag-select-option'
-    },
-    value: {
-      type: [String, Number, Object],
-      default: ''
-    },
-    checked: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data () {
-    return {
-      localChecked: this.checked || false
-    }
-  },
-  watch: {
-    'checked' (val) {
-      this.localChecked = val
-    },
-    '$parent.items': {
-      handler: function (val) {
-        this.value && val.hasOwnProperty(this.value) && (this.localChecked = val[this.value])
-      },
-      deep: true
-    }
-  },
-  render () {
-    const { $slots, value } = this
-    const onChange = (checked) => {
-      this.$emit('change', { value, checked })
-    }
-    return (<CheckableTag key={value} vModel={this.localChecked} onChange={onChange}>
-      {$slots.default}
-    </CheckableTag>)
-  }
-}

+ 0 - 113
src/components/TagSelect/index.jsx

@@ -1,113 +0,0 @@
-import PropTypes from 'ant-design-vue/es/_util/vue-types'
-import Option from './TagSelectOption.jsx'
-import { filterEmpty } from '@/components/_util/util'
-
-export default {
-  Option,
-  name: 'TagSelect',
-  model: {
-    prop: 'checked',
-    event: 'change'
-  },
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-tag-select'
-    },
-    defaultValue: {
-      type: PropTypes.array,
-      default: null
-    },
-    value: {
-      type: PropTypes.array,
-      default: null
-    },
-    expandable: {
-      type: Boolean,
-      default: false
-    },
-    hideCheckAll: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data () {
-    return {
-      expand: false,
-      localCheckAll: false,
-      items: this.getItemsKey(filterEmpty(this.$slots.default)),
-      val: this.value || this.defaultValue || []
-    }
-  },
-  methods: {
-    onChange (checked) {
-      const key = Object.keys(this.items).filter(key => key === checked.value)
-      this.items[key] = checked.checked
-      const bool = Object.values(this.items).lastIndexOf(false)
-      if (bool === -1) {
-        this.localCheckAll = true
-      } else {
-        this.localCheckAll = false
-      }
-    },
-    onCheckAll (checked) {
-      Object.keys(this.items).forEach(v => {
-        this.items[v] = checked.checked
-      })
-      this.localCheckAll = checked.checked
-    },
-    getItemsKey (items) {
-      const totalItem = {}
-      items.forEach(item => {
-        totalItem[item.componentOptions.propsData && item.componentOptions.propsData.value] = false
-      })
-      return totalItem
-    },
-    // CheckAll Button
-    renderCheckAll () {
-      const props = {
-        on: {
-          change: (checked) => {
-            this.onCheckAll(checked)
-            checked.value = 'total'
-            this.$emit('change', checked)
-          }
-        }
-      }
-      const checkAllElement = <Option key={'total'} checked={this.localCheckAll} {...props}>All</Option>
-      return !this.hideCheckAll && checkAllElement || null
-    },
-    // expandable
-    renderExpandable () {
-
-    },
-    // render option
-    renderTags (items) {
-      const listeners = {
-        change: (checked) => {
-          this.onChange(checked)
-          this.$emit('change', checked)
-        }
-      }
-
-      return items.map(vnode => {
-        const options = vnode.componentOptions
-        options.listeners = listeners
-        return vnode
-      })
-    }
-  },
-  render () {
-    const { $props: { prefixCls } } = this
-    const classString = {
-      [`${prefixCls}`]: true
-    }
-    const tagItems = filterEmpty(this.$slots.default)
-    return (
-      <div class={classString}>
-        {this.renderCheckAll()}
-        {this.renderTags(tagItems)}
-      </div>
-    )
-  }
-}

+ 0 - 69
src/components/TextArea/index.jsx

@@ -1,69 +0,0 @@
-import './style.less'
-import { getStrFullLength, cutStrByFullLength } from '../_util/util'
-import Input from 'ant-design-vue/es/input'
-const TextArea = Input.TextArea
-
-export default {
-  name: 'LimitTextArea',
-  model: {
-    prop: 'value',
-    event: 'change'
-  },
-  props: Object.assign({}, TextArea.props, {
-    prefixCls: {
-      type: String,
-      default: 'ant-textarea-limit'
-    },
-    // eslint-disable-next-line
-    value: {
-      type: String
-    },
-    limit: {
-      type: Number,
-      default: 200
-    }
-  }),
-  data () {
-    return {
-      currentLimit: 0
-    }
-  },
-  watch: {
-    value (val) {
-      this.calcLimitNum(val)
-    }
-  },
-  created () {
-    this.calcLimitNum(this.value)
-  },
-  methods: {
-    handleChange (e) {
-      const value = e.target.value
-      const len = getStrFullLength(value)
-      if (len <= this.limit) {
-        this.currentLimit = len
-        this.$emit('change', value)
-        return
-      } else {
-        const str = cutStrByFullLength(value, this.limit)
-        this.currentLimit = getStrFullLength(str)
-        this.$emit('change', str)
-      }
-      console.error('limit out! currentLimit:', this.currentLimit)
-    },
-    calcLimitNum (val) {
-      const len = getStrFullLength(val)
-      this.currentLimit = len
-    }
-  },
-  render () {
-    const { prefixCls, ...props } = this.$props
-    return (
-      <div class={this.prefixCls}>
-        <TextArea {...{ props }} value={this.value} onChange={this.handleChange}>
-        </TextArea>
-        <span class="limit">{this.currentLimit}/{this.limit}</span>
-      </div>
-    )
-  }
-}

+ 0 - 12
src/components/TextArea/style.less

@@ -1,12 +0,0 @@
-.ant-textarea-limit {
-  position: relative;
-
-  .limit {
-    position: absolute;
-    color: #909399;
-    background: #fff;
-    font-size: 12px;
-    bottom: 5px;
-    right: 10px;
-  }
-}

+ 0 - 48
src/components/index.js

@@ -1,32 +1,8 @@
-// chart
-import Bar from '@/components/Charts/Bar'
-import ChartCard from '@/components/Charts/ChartCard'
-import Liquid from '@/components/Charts/Liquid'
-import MiniArea from '@/components/Charts/MiniArea'
-import MiniSmoothArea from '@/components/Charts/MiniSmoothArea'
-import MiniBar from '@/components/Charts/MiniBar'
-import MiniProgress from '@/components/Charts/MiniProgress'
-import Radar from '@/components/Charts/Radar'
-import RankList from '@/components/Charts/RankList'
-import TransferBar from '@/components/Charts/TransferBar'
-import TagCloud from '@/components/Charts/TagCloud'
-
 // pro components
-import AvatarList from '@/components/AvatarList'
-import CountDown from '@/components/CountDown'
-import Ellipsis from '@/components/Ellipsis'
-import FooterToolbar from '@/components/FooterToolbar'
-import DescriptionList from '@/components/DescriptionList'
 // import Tree from '@/components/Tree/Tree'
-import Trend from '@/components/Trend'
 import STable from '@/components/Table'
 import MultiTab from '@/components/MultiTab'
-import Result from '@/components/Result'
-import IconSelector from '@/components/IconSelector'
-import TagSelect from '@/components/TagSelect'
 import ExceptionPage from '@/components/Exception'
-import StandardFormRow from '@/components/StandardFormRow'
-import ArticleListContent from '@/components/ArticleListContent'
 
 import Dialog from '@/components/Dialog'
 import ContentHeader from '@/components/ContentHeader'
@@ -35,34 +11,10 @@ import ContentHeader from '@/components/ContentHeader'
 import Tree from '@/components/tree/Tree'
 
 export {
-  AvatarList,
-  Bar,
-  ChartCard,
-  Liquid,
-  MiniArea,
-  MiniSmoothArea,
-  MiniBar,
-  MiniProgress,
-  Radar,
-  TagCloud,
-  RankList,
-  TransferBar,
-  Trend,
-  CountDown,
-  Ellipsis,
-  FooterToolbar,
-  DescriptionList,
-  // 兼容写法,请勿继续使用
-  DescriptionList as DetailList,
   // Tree,
   STable,
   MultiTab,
-  Result,
   ExceptionPage,
-  IconSelector,
-  TagSelect,
-  StandardFormRow,
-  ArticleListContent,
 
   Dialog,
   ContentHeader,

+ 0 - 5
src/components/tools/DetailList.vue

@@ -1,5 +0,0 @@
-<script>
-/* WARNING: 兼容老引入,请勿继续使用 */
-import DescriptionList from '@/components/DescriptionList'
-export default DescriptionList
-</script>

+ 0 - 67
src/components/tools/HeadInfo.vue

@@ -1,67 +0,0 @@
-<template>
-  <div class="head-info" :class="center && 'center'">
-    <span>{{ title }}</span>
-    <p>{{ content }}</p>
-    <em v-if="bordered"/>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'HeadInfo',
-  props: {
-    title: {
-      type: String,
-      default: ''
-    },
-    content: {
-      type: String,
-      default: ''
-    },
-    bordered: {
-      type: Boolean,
-      default: false
-    },
-    center: {
-      type: Boolean,
-      default: true
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  .head-info {
-    position: relative;
-    text-align: left;
-    padding: 0 32px 0 0;
-    min-width: 125px;
-
-    &.center {
-      text-align: center;
-      padding: 0 32px;
-    }
-
-    span {
-      color: rgba(0, 0, 0, .45);
-      display: inline-block;
-      font-size: 14px;
-      line-height: 22px;
-      margin-bottom: 4px;
-    }
-    p {
-      color: rgba(0, 0, 0, .85);
-      font-size: 24px;
-      line-height: 32px;
-      margin: 0;
-    }
-    em {
-      background-color: #e8e8e8;
-      position: absolute;
-      height: 56px;
-      width: 1px;
-      top: 0;
-      right: 0;
-    }
-  }
-</style>

+ 0 - 46
src/components/tools/LangSelect.vue

@@ -1,46 +0,0 @@
-<template>
-  <a-dropdown>
-    <span class="action global-lang">
-      <a-icon type="global" style="font-size: 16px"/>
-    </span>
-    <a-menu slot="overlay" style="width: 150px;" @click="SwitchLang">
-      <a-menu-item key="zh-CN">
-        <a rel="noopener noreferrer">
-          <span role="img" aria-label="简体中文">🇨🇳</span> 简体中文
-        </a>
-      </a-menu-item>
-      <a-menu-item key="zh-TW">
-        <a rel="noopener noreferrer">
-          <span role="img" aria-label="繁体中文">🇭🇰</span> 繁体中文
-        </a>
-      </a-menu-item>
-      <a-menu-item key="en-US">
-        <a rel="noopener noreferrer">
-          <span role="img" aria-label="English">🇬🇧</span> English
-        </a>
-      </a-menu-item>
-      <a-menu-item key="pt-BR">
-        <a rel="noopener noreferrer">
-          <span role="img" aria-label="Português">🇧🇷</span> Português
-        </a>
-      </a-menu-item>
-    </a-menu>
-  </a-dropdown>
-</template>
-
-<script>
-// import { mixin as langMixin } from '@/store/i18n-mixin'
-
-export default {
-  name: 'LangSelect',
-  // mixins: [langMixin],
-  data () {
-    return {}
-  },
-  methods: {
-    // SwitchLang (row) {
-    //   this.setLang(row.key)
-    // }
-  }
-}
-</script>

+ 0 - 89
src/components/tools/TwoStepCaptcha.vue

@@ -1,89 +0,0 @@
-<template>
-  <!-- 两步验证 -->
-  <a-modal
-    centered
-    v-model="visible"
-    @cancel="handleCancel"
-    :maskClosable="false"
-  >
-    <div slot="title" :style="{ textAlign: 'center' }">两步验证</div>
-    <template slot="footer">
-      <div :style="{ textAlign: 'center' }">
-        <a-button key="back" @click="handleCancel">返回</a-button>
-        <a-button key="submit" type="primary" :loading="stepLoading" @click="handleStepOk">
-          继续
-        </a-button>
-      </div>
-    </template>
-
-    <a-spin :spinning="stepLoading">
-      <a-form layout="vertical" :auto-form-create="(form)=>{this.form = form}">
-        <div class="step-form-wrapper">
-          <p style="text-align: center" v-if="!stepLoading">请在手机中打开 Google Authenticator 或两步验证 APP<br />输入 6 位动态码</p>
-          <p style="text-align: center" v-else>正在验证..<br/>请稍后</p>
-          <a-form-item
-            :style="{ textAlign: 'center' }"
-            hasFeedback
-            fieldDecoratorId="stepCode"
-            :fieldDecoratorOptions="{rules: [{ required: true, message: '请输入 6 位动态码!', pattern: /^\d{6}$/, len: 6 }]}"
-          >
-            <a-input :style="{ textAlign: 'center' }" @keyup.enter.native="handleStepOk" placeholder="000000" />
-          </a-form-item>
-          <p style="text-align: center">
-            <a @click="onForgeStepCode">遗失手机?</a>
-          </p>
-        </div>
-      </a-form>
-    </a-spin>
-  </a-modal>
-</template>
-
-<script>
-export default {
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data () {
-    return {
-      stepLoading: false,
-
-      form: null
-    }
-  },
-  methods: {
-    handleStepOk () {
-      const vm = this
-      this.stepLoading = true
-      this.form.validateFields((err, values) => {
-        if (!err) {
-          console.log('values', values)
-          setTimeout(() => {
-            vm.stepLoading = false
-            vm.$emit('success', { values })
-          }, 2000)
-          return
-        }
-        this.stepLoading = false
-        this.$emit('error', { err })
-      })
-    },
-    handleCancel () {
-      this.visible = false
-      this.$emit('cancel')
-    },
-    onForgeStepCode () {
-
-    }
-  }
-}
-</script>
-<style lang="less" scoped>
-  .step-form-wrapper {
-    margin: 0 auto;
-    width: 80%;
-    max-width: 400px;
-  }
-</style>

+ 0 - 5
src/components/tools/UserMenu.vue

@@ -26,17 +26,12 @@
 </template>
 
 <script>
-import NoticeIcon from '@/components/NoticeIcon'
 import { mapActions, mapGetters } from 'vuex'
 
 export default {
   name: 'UserMenu',
-  components: {
-    NoticeIcon
-  },
   computed: {
     ...mapGetters(['nickname', 'avatar'])
-
   },
   methods: {
     ...mapActions(['Logout']),

+ 1 - 1
src/config/router.config.js

@@ -1,5 +1,5 @@
 // eslint-disable-next-line
-import { UserLayout, BasicLayout, RouteView, BlankLayout, PageView } from '@/layouts'
+import { UserLayout, BasicLayout, PageView } from '@/layouts'
 import * as Icon from '@/core/icons'
 
 export const asyncRouterMap = [

+ 0 - 2
src/layouts/BasicLayout.vue

@@ -53,7 +53,6 @@ import RouteView from './RouteView'
 import SideMenu from '@/components/Menu/SideMenu'
 import GlobalHeader from '@/components/GlobalHeader'
 import GlobalFooter from '@/components/GlobalFooter'
-// import SettingDrawer from '@/components/SettingDrawer'
 import { convertRoutes } from '@/utils/routeConvert'
 
 export default {
@@ -64,7 +63,6 @@ export default {
     SideMenu,
     GlobalHeader,
     GlobalFooter
-    // SettingDrawer
   },
   data () {
     return {

+ 0 - 4
src/layouts/PageView.vue

@@ -12,13 +12,9 @@
 
 <script>
 import { mapState } from 'vuex'
-import PageHeader from '@/components/PageHeader'
 
 export default {
   name: 'PageView',
-  components: {
-    PageHeader
-  },
   props: {
     avatar: {
       type: String,

+ 0 - 1
src/router/README.md

@@ -30,7 +30,6 @@ const routerObject = {
 | redirect | 重定向地址, 访问这个路由时,自定进行重定向 | string  | -      |
 | name     | 路由名称, 必须设置,且不能重名           | string  | -      |
 | meta     | 路由元信息(路由附带扩展信息)            | object  | {}     |
-| hideChildrenInMenu | 强制菜单显示为Item而不是SubItem(配合 meta.hidden) | boolean  | -   |
 
 
 `{ Meta }` 路由元信息对象