1
0
mirror of synced 2025-12-10 07:58:13 +08:00
Files
vxe-table/examples/views/input/Input.vue
2021-12-11 22:23:36 +08:00

572 lines
21 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<h2>{{ $t('app.aside.nav.input') }}</h2>
<p class="tip">
输入框选择器查看 <router-link class="link" :to="{name: 'VXEAPI', params: {name: 'input'}}">API</router-link><br>
<span class="red">输入组件输出为字符串类型</span>
</p>
<p>
<vxe-input v-model="demo1.value100" placeholder="默认尺寸"></vxe-input>
<vxe-input v-model="demo1.value101" placeholder="中等尺寸" size="medium"></vxe-input>
<vxe-input v-model="demo1.value102" placeholder="小型尺寸" size="small"></vxe-input>
<vxe-input v-model="demo1.value103" placeholder="超小尺寸" size="mini"></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value200" placeholder="可清除" clearable></vxe-input>
<vxe-input v-model="demo1.value201" placeholder="带图标" prefix-icon="fa fa-user" suffix-icon="fa fa-search" clearable></vxe-input>
<vxe-input v-model="demo1.value202" placeholder="只读的" suffix-icon="fa fa-search" readonly></vxe-input>
<vxe-input v-model="demo1.value203" placeholder="禁用的" prefix-icon="fa fa-user-o" disabled></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value300" placeholder="搜索类型" type="search"></vxe-input>
<vxe-input v-model="demo1.value301" placeholder="可清除" type="search" clearable></vxe-input>
<vxe-input v-model="demo1.value302" placeholder="密码类型" type="password"></vxe-input>
<vxe-input v-model="demo1.value303" placeholder="可清除" type="password" clearable></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value400" placeholder="日期选择" type="date" parse-format="yyyy-dd-MM"></vxe-input>
<vxe-input v-model="demo1.value401" placeholder="周选择" type="week" clearable></vxe-input>
<vxe-input v-model="demo1.value402" placeholder="月选择" type="month" valueFormat="yyyy-MM-dd"></vxe-input>
<vxe-input v-model="demo1.value403" placeholder="季选择" type="quarter" clearable></vxe-input>
<vxe-input v-model="demo1.value404" placeholder="年选择" type="year" clearable></vxe-input>
<vxe-input v-model="demo1.value405" placeholder="时间选择" type="time" clearable></vxe-input>
<vxe-input v-model="demo1.value406" placeholder="日期和时间选择" type="datetime" transfer></vxe-input>
<vxe-input v-model="demo1.value407" placeholder="禁用日期" type="date" :disabled-method="disabledDateMethod" transfer></vxe-input>
<vxe-input v-model="demo1.value408" placeholder="小圆点" type="date" :festival-method="festivalNoticeMethod" transfer></vxe-input>
<vxe-input v-model="demo1.value409" placeholder="农历节日" type="date" :festival-method="festivalCalendarMethod" transfer></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value701" placeholder="周选择" type="week" :start-day="0" clearable></vxe-input>
<vxe-input v-model="demo1.value702" placeholder="周选择" type="week" :start-day="1" clearable></vxe-input>
<vxe-input v-model="demo1.value703" placeholder="周选择" type="week" :start-day="2" clearable></vxe-input>
<vxe-input v-model="demo1.value704" placeholder="周选择" type="week" :start-day="3" clearable></vxe-input>
<vxe-input v-model="demo1.value705" placeholder="周选择" type="week" :start-day="4" clearable></vxe-input>
<vxe-input v-model="demo1.value706" placeholder="周选择" type="week" :start-day="5" clearable></vxe-input>
<vxe-input v-model="demo1.value707" placeholder="周选择" type="week" :start-day="6" clearable></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value500" placeholder="数值类型" type="number"></vxe-input>
<vxe-input v-model="demo1.value501" placeholder="数值间隔 1.4" type="number" step="1.4" clearable></vxe-input>
<vxe-input v-model="demo1.value502" placeholder="数值范围限制 0-10" type="number" min="0" max="10" clearable></vxe-input>
<vxe-input v-model="demo1.value503" placeholder="小数类型" type="float"></vxe-input>
<vxe-input v-model="demo1.value504" placeholder="小数间隔 2.3" type="float" step="2.3" clearable></vxe-input>
<vxe-input v-model="demo1.value505" placeholder="小数范围限制 0-50" type="float" min="0" max="50" clearable></vxe-input>
<vxe-input v-model="demo1.value506" placeholder="整数类型" type="integer"></vxe-input>
<vxe-input v-model="demo1.value507" placeholder="整数间隔 5" type="integer" step="5" clearable></vxe-input>
<vxe-input v-model="demo1.value508" placeholder="整数范围限制 0-100" type="integer" min="0" max="100" clearable></vxe-input>
<vxe-input v-model="demo1.value509" placeholder="允许输入科学计数" type="number" exponential clearable></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value600" placeholder="自定义前缀图标">
<template #prefix>
<i class="fa fa-search my-red"></i>
</template>
</vxe-input>
<vxe-input v-model="demo1.value601" placeholder="自定义后缀图标">
<template #suffix>
<i class="fa fa-search my-green"></i>
</template>
</vxe-input>
<vxe-input v-model="demo1.value602" class="my-domain" placeholder="自定义前缀模板">
<template #prefix>
<span>Http://</span>
</template>
</vxe-input>
<vxe-input v-model="demo1.value603" class="my-search" placeholder="自定义后缀模板">
<template #suffix>
<i class="fa fa-search"></i>
</template>
</vxe-input>
</p>
<pre>
<pre-code>
| Tab | 切换到上一个 |
| Shift Tab | 切换到下一个 |
| Arrow Up | 展开下拉面板如果已展开则向上移动用于日期类型... |
| Arrow Down | 展开下拉面板如果已展开则向下移动用于日期类型... |
| Arrow Left | 如果已展开则向左移动用于日期类型... |
| Arrow Right | 如果已展开则向右移动用于日期类型... |
| Enter | 展开下拉面板确定选中日期...用于日期类型... |
| Page Up | 向前翻页用于日期类型... |
| Page Down | 向后翻页用于日期类型... |
</pre-code>
</pre>
<p class="demo-code">{{ $t('app.body.button.showCode') }}</p>
<pre>
<pre-code class="html">{{ demoCodes[0] }}</pre-code>
<pre-code class="typescript">{{ demoCodes[1] }}</pre-code>
<pre-code class="css">{{ demoCodes[2] }}</pre-code>
</pre>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive } from 'vue'
import { VxeInputPropTypes, VxeInputDefines } from '../../../types/index'
import XEUtils from 'xe-utils'
export default defineComponent({
setup () {
const demo1 = reactive({
value100: '',
value101: '',
value102: '',
value103: '',
value200: '',
value201: '',
value202: '',
value203: '',
value300: '',
value301: '',
value302: '',
value303: '',
value400: '',
value401: '',
value402: '',
value403: '',
value404: '',
value405: '',
value406: '',
value407: '',
value408: '2020-10-01',
value409: '2020-10-01',
value500: '22',
value501: '',
value502: '',
value503: '33.33',
value504: '',
value505: '',
value506: '44',
value507: '',
value508: '',
value509: '1e+2',
value600: '',
value601: '',
value602: '',
value603: '',
value701: '2017-12-18',
value702: '2017-12-18',
value703: '2017-12-18',
value704: '2017-12-18',
value705: '2017-12-18',
value706: '2017-12-18',
value707: '2017-12-18'
})
const disabledDateMethod: VxeInputPropTypes.DisabledMethod = (params) => {
const { date } = params
const dd = date.getDate()
return dd > 15
}
// 渲染日期小圆点
const noticeMaps: { [key: string]: VxeInputDefines.DateFestivalInfo } = {
20200910: {
notice: true, // 显示小圆点事件通知
important: true, // 是否标记为重要节日
label: '活动'
},
20201015: {
notice: true,
important: true,
label: '聚餐'
},
20201108: {
notice: true,
label: '爬山'
},
20201222: {
notice: true,
label: '游泳'
}
}
const festivalNoticeMethod: VxeInputPropTypes.FestivalMethod = (params) => {
const { date, viewType } = params
if (viewType === 'day') {
const ymd = XEUtils.toDateString(date, 'yyyyMMdd')
return noticeMaps[ymd] || { label: '无' }
}
}
// 显示日期农历节假日
const calendarMaps: { [key: string]: VxeInputDefines.DateFestivalInfo } = {
20200930: {
label: '十四' // 显示节日名称
},
20201001: {
label: '国庆节,中秋节', // 如果同一天拥有多个节日重叠,用逗号分开
important: true, // 是否标记为重要节日
extra: '休' // 右上角额外显示的名称
},
20201002: {
label: '十六',
extra: '休'
},
20201003: {
label: '十七',
extra: '休'
},
20201004: {
label: '十八',
extra: '休'
},
20201005: {
label: '十九',
extra: '休'
},
20201006: {
label: '二十',
extra: '休'
},
20201007: {
label: '廿一',
extra: '休'
},
20201008: {
label: '寒霜',
important: true,
extra: '休'
},
20201009: {
label: '廿三'
},
20201010: {
label: '廿四',
extra: {
label: '班',
important: true // 是否标记为重要节日
}
}
}
const festivalCalendarMethod: VxeInputPropTypes.FestivalMethod = (params) => {
const { date, viewType } = params
if (viewType === 'day') {
const ymd = XEUtils.toDateString(date, 'yyyyMMdd')
return calendarMaps[ymd] || { label: '无' }
}
}
return {
demo1,
disabledDateMethod,
festivalNoticeMethod,
festivalCalendarMethod,
demoCodes: [
`
<p>
<vxe-input v-model="demo1.value100" placeholder="默认尺寸"></vxe-input>
<vxe-input v-model="demo1.value101" placeholder="中等尺寸" size="medium"></vxe-input>
<vxe-input v-model="demo1.value102" placeholder="小型尺寸" size="small"></vxe-input>
<vxe-input v-model="demo1.value103" placeholder="超小尺寸" size="mini"></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value200" placeholder="可清除" clearable></vxe-input>
<vxe-input v-model="demo1.value201" placeholder="带图标" prefix-icon="fa fa-user" suffix-icon="fa fa-search" clearable></vxe-input>
<vxe-input v-model="demo1.value202" placeholder="只读的" suffix-icon="fa fa-search" readonly></vxe-input>
<vxe-input v-model="demo1.value203" placeholder="禁用的" prefix-icon="fa fa-user-o" disabled></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value300" placeholder="搜索类型" type="search"></vxe-input>
<vxe-input v-model="demo1.value301" placeholder="可清除" type="search" clearable></vxe-input>
<vxe-input v-model="demo1.value302" placeholder="密码类型" type="password"></vxe-input>
<vxe-input v-model="demo1.value303" placeholder="可清除" type="password" clearable></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value400" placeholder="日期选择" type="date" parse-format="yyyy-dd-MM"></vxe-input>
<vxe-input v-model="demo1.value401" placeholder="周选择" type="week" clearable></vxe-input>
<vxe-input v-model="demo1.value402" placeholder="月选择" type="month" valueFormat="yyyy-MM-dd"></vxe-input>
<vxe-input v-model="demo1.value403" placeholder="季选择" type="quarter" clearable></vxe-input>
<vxe-input v-model="demo1.value404" placeholder="年选择" type="year" clearable></vxe-input>
<vxe-input v-model="demo1.value405" placeholder="时间选择" type="time" clearable></vxe-input>
<vxe-input v-model="demo1.value406" placeholder="日期和时间选择" type="datetime" transfer></vxe-input>
<vxe-input v-model="demo1.value407" placeholder="禁用日期" type="date" :disabled-method="disabledDateMethod" transfer></vxe-input>
<vxe-input v-model="demo1.value408" placeholder="小圆点" type="date" :festival-method="festivalNoticeMethod" transfer></vxe-input>
<vxe-input v-model="demo1.value409" placeholder="农历节日" type="date" :festival-method="festivalCalendarMethod" transfer></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value500" placeholder="数值类型" type="number"></vxe-input>
<vxe-input v-model="demo1.value501" placeholder="数值间隔 1.4" type="number" step="1.4" clearable></vxe-input>
<vxe-input v-model="demo1.value502" placeholder="数值范围限制 0-10" type="number" min="0" max="10" clearable></vxe-input>
<vxe-input v-model="demo1.value503" placeholder="小数类型" type="float"></vxe-input>
<vxe-input v-model="demo1.value504" placeholder="小数间隔 2.3" type="float" step="2.3" clearable></vxe-input>
<vxe-input v-model="demo1.value505" placeholder="小数范围限制 0-50" type="float" min="0" max="50" clearable></vxe-input>
<vxe-input v-model="demo1.value506" placeholder="整数类型" type="integer"></vxe-input>
<vxe-input v-model="demo1.value507" placeholder="整数间隔 5" type="integer" step="5" clearable></vxe-input>
<vxe-input v-model="demo1.value508" placeholder="整数范围限制 0-100" type="integer" min="0" max="100" clearable></vxe-input>
<vxe-input v-model="demo1.value509" placeholder="允许输入科学计数" type="number" exponential clearable></vxe-input>
</p>
<p>
<vxe-input v-model="demo1.value600" placeholder="自定义前缀图标">
<template #prefix>
<i class="fa fa-search my-red"></i>
</template>
</vxe-input>
<vxe-input v-model="demo1.value601" placeholder="自定义后缀图标">
<template #suffix>
<i class="fa fa-search my-green"></i>
</template>
</vxe-input>
<vxe-input v-model="demo1.value602" class="my-domain" placeholder="自定义前缀模板">
<template #prefix>
<span>Http://</span>
</template>
</vxe-input>
<vxe-input v-model="demo1.value603" class="my-search" placeholder="自定义后缀模板">
<template #suffix>
<i class="fa fa-search"></i>
</template>
</vxe-input>
</p>
`,
`
import { defineComponent, reactive } from 'vue'
import { VxeInputPropTypes, VxeInputDefines } from 'vxe-table'
import XEUtils from 'xe-utils'
export default defineComponent({
setup () {
const demo1 = reactive({
value100: '',
value101: '',
value102: '',
value103: '',
value200: '',
value201: '',
value202: '',
value203: '',
value300: '',
value301: '',
value302: '',
value303: '',
value400: '',
value401: '',
value402: '',
value403: '',
value404: '',
value405: '',
value406: '',
value407: '',
value408: '2020-10-01',
value409: '2020-10-01',
value500: '22',
value501: '',
value502: '',
value503: '33.33',
value504: '',
value505: '',
value506: '44',
value507: '',
value508: '',
value509: '1e+2',
value600: '',
value601: '',
value602: '',
value603: ''
})
const disabledDateMethod: VxeInputPropTypes.DisabledMethod = (params) => {
const { date } = params
const dd = date.getDate()
return dd > 15
}
// 渲染日期小圆点
const noticeMaps: { [key: string]: VxeInputDefines.DateFestivalInfo } = {
20200910: {
notice: true, // 显示小圆点事件通知
important: true, // 是否标记为重要节日
label: '活动'
},
20201015: {
notice: true,
important: true,
label: '聚餐'
},
20201108: {
notice: true,
label: '爬山'
},
20201222: {
notice: true,
label: '游泳'
}
}
const festivalNoticeMethod: VxeInputPropTypes.FestivalMethod = (params) => {
const { date, viewType } = params
if (viewType === 'day') {
const ymd = XEUtils.toDateString(date, 'yyyyMMdd')
return noticeMaps[ymd] || { label: '无' }
}
}
// 显示日期农历节假日
const calendarMaps: { [key: string]: VxeInputDefines.DateFestivalInfo } = {
20200930: {
label: '十四' // 显示节日名称
},
20201001: {
label: '国庆节,中秋节', // 如果同一天拥有多个节日重叠,用逗号分开
important: true, // 是否标记为重要节日
extra: '休' // 右上角额外显示的名称
},
20201002: {
label: '十六',
extra: '休'
},
20201003: {
label: '十七',
extra: '休'
},
20201004: {
label: '十八',
extra: '休'
},
20201005: {
label: '十九',
extra: '休'
},
20201006: {
label: '二十',
extra: '休'
},
20201007: {
label: '廿一',
extra: '休'
},
20201008: {
label: '寒霜',
important: true,
extra: '休'
},
20201009: {
label: '廿三'
},
20201010: {
label: '廿四',
extra: {
label: '班',
important: true // 是否标记为重要节日
}
}
}
const festivalCalendarMethod: VxeInputPropTypes.FestivalMethod = (params) => {
const { date, viewType } = params
if (viewType === 'day') {
const ymd = XEUtils.toDateString(date, 'yyyyMMdd')
return calendarMaps[ymd] || { label: '无' }
}
}
return {
demo1,
disabledDateMethod,
festivalNoticeMethod,
festivalCalendarMethod
}
}
}
`,
`
.my-red {
color: red;
}
.my-green {
color: green;
}
.my-domain.vxe-input {
height: 34px;
width: 300px;
}
.my-domain.vxe-input .vxe-input--prefix {
width: 60px;
height: 32px;
top: 1px;
text-align: center;
border-right: 1px solid #dcdfe6;
background-color: #f5f7fa;
}
.my-domain.vxe-input .vxe-input--inner {
padding-left: 72px;
border: 1px solid #dcdfe6;
}
.my-search.vxe-input {
height: 34px;
width: 300px;
}
.my-search.vxe-input .vxe-input--suffix {
width: 60px;
height: 32px;
top: 1px;
text-align: center;
border-left: 1px solid #dcdfe6;
background-color: #f5f7fa;
cursor: pointer;
}
.my-search.vxe-input .vxe-input--inner {
padding-right: 72px;
border: 1px solid #dcdfe6;
}
`
]
}
}
})
</script>
<style lang="scss" scoped>
.my-red {
color: red;
}
.my-green {
color: green;
}
.my-domain.vxe-input {
height: 34px;
width: 300px;
}
.my-domain.vxe-input:deep() .vxe-input--prefix {
width: 60px;
height: 32px;
top: 1px;
text-align: center;
border-right: 1px solid #dcdfe6;
background-color: #f5f7fa;
}
.my-domain.vxe-input:deep() .vxe-input--inner {
padding-left: 72px;
border: 1px solid #dcdfe6;
}
.my-search.vxe-input {
height: 34px;
width: 300px;
}
.my-search.vxe-input:deep() .vxe-input--suffix {
width: 60px;
height: 32px;
top: 1px;
text-align: center;
border-left: 1px solid #dcdfe6;
background-color: #f5f7fa;
cursor: pointer;
}
.my-search.vxe-input:deep() .vxe-input--inner {
padding-right: 72px;
border: 1px solid #dcdfe6;
}
</style>