@lx-frontend/wrap-element-ui 1.0.28 → 2.0.0-beta.2

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.
Files changed (33) hide show
  1. package/package.json +21 -12
  2. package/src/components/AddMembers/index.vue +100 -89
  3. package/src/components/AuditSteps/index.vue +107 -74
  4. package/src/components/DemoComponent/index.vue +8 -5
  5. package/src/components/EditableTable/bizHooks/useCellHover.ts +47 -2
  6. package/src/components/EditableTable/bizHooks/useColumnHeaderOperation.ts +5 -4
  7. package/src/components/EditableTable/bizHooks/useDefaultOperation.ts +12 -4
  8. package/src/components/EditableTable/bizHooks/useDragSort.ts +36 -3
  9. package/src/components/EditableTable/bizHooks/useRowBgColor.ts +6 -2
  10. package/src/components/EditableTable/bizHooks/useViewSetting.ts +2 -1
  11. package/src/components/EditableTable/features/bizColorSelect.vue +4 -3
  12. package/src/components/EditableTable/features/bizEditCell.vue +6 -6
  13. package/src/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue +3 -3
  14. package/src/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue +3 -4
  15. package/src/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue +8 -8
  16. package/src/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue +2 -2
  17. package/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue +2 -2
  18. package/src/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue +3 -4
  19. package/src/components/EditableTable/features/bizTableHeaderPopover/index.vue +28 -19
  20. package/src/components/EditableTable/features/bizTableOperatePopover.vue +11 -9
  21. package/src/components/EditableTable/features/bizViewSettingDialog.vue +10 -6
  22. package/src/components/EditableTable/index.less +189 -186
  23. package/src/components/EditableTable/index.vue +34 -16
  24. package/src/components/EditableTable/types/index.ts +4 -4
  25. package/src/components/Ellipsis/MultilineEllipsis.vue +96 -109
  26. package/src/components/Ellipsis/index.vue +114 -89
  27. package/src/components/LxTable/index.vue +98 -143
  28. package/src/components/PopoverForm/index.vue +52 -47
  29. package/src/components/SearchForm/index.vue +128 -138
  30. package/src/components/SearchForm/types/index.ts +4 -4
  31. package/src/components/SearchSelect/index.vue +83 -67
  32. package/src/components/index.ts +1 -1
  33. package/src/components/singleMessage/index.ts +15 -44
@@ -164,189 +164,6 @@
164
164
  margin-left: 4px;
165
165
  }
166
166
 
167
- &__dialog {
168
- padding: 0px;
169
-
170
- .el-dialog__body {
171
- max-height: 70vh;
172
- }
173
-
174
- .el-dialog__body {
175
- padding: 0;
176
- }
177
-
178
- & .el-button--primary {
179
- background-color: @--theme-blue-- !important;
180
- border-color: @--theme-blue-- !important;
181
- }
182
-
183
- & .el-checkbox.is-checked:not(.is-disabled) {
184
- .el-checkbox__input .el-checkbox__inner {
185
- background-color: @--theme-blue-- !important;
186
- border-color: @--theme-blue-- !important;
187
- }
188
-
189
- .el-checkbox__label {
190
- color: @--theme-blue-- !important;
191
- }
192
- }
193
-
194
- & .el-button {
195
- border-radius: 2px;
196
- }
197
-
198
- .el-dialog__header {
199
- display: flex;
200
- justify-content: space-between;
201
- align-items: center;
202
- font-size: 14px;
203
- background-color: #eeeeee;
204
- height: 36px;
205
- line-height: 36px;
206
- padding: 0 20px;
207
- }
208
-
209
- .el-dialog__title {
210
- font-size: 14px;
211
- line-height: 20px;
212
- color: #333333;
213
- }
214
-
215
- .el-dialog__footer {
216
- background-color: #eeeeee;
217
- height: 42px;
218
- line-height: 42px;
219
- padding: 0 20px;
220
-
221
- & .el-button {
222
- height: 24px;
223
- // line-height: 24px;
224
- font-size: 12px;
225
- padding: 5px 12px;
226
- }
227
- }
228
- }
229
-
230
- &__content {
231
- display: flex;
232
- min-height: 500px;
233
- }
234
-
235
- &__content-left {
236
- min-width: 417px;
237
- width: 417px;
238
-
239
- display: flex;
240
- flex-direction: column;
241
- justify-content: flex-start;
242
- align-items: flex-start;
243
- }
244
-
245
- &__content-left-item {
246
- width: 130px;
247
- margin-bottom: 15px;
248
- }
249
-
250
- &__content-right {
251
- border-left: 1px solid #d9d9d9;
252
- display: flex;
253
- flex-direction: column;
254
- justify-content: flex-start;
255
- align-items: flex-start;
256
- }
257
-
258
- &__content-right-title,
259
- &__content-left-title {
260
- border-bottom: 1px solid #d9d9d9;
261
- width: 100%;
262
- height: 46px;
263
- display: flex;
264
- justify-content: flex-start;
265
- align-items: center;
266
- padding-left: 20px;
267
- }
268
-
269
- &__selected-count {
270
- margin-left: 20px;
271
- }
272
-
273
- &__checkbox-wrapper {
274
- padding-left: 37px;
275
- padding-top: 24px;
276
- }
277
-
278
- &__content-right {
279
- flex-grow: 1;
280
- }
281
-
282
- &__content-right-frize {
283
- width: 100%;
284
- display: flex;
285
- justify-content: flex-start;
286
- align-items: center;
287
- height: 50px;
288
- border-bottom: 1px solid #d9d9d9;
289
- padding-left: 20px;
290
- }
291
-
292
- &__content-right-input.el-input {
293
- width: 140px;
294
- margin: 0 4px;
295
-
296
- .el-input__inner {
297
- height: 28px;
298
- line-height: 28px;
299
- }
300
- }
301
-
302
- &__content-right-selected {
303
- display: flex;
304
- justify-content: flex-start;
305
- flex-direction: column;
306
- align-items: flex-start;
307
- width: 100%;
308
- flex-grow: 1;
309
- padding-left: 18px;
310
- padding-top: 17px;
311
- padding-right: 23px;
312
- }
313
-
314
- &__selected-item-left {
315
- display: flex;
316
- justify-content: flex-start;
317
- align-items: center;
318
- }
319
-
320
- &__icon-wrapper {
321
- width: 14px;
322
- height: 14px;
323
- line-height: 14px;
324
- padding: 2px 4px;
325
- margin-right: 10px;
326
- cursor: grab;
327
- display: flex;
328
- flex-direction: column;
329
- justify-content: center;
330
- align-items: center;
331
- }
332
-
333
- &__selected-item {
334
- display: flex;
335
- justify-content: space-between;
336
- align-items: center;
337
- line-height: 30px;
338
- height: 30px;
339
- width: 100%;
340
- }
341
-
342
- &__selected-item-close {
343
- cursor: pointer;
344
-
345
- &--disabled {
346
- cursor: not-allowed;
347
- color: #989ea9;
348
- }
349
- }
350
167
  }
351
168
 
352
169
  &-color-popover {
@@ -354,7 +171,8 @@
354
171
  width: 102px !important;
355
172
  padding: 0 !important;
356
173
 
357
- & .popper__arrow::after {
174
+ & .popper__arrow::after,
175
+ & .el-popper__arrow::before {
358
176
  left: 0 !important;
359
177
  }
360
178
 
@@ -448,6 +266,10 @@
448
266
  overflow-y: auto;
449
267
  overflow-x: hidden;
450
268
  }
269
+
270
+ .el-radio-group {
271
+ flex-flow: wrap;
272
+ }
451
273
  }
452
274
 
453
275
  &__sort {
@@ -764,13 +586,13 @@
764
586
  & .el-pagination.is-background {
765
587
  padding: 0;
766
588
 
767
- .el-pager li.number {
589
+ .el-pager li {
768
590
  background-color: #fff;
769
591
  border: 1px solid #d6dbe3;
770
592
  font-weight: 400;
771
593
  font-size: 14px;
772
594
 
773
- &.active {
595
+ &.is-active {
774
596
  background-color: @--theme-blue--;
775
597
  color: #fff;
776
598
  }
@@ -817,4 +639,185 @@
817
639
  &::before {
818
640
  bottom: -4px;
819
641
  }
642
+ }
643
+
644
+ // 弹窗使用了 append-to-body,被传送到 <body> 下,脱离了 .editable-table 的 DOM 层级
645
+ // 因此弹窗相关样式不能嵌套在 .editable-table 下
646
+ // class 通过 $attrs 穿透到 dialog-content 根元素
647
+ // header-class / body-class / footer-class 通过 el-dialog 的对应属性注入
648
+ .editable-table-view-setting__dialog {
649
+ padding: 0px;
650
+ }
651
+
652
+ .editable-table-view-setting__header {
653
+ display: flex;
654
+ justify-content: space-between;
655
+ align-items: center;
656
+ font-size: 14px;
657
+ background-color: #eeeeee;
658
+ height: 36px;
659
+ line-height: 36px;
660
+ padding: 0 20px;
661
+
662
+ .el-dialog__title {
663
+ font-size: 14px;
664
+ line-height: 20px;
665
+ color: #333333;
666
+ }
667
+ }
668
+
669
+ .editable-table-view-setting__body {
670
+ max-height: 70vh;
671
+ padding: 0;
672
+ }
673
+
674
+ .editable-table-view-setting__footer {
675
+ background-color: #eeeeee;
676
+ height: 42px;
677
+ line-height: 42px;
678
+ padding: 0 20px;
679
+
680
+ & .el-button {
681
+ height: 24px;
682
+ font-size: 12px;
683
+ padding: 5px 12px;
684
+ border-radius: 2px;
685
+ }
686
+
687
+ & .el-button--primary {
688
+ background-color: @--theme-blue-- !important;
689
+ border-color: @--theme-blue-- !important;
690
+ }
691
+ }
692
+
693
+ .editable-table-view-setting__content {
694
+ display: flex;
695
+ min-height: 500px;
696
+
697
+ .el-checkbox.is-checked:not(.is-disabled) {
698
+ .el-checkbox__input .el-checkbox__inner {
699
+ background-color: @--theme-blue-- !important;
700
+ border-color: @--theme-blue-- !important;
701
+ }
702
+
703
+ .el-checkbox__label {
704
+ color: @--theme-blue-- !important;
705
+ }
706
+ }
707
+ }
708
+
709
+ .editable-table-view-setting__content-left {
710
+ min-width: 417px;
711
+ width: 417px;
712
+ display: flex;
713
+ flex-direction: column;
714
+ justify-content: flex-start;
715
+ align-items: flex-start;
716
+ }
717
+
718
+ .editable-table-view-setting__content-left-item {
719
+ width: 130px;
720
+ margin-bottom: 15px;
721
+ }
722
+
723
+ .editable-table-view-setting__content-right {
724
+ border-left: 1px solid #d9d9d9;
725
+ display: flex;
726
+ flex-direction: column;
727
+ justify-content: flex-start;
728
+ align-items: flex-start;
729
+ flex-grow: 1;
730
+ }
731
+
732
+ .editable-table-view-setting__content-right-title,
733
+ .editable-table-view-setting__content-left-title {
734
+ border-bottom: 1px solid #d9d9d9;
735
+ width: 100%;
736
+ height: 46px;
737
+ display: flex;
738
+ justify-content: flex-start;
739
+ align-items: center;
740
+ padding-left: 20px;
741
+ }
742
+
743
+ .editable-table-view-setting__selected-count {
744
+ margin-left: 20px;
745
+ }
746
+
747
+ .editable-table-view-setting__checkbox-wrapper {
748
+ padding-left: 37px;
749
+ padding-top: 24px;
750
+
751
+ .el-checkbox {
752
+ align-items: flex-start !important;
753
+ }
754
+ }
755
+
756
+ .editable-table-view-setting__content-right-frize {
757
+ width: 100%;
758
+ display: flex;
759
+ justify-content: flex-start;
760
+ align-items: center;
761
+ height: 50px;
762
+ border-bottom: 1px solid #d9d9d9;
763
+ padding-left: 20px;
764
+ }
765
+
766
+ .editable-table-view-setting__content-right-input.el-input {
767
+ width: 140px;
768
+ margin: 0 4px;
769
+
770
+ .el-input__inner {
771
+ height: 28px;
772
+ line-height: 28px;
773
+ }
774
+ }
775
+
776
+ .editable-table-view-setting__content-right-selected {
777
+ display: flex;
778
+ justify-content: flex-start;
779
+ flex-direction: column;
780
+ align-items: flex-start;
781
+ width: 100%;
782
+ flex-grow: 1;
783
+ padding-left: 18px;
784
+ padding-top: 17px;
785
+ padding-right: 23px;
786
+ }
787
+
788
+ .editable-table-view-setting__selected-item-left {
789
+ display: flex;
790
+ justify-content: flex-start;
791
+ align-items: center;
792
+ }
793
+
794
+ .editable-table-view-setting__icon-wrapper {
795
+ width: 14px;
796
+ height: 14px;
797
+ line-height: 14px;
798
+ padding: 2px 4px;
799
+ margin-right: 10px;
800
+ cursor: grab;
801
+ display: flex;
802
+ flex-direction: column;
803
+ justify-content: center;
804
+ align-items: center;
805
+ }
806
+
807
+ .editable-table-view-setting__selected-item {
808
+ display: flex;
809
+ justify-content: space-between;
810
+ align-items: center;
811
+ line-height: 30px;
812
+ height: 30px;
813
+ width: 100%;
814
+ }
815
+
816
+ .editable-table-view-setting__selected-item-close {
817
+ cursor: pointer;
818
+
819
+ &--disabled {
820
+ cursor: not-allowed;
821
+ color: #989ea9;
822
+ }
820
823
  }
@@ -9,7 +9,7 @@
9
9
  class="editable-table-view-setting__btn btn-pointer"
10
10
  @click="handleViewSettingShow"
11
11
  >
12
- <i class="el-icon-setting" />
12
+ <el-icon><Setting /></el-icon>
13
13
  <div class="editable-table-view-setting__btn-text">
14
14
  显示设置
15
15
  </div>
@@ -115,7 +115,7 @@
115
115
  :temp-sort-type="tempSortType"
116
116
  :temp-filtered-value="tempFilteredValue"
117
117
  @update:tempSummaryList="val => { tempSummaryList = val }"
118
- @update:tempFilteredValue="(key, value) => { $set(tempFilteredValue, key, value) }"
118
+ @update:tempFilteredValue="(key, value) => { tempFilteredValue[key] = value }"
119
119
  @popover-show="() => handleHeaderPopoverShow(colorFilterConfig)"
120
120
  @update:sort="handleSort"
121
121
  @reset="() => handleHeaderOperationReset(colorFilterConfig)"
@@ -159,7 +159,7 @@
159
159
  :temp-sort-type="tempSortType"
160
160
  :temp-filtered-value="tempFilteredValue"
161
161
  @update:tempSummaryList="val => { tempSummaryList = val }"
162
- @update:tempFilteredValue="(key, value) => { $set(tempFilteredValue, key, value) }"
162
+ @update:tempFilteredValue="(key, value) => { tempFilteredValue[key] = value }"
163
163
  @popover-show="() => handleOpenFilter(column)"
164
164
  @update:sort="handleSort"
165
165
  @reset="() => handleResetFilter(column)"
@@ -304,22 +304,25 @@
304
304
  </el-table>
305
305
  <div class="pagination-wrap">
306
306
  <div>共{{ total }}项数据</div>
307
- <el-pagination
308
- background
309
- layout="sizes, prev, pager, next, jumper"
310
- :page-sizes="pageSizes"
311
- :page-size.sync="pageSize"
312
- :pager-count="pagerCount"
313
- :current-page="currentPage"
314
- :total="total"
315
- @size-change="handlePageSizeChange"
316
- @current-change="handleCurrPageChange"
317
- />
307
+ <el-config-provider :locale="zhCn">
308
+ <el-pagination
309
+ background
310
+ layout="sizes, prev, pager, next, jumper"
311
+ :page-sizes="pageSizes"
312
+ v-model:page-size="pageSize"
313
+ :pager-count="pagerCount"
314
+ v-model:current-page="innerCurrentPage"
315
+ :total="total"
316
+ @size-change="handlePageSizeChange"
317
+ @current-change="handleCurrPageChange"
318
+ />
319
+ </el-config-provider>
318
320
  </div>
319
321
  </div>
320
322
  </template>
321
323
 
322
324
  <script lang="ts" setup>
325
+ import { Setting } from '@element-plus/icons-vue';
323
326
  import BizColorSelect from './features/bizColorSelect.vue';
324
327
  import BizViewSettingDialog from './features/bizViewSettingDialog.vue'
325
328
  import BizTableHeaderPopover from './features/bizTableHeaderPopover/index.vue'
@@ -327,8 +330,8 @@ import BizEditCell from './features/bizEditCell.vue'
327
330
  import BizTableOperatePopover from './features/bizTableOperatePopover.vue'
328
331
 
329
332
  import { computed, nextTick, ref, watch } from 'vue';
330
- import { Message } from 'element-ui';
331
- import omit from 'lodash/omit';
333
+ import { ElMessage as Message, ElConfigProvider } from 'element-plus';
334
+ import zhCn from 'element-plus/es/locale/lang/zh-cn';
332
335
 
333
336
  import {
334
337
  usePagination,
@@ -443,6 +446,7 @@ const props = withDefaults(defineProps<IProps>(), {
443
446
  pageSize: 10,
444
447
  pageSizes: () => [10, 15, 30, 60, 100],
445
448
  pagerCount: 11,
449
+ settingStorgeMigrationConfigs: undefined,
446
450
  });
447
451
 
448
452
  // 同defineProps一样,不支持泛型参数从外部导入
@@ -456,6 +460,15 @@ const returnAnyType = (params): any => {
456
460
  return params
457
461
  }
458
462
 
463
+ /** 简单实现 omit,排除对象中指定的 key */
464
+ const omit = <T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> => {
465
+ const result = { ...obj } as T;
466
+ for (const key of keys) {
467
+ delete result[key];
468
+ }
469
+ return result as Omit<T, K>;
470
+ };
471
+
459
472
  const actualColumns = computed(() => {
460
473
  const res: IColumnConfig[] = [];
461
474
  let cnt = leftFixedColumnCount.value;
@@ -497,6 +510,11 @@ const tableDomRef = ref<any>(null);
497
510
  const currScope = ref<any>(null);
498
511
 
499
512
  /************ 分页相关 *************/
513
+ const innerCurrentPage = ref(props.currentPage);
514
+ watch(() => props.currentPage, (val) => {
515
+ innerCurrentPage.value = val;
516
+ });
517
+
500
518
  const beforePageChange = () => {
501
519
  // searchValue.value = {};
502
520
  };
@@ -1,4 +1,4 @@
1
- import type { TableColumn, DatePicker } from 'element-ui'
1
+ import type { TableColumnCtx, DatePickerProps } from 'element-plus'
2
2
 
3
3
  export enum IEditType {
4
4
  INPUT = 'input',
@@ -44,8 +44,8 @@ export interface IFilterDoubleDatePickerBase {
44
44
 
45
45
  export interface IFilterDoubleDatePicker extends IFilterDoubleDatePickerBase {
46
46
  pickerOptions?: {
47
- start?: DatePicker['pickerOptions']
48
- end?: DatePicker['pickerOptions']
47
+ start?: DatePickerProps['disabledDate']
48
+ end?: DatePickerProps['disabledDate']
49
49
  }
50
50
  }
51
51
 
@@ -108,7 +108,7 @@ type _IColumnConfigRequired = {
108
108
  selectOptions?: any
109
109
  }
110
110
 
111
- export type IColumnConfigRequired = _IColumnConfigRequired & Partial<Omit<TableColumn, keyof _IColumnConfigRequired>>
111
+ export type IColumnConfigRequired = _IColumnConfigRequired & Partial<Omit<TableColumnCtx<any>, keyof _IColumnConfigRequired>>
112
112
 
113
113
  type IInputColumn = IColumnConfigRequired & {
114
114
  inputType: string | number;