km-card-layout-component-miniprogram 0.1.18 → 0.1.20
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/example/app.js +11 -1
- package/example/pages/home/index.js +324 -101
- package/example/pages/home/index.wxml +2 -1
- package/miniprogram_dist/components/card-layout/elements/custom-element/index.js +12 -6
- package/miniprogram_dist/components/card-layout/elements/custom-element/index.wxml +2 -2
- package/miniprogram_dist/components/card-layout/elements/custom-element/index.wxss +1 -1
- package/miniprogram_dist/components/card-layout/elements/icon-element/index.js +32 -15
- package/miniprogram_dist/components/card-layout/elements/icon-element/index.wxml +2 -4
- package/miniprogram_dist/components/card-layout/elements/icon-element/index.wxss +3 -17
- package/miniprogram_dist/components/card-layout/elements/icon-font.wxss +438 -0
- package/miniprogram_dist/components/card-layout/elements/image-element/index.js +18 -9
- package/miniprogram_dist/components/card-layout/elements/image-element/index.wxml +2 -2
- package/miniprogram_dist/components/card-layout/elements/image-element/index.wxss +1 -1
- package/miniprogram_dist/components/card-layout/elements/layout-panel-element/index.js +37 -0
- package/miniprogram_dist/components/card-layout/elements/layout-panel-element/index.json +3 -0
- package/miniprogram_dist/components/card-layout/elements/layout-panel-element/index.wxml +5 -0
- package/miniprogram_dist/components/card-layout/elements/layout-panel-element/index.wxss +10 -0
- package/miniprogram_dist/components/card-layout/elements/text-element/index.js +41 -17
- package/miniprogram_dist/components/card-layout/elements/text-element/index.wxml +8 -32
- package/miniprogram_dist/components/card-layout/elements/text-element/index.wxss +5 -22
- package/miniprogram_dist/components/card-layout/index.js +29 -38
- package/miniprogram_dist/components/card-layout/index.json +3 -1
- package/miniprogram_dist/components/card-layout/index.wxml +25 -29
- package/miniprogram_dist/components/card-layout/index.wxss +1 -455
- package/miniprogram_dist/vendor/wxml2canvas-2d/canvas.js +1116 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/constants.js +42 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/element.js +420 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/gradient.js +634 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/index.js +169 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/index.json +4 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/index.wxml +7 -0
- package/miniprogram_dist/vendor/wxml2canvas-2d/index.wxss +5 -0
- package/package.json +1 -1
- package/src/components/card-layout/elements/custom-element/index.ts +13 -7
- package/src/components/card-layout/elements/custom-element/index.wxml +2 -2
- package/src/components/card-layout/elements/custom-element/index.wxss +1 -1
- package/src/components/card-layout/elements/icon-element/index.ts +34 -16
- package/src/components/card-layout/elements/icon-element/index.wxml +2 -4
- package/src/components/card-layout/elements/icon-element/index.wxss +3 -17
- package/src/components/card-layout/elements/icon-font.wxss +438 -0
- package/src/components/card-layout/elements/image-element/index.ts +21 -11
- package/src/components/card-layout/elements/image-element/index.wxml +2 -2
- package/src/components/card-layout/elements/image-element/index.wxss +1 -1
- package/src/components/card-layout/elements/layout-panel-element/index.json +3 -0
- package/src/components/card-layout/elements/layout-panel-element/index.ts +40 -0
- package/src/components/card-layout/elements/layout-panel-element/index.wxml +5 -0
- package/src/components/card-layout/elements/layout-panel-element/index.wxss +10 -0
- package/src/components/card-layout/elements/text-element/index.ts +48 -19
- package/src/components/card-layout/elements/text-element/index.wxml +8 -32
- package/src/components/card-layout/elements/text-element/index.wxss +5 -22
- package/src/components/card-layout/index.json +3 -1
- package/src/components/card-layout/index.ts +34 -62
- package/src/components/card-layout/index.wxml +25 -29
- package/src/components/card-layout/index.wxss +1 -455
- package/src/vendor/wxml2canvas-2d/canvas.js +1116 -0
- package/src/vendor/wxml2canvas-2d/constants.js +42 -0
- package/src/vendor/wxml2canvas-2d/element.js +420 -0
- package/src/vendor/wxml2canvas-2d/gradient.js +634 -0
- package/src/vendor/wxml2canvas-2d/index.js +169 -0
- package/src/vendor/wxml2canvas-2d/index.json +4 -0
- package/src/vendor/wxml2canvas-2d/index.wxml +7 -0
- package/src/vendor/wxml2canvas-2d/index.wxss +5 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../../../../vendor/km-card-layout-core/index");
|
|
4
|
+
Component({
|
|
5
|
+
options: {
|
|
6
|
+
styleIsolation: "apply-shared",
|
|
7
|
+
},
|
|
8
|
+
properties: {
|
|
9
|
+
element: {
|
|
10
|
+
type: Object,
|
|
11
|
+
value: {},
|
|
12
|
+
},
|
|
13
|
+
rootData: {
|
|
14
|
+
type: Object,
|
|
15
|
+
value: {},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
data: {
|
|
19
|
+
wrapperStyle: "",
|
|
20
|
+
contentStyle: "",
|
|
21
|
+
},
|
|
22
|
+
observers: {
|
|
23
|
+
element() {
|
|
24
|
+
this.rebuild();
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
methods: {
|
|
28
|
+
rebuild() {
|
|
29
|
+
const el = this.data.element;
|
|
30
|
+
if (!el)
|
|
31
|
+
return;
|
|
32
|
+
const wrapperStyle = (0, index_1.styleObjectToString)((0, index_1.buildWrapperStyle)(el, "rpx"), "rpx");
|
|
33
|
+
const contentStyle = (0, index_1.styleObjectToString)((0, index_1.buildPanelContentStyle)(el, "rpx"), "rpx");
|
|
34
|
+
this.setData({ wrapperStyle, contentStyle });
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
});
|
|
@@ -2,17 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const index_1 = require("../../../../vendor/km-card-layout-core/index");
|
|
4
4
|
const icon_map_1 = require("../../icon-map");
|
|
5
|
-
const
|
|
5
|
+
const normalizeIconName = (name) => {
|
|
6
6
|
if (!name)
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
return "";
|
|
8
|
+
return name.startsWith("icon-") ? name.slice(5) : name;
|
|
9
|
+
};
|
|
10
|
+
const buildIconClassName = (name) => {
|
|
11
|
+
const normalized = normalizeIconName(name);
|
|
12
|
+
if (!normalized)
|
|
13
|
+
return "";
|
|
14
|
+
return `icon-${normalized}`;
|
|
15
|
+
};
|
|
16
|
+
const buildIconCode = (name) => {
|
|
17
|
+
const normalized = normalizeIconName(name);
|
|
18
|
+
if (!normalized)
|
|
19
|
+
return "";
|
|
20
|
+
return icon_map_1.ICON_CODE_MAP[normalized] || "";
|
|
12
21
|
};
|
|
13
22
|
Component({
|
|
14
23
|
options: {
|
|
15
|
-
styleIsolation:
|
|
24
|
+
styleIsolation: "apply-shared",
|
|
16
25
|
},
|
|
17
26
|
properties: {
|
|
18
27
|
element: {
|
|
@@ -25,28 +34,43 @@ Component({
|
|
|
25
34
|
},
|
|
26
35
|
},
|
|
27
36
|
data: {
|
|
28
|
-
wrapperStyle:
|
|
29
|
-
contentStyle:
|
|
30
|
-
textValue:
|
|
37
|
+
wrapperStyle: "",
|
|
38
|
+
contentStyle: "",
|
|
39
|
+
textValue: "",
|
|
40
|
+
textStyle: "",
|
|
31
41
|
iconMeta: null,
|
|
32
42
|
},
|
|
33
43
|
observers: {
|
|
34
|
-
element(
|
|
44
|
+
element() {
|
|
45
|
+
this.rebuild();
|
|
46
|
+
},
|
|
47
|
+
rootData() {
|
|
48
|
+
this.rebuild();
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
methods: {
|
|
52
|
+
rebuild() {
|
|
53
|
+
const el = this.data.element;
|
|
35
54
|
if (!el)
|
|
36
55
|
return;
|
|
37
56
|
const data = this.data.rootData || {};
|
|
38
|
-
const wrapperStyle = (0, index_1.styleObjectToString)((0, index_1.buildWrapperStyle)(el,
|
|
39
|
-
const contentStyle = (0, index_1.styleObjectToString)((0, index_1.buildTextContentStyle)(el,
|
|
57
|
+
const wrapperStyle = (0, index_1.styleObjectToString)((0, index_1.buildWrapperStyle)(el, "rpx"), "rpx");
|
|
58
|
+
const contentStyle = (0, index_1.styleObjectToString)((0, index_1.buildTextContentStyle)(el, "rpx"), "rpx");
|
|
40
59
|
const textValue = (0, index_1.getTextValue)(el, data);
|
|
41
|
-
const
|
|
60
|
+
const textStyle = (0, index_1.styleObjectToString)({
|
|
61
|
+
...(0, index_1.buildTextContentStyle)(el, "rpx"),
|
|
62
|
+
...(0, index_1.buildTextValueStyle)(el, "rpx"),
|
|
63
|
+
}, "rpx");
|
|
64
|
+
const iconRaw = (0, index_1.buildTextIconMeta)(el, "rpx");
|
|
42
65
|
const iconMeta = iconRaw && iconRaw.name
|
|
43
66
|
? {
|
|
44
67
|
...iconRaw,
|
|
45
|
-
|
|
46
|
-
|
|
68
|
+
className: buildIconClassName(iconRaw.name),
|
|
69
|
+
iconCode: buildIconCode(iconRaw.name),
|
|
70
|
+
wrapperStyle: (0, index_1.styleObjectToString)(iconRaw.wrapperStyle, "rpx"),
|
|
47
71
|
}
|
|
48
72
|
: iconRaw;
|
|
49
|
-
this.setData({ wrapperStyle, contentStyle, textValue, iconMeta });
|
|
73
|
+
this.setData({ wrapperStyle, contentStyle, textValue, textStyle, iconMeta });
|
|
50
74
|
},
|
|
51
75
|
},
|
|
52
76
|
});
|
|
@@ -1,42 +1,18 @@
|
|
|
1
|
-
<view class="km-node km-node--text" style="{{wrapperStyle}}">
|
|
2
|
-
<view class="km-node__text" style="{{contentStyle}}">
|
|
3
|
-
<block wx:if="{{
|
|
4
|
-
<view class="km-node__text-content">
|
|
5
|
-
|
|
6
|
-
<!-- icon 在右侧 -->
|
|
7
|
-
<block wx:if="{{iconMeta && iconMeta.align === 'right'}}">
|
|
8
|
-
<text class="km-node__text-value">{{(element.icon && element.icon.style === 'text' && element.icon.enable) ? (element.label + ':') : ''}}{{textValue || ''}}</text>
|
|
1
|
+
<view class="km-node km-node--text canvas-item" style="{{wrapperStyle}}">
|
|
2
|
+
<view class="km-node__text canvas-item" style="{{contentStyle}}">
|
|
3
|
+
<block wx:if="{{iconMeta && iconMeta.name && (element.icon && element.icon.style !== 'text')}}">
|
|
4
|
+
<view class="km-node__text-content canvas-item">
|
|
9
5
|
<view
|
|
10
|
-
class="km-node__text-icon--wrapper"
|
|
6
|
+
class="km-node__text-icon--wrapper canvas-item"
|
|
11
7
|
style="{{iconMeta.wrapperStyle}}"
|
|
12
8
|
>
|
|
13
|
-
<
|
|
14
|
-
class="km-node__text-icon icon"
|
|
15
|
-
style="font-size: {{iconMeta.size || '16px'}}; color: {{iconMeta.color || ''}}; margin-right: {{iconMeta.gap || ''}};"
|
|
16
|
-
>{{iconMeta.text || iconMeta.name || ''}}</text>
|
|
9
|
+
<i class="km-node__text-icon icon {{iconMeta.className}} canvas-item" style="font-size: {{iconMeta.size || '16px'}}; color: {{iconMeta.color || ''}}; margin-right: {{iconMeta.gap || ''}};" data-icon="{{iconMeta.iconCode}}" ></i>
|
|
17
10
|
</view>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<!-- icon 在左侧 -->
|
|
21
|
-
<block wx:else>
|
|
22
|
-
<view
|
|
23
|
-
class="km-node__text-icon--wrapper"
|
|
24
|
-
style="{{iconMeta.wrapperStyle}}"
|
|
25
|
-
>
|
|
26
|
-
<text
|
|
27
|
-
class="km-node__text-icon icon"
|
|
28
|
-
style="font-size: {{iconMeta.size || '16px'}}; color: {{iconMeta.color || ''}}; margin-right: {{iconMeta.gap || ''}};"
|
|
29
|
-
>{{iconMeta.text || iconMeta.name || ''}}</text>
|
|
30
|
-
</view>
|
|
31
|
-
<text class="km-node__text-value">{{textValue || ''}}</text>
|
|
32
|
-
</block>
|
|
33
|
-
|
|
11
|
+
<text class="km-node__text-value canvas-item" style="{{textStyle}}" data-text="{{textValue || ''}}">{{textValue || ''}}</text>
|
|
34
12
|
</view>
|
|
35
13
|
</block>
|
|
36
|
-
|
|
37
|
-
<!-- 无 icon -->
|
|
38
14
|
<block wx:else>
|
|
39
|
-
<text class="km-node__text-value">{{(element.icon && element.icon.style === 'text' && element.icon.enable) ? (element.label + ':') : ''}}{{textValue || ''}}</text>
|
|
15
|
+
<text class="km-node__text-value canvas-item" style="{{textStyle}}" data-text="{{(element.icon && element.icon.style === 'text' && element.icon.enable) ? (element.label + ':') : ''}}{{textValue || ''}}">{{(element.icon && element.icon.style === 'text' && element.icon.enable) ? (element.label + ':') : ''}}{{textValue || ''}}</text>
|
|
40
16
|
</block>
|
|
41
17
|
</view>
|
|
42
18
|
</view>
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
@import "../icon-font.wxss";
|
|
2
|
+
|
|
1
3
|
.km-node {
|
|
2
4
|
box-sizing: border-box;
|
|
3
5
|
color: inherit;
|
|
4
6
|
}
|
|
5
7
|
|
|
6
|
-
.km-node--text {
|
|
7
|
-
/* overflow hidden if needed */
|
|
8
|
-
}
|
|
9
|
-
|
|
10
8
|
.km-node--text text {
|
|
11
9
|
display: inline;
|
|
12
10
|
}
|
|
@@ -23,6 +21,7 @@
|
|
|
23
21
|
display: inline-block;
|
|
24
22
|
vertical-align: middle;
|
|
25
23
|
height: 100%;
|
|
24
|
+
display: inline-flex;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
.km-node__text-icon {
|
|
@@ -38,22 +37,6 @@
|
|
|
38
37
|
vertical-align: middle;
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
font-family: 'km-icon';
|
|
43
|
-
src: url('data:font/woff;charset=utf-8;base64,d09GRgABAAAAAEl4AA0AAAAAcmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAABJXAAAABoAAAAcrMtJV0dERUYAAEk8AAAAHgAAAB4AKQByT1MvMgAAAaQAAABGAAAAYDw3SVljbWFwAAAC7AAAAM8AAAIW8XL3K2dhc3AAAEk0AAAACAAAAAj//wADZ2x5ZgAABJgAAEBZAABkZPJymXJoZWFkAAABMAAAADEAAAA2MtZiFmhoZWEAAAFkAAAAIAAAACQNagmCaG10eAAAAewAAAD/AAABqqs3Ii9sb2NhAAADvAAAANoAAADaKv0P7G1heHAAAAGEAAAAHwAAACABmQHEbmFtZQAARPQAAAFGAAACgl6CAQJwb3N0AABGPAAAAvUAAATh1g15W3jaY2BkYGAA4lqffPd4fpuvDNwsDCDwVIyfA0b///i/gXMWcyeQy8HABBIFAAVdCfwAAAB42mNgZGBgbvjfwBDDOfP/x///OWcxAEVQQCYAuxgH/XjaY2BkYGDIYdzBoMwAAkxAzAWEDAz/wXwGACjlAl8AeNpjYGFRYJzAwMrAwNTJdIaBgaEfQjO+ZjBi5ACKMrAyM2AFAWmuKQwHnjE+y2Ju+N/AwMB8h6ERKMyIpESBgREAenQNCwAAeNo90cErBGEYx/Hf1LMH7MVxoigHtS600pzWnMjBlt2dFAeiNuWgXLgokgslbpyE/Aduyl38J3ty4aCs7/vOk6lPv+d5531n3nfGVF5JIZlUx9fAbawnEfIFq14/YhddFPjFmynZ9n4TbYzg2tcMW6Epr4NQT3jSJ2lcW9ec1fSEAheMnVume7KKBbQwiMye+5/kEpqYwQoOY59pn1xGw3Lt8NwHS7UY35frivqbet2fNYZp+4j76vj+GpUhjZJreLfxODecay/eTzVPzmIj9uX7VLnUmfdb/2fN4trcv0kYv8Oxe/V5Rzhg7inZ8wzjN5b0f6z8PV2d/AHivi0JAHja3dBFUoVRDITR88PD3d3d3d3d3d33zQqYwwVGbIGk8qV6kK7qIN7vlIsCRdlBRT865iPsWOig318/PwOjbwYd+7mKSZAoSbIUqdKky5ApS7YcufLkK1CoSLESpcqCZ4VKVarVqFWnXoNGTZq1aNWmXYdOXbr16NWn34BBQ4aNGDVm3IRJU6bNmDVn3oJFS5atWLVm3YZNW7bt2LVn34FDR46dOHXm3IVLV67duHXn3oNHT8Hv2YtXbyFaot9HfMeMC4jztyL/vr4AXx4eawAAAAAAAAAAAACwAPIDSgQ8BLIFUgWUBcIF/gY8BpIHCgdAB3wHoAgOCHAIxgk+CV4JzAnqCkQKrgtUC8QMEAxsDNQNFA1SDegONg6qDyQPgg/CEAIQxBEwEaQSHBLYE14T4hRcFPIVTBYMFkwWqBckGGAYxhmYGegaEBpeGuIbXhvwHPQd5B62Hygf6CBeILog9CFUIbgiBCJ0ItQjbCQSJGgkuCVsJcImKib0J44ocijOKSApUCo2KmQqtituK34sJixkLMgtdC3WLpgvPC+QMBww/DGCMagyMgAA') format('woff');
|
|
44
|
-
font-weight: normal;
|
|
45
|
-
font-style: normal;
|
|
46
|
-
font-display: swap;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.icon {
|
|
50
|
-
font-family: 'km-icon' !important;
|
|
51
|
-
font-size: 16px;
|
|
52
|
-
font-style: normal;
|
|
53
|
-
-webkit-font-smoothing: antialiased;
|
|
54
|
-
-moz-osx-font-smoothing: grayscale;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.km-node__text-icon--wrapper{
|
|
40
|
+
.km-node__text-icon--wrapper {
|
|
58
41
|
display: inline-block;
|
|
59
|
-
}
|
|
42
|
+
}
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.hasCompanyDutyKey = exports.normalizeMoreCompany = void 0;
|
|
4
4
|
const index_1 = require("../../vendor/km-card-layout-core/index");
|
|
5
5
|
const EMPTY_COMPANY_DUTY = {
|
|
6
|
-
company:
|
|
7
|
-
duty:
|
|
6
|
+
company: "",
|
|
7
|
+
duty: "",
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
10
|
* 规范化 moreCardInfo.company,保证长度始终为 2
|
|
@@ -43,77 +43,54 @@ const handleSpecialFields = (data) => {
|
|
|
43
43
|
...data,
|
|
44
44
|
user: {
|
|
45
45
|
...user,
|
|
46
|
-
baseCompanyDuty: user.company && user.duty
|
|
47
|
-
? `${user.company} ${user.duty}`
|
|
48
|
-
: user.baseCompanyDuty,
|
|
46
|
+
baseCompanyDuty: user.company && user.duty ? `${user.company} ${user.duty}` : user.baseCompanyDuty,
|
|
49
47
|
moreCardInfo: user.moreCardInfo
|
|
50
48
|
? {
|
|
51
49
|
...user.moreCardInfo,
|
|
52
50
|
company: Array.isArray(user.moreCardInfo.company)
|
|
53
|
-
? user.moreCardInfo.company.map(item => `${item.company} ${item.duty}`)
|
|
51
|
+
? user.moreCardInfo.company.map((item) => `${item.company} ${item.duty}`)
|
|
54
52
|
: user.moreCardInfo.company,
|
|
55
53
|
}
|
|
56
54
|
: user.moreCardInfo,
|
|
57
55
|
},
|
|
58
56
|
};
|
|
59
57
|
};
|
|
60
|
-
const ensureArray = (input) => {
|
|
61
|
-
if (!input)
|
|
62
|
-
return [];
|
|
63
|
-
return Array.isArray(input) ? input : [input];
|
|
64
|
-
};
|
|
65
58
|
const pickCardId = (layout, idx) => {
|
|
66
59
|
if (layout && (layout.name || layout.id))
|
|
67
60
|
return layout.name || layout.id;
|
|
68
61
|
return `card-${idx}`;
|
|
69
62
|
};
|
|
70
|
-
const decorateElements = (children = []) => (children || []).map(el => {
|
|
71
|
-
if (el.type === 'layout-panel') {
|
|
72
|
-
const panel = el;
|
|
73
|
-
return {
|
|
74
|
-
...panel,
|
|
75
|
-
wrapperStyle: (0, index_1.styleObjectToString)((0, index_1.buildWrapperStyle)(panel, 'rpx'), 'rpx'),
|
|
76
|
-
contentStyle: (0, index_1.styleObjectToString)((0, index_1.buildPanelContentStyle)(panel, 'rpx'), 'rpx'),
|
|
77
|
-
children: decorateElements(panel.children || []),
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
return el;
|
|
81
|
-
});
|
|
82
63
|
const buildCards = (layouts) => {
|
|
83
64
|
return layouts.map((layout, idx) => ({
|
|
84
65
|
id: pickCardId(layouts[idx], idx),
|
|
85
|
-
cardStyle: (0, index_1.styleObjectToString)((0, index_1.buildCardStyle)(layout,
|
|
86
|
-
backgroundImage: layout.backgroundImage ||
|
|
87
|
-
backgroundStyle: (0, index_1.styleObjectToString)((0, index_1.buildBackgroundStyle)(layout,
|
|
88
|
-
elements:
|
|
66
|
+
cardStyle: (0, index_1.styleObjectToString)((0, index_1.buildCardStyle)(layout, "rpx"), "rpx"),
|
|
67
|
+
backgroundImage: layout.backgroundImage || "",
|
|
68
|
+
backgroundStyle: (0, index_1.styleObjectToString)((0, index_1.buildBackgroundStyle)(layout, "rpx"), "rpx"),
|
|
69
|
+
elements: layout.children || [],
|
|
89
70
|
}));
|
|
90
71
|
};
|
|
91
72
|
const hasCompanyDutyKey = (schemas) => {
|
|
92
|
-
const TARGET_KEYS = new Set([
|
|
93
|
-
'company_duty_custom',
|
|
94
|
-
'company_duty_1',
|
|
95
|
-
'company_duty_2',
|
|
96
|
-
]);
|
|
73
|
+
const TARGET_KEYS = new Set(["company_duty_custom", "company_duty_1", "company_duty_2"]);
|
|
97
74
|
const traverse = (elements) => {
|
|
98
|
-
return elements.some(el => {
|
|
75
|
+
return elements.some((el) => {
|
|
99
76
|
var _a;
|
|
100
77
|
// 命中 key
|
|
101
78
|
if (el.key && TARGET_KEYS.has(el.key)) {
|
|
102
79
|
return true;
|
|
103
80
|
}
|
|
104
81
|
// 递归 layout-panel
|
|
105
|
-
if (el.type ===
|
|
82
|
+
if (el.type === "layout-panel" && ((_a = el.children) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
106
83
|
return traverse(el.children);
|
|
107
84
|
}
|
|
108
85
|
return false;
|
|
109
86
|
});
|
|
110
87
|
};
|
|
111
|
-
return schemas.some(schema => traverse(schema.children));
|
|
88
|
+
return schemas.some((schema) => traverse(schema.children));
|
|
112
89
|
};
|
|
113
90
|
exports.hasCompanyDutyKey = hasCompanyDutyKey;
|
|
114
91
|
Component({
|
|
115
92
|
options: {
|
|
116
|
-
styleIsolation:
|
|
93
|
+
styleIsolation: "apply-shared",
|
|
117
94
|
},
|
|
118
95
|
properties: {
|
|
119
96
|
layout: {
|
|
@@ -131,6 +108,7 @@ Component({
|
|
|
131
108
|
data: {
|
|
132
109
|
cards: [],
|
|
133
110
|
rootData: {},
|
|
111
|
+
firstCard: [],
|
|
134
112
|
},
|
|
135
113
|
observers: {
|
|
136
114
|
layout() {
|
|
@@ -148,7 +126,9 @@ Component({
|
|
|
148
126
|
methods: {
|
|
149
127
|
rebuild() {
|
|
150
128
|
const data = normalizeMoreCompany(this.data.data);
|
|
151
|
-
const layoutInput = (0, exports.hasCompanyDutyKey)(this.data.layout)
|
|
129
|
+
const layoutInput = (0, exports.hasCompanyDutyKey)(this.data.layout)
|
|
130
|
+
? (0, index_1.processCardLayout)(this.data.layout, data)
|
|
131
|
+
: this.data.layout;
|
|
152
132
|
const rootData = handleSpecialFields(data);
|
|
153
133
|
if (!layoutInput.length) {
|
|
154
134
|
this.setData({ cards: [], rootData });
|
|
@@ -156,7 +136,18 @@ Component({
|
|
|
156
136
|
}
|
|
157
137
|
const normalizedLayouts = (0, index_1.normalizeLayout)(layoutInput);
|
|
158
138
|
const cards = buildCards(normalizedLayouts);
|
|
159
|
-
this.setData({ cards, rootData });
|
|
139
|
+
this.setData({ cards, rootData, firstCard: [cards[0]] });
|
|
140
|
+
},
|
|
141
|
+
async handleDrawCanvas() {
|
|
142
|
+
try {
|
|
143
|
+
const canvas = this.selectComponent(`#layout-canvas`);
|
|
144
|
+
await canvas.draw(this);
|
|
145
|
+
const filePath = await canvas.toTempFilePath();
|
|
146
|
+
return filePath;
|
|
147
|
+
}
|
|
148
|
+
catch (_a) {
|
|
149
|
+
wx.showToast({ title: "保存失败", icon: "error" });
|
|
150
|
+
}
|
|
160
151
|
},
|
|
161
152
|
},
|
|
162
153
|
});
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
"text-element": "./elements/text-element/index",
|
|
5
5
|
"image-element": "./elements/image-element/index",
|
|
6
6
|
"icon-element": "./elements/icon-element/index",
|
|
7
|
-
"custom-element": "./elements/custom-element/index"
|
|
7
|
+
"custom-element": "./elements/custom-element/index",
|
|
8
|
+
"layout-panel-element": "./elements/layout-panel-element/index",
|
|
9
|
+
"wxml2canvas": "../../vendor/wxml2canvas-2d/index"
|
|
8
10
|
}
|
|
9
11
|
}
|
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
<
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
<view class="km-card
|
|
5
|
-
<
|
|
6
|
-
wx:if="{{item.backgroundImage}}"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/>
|
|
12
|
-
<block wx:for="{{item.elements}}" wx:key="id">
|
|
13
|
-
<template wx:if="{{item.visible !== false}}" is="render-element" data="{{el:item, rootData: rootData}}" />
|
|
14
|
-
</block>
|
|
1
|
+
<template name="layout-template">
|
|
2
|
+
<view class="km-card-layout layout-container">
|
|
3
|
+
<block wx:for="{{renderCards}}" wx:key="id">
|
|
4
|
+
<view class="km-card-layout__item canvas-item">
|
|
5
|
+
<view class="km-card canvas-item" style="{{item.cardStyle}}">
|
|
6
|
+
<image wx:if="{{item.backgroundImage}}" class="km-card__bg canvas-item" style="{{item.backgroundStyle}}" src="{{item.backgroundImage}}" mode="aspectFill" />
|
|
7
|
+
<block wx:for="{{item.elements}}" wx:key="id">
|
|
8
|
+
<template wx:if="{{item.visible !== false}}" is="render-element" data="{{el:item, rootData: rootData}}" />
|
|
9
|
+
</block>
|
|
10
|
+
</view>
|
|
15
11
|
</view>
|
|
16
|
-
</
|
|
17
|
-
</
|
|
18
|
-
</
|
|
19
|
-
|
|
12
|
+
</block>
|
|
13
|
+
</view>
|
|
14
|
+
</template>
|
|
15
|
+
<template is="layout-template" data="{{ renderCards: cards, rootData: rootData }}"></template>
|
|
16
|
+
<!-- 暂时只绘制第一张卡片 -->
|
|
17
|
+
<wxml2canvas id="layout-canvas" container-class="layout-container" item-class="canvas-item"></wxml2canvas>
|
|
20
18
|
<template name="render-element">
|
|
21
19
|
<block wx:if="{{el.type === 'image'}}">
|
|
22
|
-
<image-element element="{{el}}" rootData="{{rootData}}" />
|
|
20
|
+
<image-element id="node-{{el.id}}" class="canvas-item" data-component="{{true}}" element="{{el}}" rootData="{{rootData}}" />
|
|
23
21
|
</block>
|
|
24
22
|
<block wx:elif="{{el.type === 'icon'}}">
|
|
25
|
-
<icon-element element="{{el}}" rootData="{{rootData}}" />
|
|
23
|
+
<icon-element id="node-{{el.id}}" class="canvas-item" data-component="{{true}}" element="{{el}}" rootData="{{rootData}}" />
|
|
26
24
|
</block>
|
|
27
25
|
<block wx:elif="{{el.type === 'layout-panel'}}">
|
|
28
|
-
<
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
</view>
|
|
34
|
-
</view>
|
|
26
|
+
<layout-panel-element id="node-{{el.id}}" class="canvas-item" data-component="{{true}}" element="{{el}}" rootData="{{rootData}}">
|
|
27
|
+
<block wx:for="{{el.children}}" wx:key="id">
|
|
28
|
+
<template is="render-element" data="{{el:item, rootData: rootData}}" />
|
|
29
|
+
</block>
|
|
30
|
+
</layout-panel-element>
|
|
35
31
|
</block>
|
|
36
32
|
<block wx:elif="{{el.type === 'custom'}}">
|
|
37
|
-
<custom-element element="{{el}}" rootData="{{rootData}}" />
|
|
33
|
+
<custom-element id="node-{{el.id}}" class="canvas-item" data-component="{{true}}" element="{{el}}" rootData="{{rootData}}" />
|
|
38
34
|
</block>
|
|
39
35
|
<block wx:else>
|
|
40
|
-
<text-element element="{{el}}" rootData="{{rootData}}" />
|
|
36
|
+
<text-element id="node-{{el.id}}" class="canvas-item" data-component="{{true}}" element="{{el}}" rootData="{{rootData}}" />
|
|
41
37
|
</block>
|
|
42
38
|
</template>
|