@lx-frontend/wrap-element-ui 1.0.15-beta.8 → 1.0.16-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,9 +34,9 @@ export default {
34
34
 
35
35
  ### 开发指南
36
36
 
37
- 新增或修改组件时,使用 `pnpm sb:dev` 可以实时预览 stories。
37
+ 新增或修改组件时,使用 `pnpm dev` 可以实时预览 stories。
38
38
 
39
- 开发完成后,可以使用 `pnpm sb:dist` 预览打包后的组件是否能正常工作。与 `pnpm sb:dev` 的区别在于,该命令修改了组件的引用地址,指向了打包后的组件。该命令不能实时预览修改。
39
+ 开发完成后,可以使用 `pnpm dist` 预览打包后的组件是否能正常工作。与 `pnpm dev` 的区别在于,该命令修改了组件的引用地址,指向了打包后的组件。该命令不能实时预览修改。
40
40
 
41
41
  `build:lib`命令用于打包组件库,生成组件代码及类型定义文件。
42
42
 
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@lx-frontend/wrap-element-ui",
3
- "version": "1.0.15-beta.8",
3
+ "version": "1.0.16-beta.0",
4
4
  "description": "wrap-element-ui",
5
5
  "author": "",
6
6
  "main": "src/components/index.ts",
7
7
  "private": false,
8
8
  "scripts": {
9
9
  "clean": "rimraf dist",
10
- "sb:dev": "cross-env MODE=development storybook dev -p 6006",
11
- "sb:dist": "cross-env MODE=production pnpm build:lib && storybook dev -p 6006",
10
+ "dev": "cross-env MODE=development storybook dev -p 6006",
11
+ "dist": "cross-env MODE=production pnpm build:lib && storybook dev -p 6006",
12
12
  "build:lib": "pnpm clean && vite build",
13
13
  "build:sb": "cross-env MODE=production rimraf storybook-static && pnpm build:lib && storybook build",
14
14
  "preview": "serve ./storybook-static",
@@ -52,7 +52,6 @@
52
52
  "ali-oss": "^6.20.0",
53
53
  "autoprefixer": "^10.4.19",
54
54
  "cross-env": "^7.0.3",
55
- "dayjs": "^1.11.13",
56
55
  "eslint": "^8.57.0",
57
56
  "eslint-plugin-vue": "^9.27.0",
58
57
  "gulp": "^4.0.2",
@@ -72,6 +71,6 @@
72
71
  "vue-template-compiler": "^2.6.10"
73
72
  },
74
73
  "dependencies": {
75
- "@lx-frontend/wrap-element-ui": "1.0.15-beta.1"
74
+ "@lx-frontend/wrap-element-ui": "1.0.10"
76
75
  }
77
76
  }
@@ -16,12 +16,7 @@
16
16
  :title="item.text"
17
17
  class="editable-table-sort-filter__filter-checkbox"
18
18
  >
19
- <slot
20
- name="filter-item"
21
- v-bind="item"
22
- >
23
- {{ item.text }}
24
- </slot>
19
+ {{ item.text }}
25
20
  </el-checkbox>
26
21
  </el-checkbox-group>
27
22
  </div>
@@ -6,42 +6,86 @@
6
6
  </div>
7
7
  <div class="editable-table-sort-filter__date-picker-content">
8
8
  <el-date-picker
9
- value-format="yyyy-MM-dd"
10
- format="yyyy-MM-dd"
11
- type="date"
12
- size="small"
9
+ v-bind="datePickerCommonProps"
13
10
  placeholder="开始日期"
14
11
  :value="tempFilteredValue[config.prop[0]]"
15
- :editable="false"
16
- @input="val => emit('update:tempFilteredValue', config.prop[0], val || '')"
12
+ :picker-options="startDateDisabledOptions"
13
+ @input="handleStartDateChange"
17
14
  />
18
15
  <el-date-picker
19
- value-format="yyyy-MM-dd"
20
- format="yyyy-MM-dd"
21
- size="small"
22
- type="date"
16
+ v-bind="datePickerCommonProps"
23
17
  placeholder="结束日期"
24
18
  :value="tempFilteredValue[config.prop[1]]"
25
- :editable="false"
26
- @input="val => emit('update:tempFilteredValue', config.prop[1], val || '')"
19
+ :picker-options="endDateDisabledOptions"
20
+ @input="handleEndDateChange"
27
21
  />
28
22
  </div>
29
23
  </div>
30
24
  </template>
31
25
 
32
26
  <script setup lang="ts">
27
+ import { computed } from 'vue';
33
28
  import { IFilterDoubleDatePicker } from '../../types';
29
+ import dayjs from 'dayjs';
30
+ import type { DatePickerOptions } from 'element-ui/types/date-picker';
34
31
 
35
- defineProps<{
36
- config: IFilterDoubleDatePicker
37
- tempFilteredValue: Record<string, string>
38
- }>()
32
+ interface IFilterDoubleDatePickerProps {
33
+ /** 日期选择器配置 */
34
+ config: IFilterDoubleDatePicker;
35
+ /** 临时筛选值 */
36
+ tempFilteredValue: Record<string, string>;
37
+ }
38
+
39
+ const props = defineProps<IFilterDoubleDatePickerProps>();
39
40
 
40
41
  const emit = defineEmits<{
41
- (e: 'update:tempFilteredValue', key: string, value: string): void
42
- }>()
43
- </script>
42
+ (e: 'update:tempFilteredValue', key: string, value: string): void;
43
+ }>();
44
+
45
+ /** 日期选择器通用配置 */
46
+ const datePickerCommonProps = {
47
+ valueFormat: 'yyyy-MM-dd',
48
+ format: 'yyyy-MM-dd',
49
+ type: 'date',
50
+ size: 'small',
51
+ editable: false,
52
+ } as const;
53
+
54
+ /** 开始日期禁用配置 */
55
+ const startDateDisabledOptions = computed<DatePickerOptions>(() => {
56
+ const endDate = props.tempFilteredValue[props.config.prop[1]];
57
+
58
+ return {
59
+ disabledDate: (time: Date) => {
60
+ if (!endDate) return false;
61
+
62
+ const currentDate = dayjs(time);
63
+ return currentDate.isAfter(dayjs(endDate), 'day');
64
+ }
65
+ };
66
+ });
67
+
68
+ /** 结束日期禁用配置 */
69
+ const endDateDisabledOptions = computed<DatePickerOptions>(() => {
70
+ const startDate = props.tempFilteredValue[props.config.prop[0]];
71
+
72
+ return {
73
+ disabledDate: (time: Date) => {
74
+ if (!startDate) return false;
75
+
76
+ const currentDate = dayjs(time);
77
+ return currentDate.isBefore(dayjs(startDate), 'day');
78
+ }
79
+ };
80
+ });
44
81
 
45
- <style scoped lang="less">
82
+ /** 处理开始日期变更 */
83
+ const handleStartDateChange = (val: string | null) => {
84
+ emit('update:tempFilteredValue', props.config.prop[0], val || '');
85
+ };
46
86
 
47
- </style>
87
+ /** 处理结束日期变更 */
88
+ const handleEndDateChange = (val: string | null) => {
89
+ emit('update:tempFilteredValue', props.config.prop[1], val || '');
90
+ };
91
+ </script>
@@ -9,6 +9,7 @@
9
9
  clearable
10
10
  :value="startDate"
11
11
  separator=""
12
+ size="small"
12
13
  placeholder="开始日期"
13
14
  popper-class="month-day-picker"
14
15
  :options="startDateOptions"
@@ -18,6 +19,7 @@
18
19
  clearable
19
20
  :value="endDate"
20
21
  separator=""
22
+ size="small"
21
23
  placeholder="结束日期"
22
24
  popper-class="month-day-picker"
23
25
  :options="endDateOptions"
@@ -15,12 +15,7 @@
15
15
  :label="item.value"
16
16
  :title="item.text"
17
17
  >
18
- <slot
19
- name="filter-item"
20
- v-bind="item"
21
- >
22
- {{ item.text }}
23
- </slot>
18
+ {{ item.text }}
24
19
  </el-radio>
25
20
  </el-radio-group>
26
21
  </div>
@@ -9,18 +9,15 @@
9
9
  @show="() => emit('popover-show')"
10
10
  >
11
11
  <template slot="reference">
12
- <slot
13
- v-if="column.customColorLabel"
14
- name="custom"
15
- />
16
- <!-- 筛选中,或排序中,高亮 -->
17
- <span
18
- v-else
19
- :class="['editable-table__sort-reference', headActive && 'editable-table__sort-reference--active']"
20
- >
21
- {{ column.label }}
22
- <div :class="['editable-table__sort-icon', headActive && 'editable-table__sort-icon--active']" />
23
- </span>
12
+ <slot name="custom">
13
+ <!-- 筛选中,或排序中,高亮 -->
14
+ <span
15
+ :class="['editable-table__sort-reference', headActive && 'editable-table__sort-reference--active']"
16
+ >
17
+ {{ column.label }}
18
+ <div :class="['editable-table__sort-icon', headActive && 'editable-table__sort-icon--active']" />
19
+ </span>
20
+ </slot>
24
21
  </template>
25
22
  <div class="editable-table-sort-filter">
26
23
  <div class="editable-table-sort-filter__column-title">
@@ -124,14 +124,6 @@
124
124
  <template #custom>
125
125
  <div class="editable-table__color-icon" />
126
126
  </template>
127
- <template #filter-item="item">
128
- <slot
129
- :name="colorFilterConfig.prop + '-filter-item'"
130
- v-bind="item"
131
- >
132
- {{ item.text }}
133
- </slot>
134
- </template>
135
127
  </biz-table-header-popover>
136
128
  <div
137
129
  v-else
@@ -174,14 +166,6 @@
174
166
  @reset="() => handleHeaderOperationReset(column)"
175
167
  @confirm="() => handleHeaderOperationConfirm(column)"
176
168
  >
177
- <template #filter-item="item">
178
- <slot
179
- :name="column.prop + '-filter-item'"
180
- v-bind="item"
181
- >
182
- {{ item.text }}
183
- </slot>
184
- </template>
185
169
  <template #summay-item>
186
170
  <slot
187
171
  :name="column.prop + '-summay-item'"
@@ -333,6 +317,7 @@ import BizTableOperatePopover from './features/bizTableOperatePopover.vue'
333
317
 
334
318
  import { computed, nextTick, ref, watch } from 'vue';
335
319
  import { Message } from 'element-ui';
320
+ import omit from 'lodash/omit';
336
321
 
337
322
  import {
338
323
  usePagination,
@@ -590,9 +575,14 @@ const doTableLayout = async () => {
590
575
 
591
576
  // 过滤出自定义属性,将其它属性全部透传给 el-table-column
592
577
  const getColumnBindProps = (column: IColumnConfig) => {
593
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
594
- const { editType, slotName, inputType, options, filters, ...rest } = column;
595
- return rest;
578
+ // 过滤掉自定义属性,只保留 el-table-column 支持的属性
579
+ return omit(column, [
580
+ 'editType',
581
+ 'slotName',
582
+ 'inputType',
583
+ 'options',
584
+ 'filters'
585
+ ]);
596
586
  };
597
587
 
598
588
  const setRowClassName = (scope) => {
@@ -8,7 +8,7 @@
8
8
  v-for="({
9
9
  isEmpty = true, key, type, prop, label, placeholder, candidate, filterable=false, withoutAll=false, collapseTags=false,
10
10
  clearable=false, multiple=false, multipleLimit=0, changeCb, inputLimitCallback, slotName, dateType='date',
11
- doubleIsInline = true,
11
+ doubleIsInline = true, maxlength = 255,
12
12
  }) in config"
13
13
  :key="label"
14
14
  :label="showLabel ? label : ''"
@@ -18,6 +18,7 @@
18
18
  v-if="type === 'input'"
19
19
  :placeholder="placeholder ? placeholder : showLabel ? '请输入' : label"
20
20
  :value="formData[prop]"
21
+ :maxlength="maxlength"
21
22
  @input="val => handleInput(val, prop, inputLimitCallback)"
22
23
  />
23
24
  <div
@@ -16,6 +16,7 @@ type SlotOption = Omit<BaseOption, 'prop'> & {
16
16
  type InputOption = BaseOption & {
17
17
  type: 'input'
18
18
  inputLimitCallback?: (value: string) => boolean
19
+ maxlength?: number
19
20
  }
20
21
 
21
22
  type SelectOption = BaseOption & {