Kaynağa Gözat

删除未用到的components

萤火科技 3 yıl önce
ebeveyn
işleme
d08cf5dd59
32 değiştirilmiş dosya ile 4 ekleme ve 1323 silme
  1. 0 64
      src/components/Ellipsis/Ellipsis.vue
  2. 0 3
      src/components/Ellipsis/index.js
  3. 0 38
      src/components/Ellipsis/index.md
  4. 0 47
      src/components/FooterToolbar/FooterToolBar.vue
  5. 0 4
      src/components/FooterToolbar/index.js
  6. 0 23
      src/components/FooterToolbar/index.less
  7. 0 48
      src/components/FooterToolbar/index.md
  8. 0 86
      src/components/IconSelector/IconSelector.vue
  9. 0 48
      src/components/IconSelector/README.md
  10. 0 36
      src/components/IconSelector/icons.js
  11. 0 2
      src/components/IconSelector/index.js
  12. 0 90
      src/components/NoticeIcon/NoticeIcon.vue
  13. 0 2
      src/components/NoticeIcon/index.js
  14. 0 54
      src/components/NumberInfo/NumberInfo.vue
  15. 0 3
      src/components/NumberInfo/index.js
  16. 0 55
      src/components/NumberInfo/index.less
  17. 0 43
      src/components/NumberInfo/index.md
  18. 0 63
      src/components/Search/GlobalSearch.jsx
  19. 0 25
      src/components/Search/index.less
  20. 0 122
      src/components/StandardFormRow/StandardFormRow.vue
  21. 0 3
      src/components/StandardFormRow/index.js
  22. 0 45
      src/components/TagSelect/TagSelectOption.jsx
  23. 0 113
      src/components/TagSelect/index.jsx
  24. 0 69
      src/components/TextArea/index.jsx
  25. 0 12
      src/components/TextArea/style.less
  26. 0 41
      src/components/Trend/Trend.vue
  27. 0 3
      src/components/Trend/index.js
  28. 0 42
      src/components/Trend/index.less
  29. 0 45
      src/components/Trend/index.md
  30. 0 89
      src/components/tools/TwoStepCaptcha.vue
  31. 1 2
      src/layouts/BasicLayout.vue
  32. 3 3
      src/layouts/ProLayout/index.js

+ 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 - 47
src/components/FooterToolbar/FooterToolBar.vue

@@ -1,47 +0,0 @@
-<template>
-  <div :class="prefixCls" :style="{ width: barWidth, transition: '0.3s all' }">
-    <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'
-    },
-    collapsed: {
-      type: Boolean,
-      default: false
-    },
-    isMobile: {
-      type: Boolean,
-      default: false
-    },
-    siderWidth: {
-      type: Number,
-      default: undefined
-    },
-    extra: {
-      type: [String, Object],
-      default: ''
-    }
-  },
-  computed: {
-    barWidth () {
-      return this.isMobile ? undefined : `calc(100% - ${this.collapsed ? 80 : this.siderWidth || 256}px)`
-    }
-  }
-}
-</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 - 54
src/components/NumberInfo/NumberInfo.vue

@@ -1,54 +0,0 @@
-<template>
-  <div :class="[prefixCls]">
-    <slot name="subtitle">
-      <div :class="[`${prefixCls}-subtitle`]">{{ typeof subTitle === 'string' ? subTitle : subTitle() }}</div>
-    </slot>
-    <div class="number-info-value">
-      <span>{{ total }}</span>
-      <span class="sub-total">
-        {{ subTotal }}
-        <icon :type="`caret-${status}`" />
-      </span>
-    </div>
-  </div>
-</template>
-
-<script>
-import Icon from 'ant-design-vue/es/icon'
-
-export default {
-  name: 'NumberInfo',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-number-info'
-    },
-    total: {
-      type: Number,
-      required: true
-    },
-    subTotal: {
-      type: Number,
-      required: true
-    },
-    subTitle: {
-      type: [String, Function],
-      default: ''
-    },
-    status: {
-      type: String,
-      default: 'up'
-    }
-  },
-  components: {
-    Icon
-  },
-  data () {
-    return {}
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "index";
-</style>

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

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

+ 0 - 55
src/components/NumberInfo/index.less

@@ -1,55 +0,0 @@
-@import "../index";
-
-@numberInfo-prefix-cls: ~"@{ant-pro-prefix}-number-info";
-
-.@{numberInfo-prefix-cls} {
-
-  .ant-pro-number-info-subtitle {
-    color: @text-color-secondary;
-    font-size: @font-size-base;
-    height: 22px;
-    line-height: 22px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    word-break: break-all;
-    white-space: nowrap;
-  }
-
-  .number-info-value {
-    margin-top: 4px;
-    font-size: 0;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    word-break: break-all;
-    white-space: nowrap;
-
-    & > span {
-      color: @heading-color;
-      display: inline-block;
-      line-height: 32px;
-      height: 32px;
-      font-size: 24px;
-      margin-right: 32px;
-    }
-
-    .sub-total {
-      color: @text-color-secondary;
-      font-size: @font-size-lg;
-      vertical-align: top;
-      margin-right: 0;
-      i {
-        font-size: 12px;
-        transform: scale(0.82);
-        margin-left: 4px;
-      }
-      :global {
-        .anticon-caret-up {
-          color: @red-6;
-        }
-        .anticon-caret-down {
-          color: @green-6;
-        }
-      }
-    }
-  }
-}

+ 0 - 43
src/components/NumberInfo/index.md

@@ -1,43 +0,0 @@
-# NumberInfo 数据文本
-
-常用在数据卡片中,用于突出展示某个业务数据。
-
-
-
-引用方式:
-
-```javascript
-import NumberInfo from '@/components/NumberInfo'
-
-export default {
-    components: {
-        NumberInfo
-    }
-}
-```
-
-
-
-## 代码演示  [demo](https://pro.loacg.com/test/home)
-
-```html
-<number-info
-    :sub-title="() => { return 'Visits this week' }"
-    :total="12321"
-    status="up"
-    :sub-total="17.1"></number-info>
-```
-
-
-
-## API
-
-参数 | 说明 | 类型 | 默认值
-----|------|-----|------
-title | 标题 | ReactNode\|string | -
-subTitle | 子标题 | ReactNode\|string | -
-total | 总量 | ReactNode\|string | -
-subTotal | 子总量 | ReactNode\|string | -
-status | 增加状态 | 'up \| down' | -
-theme | 状态样式 | string | 'light'
-gap | 设置数字和描述之间的间距(像素)| number | 8

+ 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 - 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 - 41
src/components/Trend/Trend.vue

@@ -1,41 +0,0 @@
-<template>
-  <div :class="[prefixCls, reverseColor && 'reverse-color' ]">
-    <span>
-      <slot name="term"></slot>
-      <span class="item-text">
-        <slot></slot>
-      </span>
-    </span>
-    <span :class="[flag]"><a-icon :type="`caret-${flag}`"/></span>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Trend',
-  props: {
-    prefixCls: {
-      type: String,
-      default: 'ant-pro-trend'
-    },
-    /**
-       * 上升下降标识:up|down
-       */
-    flag: {
-      type: String,
-      required: true
-    },
-    /**
-       * 颜色反转
-       */
-    reverseColor: {
-      type: Boolean,
-      default: false
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-  @import "index";
-</style>

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

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

+ 0 - 42
src/components/Trend/index.less

@@ -1,42 +0,0 @@
-@import "../index";
-
-@trend-prefix-cls: ~"@{ant-pro-prefix}-trend";
-
-.@{trend-prefix-cls} {
-  display: inline-block;
-  font-size: @font-size-base;
-  line-height: 22px;
-
-  .up,
-  .down {
-    margin-left: 4px;
-    position: relative;
-    top: 1px;
-
-    i {
-      font-size: 12px;
-      transform: scale(0.83);
-    }
-  }
-
-  .item-text {
-    display: inline-block;
-    margin-left: 8px;
-    color: rgba(0,0,0,.85);
-  }
-
-  .up {
-    color: @red-6;
-  }
-  .down {
-    color: @green-6;
-    top: -1px;
-  }
-
-  &.reverse-color .up {
-    color: @green-6;
-  }
-  &.reverse-color .down {
-    color: @red-6;
-  }
-}

+ 0 - 45
src/components/Trend/index.md

@@ -1,45 +0,0 @@
-# Trend 趋势标记
-
-趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。
-
-
-
-引用方式:
-
-```javascript
-import Trend from '@/components/Trend'
-
-export default {
-    components: {
-        Trend
-    }
-}
-```
-
-
-
-## 代码演示  [demo](https://pro.loacg.com/test/home)
-
-```html
-<trend flag="up">5%</trend>
-```
-或
-```html
-<trend flag="up">
-    <span slot="term">工资</span>
-    5%
-</trend>
-```
-或
-```html
-<trend flag="up" term="工资">5%</trend>
-```
-
-
-## API
-
-| 参数      | 说明                                      | 类型         | 默认值 |
-|----------|------------------------------------------|-------------|-------|
-| flag | 上升下降标识:`up|down` | string | - |
-| reverseColor | 颜色反转 | Boolean | false |
-

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

+ 1 - 2
src/layouts/BasicLayout.vue

@@ -33,7 +33,7 @@
 
 <script>
 import * as Api from '@/api/store'
-import { SettingDrawer, SiderMenuWrapper, updateTheme } from '@/layouts/ProLayout'
+import { SiderMenuWrapper, updateTheme } from '@/layouts/ProLayout'
 
 import { i18nRender } from '@/locales'
 import { mapState } from 'vuex'
@@ -47,7 +47,6 @@ import LogoSvg from '../assets/logo.svg?inline'
 export default {
   name: 'BasicLayout',
   components: {
-    SettingDrawer,
     SiderMenuWrapper,
     RightContent,
     GlobalFooter

+ 3 - 3
src/layouts/ProLayout/index.js

@@ -3,10 +3,10 @@ import BlockLayout from './BlockLayout'
 import PageHeaderWrapper from './components/PageHeaderWrapper'
 import SiderMenuWrapper from './components/SiderMenu'
 import GlobalFooter from './components/GlobalFooter'
-import SettingDrawer from './components/SettingDrawer'
-import DocumentTitle from './components/DocumentTitle'
+// import SettingDrawer from './components/SettingDrawer'
+// import DocumentTitle from './components/DocumentTitle'
 import { updateTheme } from './utils/dynamicTheme'
 
-export { GlobalFooter, PageHeaderWrapper, SiderMenuWrapper, BlockLayout, SettingDrawer, DocumentTitle, BasicLayoutProps, updateTheme }
+export { GlobalFooter, PageHeaderWrapper, SiderMenuWrapper, BlockLayout, /*  DocumentTitle, */ BasicLayoutProps, updateTheme }
 
 export default BasicLayout