| | |
| | | /** |
| | | * CDatePicker - 选择日期范围操作 |
| | | * 日期选择组件,用于在表单中选择日期或日期范围 |
| | | * 支持三种选择模式:日期选择、日期时间选择和日期范围选择 |
| | | * 可限制日期选择范围,支持清除功能和只读模式 |
| | | * @author Tevin |
| | | */ |
| | | |
| | | <template> |
| | | <view class="c-date-picker"> |
| | | <view |
| | | class="c-date-picker" |
| | | :class="readOnly?'read-only':''" |
| | | > |
| | | <CDateRangeAction |
| | | v-if="mode==='dateRange'" |
| | | :value="itemRes.formData[itemRes.name]" |
| | |
| | | :value="itemRes.formData[itemRes.name]" |
| | | :placeholder="placeholder" |
| | | > |
| | | <view class="at-icon at-icon-chevron-right" /> |
| | | <view |
| | | v-show="!readOnly && !showClear" |
| | | class="at-icon at-icon-chevron-right" |
| | | /> |
| | | <view |
| | | v-show="!readOnly && showClear" |
| | | class="at-icon at-icon-close" |
| | | @tap.stop="evt => handleClear()" |
| | | ></view> |
| | | </AtInput> |
| | | </CDateRangeAction> |
| | | <CDateTimeAction |
| | |
| | | :value="itemRes.formData[itemRes.name]" |
| | | :placeholder="placeholder" |
| | | > |
| | | <view class="at-icon at-icon-chevron-right" /> |
| | | <view |
| | | v-show="!readOnly && !showClear" |
| | | class="at-icon at-icon-chevron-right" |
| | | /> |
| | | <view |
| | | v-show="!readOnly && showClear" |
| | | class="at-icon at-icon-close" |
| | | @tap.stop="evt => handleClear()" |
| | | ></view> |
| | | </AtInput> |
| | | </CDateTimeAction> |
| | | <view v-else-if="mode==='date'"> |
| | | <picker |
| | | mode="date" |
| | | :start="pickerStart" |
| | | :end="pickerEnd" |
| | | :start="limitStart || pickerStart" |
| | | :end="limitEnd || pickerEnd" |
| | | :fields="fields" |
| | | :value="itemRes.formData[itemRes.name]" |
| | | @change="evt=>handleChange(evt.detail.value)" |
| | | > |
| | |
| | | :value="itemRes.formData[itemRes.name]" |
| | | :placeholder="placeholder" |
| | | > |
| | | <view class="at-icon at-icon-chevron-right" /> |
| | | <view |
| | | v-show="!readOnly && !showClear" |
| | | class="at-icon at-icon-chevron-right" |
| | | /> |
| | | <view |
| | | v-show="!readOnly && showClear" |
| | | class="at-icon at-icon-close" |
| | | @tap.stop="evt => handleClear()" |
| | | ></view> |
| | | </AtInput> |
| | | </picker> |
| | | </view> |
| | |
| | | }, |
| | | // 占位提示 |
| | | placeholder: String, |
| | | // 开始日期 |
| | | limitStart: String, |
| | | // 结束日期 |
| | | limitEnd: String, |
| | | // 日期选择粒度 year、month、day |
| | | fields: { |
| | | type: String, |
| | | default: 'day', |
| | | }, |
| | | // 是否只读 |
| | | readOnly: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | // 允许清除 |
| | | allowClear: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | }, |
| | | data() { |
| | | const year = new Date().getFullYear(); |
| | |
| | | pickerEnd: year + 30 + '-12-31', |
| | | }; |
| | | }, |
| | | computed: {}, |
| | | computed: { |
| | | showClear() { |
| | | if (!this.allowClear) { |
| | | return false; |
| | | } |
| | | return !!this.itemRes.formData[this.itemRes.name]; |
| | | }, |
| | | }, |
| | | methods: { |
| | | handleChange(val) { |
| | | this.itemRes.onChange(val); |
| | | }, |
| | | handleClear() { |
| | | this.itemRes.onChange(''); |
| | | }, |
| | | }, |
| | | mounted() {}, |
| | | }; |