sun-card-design 1.1.48 → 1.2.1

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 (43) hide show
  1. package/README.md +20 -2
  2. package/dist/mobile/sun-card-design-mobile.es18.js +5 -4
  3. package/dist/mobile/sun-card-design-mobile.es21.js +2 -2
  4. package/dist/mobile/sun-card-design-mobile.es23.js +2 -2
  5. package/dist/mobile/sun-card-design-mobile.es25.js +6 -6
  6. package/dist/mobile/sun-card-design-mobile.es32.js +4 -2
  7. package/dist/mobile/sun-card-design-mobile.es55.js +226 -0
  8. package/dist/mobile/sun-card-design-mobile.es56.js +64 -0
  9. package/dist/mobile/sun-card-design-mobile.es57.js +65 -204
  10. package/dist/mobile/sun-card-design-mobile.es58.js +81 -47
  11. package/dist/mobile/sun-card-design-mobile.es59.js +123 -48
  12. package/dist/mobile/sun-card-design-mobile.es6.js +2 -2
  13. package/dist/mobile/sun-card-design-mobile.es60.js +116 -52
  14. package/dist/mobile/sun-card-design-mobile.es61.js +116 -52
  15. package/dist/pc/sun-card-design-pc.es18.js +5 -4
  16. package/dist/pc/sun-card-design-pc.es21.js +2 -2
  17. package/dist/pc/sun-card-design-pc.es23.js +2 -2
  18. package/dist/pc/sun-card-design-pc.es25.js +6 -6
  19. package/dist/pc/sun-card-design-pc.es32.js +4 -2
  20. package/dist/pc/sun-card-design-pc.es55.js +226 -0
  21. package/dist/pc/sun-card-design-pc.es56.js +45 -207
  22. package/dist/pc/sun-card-design-pc.es57.js +70 -47
  23. package/dist/pc/sun-card-design-pc.es58.js +20 -9
  24. package/dist/pc/sun-card-design-pc.es59.js +116 -52
  25. package/dist/pc/sun-card-design-pc.es6.js +2 -2
  26. package/dist/pc/sun-card-design-pc.es60.js +116 -52
  27. package/dist/public/sun-card-design.css +1 -1
  28. package/package.json +3 -2
  29. package/dist/assets/cardDesigner.png +0 -0
  30. package/dist/assets/img.png +0 -0
  31. package/dist/assets/pic1.jpg +0 -0
  32. package/dist/assets/picsl1.jpg +0 -0
  33. package/dist/assets/song.mp3 +0 -0
  34. package/dist/assets/tmCard1.jpg +0 -0
  35. package/dist/assets/tmCard2.jpg +0 -0
  36. package/dist/assets/tmList1.jpg +0 -0
  37. package/dist/assets/video.mp4 +0 -0
  38. package/dist/mobile/sun-card-design-mobile.es51.js +0 -4
  39. package/dist/mobile/sun-card-design-mobile.es62.js +0 -98
  40. package/dist/pc/sun-card-design-pc.es51.js +0 -4
  41. package/dist/pc/sun-card-design-pc.es61.js +0 -98
  42. /package/dist/mobile/{sun-card-design-mobile.es66.js → sun-card-design-mobile.es65.js} +0 -0
  43. /package/dist/pc/{sun-card-design-pc.es66.js → sun-card-design-pc.es65.js} +0 -0
@@ -0,0 +1,226 @@
1
+ import { ref, computed, resolveComponent, createElementBlock, openBlock, normalizeStyle, createCommentVNode, createVNode, createElementVNode, withModifiers, withCtx, createTextVNode, h, unref, toDisplayString, Fragment, renderList } from "vue";
2
+ import { UploadOutlined } from "@ant-design/icons-vue";
3
+ import { message } from "ant-design-vue";
4
+ /* empty css */
5
+ import _export_sfc from "./sun-card-design-pc.es28.js";
6
+ const _hoisted_1 = {
7
+ key: 0,
8
+ class: "upload-progress"
9
+ };
10
+ const _hoisted_2 = { class: "progress-text-container" };
11
+ const _hoisted_3 = {
12
+ key: 1,
13
+ class: "file-list"
14
+ };
15
+ const _hoisted_4 = { class: "file-item-name" };
16
+ const _sfc_main = {
17
+ __name: "uploadComp",
18
+ props: ["record"],
19
+ setup(__props) {
20
+ const props = __props;
21
+ const fileList = ref([]);
22
+ const uploadControllers = ref(/* @__PURE__ */ new Map());
23
+ const currentUploadingUid = ref(null);
24
+ const isUploading = computed(() => !!currentUploadingUid.value);
25
+ const buttonColor = computed(() => {
26
+ return props.record.options?.style?.buttonColor;
27
+ });
28
+ const buttonSize = computed(() => {
29
+ return props.record.options?.style?.buttonSize;
30
+ });
31
+ const acceptTypes = computed(() => {
32
+ if (!props.record.options?.format || !Array.isArray(props.record.options.format) || props.record.options.format.length === 0) {
33
+ return "";
34
+ }
35
+ const formatMap = {
36
+ pdf: ".pdf",
37
+ word: ".doc,.docx",
38
+ excle: ".xls,.xlsx",
39
+ txt: ".txt",
40
+ ppt: ".ppt,.pptx"
41
+ };
42
+ return props.record.options.format.map((format) => formatMap[format] || `.${format}`).join(",");
43
+ });
44
+ const beforeUpload = (file) => {
45
+ const isValidType = checkFileType(file);
46
+ if (!isValidType) {
47
+ const allowedFormats = props.record.options?.format || [];
48
+ const formatNames = {
49
+ pdf: "PDF",
50
+ word: "Word",
51
+ excle: "Excel",
52
+ txt: "TXT",
53
+ ppt: "PPT"
54
+ };
55
+ const formatText = allowedFormats.map((f) => formatNames[f] || f.toUpperCase()).join("、");
56
+ if (formatText) {
57
+ message.error(`只支持 ${formatText} 格式的文件`);
58
+ } else {
59
+ message.error("请先配置允许的文件格式");
60
+ }
61
+ return false;
62
+ }
63
+ return true;
64
+ };
65
+ const checkFileType = (file) => {
66
+ if (!props.record.options?.format || !Array.isArray(props.record.options.format) || props.record.options.format.length === 0) {
67
+ return false;
68
+ }
69
+ const fileName = (file.name || file.fileName || "").toLowerCase();
70
+ if (!fileName) {
71
+ return false;
72
+ }
73
+ const allowedFormats = props.record.options.format;
74
+ const formatExtensions = {
75
+ pdf: [".pdf"],
76
+ word: [".doc", ".docx"],
77
+ excle: [".xls", ".xlsx"],
78
+ txt: [".txt"],
79
+ ppt: [".ppt", ".pptx"]
80
+ };
81
+ const allowedExtensions = allowedFormats.reduce((exts, format) => {
82
+ if (formatExtensions[format]) {
83
+ exts.push(...formatExtensions[format]);
84
+ }
85
+ return exts;
86
+ }, []);
87
+ if (allowedExtensions.length === 0) {
88
+ return false;
89
+ }
90
+ const isValid = allowedExtensions.some((ext) => fileName.endsWith(ext));
91
+ console.log("文件类型检查:", {
92
+ fileName,
93
+ allowedFormats,
94
+ allowedExtensions,
95
+ isValid
96
+ });
97
+ return isValid;
98
+ };
99
+ const customRequest = (options) => {
100
+ const { file, onSuccess, onProgress } = options;
101
+ ({ uid: file.uid, name: file.name });
102
+ currentUploadingUid.value = file.uid;
103
+ let progress = 0;
104
+ const timer = setInterval(() => {
105
+ progress = Math.min(progress + 8 + Math.random() * 6, 99);
106
+ onProgress({ percent: progress });
107
+ }, 200);
108
+ const doneTimer = setTimeout(() => {
109
+ clearInterval(timer);
110
+ uploadControllers.value.delete(file.uid);
111
+ fileList.value.push({ uid: file.uid, name: file.name });
112
+ message.success("上传成功");
113
+ onSuccess({ url: URL.createObjectURL(file), name: file.name });
114
+ if (currentUploadingUid.value === file.uid) currentUploadingUid.value = null;
115
+ }, 2e3);
116
+ uploadControllers.value.set(file.uid, { timer, doneTimer });
117
+ };
118
+ const onCancelUpload = () => {
119
+ const uid = currentUploadingUid.value;
120
+ if (!uid) return;
121
+ const ctrl = uploadControllers.value.get(uid);
122
+ if (ctrl) {
123
+ if (ctrl.timer) clearInterval(ctrl.timer);
124
+ if (ctrl.doneTimer) clearTimeout(ctrl.doneTimer);
125
+ uploadControllers.value.delete(uid);
126
+ }
127
+ const item = fileList.value.find((f) => f.uid === uid);
128
+ if (item) {
129
+ item.status = "cancelled";
130
+ item.percent = 0;
131
+ }
132
+ currentUploadingUid.value = null;
133
+ message.info("已取消上传");
134
+ };
135
+ const removeFile = (uid) => {
136
+ const item = fileList.value.find((f) => f.uid === uid);
137
+ if (item && item.status === "uploading") {
138
+ currentUploadingUid.value = uid;
139
+ onCancelUpload();
140
+ }
141
+ fileList.value = fileList.value.filter((f) => f.uid !== uid);
142
+ };
143
+ return (_ctx, _cache) => {
144
+ const _component_a_button = resolveComponent("a-button");
145
+ const _component_a_upload = resolveComponent("a-upload");
146
+ return openBlock(), createElementBlock("div", {
147
+ class: "upload-comp",
148
+ style: normalizeStyle({ padding: `${props.record.options?.style?.tbPadding || 0}px ${props.record.options?.style?.lrPadding || 0}px` })
149
+ }, [
150
+ isUploading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
151
+ _cache[2] || (_cache[2] = createElementVNode("div", { class: "spinner" }, null, -1)),
152
+ createElementVNode("div", _hoisted_2, [
153
+ _cache[1] || (_cache[1] = createElementVNode("div", { class: "progress-text" }, "文件导入中...", -1)),
154
+ createVNode(_component_a_button, {
155
+ class: "cancel-btn",
156
+ onClick: withModifiers(onCancelUpload, ["stop"]),
157
+ size: "small"
158
+ }, {
159
+ default: withCtx(() => [..._cache[0] || (_cache[0] = [
160
+ createTextVNode("取消", -1)
161
+ ])]),
162
+ _: 1
163
+ })
164
+ ])
165
+ ])) : createCommentVNode("", true),
166
+ createVNode(_component_a_upload, {
167
+ accept: acceptTypes.value,
168
+ multiple: true,
169
+ "before-upload": beforeUpload,
170
+ "custom-request": customRequest,
171
+ "show-upload-list": false,
172
+ disabled: false
173
+ }, {
174
+ default: withCtx(() => [
175
+ createVNode(_component_a_button, {
176
+ type: "primary",
177
+ style: normalizeStyle({
178
+ backgroundColor: buttonColor.value,
179
+ borderColor: buttonColor.value,
180
+ fontSize: buttonSize.value + "px",
181
+ height: "auto",
182
+ padding: "4px 12px",
183
+ minHeight: "28px"
184
+ }),
185
+ icon: h(unref(UploadOutlined))
186
+ }, {
187
+ icon: withCtx(() => [
188
+ createVNode(unref(UploadOutlined))
189
+ ]),
190
+ default: withCtx(() => [
191
+ createTextVNode(" " + toDisplayString(props.record.options?.style?.buttonText), 1)
192
+ ]),
193
+ _: 1
194
+ }, 8, ["style", "icon"])
195
+ ]),
196
+ _: 1
197
+ }, 8, ["accept"]),
198
+ fileList.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_3, [
199
+ (openBlock(true), createElementBlock(Fragment, null, renderList(fileList.value, (file) => {
200
+ return openBlock(), createElementBlock("div", {
201
+ class: "file-item",
202
+ key: file.uid
203
+ }, [
204
+ createElementVNode("span", _hoisted_4, toDisplayString(file.name), 1),
205
+ createVNode(_component_a_button, {
206
+ type: "link",
207
+ danger: "",
208
+ size: "small",
209
+ onClick: withModifiers(($event) => removeFile(file.uid), ["stop"])
210
+ }, {
211
+ default: withCtx(() => [..._cache[3] || (_cache[3] = [
212
+ createTextVNode("删除", -1)
213
+ ])]),
214
+ _: 1
215
+ }, 8, ["onClick"])
216
+ ]);
217
+ }), 128))
218
+ ])) : createCommentVNode("", true)
219
+ ], 4);
220
+ };
221
+ }
222
+ };
223
+ const Upload = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4363e2fe"]]);
224
+ export {
225
+ Upload as default
226
+ };
@@ -1,226 +1,64 @@
1
- import { ref, computed, resolveComponent, createElementBlock, openBlock, normalizeStyle, createCommentVNode, createVNode, createElementVNode, withModifiers, withCtx, createTextVNode, h, unref, toDisplayString, Fragment, renderList } from "vue";
2
- import { UploadOutlined } from "@ant-design/icons-vue";
3
- import { message } from "ant-design-vue";
1
+ import { markRaw, defineComponent, h, computed, createElementBlock, openBlock, normalizeStyle, createElementVNode, createBlock, resolveDynamicComponent } from "vue";
2
+ import * as Icons from "@ant-design/icons-vue";
3
+ import { customIcon } from "./sun-card-design-pc.es65.js";
4
4
  /* empty css */
5
5
  import _export_sfc from "./sun-card-design-pc.es28.js";
6
- const _hoisted_1 = {
7
- key: 0,
8
- class: "upload-progress"
9
- };
10
- const _hoisted_2 = { class: "progress-text-container" };
11
- const _hoisted_3 = {
12
- key: 1,
13
- class: "file-list"
14
- };
15
- const _hoisted_4 = { class: "file-item-name" };
16
6
  const _sfc_main = {
17
- __name: "uploadComp",
7
+ __name: "sunIconComp",
18
8
  props: ["record"],
19
- setup(__props) {
9
+ emits: ["clickEvent"],
10
+ setup(__props, { emit: __emit }) {
20
11
  const props = __props;
21
- const fileList = ref([]);
22
- const uploadControllers = ref(/* @__PURE__ */ new Map());
23
- const currentUploadingUid = ref(null);
24
- const isUploading = computed(() => !!currentUploadingUid.value);
25
- const buttonColor = computed(() => {
26
- return props.record.options?.style?.buttonColor;
12
+ const emit = __emit;
13
+ const customIconComponents = Object.entries(customIcon || {}).reduce((acc, [key, svg]) => {
14
+ const normalized = svg.replace(/fill="#000000"/gi, 'fill="currentColor"');
15
+ acc[key] = markRaw(
16
+ defineComponent({
17
+ name: `CustomIcon${key}`,
18
+ setup() {
19
+ return () => h("span", { innerHTML: normalized });
20
+ }
21
+ })
22
+ );
23
+ return acc;
24
+ }, {});
25
+ const iconMap = { ...Icons, ...customIconComponents };
26
+ const iconComponent = computed(() => {
27
+ const name = props?.record?.options?.style?.iconName || "CheckCircleOutlined";
28
+ return iconMap[name] || Icons["CheckCircleOutlined"];
27
29
  });
28
- const buttonSize = computed(() => {
29
- return props.record.options?.style?.buttonSize;
30
- });
31
- const acceptTypes = computed(() => {
32
- if (!props.record.options?.format || !Array.isArray(props.record.options.format) || props.record.options.format.length === 0) {
33
- return "";
34
- }
35
- const formatMap = {
36
- pdf: ".pdf",
37
- word: ".doc,.docx",
38
- excle: ".xls,.xlsx",
39
- txt: ".txt",
40
- ppt: ".ppt,.pptx"
30
+ const iconStyle = computed(() => {
31
+ const color = props?.record?.options?.style?.color || "#000000";
32
+ const justifyContent = props?.record?.options?.style?.justifyContent || "flex-start";
33
+ return {
34
+ color,
35
+ display: "flex",
36
+ justifyContent,
37
+ alignItems: "center",
38
+ width: "100%"
41
39
  };
42
- return props.record.options.format.map((format) => formatMap[format] || `.${format}`).join(",");
43
40
  });
44
- const beforeUpload = (file) => {
45
- const isValidType = checkFileType(file);
46
- if (!isValidType) {
47
- const allowedFormats = props.record.options?.format || [];
48
- const formatNames = {
49
- pdf: "PDF",
50
- word: "Word",
51
- excle: "Excel",
52
- txt: "TXT",
53
- ppt: "PPT"
54
- };
55
- const formatText = allowedFormats.map((f) => formatNames[f] || f.toUpperCase()).join("、");
56
- if (formatText) {
57
- message.error(`只支持 ${formatText} 格式的文件`);
58
- } else {
59
- message.error("请先配置允许的文件格式");
60
- }
61
- return false;
62
- }
63
- return true;
64
- };
65
- const checkFileType = (file) => {
66
- if (!props.record.options?.format || !Array.isArray(props.record.options.format) || props.record.options.format.length === 0) {
67
- return false;
68
- }
69
- const fileName = (file.name || file.fileName || "").toLowerCase();
70
- if (!fileName) {
71
- return false;
72
- }
73
- const allowedFormats = props.record.options.format;
74
- const formatExtensions = {
75
- pdf: [".pdf"],
76
- word: [".doc", ".docx"],
77
- excle: [".xls", ".xlsx"],
78
- txt: [".txt"],
79
- ppt: [".ppt", ".pptx"]
80
- };
81
- const allowedExtensions = allowedFormats.reduce((exts, format) => {
82
- if (formatExtensions[format]) {
83
- exts.push(...formatExtensions[format]);
84
- }
85
- return exts;
86
- }, []);
87
- if (allowedExtensions.length === 0) {
88
- return false;
89
- }
90
- const isValid = allowedExtensions.some((ext) => fileName.endsWith(ext));
91
- console.log("文件类型检查:", {
92
- fileName,
93
- allowedFormats,
94
- allowedExtensions,
95
- isValid
96
- });
97
- return isValid;
98
- };
99
- const customRequest = (options) => {
100
- const { file, onSuccess, onProgress } = options;
101
- ({ uid: file.uid, name: file.name });
102
- currentUploadingUid.value = file.uid;
103
- let progress = 0;
104
- const timer = setInterval(() => {
105
- progress = Math.min(progress + 8 + Math.random() * 6, 99);
106
- onProgress({ percent: progress });
107
- }, 200);
108
- const doneTimer = setTimeout(() => {
109
- clearInterval(timer);
110
- uploadControllers.value.delete(file.uid);
111
- fileList.value.push({ uid: file.uid, name: file.name });
112
- message.success("上传成功");
113
- onSuccess({ url: URL.createObjectURL(file), name: file.name });
114
- if (currentUploadingUid.value === file.uid) currentUploadingUid.value = null;
115
- }, 2e3);
116
- uploadControllers.value.set(file.uid, { timer, doneTimer });
117
- };
118
- const onCancelUpload = () => {
119
- const uid = currentUploadingUid.value;
120
- if (!uid) return;
121
- const ctrl = uploadControllers.value.get(uid);
122
- if (ctrl) {
123
- if (ctrl.timer) clearInterval(ctrl.timer);
124
- if (ctrl.doneTimer) clearTimeout(ctrl.doneTimer);
125
- uploadControllers.value.delete(uid);
41
+ function onClick() {
42
+ if (props.record.options.clickEvent) {
43
+ emit("clickEvent", props.record);
126
44
  }
127
- const item = fileList.value.find((f) => f.uid === uid);
128
- if (item) {
129
- item.status = "cancelled";
130
- item.percent = 0;
131
- }
132
- currentUploadingUid.value = null;
133
- message.info("已取消上传");
134
- };
135
- const removeFile = (uid) => {
136
- const item = fileList.value.find((f) => f.uid === uid);
137
- if (item && item.status === "uploading") {
138
- currentUploadingUid.value = uid;
139
- onCancelUpload();
140
- }
141
- fileList.value = fileList.value.filter((f) => f.uid !== uid);
142
- };
45
+ }
143
46
  return (_ctx, _cache) => {
144
- const _component_a_button = resolveComponent("a-button");
145
- const _component_a_upload = resolveComponent("a-upload");
146
47
  return openBlock(), createElementBlock("div", {
147
- class: "upload-comp",
48
+ class: "main-icon",
148
49
  style: normalizeStyle({ padding: `${props.record.options?.style?.tbPadding || 0}px ${props.record.options?.style?.lrPadding || 0}px` })
149
50
  }, [
150
- isUploading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
151
- _cache[2] || (_cache[2] = createElementVNode("div", { class: "spinner" }, null, -1)),
152
- createElementVNode("div", _hoisted_2, [
153
- _cache[1] || (_cache[1] = createElementVNode("div", { class: "progress-text" }, "文件导入中...", -1)),
154
- createVNode(_component_a_button, {
155
- class: "cancel-btn",
156
- onClick: withModifiers(onCancelUpload, ["stop"]),
157
- size: "small"
158
- }, {
159
- default: withCtx(() => [..._cache[0] || (_cache[0] = [
160
- createTextVNode("取消", -1)
161
- ])]),
162
- _: 1
163
- })
164
- ])
165
- ])) : createCommentVNode("", true),
166
- createVNode(_component_a_upload, {
167
- accept: acceptTypes.value,
168
- multiple: true,
169
- "before-upload": beforeUpload,
170
- "custom-request": customRequest,
171
- "show-upload-list": false,
172
- disabled: false
173
- }, {
174
- default: withCtx(() => [
175
- createVNode(_component_a_button, {
176
- type: "primary",
177
- style: normalizeStyle({
178
- backgroundColor: buttonColor.value,
179
- borderColor: buttonColor.value,
180
- fontSize: buttonSize.value + "px",
181
- height: "auto",
182
- padding: "4px 12px",
183
- minHeight: "28px"
184
- }),
185
- icon: h(unref(UploadOutlined))
186
- }, {
187
- icon: withCtx(() => [
188
- createVNode(unref(UploadOutlined))
189
- ]),
190
- default: withCtx(() => [
191
- createTextVNode(" " + toDisplayString(props.record.options?.style?.buttonText), 1)
192
- ]),
193
- _: 1
194
- }, 8, ["style", "icon"])
195
- ]),
196
- _: 1
197
- }, 8, ["accept"]),
198
- fileList.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_3, [
199
- (openBlock(true), createElementBlock(Fragment, null, renderList(fileList.value, (file) => {
200
- return openBlock(), createElementBlock("div", {
201
- class: "file-item",
202
- key: file.uid
203
- }, [
204
- createElementVNode("span", _hoisted_4, toDisplayString(file.name), 1),
205
- createVNode(_component_a_button, {
206
- type: "link",
207
- danger: "",
208
- size: "small",
209
- onClick: withModifiers(($event) => removeFile(file.uid), ["stop"])
210
- }, {
211
- default: withCtx(() => [..._cache[3] || (_cache[3] = [
212
- createTextVNode("删除", -1)
213
- ])]),
214
- _: 1
215
- }, 8, ["onClick"])
216
- ]);
217
- }), 128))
218
- ])) : createCommentVNode("", true)
51
+ createElementVNode("span", {
52
+ style: normalizeStyle(iconStyle.value),
53
+ onClick
54
+ }, [
55
+ (openBlock(), createBlock(resolveDynamicComponent(iconComponent.value), { style: { "height": "18px", "width": "18px" } }))
56
+ ], 4)
219
57
  ], 4);
220
58
  };
221
59
  }
222
60
  };
223
- const Upload = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4363e2fe"]]);
61
+ const SunIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4b920fa7"]]);
224
62
  export {
225
- Upload as default
63
+ SunIcon as default
226
64
  };
@@ -1,64 +1,87 @@
1
- import { markRaw, defineComponent, h, computed, createElementBlock, openBlock, normalizeStyle, createElementVNode, createBlock, resolveDynamicComponent } from "vue";
2
- import * as Icons from "@ant-design/icons-vue";
3
- import { customIcon } from "./sun-card-design-pc.es66.js";
1
+ import { resolveComponent, createElementBlock, openBlock, normalizeStyle, createVNode, withCtx, Fragment, renderList, createBlock, createElementVNode } from "vue";
2
+ import FormItem from "./sun-card-design-pc.es25.js";
4
3
  /* empty css */
5
4
  import _export_sfc from "./sun-card-design-pc.es28.js";
6
5
  const _sfc_main = {
7
- __name: "sunIconComp",
8
- props: ["record"],
9
- emits: ["clickEvent"],
6
+ __name: "singleColumn",
7
+ props: ["record", "recordData", "columnsIndex"],
8
+ emits: ["clickEvent", "clickColumnsEvent", "fileUpdateEvent"],
10
9
  setup(__props, { emit: __emit }) {
11
10
  const props = __props;
12
11
  const emit = __emit;
13
- const customIconComponents = Object.entries(customIcon || {}).reduce((acc, [key, svg]) => {
14
- const normalized = svg.replace(/fill="#000000"/gi, 'fill="currentColor"');
15
- acc[key] = markRaw(
16
- defineComponent({
17
- name: `CustomIcon${key}`,
18
- setup() {
19
- return () => h("span", { innerHTML: normalized });
20
- }
21
- })
22
- );
23
- return acc;
24
- }, {});
25
- const iconMap = { ...Icons, ...customIconComponents };
26
- const iconComponent = computed(() => {
27
- const name = props?.record?.options?.style?.iconName || "CheckCircleOutlined";
28
- return iconMap[name] || Icons["CheckCircleOutlined"];
29
- });
30
- const iconStyle = computed(() => {
31
- const color = props?.record?.options?.style?.color || "#000000";
32
- const justifyContent = props?.record?.options?.style?.justifyContent || "flex-start";
33
- return {
34
- color,
35
- display: "flex",
36
- justifyContent,
37
- alignItems: "center",
38
- width: "100%"
39
- };
40
- });
41
- function onClick() {
42
- if (props.record.options.clickEvent) {
43
- emit("clickEvent", props.record);
12
+ const onClick = (record) => {
13
+ emit("clickEvent", record);
14
+ };
15
+ const onUpdate = (record) => {
16
+ emit("fileUpdateEvent", record);
17
+ };
18
+ const onClickColumns = (record) => {
19
+ if (!record.options.clickEvent) return;
20
+ emit("clickColumnsEvent", record);
21
+ };
22
+ const getBackground = () => {
23
+ if (isGradientColor(props.recordData.config.background)) {
24
+ return "none";
44
25
  }
26
+ return props.recordData.config.background;
27
+ };
28
+ function isGradientColor(color) {
29
+ return /^(linear|radial)-gradient\(.*\)$/.test(color);
45
30
  }
46
31
  return (_ctx, _cache) => {
32
+ const _component_a_col = resolveComponent("a-col");
33
+ const _component_a_row = resolveComponent("a-row");
47
34
  return openBlock(), createElementBlock("div", {
48
- class: "main-icon",
49
- style: normalizeStyle({ padding: `${props.record.options?.style?.tbPadding || 0}px ${props.record.options?.style?.lrPadding || 0}px` })
35
+ class: "main-singleColumn",
36
+ style: normalizeStyle({ background: getBackground() })
50
37
  }, [
51
- createElementVNode("span", {
52
- style: normalizeStyle(iconStyle.value),
53
- onClick
54
- }, [
55
- (openBlock(), createBlock(resolveDynamicComponent(iconComponent.value), { style: { "height": "18px", "width": "18px" } }))
56
- ], 4)
38
+ createVNode(_component_a_row, {
39
+ gutter: [props.record.options.style.lrGutter, props.record.options.style.tbGutter]
40
+ }, {
41
+ default: withCtx(() => [
42
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.record.columns, (item, index) => {
43
+ return openBlock(), createBlock(_component_a_col, {
44
+ key: index.toString(),
45
+ flex: props.record.columns[index]?.flex,
46
+ span: 24
47
+ }, {
48
+ default: withCtx(() => [
49
+ createElementVNode("div", {
50
+ class: "box",
51
+ style: normalizeStyle({
52
+ background: props.record.options.style?.background,
53
+ border: props.record.options.style?.borderColor === "none" ? "none" : "1px solid " + (props.record.options.style?.borderColor || "transparent"),
54
+ borderRadius: props.record.options.style?.borderRadius + "px",
55
+ padding: props.record.options.style?.tbPadding + "px " + props.record.options.style?.lrPadding + "px",
56
+ justifyContent: props.record.options.style?.alignItems || "start",
57
+ minHeight: props.record.options.style?.minHeight + "px" || "48px",
58
+ boxShadow: props.record.options.style?.boxShadow || null
59
+ })
60
+ }, [
61
+ (openBlock(true), createElementBlock(Fragment, null, renderList(item.list, (element, index2) => {
62
+ return openBlock(), createBlock(FormItem, {
63
+ record: element,
64
+ key: index2,
65
+ recordData: props.recordData,
66
+ columnsIndex: props.columnsIndex,
67
+ onClickEvent: onClick,
68
+ onFileUpdateEvent: onUpdate,
69
+ onClickColumnsEvent: onClickColumns
70
+ }, null, 8, ["record", "recordData", "columnsIndex"]);
71
+ }), 128))
72
+ ], 4)
73
+ ]),
74
+ _: 2
75
+ }, 1032, ["flex"]);
76
+ }), 128))
77
+ ]),
78
+ _: 1
79
+ }, 8, ["gutter"])
57
80
  ], 4);
58
81
  };
59
82
  }
60
83
  };
61
- const SunIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4b920fa7"]]);
84
+ const SingleColumn = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1fc2bfb4"]]);
62
85
  export {
63
- SunIcon as default
86
+ SingleColumn as default
64
87
  };