mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-04 20:28:45 +08:00 
			
		
		
		
	正式移除 VXE 表格
This commit is contained in:
		@@ -1,223 +0,0 @@
 | 
			
		||||
import { App } from 'vue'
 | 
			
		||||
import XEUtils from 'xe-utils'
 | 
			
		||||
import './renderer'
 | 
			
		||||
import 'vxe-table/lib/style.css'
 | 
			
		||||
import { i18n } from '@/plugins/vueI18n'
 | 
			
		||||
import zhCN from 'vxe-table/lib/locale/lang/zh-CN'
 | 
			
		||||
import enUS from 'vxe-table/lib/locale/lang/en-US'
 | 
			
		||||
import {
 | 
			
		||||
  // 全局对象
 | 
			
		||||
  VXETable,
 | 
			
		||||
  // 表格功能
 | 
			
		||||
  Filter,
 | 
			
		||||
  Edit,
 | 
			
		||||
  Menu,
 | 
			
		||||
  Export,
 | 
			
		||||
  Keyboard,
 | 
			
		||||
  Validator,
 | 
			
		||||
  // 可选组件
 | 
			
		||||
  Icon,
 | 
			
		||||
  Column,
 | 
			
		||||
  Colgroup,
 | 
			
		||||
  Grid,
 | 
			
		||||
  Tooltip,
 | 
			
		||||
  Toolbar,
 | 
			
		||||
  Pager,
 | 
			
		||||
  Form,
 | 
			
		||||
  FormItem,
 | 
			
		||||
  FormGather,
 | 
			
		||||
  Checkbox,
 | 
			
		||||
  CheckboxGroup,
 | 
			
		||||
  Radio,
 | 
			
		||||
  RadioGroup,
 | 
			
		||||
  RadioButton,
 | 
			
		||||
  Switch,
 | 
			
		||||
  Input,
 | 
			
		||||
  Select,
 | 
			
		||||
  Optgroup,
 | 
			
		||||
  Option,
 | 
			
		||||
  Textarea,
 | 
			
		||||
  Button,
 | 
			
		||||
  Modal,
 | 
			
		||||
  List,
 | 
			
		||||
  Pulldown,
 | 
			
		||||
  // 表格
 | 
			
		||||
  Table
 | 
			
		||||
} from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 全局默认参数
 | 
			
		||||
VXETable.setup({
 | 
			
		||||
  size: 'medium', // 全局尺寸
 | 
			
		||||
  version: 0, // 版本号,对于某些带数据缓存的功能有用到,上升版本号可以用于重置数据
 | 
			
		||||
  zIndex: 1008, // 全局 zIndex 起始值,如果项目的的 z-index 样式值过大时就需要跟随设置更大,避免被遮挡
 | 
			
		||||
  loadingText: '加载中...', // 全局loading提示内容,如果为null则不显示文本
 | 
			
		||||
  height: 600,
 | 
			
		||||
  table: {
 | 
			
		||||
    border: 'inner', // default(默认), full(完整边框), outer(外边框), inner(内边框), none(无边框)
 | 
			
		||||
    align: 'center', // eft(左对齐), center(居中对齐), right(右对齐)
 | 
			
		||||
    autoResize: true, // 自动监听父元素的变化去重新计算表格
 | 
			
		||||
    resizable: true, // 列是否允许拖动列宽调整大小
 | 
			
		||||
    emptyText: '暂无数据', // 空表单
 | 
			
		||||
    highlightHoverRow: true, // 自动监听父元素的变化去重新计算表格
 | 
			
		||||
    treeConfig: {
 | 
			
		||||
      rowField: 'id',
 | 
			
		||||
      parentField: 'parentId',
 | 
			
		||||
      children: 'children',
 | 
			
		||||
      indent: 20,
 | 
			
		||||
      showIcon: true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  grid: {
 | 
			
		||||
    toolbarConfig: {
 | 
			
		||||
      refresh: true,
 | 
			
		||||
      export: true,
 | 
			
		||||
      print: true,
 | 
			
		||||
      zoom: true,
 | 
			
		||||
      custom: true
 | 
			
		||||
    },
 | 
			
		||||
    pagerConfig: {
 | 
			
		||||
      border: false,
 | 
			
		||||
      background: false,
 | 
			
		||||
      autoHidden: true,
 | 
			
		||||
      perfect: true,
 | 
			
		||||
      pageSize: 10,
 | 
			
		||||
      pagerCount: 7,
 | 
			
		||||
      pageSizes: [5, 10, 15, 20, 50, 100, 200, 500],
 | 
			
		||||
      layouts: [
 | 
			
		||||
        'Sizes',
 | 
			
		||||
        'PrevJump',
 | 
			
		||||
        'PrevPage',
 | 
			
		||||
        'Number',
 | 
			
		||||
        'NextPage',
 | 
			
		||||
        'NextJump',
 | 
			
		||||
        'FullJump',
 | 
			
		||||
        'Total'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  pager: {
 | 
			
		||||
    background: false,
 | 
			
		||||
    autoHidden: false,
 | 
			
		||||
    perfect: true,
 | 
			
		||||
    pageSize: 10,
 | 
			
		||||
    pagerCount: 7,
 | 
			
		||||
    pageSizes: [10, 15, 20, 50, 100],
 | 
			
		||||
    layouts: ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']
 | 
			
		||||
  },
 | 
			
		||||
  input: {
 | 
			
		||||
    clearable: true
 | 
			
		||||
  },
 | 
			
		||||
  form: {
 | 
			
		||||
    titleColon: true // 是否显示标题冒号
 | 
			
		||||
  },
 | 
			
		||||
  modal: {
 | 
			
		||||
    width: 800, // 窗口的宽度
 | 
			
		||||
    height: 600, // 窗口的高度
 | 
			
		||||
    minWidth: 460,
 | 
			
		||||
    minHeight: 320,
 | 
			
		||||
    showZoom: true, // 标题是否标显示最大化与还原按钮
 | 
			
		||||
    resize: true, // 是否允许窗口边缘拖动调整窗口大小
 | 
			
		||||
    marginSize: 0, // 只对 resize 启用后有效,用于设置可拖动界限范围,如果为负数则允许拖动超出屏幕边界
 | 
			
		||||
    remember: false, // 记忆功能,会记住最后操作状态,再次打开窗口时还原窗口状态
 | 
			
		||||
    destroyOnClose: true, // 在窗口关闭时销毁内容
 | 
			
		||||
    storage: false, // 是否启用 localStorage 本地保存,会将窗口拖动的状态保存到本地
 | 
			
		||||
    transfer: true, // 是否将弹框容器插入于 body 内
 | 
			
		||||
    showFooter: true, // 是否显示底部
 | 
			
		||||
    mask: true, // 是否显示遮罩层
 | 
			
		||||
    maskClosable: true, // 是否允许点击遮罩层关闭窗口
 | 
			
		||||
    escClosable: true // 是否允许按 Esc 键关闭窗口
 | 
			
		||||
  },
 | 
			
		||||
  i18n: (key, args) => {
 | 
			
		||||
    return unref(i18n.global.locale) === 'zh-CN'
 | 
			
		||||
      ? XEUtils.toFormatString(XEUtils.get(zhCN, key), args)
 | 
			
		||||
      : XEUtils.toFormatString(XEUtils.get(enUS, key), args)
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
// 自定义全局的格式化处理函数
 | 
			
		||||
VXETable.formats.mixin({
 | 
			
		||||
  // 格式精简日期,默认 yyyy-MM-dd HH:mm:ss
 | 
			
		||||
  formatDay({ cellValue }, format) {
 | 
			
		||||
    if (cellValue != null) {
 | 
			
		||||
      return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd')
 | 
			
		||||
    } else {
 | 
			
		||||
      return ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  // 格式完整日期,默认 yyyy-MM-dd HH:mm:ss
 | 
			
		||||
  formatDate({ cellValue }, format) {
 | 
			
		||||
    if (cellValue != null) {
 | 
			
		||||
      return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
 | 
			
		||||
    } else {
 | 
			
		||||
      return ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  // 四舍五入金额,每隔3位逗号分隔,默认2位数
 | 
			
		||||
  formatAmount({ cellValue }, digits = 2) {
 | 
			
		||||
    return XEUtils.commafy(Number(cellValue), { digits })
 | 
			
		||||
  },
 | 
			
		||||
  // 格式化银行卡,默认每4位空格隔开
 | 
			
		||||
  formatBankcard({ cellValue }) {
 | 
			
		||||
    return XEUtils.commafy(XEUtils.toValueString(cellValue), { spaceNumber: 4, separator: ' ' })
 | 
			
		||||
  },
 | 
			
		||||
  // 四舍五入,默认两位数
 | 
			
		||||
  formatFixedNumber({ cellValue }, digits = 2) {
 | 
			
		||||
    return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
 | 
			
		||||
  },
 | 
			
		||||
  // 向下舍入,默认两位数
 | 
			
		||||
  formatCutNumber({ cellValue }, digits = 2) {
 | 
			
		||||
    return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
 | 
			
		||||
  },
 | 
			
		||||
  // 格式化图片,将图片链接转换为html标签
 | 
			
		||||
  formatImg({ cellValue }) {
 | 
			
		||||
    return '<img height="40" src="' + cellValue + '"> '
 | 
			
		||||
  },
 | 
			
		||||
  // 格式化文件大小
 | 
			
		||||
  formatSize({ cellValue }, digits = 0) {
 | 
			
		||||
    const unitArr = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
 | 
			
		||||
    const srcSize = parseFloat(cellValue)
 | 
			
		||||
    const index = Math.floor(Math.log(srcSize) / Math.log(1024))
 | 
			
		||||
    const size = srcSize / Math.pow(1024, index)
 | 
			
		||||
    return XEUtils.toFixed(XEUtils.floor(size, 2), 2) + ' ' + unitArr[digits]
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
export const setupVxeTable = (app: App<Element>) => {
 | 
			
		||||
  // 表格功能
 | 
			
		||||
  app.use(Filter).use(Edit).use(Menu).use(Export).use(Keyboard).use(Validator)
 | 
			
		||||
 | 
			
		||||
  // 可选组件
 | 
			
		||||
  app
 | 
			
		||||
    .use(Icon)
 | 
			
		||||
    .use(Column)
 | 
			
		||||
    .use(Colgroup)
 | 
			
		||||
    .use(Grid)
 | 
			
		||||
    .use(Tooltip)
 | 
			
		||||
    .use(Toolbar)
 | 
			
		||||
    .use(Pager)
 | 
			
		||||
    .use(Form)
 | 
			
		||||
    .use(FormItem)
 | 
			
		||||
    .use(FormGather)
 | 
			
		||||
    .use(Checkbox)
 | 
			
		||||
    .use(CheckboxGroup)
 | 
			
		||||
    .use(Radio)
 | 
			
		||||
    .use(RadioGroup)
 | 
			
		||||
    .use(RadioButton)
 | 
			
		||||
    .use(Switch)
 | 
			
		||||
    .use(Input)
 | 
			
		||||
    .use(Select)
 | 
			
		||||
    .use(Optgroup)
 | 
			
		||||
    .use(Option)
 | 
			
		||||
    .use(Textarea)
 | 
			
		||||
    .use(Button)
 | 
			
		||||
    .use(Modal)
 | 
			
		||||
    .use(List)
 | 
			
		||||
    .use(Pulldown)
 | 
			
		||||
 | 
			
		||||
    // 安装表格
 | 
			
		||||
    .use(Table)
 | 
			
		||||
 | 
			
		||||
  // 给 vue 实例挂载内部对象,例如:
 | 
			
		||||
  // app.config.globalProperties.$XModal = VXETable.modal
 | 
			
		||||
  // app.config.globalProperties.$XPrint = VXETable.print
 | 
			
		||||
  // app.config.globalProperties.$XSaveFile = VXETable.saveFile
 | 
			
		||||
  // app.config.globalProperties.$XReadFile = VXETable.readFile
 | 
			
		||||
}
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
import { ElDatePicker } from 'element-plus'
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 日期区间选择渲染
 | 
			
		||||
VXETable.renderer.add('XDataPicker', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderItemContent(renderOpts, params) {
 | 
			
		||||
    const { data, field } = params
 | 
			
		||||
    const { content } = renderOpts
 | 
			
		||||
    return (
 | 
			
		||||
      <ElDatePicker
 | 
			
		||||
        v-model={data[field]}
 | 
			
		||||
        style="width: 100%"
 | 
			
		||||
        type={content ? (content as any) : 'datetime'}
 | 
			
		||||
        value-format="YYYY-MM-DD HH:mm:ss"
 | 
			
		||||
        clearable
 | 
			
		||||
      ></ElDatePicker>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,23 +0,0 @@
 | 
			
		||||
import { ElDatePicker } from 'element-plus'
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 日期区间选择渲染
 | 
			
		||||
VXETable.renderer.add('XDataTimePicker', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderItemContent(renderOpts, params) {
 | 
			
		||||
    const { t } = useI18n()
 | 
			
		||||
    const { data, field } = params
 | 
			
		||||
    const { content } = renderOpts
 | 
			
		||||
    return (
 | 
			
		||||
      <ElDatePicker
 | 
			
		||||
        v-model={data[field]}
 | 
			
		||||
        style="width: 100%"
 | 
			
		||||
        type={content ? (content as any) : 'datetimerange'}
 | 
			
		||||
        value-format="YYYY-MM-DD HH:mm:ss"
 | 
			
		||||
        range-separator="-"
 | 
			
		||||
        start-placeholder={t('common.startTimeText')}
 | 
			
		||||
        end-placeholder={t('common.endTimeText')}
 | 
			
		||||
      ></ElDatePicker>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
import { DictTag } from '@/components/DictTag'
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 字典渲染
 | 
			
		||||
VXETable.renderer.add('XDict', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderDefault(renderOpts, params) {
 | 
			
		||||
    const { row, column } = params
 | 
			
		||||
    const { content } = renderOpts
 | 
			
		||||
    return <DictTag type={content as unknown as string} value={row[column.field]}></DictTag>
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 图片渲染
 | 
			
		||||
VXETable.renderer.add('XHtml', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderDefault(_renderOpts, params) {
 | 
			
		||||
    const { row, column } = params
 | 
			
		||||
    return <span v-html={row[column.field]}></span>
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
import { ElImage } from 'element-plus'
 | 
			
		||||
 | 
			
		||||
// 图片渲染
 | 
			
		||||
VXETable.renderer.add('XImg', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderDefault(_renderOpts, params) {
 | 
			
		||||
    const { row, column } = params
 | 
			
		||||
    return (
 | 
			
		||||
      <ElImage
 | 
			
		||||
        style="width: 80px; height: 50px"
 | 
			
		||||
        src={row[column.field]}
 | 
			
		||||
        key={row[column.field]}
 | 
			
		||||
        preview-src-list={[row[column.field]]}
 | 
			
		||||
        fit="contain"
 | 
			
		||||
        lazy
 | 
			
		||||
      ></ElImage>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
import './dataPicker'
 | 
			
		||||
import './dataTimeRangePicker'
 | 
			
		||||
import './dict'
 | 
			
		||||
import './html'
 | 
			
		||||
import './link'
 | 
			
		||||
import './img'
 | 
			
		||||
import './preview'
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
 | 
			
		||||
// 超链接渲染
 | 
			
		||||
VXETable.renderer.add('XLink', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderDefault(renderOpts, params) {
 | 
			
		||||
    const { row, column } = params
 | 
			
		||||
    const { events = {} } = renderOpts
 | 
			
		||||
    return (
 | 
			
		||||
      <a class="link" onClick={() => events.click(params)}>
 | 
			
		||||
        {row[column.field]}
 | 
			
		||||
      </a>
 | 
			
		||||
    )
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
import { VXETable } from 'vxe-table'
 | 
			
		||||
import { ElImage, ElLink } from 'element-plus'
 | 
			
		||||
 | 
			
		||||
// 图片渲染
 | 
			
		||||
VXETable.renderer.add('XPreview', {
 | 
			
		||||
  // 默认显示模板
 | 
			
		||||
  renderDefault(_renderOpts, params) {
 | 
			
		||||
    const { row, column } = params
 | 
			
		||||
    if (row.type.indexOf('image/') === 0) {
 | 
			
		||||
      return (
 | 
			
		||||
        <ElImage
 | 
			
		||||
          style="width: 80px; height: 50px"
 | 
			
		||||
          src={row[column.field]}
 | 
			
		||||
          key={row[column.field]}
 | 
			
		||||
          preview-src-list={[row[column.field]]}
 | 
			
		||||
          fit="contain"
 | 
			
		||||
          lazy
 | 
			
		||||
        ></ElImage>
 | 
			
		||||
      )
 | 
			
		||||
    } else if (row.type.indexOf('video/') === 0) {
 | 
			
		||||
      return (
 | 
			
		||||
        <video>
 | 
			
		||||
          <source src={row[column.field]}></source>
 | 
			
		||||
        </video>
 | 
			
		||||
      )
 | 
			
		||||
    } else {
 | 
			
		||||
      return (
 | 
			
		||||
        // @ts-ignore
 | 
			
		||||
        <ElLink href={row[column.field]} target="_blank">
 | 
			
		||||
          {row[column.field]}
 | 
			
		||||
        </ElLink>
 | 
			
		||||
      )
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
		Reference in New Issue
	
	Block a user