@mixd-id/web-scaffold 0.1.230406194 → 0.1.230406196
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/package.json
CHANGED
package/src/components/Link.vue
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<a v-if="
|
|
2
|
+
<a v-if="mode === 'download' && items.length > 0"
|
|
3
|
+
:href="download.url"
|
|
4
|
+
:download="download.as ?? (download.originalName ?? '')">
|
|
5
|
+
<component v-for="(item, idx) in items"
|
|
6
|
+
:is="item.type"
|
|
7
|
+
:key="idx"
|
|
8
|
+
:="item" />
|
|
9
|
+
</a>
|
|
10
|
+
<a v-else-if="mode === 'download'"
|
|
11
|
+
:href="download.url"
|
|
12
|
+
:download="download.as ?? (download.originalName ?? '')">
|
|
13
|
+
{{ text }}
|
|
14
|
+
</a>
|
|
15
|
+
<a v-else-if="isExternalLink && items.length > 0" :target="target">
|
|
3
16
|
<component v-for="(item, idx) in items"
|
|
4
17
|
:is="item.type"
|
|
5
18
|
:key="idx"
|
|
@@ -29,8 +42,10 @@ export default{
|
|
|
29
42
|
type: String,
|
|
30
43
|
default: ''
|
|
31
44
|
},
|
|
45
|
+
mode: String,
|
|
32
46
|
target: String,
|
|
33
47
|
text: String,
|
|
48
|
+
download: Object,
|
|
34
49
|
},
|
|
35
50
|
|
|
36
51
|
computed: {
|
package/src/components/Radio.vue
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<svg width="14" height="14" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc. --><path d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"/></svg>
|
|
6
6
|
</div>
|
|
7
7
|
</div>
|
|
8
|
-
<input type="radio" class="hidden" :checked="cChecked"/>
|
|
8
|
+
<input type="radio" :name="name" class="hidden" :checked="cChecked"/>
|
|
9
9
|
<slot></slot>
|
|
10
10
|
</div>
|
|
11
11
|
</template>
|
|
@@ -4,25 +4,67 @@
|
|
|
4
4
|
<div class="flex flex-col gap-4">
|
|
5
5
|
|
|
6
6
|
<div>
|
|
7
|
-
<label class="
|
|
7
|
+
<label class="text-text-400">Text</label>
|
|
8
8
|
<Textbox v-model="item.props.text" @keyup.enter="$emit('change')"/>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<div>
|
|
12
|
-
<label class="
|
|
13
|
-
<
|
|
12
|
+
<label class="text-text-400">Mode</label>
|
|
13
|
+
<Dropdown v-model="item.props.mode">
|
|
14
|
+
<option disabled selected>Select Mode</option>
|
|
15
|
+
<option value="link">Link</option>
|
|
16
|
+
<option value="download">Download</option>
|
|
17
|
+
</Dropdown>
|
|
14
18
|
</div>
|
|
15
19
|
|
|
16
|
-
<div v-if="
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
<div v-if="item.props.mode === 'link'" class="flex flex-col gap-4">
|
|
21
|
+
<div>
|
|
22
|
+
<label class="text-text-400">To</label>
|
|
23
|
+
<Textbox v-model="item.props.href" @keyup.enter="$emit('change')"/>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<div v-if="isExternalLink">
|
|
27
|
+
<label class="text-text-400">Target</label>
|
|
28
|
+
<Dropdown v-model="item.props.target" @change="$emit('change')">
|
|
29
|
+
<option value="_self">Self</option>
|
|
30
|
+
<option value="_blank">Blank</option>
|
|
31
|
+
<option value="_parent">Parent</option>
|
|
32
|
+
<option value="_top">Top</option>
|
|
33
|
+
</Dropdown>
|
|
34
|
+
</div>
|
|
24
35
|
</div>
|
|
25
36
|
|
|
37
|
+
<div v-else-if="item.props.mode === 'download'" class="flex flex-col gap-4">
|
|
38
|
+
|
|
39
|
+
<div>
|
|
40
|
+
<label class="text-text-400">File</label>
|
|
41
|
+
<div>
|
|
42
|
+
<input type="file" ref="file" class="hidden"
|
|
43
|
+
accept=".jpg,.jpeg,.png,.gif,.xls,.xlsx,.doc,.docx,.ppt,.pptx,.csv,.pdf"
|
|
44
|
+
@change="onChange" />
|
|
45
|
+
<button v-if="!download.url" type="button"
|
|
46
|
+
@click="$refs.file.click()"
|
|
47
|
+
class="w-full p-2 text-center bg-text-50 rounded-lg text-text-300">
|
|
48
|
+
Click to Add File
|
|
49
|
+
</button>
|
|
50
|
+
<div v-else class="p-2 border-l-[2px] border-primary bg-text-50 flex flex-row items-center rounded-r-lg">
|
|
51
|
+
<div class="flex-1 px-1 text-ellipsis overflow-hidden whitespace-nowrap">
|
|
52
|
+
{{ placeholder }}
|
|
53
|
+
</div>
|
|
54
|
+
<button type="button" @click="this.item.props.download = {}">
|
|
55
|
+
<svg width="14" height="14" class="fill-text-300 hover:fill-red-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M193.94 256L296.5 153.44l21.15-21.15c3.12-3.12 3.12-8.19 0-11.31l-22.63-22.63c-3.12-3.12-8.19-3.12-11.31 0L160 222.06 36.29 98.34c-3.12-3.12-8.19-3.12-11.31 0L2.34 120.97c-3.12 3.12-3.12 8.19 0 11.31L126.06 256 2.34 379.71c-3.12 3.12-3.12 8.19 0 11.31l22.63 22.63c3.12 3.12 8.19 3.12 11.31 0L160 289.94 262.56 392.5l21.15 21.15c3.12 3.12 8.19 3.12 11.31 0l22.63-22.63c3.12-3.12 3.12-8.19 0-11.31L193.94 256z"/></svg>
|
|
56
|
+
</button>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div>
|
|
62
|
+
<label class="text-text-400">As</label>
|
|
63
|
+
<Textbox v-model="download.as" @keyup.enter="$emit('change')" :placeholder="placeholder"/>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
|
|
26
68
|
</div>
|
|
27
69
|
|
|
28
70
|
<ComponentSetting :item="item"
|
|
@@ -58,10 +100,19 @@ export default{
|
|
|
58
100
|
}
|
|
59
101
|
},
|
|
60
102
|
|
|
61
|
-
inject: [ 'confirm', 'imageSrc' ],
|
|
103
|
+
inject: [ 'alert', 'confirm', 'imageSrc', 'uploadImage' ],
|
|
62
104
|
|
|
63
105
|
methods: {
|
|
64
106
|
|
|
107
|
+
onChange(){
|
|
108
|
+
this.uploadImage(this.$refs.file.files[0], { target:'downloads' })
|
|
109
|
+
.then((obj) => {
|
|
110
|
+
console.log(obj)
|
|
111
|
+
Object.assign(this.download, obj)
|
|
112
|
+
this.$emit('change')
|
|
113
|
+
})
|
|
114
|
+
.catch(err => this.alert(err))
|
|
115
|
+
}
|
|
65
116
|
|
|
66
117
|
},
|
|
67
118
|
|
|
@@ -71,6 +122,18 @@ export default{
|
|
|
71
122
|
return (this.item.props.href ?? '').indexOf('://') > -1;
|
|
72
123
|
},
|
|
73
124
|
|
|
125
|
+
download(){
|
|
126
|
+
if(!this.item.props.download){
|
|
127
|
+
this.item.props.download = {}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return this.item.props.download
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
placeholder(){
|
|
134
|
+
return this.download.originalName ?? this.download.name
|
|
135
|
+
}
|
|
136
|
+
|
|
74
137
|
}
|
|
75
138
|
|
|
76
139
|
}
|
|
@@ -945,14 +945,14 @@ export default{
|
|
|
945
945
|
},
|
|
946
946
|
|
|
947
947
|
onHooks(model, event, items){
|
|
948
|
-
if(model === 'page' && event === 'update'){
|
|
948
|
+
/*if(model === 'page' && event === 'update'){
|
|
949
949
|
items.forEach((item) => {
|
|
950
950
|
if(item.id === this.page.id){
|
|
951
951
|
Object.assign(this.page, item)
|
|
952
952
|
//this.reloadIframe()
|
|
953
953
|
}
|
|
954
954
|
})
|
|
955
|
-
}
|
|
955
|
+
}*/
|
|
956
956
|
},
|
|
957
957
|
|
|
958
958
|
onKeyDown(e){
|
|
@@ -1326,12 +1326,12 @@ export default{
|
|
|
1326
1326
|
}
|
|
1327
1327
|
},
|
|
1328
1328
|
|
|
1329
|
-
async uploadImage(image){
|
|
1329
|
+
async uploadImage(image, extra = {}){
|
|
1330
1330
|
|
|
1331
1331
|
return axios({
|
|
1332
1332
|
method: this.uploadConfig.method,
|
|
1333
1333
|
url: this.uploadConfig.url,
|
|
1334
|
-
data: createFormData({ image })
|
|
1334
|
+
data: createFormData({ image, ...extra })
|
|
1335
1335
|
})
|
|
1336
1336
|
.then((res) => {
|
|
1337
1337
|
return res.data
|