plain-design 1.0.0-beta.17 → 1.0.0-beta.19

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plain-design",
3
- "version": "1.0.0-beta.17",
3
+ "version": "1.0.0-beta.19",
4
4
  "description": "",
5
5
  "main": "dist/plain-design.min.js",
6
6
  "module": "dist/plain-design.commonjs.min.js",
@@ -68,7 +68,7 @@
68
68
  "fork-ts-checker-webpack-plugin": "^6.2.4",
69
69
  "mini-css-extract-plugin": "^1.4.1",
70
70
  "mockjs": "^1.1.0",
71
- "plain-design-composition": "^0.0.169",
71
+ "plain-design-composition": "^0.0.170-beta.1",
72
72
  "postcss": "^8.2.13",
73
73
  "postcss-loader": "^4.2.0",
74
74
  "qs": "^6.10.1",
@@ -161,6 +161,7 @@ export const useTableOptionMethods = AutoModule.createRegistration((
161
161
  }
162
162
  };
163
163
  const reload = async (reloadParam?: { size?: number }) => {
164
+ if (!state.isInit) {state.isInit = true;}
164
165
  await load({
165
166
  page: 1,
166
167
  size: reloadParam?.size,
@@ -488,6 +489,7 @@ export const useTableOptionMethods = AutoModule.createRegistration((
488
489
  })();
489
490
 
490
491
  hooks.onTableSetup.use(() => {
492
+ if (state.isInit) {return;}
491
493
  if (config.loadOnStart !== false) {pageMethods.reload();}
492
494
  });
493
495
 
@@ -14,6 +14,7 @@ declare module '../utils/TableOption.space' {
14
14
 
15
15
  export const useTableOptionState = AutoModule.createRegistration(({ config, hooks }) => {
16
16
  const state: TableOptionSpace.iTableOptionState = reactive({
17
+ isInit: false,
17
18
  getTable: () => null,
18
19
  getAutoTable: () => null,
19
20
  list: [],
@@ -118,6 +118,7 @@ export namespace TableOptionSpace {
118
118
  * @date 2023/2/7 9:47
119
119
  */
120
120
  export interface iTableOptionState {
121
+ isInit: boolean,
121
122
  getTable: () => null | iTableRefer,
122
123
  getAutoTable: () => null | iAutoTableRefer;
123
124
  list: PlainObject[],
@@ -34,6 +34,7 @@ export const RenderTreeNode = designComponent({
34
34
  getComponentCls('tree-node'),
35
35
  {
36
36
  'tree-node-current': tree.state.current === props.treeNode.key,
37
+ 'tree-node-lead': isLeaf.value,
37
38
  'tree-node-single-check': !props.multiple && props.treeNode.checkStatus() === CheckboxStatus.check,
38
39
  'tree-node-multi-check': props.multiple && props.treeNode.checkStatus() === CheckboxStatus.check,
39
40
  'tree-node-disable-check': !props.treeNode.isCheckAble(),
@@ -42,6 +43,7 @@ export const RenderTreeNode = designComponent({
42
43
 
43
44
  const checkStatus = cacheComputed(() => props.treeNode.checkStatus());
44
45
  const isExpanded = cacheComputed(() => props.treeNode.isExpanded());
46
+ const isLeaf = cacheComputed(() => props.treeNode.isLeaf());
45
47
 
46
48
  const connectorClassesList = computed(() => {
47
49
 
@@ -193,9 +193,16 @@
193
193
  }
194
194
 
195
195
  &.tree-expander-cover {
196
+ @include comp(tree-node) {
197
+ &:not(.tree-node-lead) {
198
+ .tree-node-expander {
199
+ background-color: plv(secondary-2);
200
+ }
201
+ }
202
+ }
203
+
196
204
  .tree-node-expander {
197
205
  border-radius: 2px;
198
- background-color: plv(secondary-2);
199
206
  transform: scale(0.75);
200
207
  }
201
208
  }
@@ -32,7 +32,7 @@ export const TreePropsOptions = {
32
32
  customDraggier: { type: Boolean as PropType<iTreeProps["customDraggier"]> },
33
33
  isAllowDraggable: { type: Function as PropType<iTreeProps["isAllowDraggable"]> },
34
34
  isAllowDroppable: { type: Function as PropType<iTreeProps["isAllowDroppable"]> },
35
- leafIcon: { type: String as PropType<iTreeProps["leafIcon"]>, default: 'pi-file' as string },
35
+ leafIcon: { type: String as PropType<iTreeProps["leafIcon"]>, default: 'pi-drive-file' as string },
36
36
  folderCollapseIcon: { type: String as PropType<iTreeProps["folderCollapseIcon"]>, default: 'pi-caret-right' as string },
37
37
  folderExpandIcon: { type: String as PropType<iTreeProps["folderExpandIcon"]>, default: 'pi-down' as string },
38
38
  expanderCover: { type: Boolean as PropType<iTreeProps["expanderCover"]>, default: true },
@@ -69,7 +69,7 @@ export const TreeNodeWithMenu = designComponent({
69
69
  v-slots={{
70
70
  default: () => btn,
71
71
  popper: () => (
72
- props.dropdownOptions!.map((option, index) => {
72
+ props.dropdownOptions?.map((option, index) => {
73
73
  const { renderDefault, renderContent, ...leftOption } = option;
74
74
  const vSlots = {} as any;
75
75
  if (!!renderDefault) {vSlots.default = () => renderDefault();}
@@ -10,6 +10,7 @@ import Icon from "../Icon";
10
10
  import {ThemeStatusIcons} from "../Application/theme/theme.utils";
11
11
  import Input from "../Input";
12
12
  import InputNumber from "../InputNumber";
13
+ import $message from "../$message";
13
14
 
14
15
  /**
15
16
  * 弹框服务单个组件
@@ -133,7 +134,15 @@ export const DialogService = createApplicationServiceComponent<iDialogServiceOpt
133
134
  const dialogProps = { ...targetOption.value.dialogProps };
134
135
 
135
136
  /*wrap handleConfirm*/
136
- dialogProps.handleConfirm = async (close: () => void) => targetOption.value.customOption.handleConfirm?.({ close, editValue: state.editValue });
137
+ dialogProps.handleConfirm = async (close: () => void) => {
138
+ if (!!targetOption.value.customOption.editRequired) {
139
+ if (state.editValue == null || !state.editValue.trim().length) {
140
+ $message.warn('不能为空!');
141
+ return false;
142
+ }
143
+ }
144
+ return targetOption.value.customOption.handleConfirm?.({ close, editValue: state.editValue });
145
+ };
137
146
 
138
147
  /*wrap onClose*/
139
148
  dialogProps.onClose = () => onClose.exec(undefined);
@@ -165,6 +174,7 @@ export const DialogService = createApplicationServiceComponent<iDialogServiceOpt
165
174
  v-model={state.editValue}
166
175
  readonly={option.editReadonly}
167
176
  onEnter={onEnter}
177
+ status={option.editRequired ? 'warn' : undefined}
168
178
  />
169
179
  );
170
180
  break;
@@ -176,6 +186,7 @@ export const DialogService = createApplicationServiceComponent<iDialogServiceOpt
176
186
  v-model={state.editValue}
177
187
  readonly={option.editReadonly}
178
188
  onEnter={onEnter}
189
+ status={option.editRequired ? 'warn' : undefined}
179
190
  />
180
191
  );
181
192
  break;
@@ -189,6 +200,7 @@ export const DialogService = createApplicationServiceComponent<iDialogServiceOpt
189
200
  v-model={state.editValue}
190
201
  readonly={option.editReadonly}
191
202
  onEnter={onEnter}
203
+ status={option.editRequired ? 'warn' : undefined}
192
204
  />
193
205
  );
194
206
  break;
@@ -74,6 +74,10 @@ export const useEdit = useFunctionWrapper(
74
74
  }
75
75
  }
76
76
 
77
+ onBeforeUnmount(() => {
78
+ editComputed.effect.stop();
79
+ });
80
+
77
81
  return {
78
82
  editState,
79
83
  editComputed,
@@ -1,4 +1,4 @@
1
- import {computed, inject, PropType, provide} from "plain-design-composition";
1
+ import {computed, inject, onBeforeUnmount, PropType, provide} from "plain-design-composition";
2
2
  import {useFunctionWrapper} from "./useFunctionWrapper";
3
3
  import {createEnum} from "plain-utils/utils/createEnum";
4
4
  import {ApplicationConfigurationProvider} from "../components/Application/utils/application.utils";
@@ -62,6 +62,14 @@ export const useStyle = useFunctionWrapper('style', (ctx, option: UseStyleOption
62
62
 
63
63
  provide(USE_STYLE_PROVIDER, styleComputed);
64
64
 
65
+ onBeforeUnmount(() => {
66
+ setTimeout(() => {
67
+ (styleComputed.value as any).ctx = null;
68
+ (styleComputed.value as any).parent = null;
69
+ styleComputed.effect.stop();
70
+ });
71
+ });
72
+
65
73
  return { styleComputed };
66
74
  });
67
75
 
@@ -1,14 +1,19 @@
1
1
  import {designPage} from "plain-design-composition";
2
2
  import {useTableOption} from "../../../module/useTableOption";
3
3
  import {AutoTable, Plc, PlcDate, PlcInput, PlcNumber, PlcSelect, SelectOption} from "../../../../packages";
4
+ import TableOptionSpace from "../../../../packages/components/TableOptionSpace";
5
+
6
+ let option: TableOptionSpace.iTableOption;
4
7
 
5
8
  export const demo1 = designPage(() => {
6
9
 
7
- const option = useTableOption({
8
- url: '/demo',
9
- showRowsMode: 'auto',
10
- fill: true,
11
- });
10
+ if (!option) {
11
+ option = useTableOption({
12
+ url: '/demo',
13
+ showRowsMode: 'auto',
14
+ fill: true,
15
+ });
16
+ }
12
17
 
13
18
 
14
19
  const onClick = () => {
@@ -195,6 +195,7 @@ export const demoInput = designPage(() => {
195
195
  <Button label={'input'} onClick={() => $dialog({
196
196
  editType: 'input',
197
197
  editValue: inputValue,
198
+ editRequired: true,
198
199
  handleConfirm: ({ editValue }) => {
199
200
  inputValue = editValue;
200
201
  $message(String(editValue));