npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tw-vue-el

v1.0.121

Published

这个组件是基于在Vite中使用Vue 3和ElmentPlus(二次封装)进行开发,可以帮助您快速开发form和列表页面。

Downloads

135

Readme

tw-vue-el

这个组件是基于在Vite中使用Vue 3和ElmentPlus(二次封装)进行开发,可以帮助您快速开发form和列表页面。

自定义配置

请参见 Vite配置参考

项目使用

npm install tw-vue-el

完整引入

import { createApp } from "vue"
import App from './App.vue'
import router from "./router/index"
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import twVueEl from 'tw-vue-el'
// 因为表格组件和form组件需要引入相关css
import 'tw-vue-el/dist/style.css'

const app = createApp(App)

app.use(ElementPlus,{locale: zhCn})
app.use(router)
app.use(twVueEl)
app.use(store)
app.mount('#app')

相关组件

<ContentMain></ContentMain>                             // --- 表格搜索
<ContentMainVirtualized></ContentMainVirtualized>       // --- 表格虚拟列表搜索
<CountTo></CountTo>                                     // --- 计步器
<TwForm></TwForm>                                       // --- form组件
<TwCustomForm></TwCustomForm>                           // --- 自定义form组件
<TwDialog></TwDialog>                                   // --- 弹框组件
<TwDrawer></TwDrawer>                                   // --- 抽屉组件
<TwFormItem></TwFormItem>                               // --- 自定义显示控件(基于formItem) 
<TwPagination></TwPagination>                           // --- 分页组件
<TwTable></TwTable>                                     // --- 表格组件
<TwVirtualizedTable></TwVirtualizedTable>               // --- 虚拟表格组件

表格搜索(ContentMain)

ContentMain 是tw-form和tw-table的集合它只接收一个参数mainData,内部的参数才是使用规则.此处只有基础配置属性,详情请跳转相关组件属性查看

ContentMain 使用示例
<template>
    <content-main ref="contentMainRef" :mainData="mainData"></content-main>
</template>

<script setup lang="tsx">
    let contentMainRef = $ref(null)
    
    let mainData = reactive({
        tableUrl: '/operation/appealHand/page',
        isCheck: true,
        columns: [
            {prop: 'appealTimeStr', label: '反馈时间', width: 180},
            {prop: 'alarmTypeName', label: '报警类型', width: 120},
            {prop: 'durationStr', label: '持续时长', width: 120},
            {prop: 'appealStatusName', label: '处理状态', width: 120},
            {prop: 'appealResultName', label: '处理结果', width: 120},
            {prop: 'processPerson', label: '处理人', width: 120},
            {prop: 'processTimeStr', label: '处理时间', width: 120},
        ],
        headBtns: [],
        tableBtns: {
            prop: 'btns',
            label: '操作',
            fixed: 'right',
            width: 100,
            btns: [
            ],
        },
        formData: {
            alarmLevel: 0,
            pageNumber: 1,
            pageSize: 50,
        },
        lists: [],
    })
</script> 

ContentMain 属性

| 属性名 | 说明 | 类型 | 默认值 | |---------------------|--------------------------------------------------------------------------------------------|----------|-----------------------------------------| | lists | 用于渲染表格上面搜索 | Array | [] | | foldNumber | 第一行默认显示数量 | Number | 3 | | rules | 验证规则(同el-form) | Object | {} | | formData | 同lists的key绑定使用,同时也会默认和表格api绑定获取数据 | Object | {} | | labelWidth | 搜索区域文字描述宽度 | String | '120px' | | isFormBnts | 是否显示tw-form相关的操作按钮 | Boolean | true | | beforeChange | 点击搜索按钮时间前触发的事件 | Function | - | | url | 表格请求地址 | String | - | | id | table的唯一id,一页面多表格场景须赋值,否则无法动态计算高度 | String | - | | method | 表格动态url请求类型 | String | post | | columns | 表格每一列渲染数据 | Array | [] | | lists | 表格每一行渲染数据 | Array | [] | | tableParams | 表格默认请求数据,这里代指mainData.formData。他们是绑定关系 | Object | { pageNumber: 1, pageSize: 25 } | | tableHeight | 表格固定高度 | Number | 0 | | isRradio | 单选 | Boolean | false | | showPagination | 分页显示开关 | Boolean | true | | botHeight | 是分页栏加上边距加底部空白位置高度 | Number | 50 | | indexFixed | 索引左侧定位开关 | Boolean | false | | isCheck | checkbox显示开关 | Boolean | false | | checkFixed | checkbox左侧定位开关 | String | 'left' | | showIndex | 索引显示开关 | Boolean | false | | size | 表格大小配置 | String | 'large' | | stripe | 斑马纹显示开关 | Boolean | true | | border | 边框线显示开关 | Boolean | false | | pageSizesArr | 分页页码 | Array | [25, 50, 100] | | tableBtns | 单例按钮渲染数据 | Object | - | | small | 每页显示条数 | Boolean | false | | headBtns | 顶部操作按钮 | Array | [] | | isTableHeader | 默认显示表格顶部操作栏 | Boolean | true | | isLoadStatus | 默认首次不加载table数据 | Boolean | false | | highlightCurrentRow | 是否高亮显示当前选中行 | Boolean | true | | rowClassName | 行样式名称,同elTable一样 | Function | - | | selectable | isCheck必须为true 用于判断选项是否可以点击,返回true或false | Function | { return true} | | autoScrollToTop | 请求数据后是否自动滚动到顶部 | Boolean | true | | layout | 表格分页布局默认配置,依赖elPagination | String | total, prev, pager, next, sizes, jumper | | background | 表格的背景颜色 | Boolean | true | | loadingBg | 表格接口加载状态下背景颜色 | String | rabg(225,225,225) | | emptyText | 列表无数据时展示的文字 | String | 暂无数据 |

ContentMain 事件

| 事件名 | 说明 | 类型 | |--------------------|--------------------------------------------------------------------------------------------------------|----------| | tableCallback | 表格api加载完成后响应的事件 | Function | | checkSelect | 表格点击checkbox响应的事件,对应elTable - select事件 | Function | | rowCheck | 表格点击行数据响应的事件 | Function | | tableCurrentChange | 当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight-current-row 属性 | Function | | resetForm | form点击重置按钮响应的事件 | Function | | submitForm | form点击搜索按钮响应的事件 | Function | | selectionChange | 表格的check选择, 对应elTable - selection-change事件 | Function |

ContentMain Exposes

| 事件名 | 说明 | 类型 | |--------------------|----------------|----------| | getTable | 主动触发表格加载 | Function | | seekTable | 模拟触发form搜索事件功能 | Function | | getAllCheck | 获取表格已勾选数据 | Function | | getTableLists | 获取表格已渲染行数据 | Function | | setTableLists | 设置表格待渲染的行数据 | Function | | setCurrentRow | 设置表格行高亮 | Function | | clearSelection | 清空表格已勾选数据 | Function | | toggleRowSelection | 设置表格行数据选择 | Function | | setTableTotal | 设置表格Total数值 | Function | | setTableDataHeight | 重新计算表格的自适应高度 | Function |

ContentMain 插槽

tw-form lists单个对象自定义key就是自定义插槽,适场景使用。虽然提供此功能,但不建议使用

| 事件名 | 说明 | |----------------|-----------------| | tableHeader | 表格按钮上方自定义区域 | | table-l | 同表格按钮一行,左侧可操作区域 | | table-c | 同表格按钮一行,中间可操作区域 | | table-r | 同表格按钮一行,右侧可操作区域 | | tableBotHeader | 表格按钮下方自定义区域 |

表格虚拟列表搜索(ContentMainVirtualized)

ContentMainVirtualized 如需使用查看如下描述后在使用

  1. 是tw-form和TwVirtualizedTable的集合它只接收一个参数mainData,
  2. 本质如同contentMain,只是加载行为是滚动加载更多数据并且处理了keep-alive切换页面后的部分兼容问题
  3. 其次因为大批量数据一般不会每次提供总数,所以数据接口和总数接口是做了分离的
ContentMainVirtualized 使用示例
<template>
    <content-main-virtualized ref="contentMainRef" :mainData="mainData"></content-main-virtualized>
</template>

<script setup lang="tsx">
    let contentMainRef = $ref(null)
    
    let mainData = reactive({
        tableUrl: '/operation/appealHand/page',
        totalUrl: '/operation/appealHand/pageCount',
        isCheck: true,
        selectable: (row, index) => {
            return row.appealStatusCode !== 300
        },
        columns: [
            {prop: 'appealTimeStr', label: '反馈时间', width: 180},
            {prop: 'alarmTypeName', label: '报警类型', width: 120},
            {prop: 'durationStr', label: '持续时长', width: 120},
            {prop: 'appealStatusName', label: '处理状态', width: 120},
            {prop: 'appealResultName', label: '处理结果', width: 120},
            {prop: 'processPerson', label: '处理人', width: 120},
            {prop: 'processTimeStr', label: '处理时间', width: 120},
        ],
        headBtns: [],
        tableBtns: {
            prop: 'btns',
            label: '操作',
            fixed: 'right',
            width: 100,
            btns: [
            ],
        },
        formData: {
            alarmLevel: 0,
            pageNumber: 1,
            pageSize: 50,
        },
        lists: [],
    })
</script> 

统计(CountTo)

显示统计数据。

CountTo 属性

| 属性名 | 说明 | 类型 | 默认值 | |-----------|------------|----------|------| | startVal | 动画开始值 | Number | 0 | | endVal | 动画结束值 | Number | 0 | | duration | 动画滚动时间 | Number | 3000 | | autoplay | 是否自动播放 | Boolean | true | | decimals | 保留几位小数 | Number | 0 | | decimal | 小数 | String | . | | separator | 千分位符号 | String | , | | prefix | 统计值前置自定义文本 | String | - | | suffix | 统计值后置自定义文本 | String | - | | useEasing | 使用缓和 | Boolean | true | | easingFn | 缓和回调 | Function | - |

CountTo 方法

| 方法名 | 说明 | 类型 | |-----------------|----------|----------| | mountedCallback | 挂载后返回的回调 | Function | | callback | 动画后返回的回调 | Function |

form组件(TwForm)

此组件只服务于contentMain,核心用法请综合TwCustomForm和contentMain描述区域使用。 注意:请不要混淆TwForm和TwCustomForm组件。 TwCustomForm会更轻量,便于更复杂的form场景使用

自定义form组件(TwCustomForm)

注意:请不要混淆TwForm和TwCustomForm组件。 TwCustomForm会更轻量,便于更复杂的form场景使用。请合理使用TwCustomForm组件

TwCustomForm组件自带placeholder,同时placeholder是跟label强关联的。并且可以自定义使用slot

  1. 输入框提示:请输入年龄
  2. 选择框提示:请选择年龄
  3. 自定义使用slot需先声明slot为true,然后自定义编写具名template
基础使用示例
// 虽然vue3的模板语言说可以不在用div包着了,但是如果不包很有很多隐性的bug。请不要节省这个时间
// 虽然vue3的模板语言说可以不在用div包着了,但是如果不包很有很多隐性的bug。请不要节省这个时间
// 虽然vue3的模板语言说可以不在用div包着了,但是如果不包很有很多隐性的bug。请不要节省这个时间

<template>
    <div>
        <tw-custom-form
                ref="fromDataRef"
                :lists="mainData.lists"
                :rules="mainData.rules"
                :formData="mainData.formData"
            >
               <template #securityProtocol>
                  这里是持续时长的自定义
               </template>
            </tw-custom-form>
        <el-button @click="save">保存</el-button>
    </div>
     
</template>

<script setup lang="tsx">
    let fromDataRef = $ref(null)
    let mainData = reactive({
        lists: [
            {key: 'entryPointName', label: '反馈时间'},
            {key: 'basicProtocol', label: '报警类型'},
            {key: 'securityProtocol', label: '持续时长', slot: true},  // 自定义slot
        ],
        rules: {
            entryPointName: [
                { required: true, message: '请输入配置名称', trigger: 'blur'},
            ],
            basicProtocol: [
                { required: true, message: '请选择协议版本', trigger: 'blur'},
            ],
            securityProtocol: [
                { required: true, message: '请选择主动安全', trigger: 'blur'},
            ],
        },
    })
    
    // 组件内置有svae方法,详情请查看配置。
    const save = () => {
        fromDataRef.submitForm(false).then((form) => {
            loading = true
            addOrUpdate(form).then(() => {
                loading = false
            }).catch(() => {
                loading = false
            })
        })
    }
</script> 

自定义form组件最关键的就是lists参数,lists又是根据type来转义到相关内部组件,以下是能使用的type属性。type属性默认就是twInput(输入框)如上示例

TwCustomForm 属性

| 属性名 | 说明 | 类型 | 默认值 | |--------------|---------------------------------------------------------------------------|----------|---------| | lists | 用于渲染表格上面搜索 | Array | [] | | rules | 验证规则(同el-form) | Object | {} | | formData | 同lists的key绑定使用,同时也会默认和表格api绑定获取数据 | Object | {} | | labelWidth | 搜索区域文字描述宽度 | String | '120px' | | isFormBnts | 是否显示tw-form相关的操作按钮 | Boolean | false | | beforeChange | 点击保存按钮时间前触发的 | Function | - |

TwCustomForm 属性 Lists type

label 和 key 是必传字段。其次type除了input框,也都是必传字段(具体请看下面配置)

1. twInput 输入框类型
{key: 'securityProtocol', label: '持续时长'}

| 属性名 | 说明 | 类型 | 默认值 | |---------------|-----------------------------------------------------------------------------------|--------------------|---------| | labelWidth | 标签单个宽度 | String | '120px' | | maxlength | 同原生 maxlength 属性 | String/Number | - | | minlength | 原生属性,最小输入长度 | String/Number | - | | max | 原生 max 属性,设置最大值 | - | - | | min | 原生属性,设置最小值 | - | - | | showWordLimit | 是否显示统计字数, 只在 type 为 'text' 或 'textarea' 的时候生效 | Boolean | Boolean | | placeholder | 输入框占位文本 | String | - | | showPassword | 是否显示切换密码图标 | Boolean | false | | disabled | 是否禁用 | Boolean | false | | size | 输入框尺寸,只在 type 不为 'textarea' 时有效 | Enum | - | | prefixIcon | 自定义前缀图标(el引入的icon) | Component | - | | suffixIcon | 自定义后缀图标(el引入的icon) | Component | - | | rows | 输入框行数,仅 type 为 'textarea' 时有效 | Number | Number | | minRows | textarea 高度是否自适应,仅 type 为 'textarea' 时生效。 可以接受一个对象,比如: { minRows: 2, maxRows: 6 } | Number | - | | maxRows | textarea 高度是否自适应,仅 type 为 'textarea' 时生效。 可以接受一个对象,比如: { minRows: 2, maxRows: 6 } | Number | - | | readonly | 原生 readonly 属性,是否只读 | Boolean | false | | resize | 控制是否能被用户缩放 | Enum | - | | validateEvent | 输入时是否触发表单的校验 | Boolean | true | | inputStyle | input 元素或 textarea 元素的 style | string/object | {} | | clearable | 是否显示清除按钮,只有当 type 不是 textarea时生效 | Boolean | - | | props.type | 类型 | string等原生 input 类型 | text |

2. select 选择框类型
// 基础
{key: 'securityProtocol', label: '持续时长', type: 'select', children: [ {label: '北京', value: 1'}]}

// 自定义label value
{key: 'securityProtocol', label: '持续时长', type: 'select', children: [ {labelZdy: '北京', valueZdy: 1'}], props: {label: 'labelZdy', value: 'valueZdy'}}

// 接口请求
{label: '车牌号', key: 'vehicleCode', type: 'select', remote: true, url: '/business/vehicle/associationPlateNum', method: 'post', loadMore: true, params: { keyword: route.query.plateNum ||'', pageNumber: 1, pageSize: 25, havePermission: true }, props: { label: 'plateNum', value: 'vehicleCode' }, placeholder: '请选择车牌号码',},

配置维度是依赖el-select

| 属性名 | 说明 | 类型 | 默认值 | |--------------------|---------------------------------------------------------|----------|---------| | url | 接口地址,只有在remote: true情况使用 | String | - | | method | 接口请求类型 | String | 'post' | | params | 接口请求参数 | Object | {} | | labelWidth | 标签单个宽度 | String | '120px' | | multiple | 是否多选 | Boolean | - | | collapseTags | 多选时是否将选中值按文字的形式展示,不等于false就默认为true | Boolean | - | | clearable | 是否可以清空选项 | Boolean | false | | disabled | 是否禁用 | Boolean | false | | remote | 其中的选项是否从服务器远程加载 | Boolean | false | | defaultFirstOption | 是否在输入框按下回车时,选择第一个匹配项。 需配合 filterable 或 remote 使用 | Boolean | false | | filterable | Select 组件是否可筛选 | Boolean | false | | allowCreate | 是否允许用户创建新条目, 只有当 filterable 设置为 true 时才会生效 | Boolean | false | | multipleLimit | multiple 属性设置为 true 时,代表多选场景下用户最多可以选择的项目数, 为 0 则不限制 | Number | 0 | | reserveKeyword | 当 multiple 和 filterable被设置为 true 时,是否在选中一个选项后保留当前的搜索关键词 | Boolean | true | | children | 自定义下拉渲染数据 | Array | [] | | change | 选中值发生变化时触发 | Function | - |

3. date 日期选择器
// 基础
{label: '活动时间', key: 'date1', type:'date', showPassword: true },


// 日期时间选择
{label: '日期时间', key: 'date2', type:'date', data: {type: 'datetime'} },

// 时间格式
{ key: 'issueDate', label: '初次领证日期',col:12, type:'date', placeholder: '请输入初次领证日期', data: {valueFormat: 'YYYY-MM-DD'} },

配置维度是依赖el-date-picker

| 属性名 | 说明 | 类型 | 默认值 | |--------------|------------------------------------------------------|----------|---------------------| | data.type | 显示类型 | String | date | | data.format | 显示在输入框中的格式 | String | YYYY-MM-DD HH:mm:ss | | disabled | 禁用 | Boolean | false | | placeholder | 非范围选择时的占位内容 | String | - | | clearable | 是否显示清除按钮 | Boolean | false | | disabledDate | 一个用来判断该日期是否被禁用的函数,接受一个 Date 对象作为参数。 应该返回一个 Boolean 值 | Function | - | | change | 选中值发生变化时触发 | Function | - |

4. time 时间选择器
// 基础
{label: '开始时间', key: 'startTime', type: 'time'}

// 时间选择
{label: '开始时间', key: 'startTime', type: 'time', data: {valueFormat: 'HH:mm:ss'}}

配置维度是依赖el-time-picker

| 属性名 | 说明 | 类型 | 默认值 | |-----------------|------------------|-------------|---------------------| | defaultValue | 可选,选择器打开时默认显示的时间 | Date/object | - | | data.format | 显示在输入框中的格式 | String | YYYY-MM-DD HH:mm:ss | | disabled | 禁用 | Boolean | false | | placeholder | 非范围选择时的占位内容 | String | - | | clearable | 是否显示清除按钮 | Boolean | false | | disabledHours | 禁止选择部分小时选项 | Function | - | | disabledMinutes | 禁止选择部分分钟选项 | Function | - | | disabledSeconds | 禁止选择部分秒选项 | Function | - | | change | 选中值发生变化时触发 | Function | - |

5. switch 开关
// 基础
{label: '状态', key: 'state', col: 6, type: 'switch'},


// 自定义名称
{label: '状态', key: 'state', col: 6, type: 'switch', activeText: '启用', inactiveText: '禁用', filter: 'valid'},

配置维度是依赖el-switch

| 属性名 | 说明 | 类型 | 默认值 | |---------------|-----------------------------|----------|-------| | activeText | switch 打开时的文字描述 | Stringt | 是 | | inactiveText | switch 的状态为 off 时的文字描述 | String | 否 | | disabled | 禁用 | Boolean | false | | activeValue | switch 状态为 on 时的值 | Boolean | true | | inactiveValue | switch的状态为 off 时的值 | Boolean | false | | inlinePrompt | 无论图标或文本是否显示在点内,只会呈现文本的第一个字符 | Boolean | false | | change | 选中值发生变化时触发 | Function | - |

6. checkbox 多选框
// 基础
{label: '活动类型', key: 'type', type:'checkbox', children:[ {label:'在线活动'},{label:'促销活动'},{label:'线下活动'}] },

配置维度是依赖el-switch

| 属性名 | 说明 | 类型 | 默认值 | |------------------|------------|----------|-------| | props.trueLabel | 选中时的值 | Stringt | - | | props.falseLabel | 没有选中时的值 | String | - | | disabled | 禁用 | Boolean | false | | props.trueValue | 选中时的值 | Boolean | - | | props.falseValue | 没有选中时的值 | Boolean | - | | change | 选中值发生变化时触发 | Function | - |

7. radio 单选框
// 基础
{ key: 'openStatus', label: '模板状态', type: 'radio', children: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 },] }

配置维度是依赖el-radio

| 属性名 | 说明 | 类型 | 默认值 | |-------------|---------------|----------|-------| | props.value | 单选框的值 | Stringt | - | | props.label | 单选框的 label | String | - | | disabled | 禁用 | Boolean | false | | width | 所有单个 radio的宽度 | Number | - | | change | 选中值发生变化时触发 | Function | - |

8. cascader 级联选择器
// 基础
{key: 'dataPermissionCode', label: '所属区域', type: 'cascader', children: [{ label: '启用', value: 1 }, { label: '禁用', value: 0 },]}

// 接口请求
{key: 'dataPermissionCode', label: '所属区域', col: 12, placeholder: '请选择所属区域', remote: true, type: 'cascader', url: '/system/area/getAreaDtoListByParentCode/', method: 'get', params: { default: 0 },paramsType: 'url', props: { label: 'name', value: 'code' },}

配置维度是依赖el-cascader

| 属性名 | 说明 | 类型 | 默认值 | |--------------|------------------------------------------------------------------------------------------|----------|-------| | props | 详情配置请看props | Object | - | | options | 选项的数据源, value 和 label 可以通过 CascaderProps 自定义. | Object | [] | | disabled | 禁用 | Boolean | false | | collapseTags | 多选模式下是否折叠Tag | Boolean | - | | change | 选中值发生变化时触发 | Function | - |

弹框组件(TwDialog)

基于ElDialog二次封装。内置了全屏和默认高度,底部按钮等操作。可配合自定义form动态开发

// 基础(默认不显示底部操作开关)
<tw-dialog title="消息列表" v-model="dialogFlag">
   内容
</tw-dialog>

// 接口请求 (显示底部操作按钮)
<tw-dialog title="消息列表" v-model="dialogFlag" isBtns>
   内容
</tw-dialog>

TwDialog 属性

| 属性名 | 说明 | 类型 | 默认值 | |-------------------|--------------------------------------------------------|---------------|--------| | title | dialog弹框title配置 | String | 新增 | | modelValue | dialog弹框显示隐藏变量 | Boolean | false | | cancelBtn | 取消按钮自定义文字配置 | String | 取消 | | confirmBtn | 确定按钮自定义文字配置 | String | 确定 | | cancelLoading | 取消按钮loading配置 | Boolean | false | | loading | 确定按钮loading配置 | Boolean | false | | width | 自定义宽度 | Number/String | 80% | | height | 自定义高度 | Number/String | 100% | | btns | 底部自定义操作按钮 { type:'默认: primary',key:'事件名称',name:'按钮名称'} | Array | [] | | isBtns | 底部操作按钮显示开关 | Boolean | false | | bodyPadding | 内容内填充 | Number | 20 | | closeOnClickModal | 是否可以通过点击modal关闭Dialog | Boolean | true | | isFull | 是否显示全屏开关 | Boolean | true | | appendToBody | 是否插入body | Boolean | false | | dialogTop | 顶部距离-特殊场景使用 | Number | 100 | | leftHeight | 剩余距离-特殊场景使用 | leftHeight | 140 |

TwDialog 事件

| 事件名 | 说明 | 类型 | |--------------|--------|----------| | onScreenfull | 全屏事件 | Function | | save | 确定事件 | Function | | cancel | 取消事件 | Function | | handleClose | 关闭弹框事件 | Function |

抽屉组件(TwDrawer)

基于ElDrawer二次封装。内置了全屏和默认高度,底部按钮等操作。可配合自定义form动态开发

// 基础(默认显示底部操作开关)且默认高度全屏
<tw-drawer :loading="loading" :title="title" v-model="drawerFlag">
   内容
</tw-drawer>

// 接口请求 (不显示底部操作按钮)
<tw-drawer @handleClose="handleClose" :loading="loading" :title="title" :isBtns="false" v-model="drawerFlag">
   内容
</tw-drawer>

TwDrawer 属性

| 属性名 | 说明 | 类型 | 默认值 | |-------------------|--------------------------------------------------------|---------------|--------| | title | dialog弹框title配置 | String | 新增 | | modelValue | dialog弹框显示隐藏变量 | Boolean | false | | cancelBtn | 取消按钮自定义文字配置 | String | 取消 | | confirmBtn | 确定按钮自定义文字配置 | String | 确定 | | cancelLoading | 取消按钮loading配置 | Boolean | false | | loading | 确定按钮loading配置 | Boolean | false | | width | 自定义宽度 | Number/String | 800px | | top | 自定义高度 | String | 60px | | btns | 底部自定义操作按钮 { type:'默认: primary',key:'事件名称',name:'按钮名称'} | Array | [] | | isBtns | 底部操作按钮显示开关 | Boolean | true | | isScreenfull | 内容内填充 | Boolean | true | | defaultScreenfull | 是否可以通过点击modal关闭Dialog | Boolean | false |

TwDrawer 事件

| 事件名 | 说明 | 类型 | |--------------|----------|----------| | onScreenfull | 全屏事件 | Function | | save | 确定事件 | Function | | handleClose | 取消事件 | Function | | beforeClose | 关闭抽屉前的事件 | Function | | cancel | 关闭弹框事件 | Function |

描述组件(TwFormItem)

基于TwFormrender函数二次封装。核心用于动态显示

<template>
   <tw-form-item label-width="86px" size="small" :lists="mainData.aduitResultList" :row="mainData.formData"></tw-form-item>
</template>

<script setup lang="tsx">
let mainData = reactive({
    aduitResultList:[
        { key: 'plateNum', label: '车牌号:', col: 8 ,labelWidth:'76px'},
        { key: 'plateColorName', label: '车牌颜色:', col: 8 },
        { key: 'alarmTypeName', label: '报警类型:', col: 8 },
        { key: 'eventStartTime', label: '报警开始时间:' , col: 8,labelWidth:'110px'},
        { key: 'eventEndTime', label: '报警结束时间:' , col: 8,labelWidth:'110px'},
        { key: 'eventPersistSecondsStr', label: '持续时长:' , col: 8},
        { key: 'companyName', label: '企业信息:' , col: 8},
    ]
    formData: {
        plateNum: 1,
        plateColorName: 25,
        "alarmTypeName": "3",
        "eventStartTime": "4",
        "eventEndTime": "5",
        "eventPersistSecondsStr": "6",
        "companyName": "7",
    }
})

</script>

TwFormItem 属性

| 属性名 | 说明 | 类型 | 默认值 | |------------|-----------|--------|-------| | lists | 渲染数据配置 | Array | [] | | labelWidth | 默认label宽度 | String | 100px | | size | 默认显示格式 | String | - | | mb | 底部外边距 | String | 4px |

lists 属性

| 属性名 | 说明 | 类型 | 默认值 | |------------|---------------------------------------------------------------------------------------------|----------|--------| | col | 列宽比例依赖Layout 布局 | Number | 12 | | label | label的描述字段 | String | - | | labelWidth | 自定义label宽度 | String | 100px | | slot | 自定义显示内容状态 | Boolean | false | | key | 显示对应的key | String | - | | formatter | 自定义显示内容 | Function | - |

分页组件(TwPagination)

基于ElPagination二次封装,内置只能中文。注意:此组件并没有集成所有配置,请适应场景使用

TwFormItem 属性

| 属性名 | 说明 | 类型 | 默认值 | |--------------|----------------|---------|------------------------------------------| | currentPage | 当前页 | Number | 1 | | pageSize | 每页显示条数 | Number | 25 | | total | 总页数 | Number | 0 | | size | table 大小配置 | String | default | | disabled | 每页显示条数 | Boolean | false | | pageSizesArr | 每页显示个数选择器的选项设置 | Array | [25, 50, 100] | | layout | 组件布局,子组件名用逗号分隔 | String | total, prev, pager, next, sizes, jumper | | background | 是否为分页按钮添加背景色 | Boolean | true |

表格(TwTable)[TwTable]

基于TwTable二次封装且是和分页组件合并使用。内置自动计算高度,api请求,自定义data数据等功能。ContentMain组件也是当前组件组合使用。组件内部没有集成表格树(因为大批量行列数据会容易照成卡顿)。请适应场景使用

<template>
    // 基础渲染
   <TwTable :columns="columns" :lists="mainData.dataLists"></TwTable>
   
   // api渲染
   <TwTable
        ref="TwTable"
        id="regulators_acopy_releasedetails_table_view"
        url="/business/noticePublishScopeEntity/page"
        method="post"
        :tableParams="{ noticeId: rowData.id }"
        :botHeight="100"
        :columns="mainData.columns"
    ></TwTable>
</template>

<script setup lang="tsx">
let TwTable = $ref(null)

let mainData = reactive({
    // tableUrl: '/business/noticePublishScopeEntity/page',
    formData: {
        noticeId: 0,
        order: '',
        orderField: '',
        pageNumber: 1,
        pageSize:25,
    },
    columns: [
        { prop: 'businessName', label: '发布对象' },
        { prop: 'createTime', label: '创建时间' },
        { prop: 'lastModifyTime', label: '发布时间' },
    ],
    dataLists:[ {businessName:'1', createTime:'2', lastModifyTime:'3',}]
})

// 重新请求表格数据(url场景使用)
const getTable = () => {
    TwTable.getTable()
}
</script>

TwTable 属性

| 属性名 | 说明 | 类型 | 默认值 | |---------------------|--------------------------------------------------------------------------------------------|----------|-----------------------------------------| | url | 表格请求地址 | String | - | | id | table的唯一id,一页面多表格场景须赋值,否则无法动态计算高度 | String | - | | method | 表格动态url请求类型 | String | post | | columns | 表格每一列渲染数据 | Array | [] | | lists | 表格每一行渲染数据 | Array | [] | | tableParams | 表格默认请求数据,这里代指mainData.formData。他们是绑定关系 | Object | { pageNumber: 1, pageSize: 25 } | | tableHeight | 表格固定高度 | Number | 0 | | isRradio | 单选 | Boolean | false | | showPagination | 分页显示开关 | Boolean | true | | botHeight | 是分页栏加上边距加底部空白位置高度 | Number | 50 | | indexFixed | 索引左侧定位开关 | Boolean | false | | isCheck | checkbox显示开关 | Boolean | false | | checkFixed | checkbox左侧定位开关 | String | 'left' | | showIndex | 索引显示开关 | Boolean | false | | size | 表格大小配置 | String | 'large' | | stripe | 斑马纹显示开关 | Boolean | true | | border | 边框线显示开关 | Boolean | false | | pageSizesArr | 分页页码 | Array | [25, 50, 100] | | tableBtns | 单例按钮渲染数据 | Object | - | | small | 每页显示条数 | Boolean | false | | headBtns | 顶部操作按钮 | Array | [] | | isTableHeader | 默认显示表格顶部操作栏 | Boolean | true | | isLoadStatus | 默认首次不加载table数据 | Boolean | false | | highlightCurrentRow | 是否高亮显示当前选中行 | Boolean | true | | rowClassName | 行样式名称,同elTable一样 | Function | - | | selectable | isCheck必须为true 用于判断选项是否可以点击,返回true或false | Function | { return true} | | autoScrollToTop | 请求数据后是否自动滚动到顶部 | Boolean | true | | layout | 表格分页布局默认配置,依赖elPagination | String | total, prev, pager, next, sizes, jumper | | background | 表格的背景颜色 | Boolean | true | | loadingBg | 表格接口加载状态下背景颜色 | String | rabg(225,225,225) | | emptyText | 列表无数据时展示的文字 | String | 暂无数据 |

TwTable 事件

| 事件名 | 说明 | 类型 | |--------------------|--------------------------------------------------------------------------------------------------------|----------| | tableCallback | 表格api加载完成后响应的事件 | Function | | checkSelect | 表格点击checkbox响应的事件,对应elTable - select事件 | Function | | rowCheck | 表格点击行数据响应的事件 | Function | | tableCurrentChange | 当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight-current-row 属性 | Function | | selectionChange | 表格的check选择, 对应elTable - selection-change事件 | Function |