giime 0.3.15 → 0.3.16
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/dist/index.css +54 -11
- package/es/components/src/base/select/Select.vue.mjs +2 -1
- package/es/components/src/base/select/Select.vue.mjs.map +1 -1
- package/es/components/src/base/select/Select.vue2.mjs +28 -11
- package/es/components/src/base/select/Select.vue2.mjs.map +1 -1
- package/es/components/src/base/select/Select.vue3.mjs +4 -0
- package/es/components/src/base/select/Select.vue3.mjs.map +1 -0
- package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +9 -0
- package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs +2 -1
- package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs.map +1 -1
- package/es/components/src/composite/searchForm/searchFormItems/select/index.d.ts +9 -0
- package/es/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.d.ts +4 -0
- package/es/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.mjs +4 -0
- package/es/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.mjs.map +1 -1
- package/es/giime/version.d.ts +1 -1
- package/es/hooks/base/useDownload/index.d.ts +1 -1
- package/es/hooks/base/useDownload/index.mjs +7 -7
- package/es/hooks/base/useDownload/index.mjs.map +1 -1
- package/es/hooks/base/useIDBKeyval/index.d.ts +4 -0
- package/es/hooks/base/useIDBKeyval/index.mjs.map +1 -1
- package/es/index.css +54 -11
- package/lib/components/src/base/select/Select.vue.js +2 -1
- package/lib/components/src/base/select/Select.vue.js.map +1 -1
- package/lib/components/src/base/select/Select.vue2.js +27 -10
- package/lib/components/src/base/select/Select.vue2.js.map +1 -1
- package/lib/components/src/base/select/Select.vue3.js +8 -0
- package/lib/components/src/base/select/Select.vue3.js.map +1 -0
- package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts +9 -0
- package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js +2 -1
- package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js.map +1 -1
- package/lib/components/src/composite/searchForm/searchFormItems/select/index.d.ts +9 -0
- package/lib/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.d.ts +4 -0
- package/lib/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.js +4 -0
- package/lib/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.js.map +1 -1
- package/lib/giime/version.d.ts +1 -1
- package/lib/hooks/base/useDownload/index.d.ts +1 -1
- package/lib/hooks/base/useDownload/index.js +7 -7
- package/lib/hooks/base/useDownload/index.js.map +1 -1
- package/lib/hooks/base/useIDBKeyval/index.d.ts +4 -0
- package/lib/hooks/base/useIDBKeyval/index.js.map +1 -1
- package/lib/index.css +54 -11
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -569,6 +569,9 @@ video {
|
|
|
569
569
|
.gm-inline-block {
|
|
570
570
|
display: inline-block;
|
|
571
571
|
}
|
|
572
|
+
.gm-inline {
|
|
573
|
+
display: inline;
|
|
574
|
+
}
|
|
572
575
|
.gm-flex {
|
|
573
576
|
display: flex;
|
|
574
577
|
}
|
|
@@ -587,6 +590,9 @@ video {
|
|
|
587
590
|
.gm-h-1 {
|
|
588
591
|
height: 0.25rem;
|
|
589
592
|
}
|
|
593
|
+
.gm-h-\[30px\] {
|
|
594
|
+
height: 30px;
|
|
595
|
+
}
|
|
590
596
|
.gm-h-\[36px\] {
|
|
591
597
|
height: 36px;
|
|
592
598
|
}
|
|
@@ -602,6 +608,9 @@ video {
|
|
|
602
608
|
.gm-w-\[120px\] {
|
|
603
609
|
width: 120px;
|
|
604
610
|
}
|
|
611
|
+
.gm-w-\[30px\] {
|
|
612
|
+
width: 30px;
|
|
613
|
+
}
|
|
605
614
|
.gm-w-full {
|
|
606
615
|
width: 100%;
|
|
607
616
|
}
|
|
@@ -671,6 +680,9 @@ video {
|
|
|
671
680
|
--tw-bg-opacity: 1;
|
|
672
681
|
background-color: rgb(236 254 255 / var(--tw-bg-opacity));
|
|
673
682
|
}
|
|
683
|
+
.gm-stroke-2 {
|
|
684
|
+
stroke-width: 2;
|
|
685
|
+
}
|
|
674
686
|
.gm-p-4 {
|
|
675
687
|
padding: 1rem;
|
|
676
688
|
}
|
|
@@ -755,6 +767,44 @@ video {
|
|
|
755
767
|
margin: 0;
|
|
756
768
|
}
|
|
757
769
|
|
|
770
|
+
.gm-flex-center[data-v-2a79bac9] {
|
|
771
|
+
align-items: center;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
775
|
+
justify-content: space-between;
|
|
776
|
+
}
|
|
777
|
+
.circular[data-v-b391445c] {
|
|
778
|
+
animation: loading-rotate-b391445c 2s linear infinite;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.path[data-v-b391445c] {
|
|
782
|
+
animation: loading-dash-b391445c 1.5s ease-in-out infinite;
|
|
783
|
+
stroke-dasharray: 90, 150;
|
|
784
|
+
stroke-dashoffset: 0;
|
|
785
|
+
stroke: var(--el-color-primary);
|
|
786
|
+
stroke-linecap: round;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
@keyframes loading-rotate-b391445c {
|
|
790
|
+
to {
|
|
791
|
+
transform: rotate(360deg);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
@keyframes loading-dash-b391445c {
|
|
795
|
+
0% {
|
|
796
|
+
stroke-dasharray: 1, 200;
|
|
797
|
+
stroke-dashoffset: 0;
|
|
798
|
+
}
|
|
799
|
+
50% {
|
|
800
|
+
stroke-dasharray: 90, 150;
|
|
801
|
+
stroke-dashoffset: -40px;
|
|
802
|
+
}
|
|
803
|
+
100% {
|
|
804
|
+
stroke-dasharray: 90, 150;
|
|
805
|
+
stroke-dashoffset: -120px;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
758
808
|
.gm-number-interval-single[data-v-47a13fd0] {
|
|
759
809
|
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
760
810
|
box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
|
|
@@ -773,17 +823,6 @@ video {
|
|
|
773
823
|
.gm-number-interval-single[data-v-47a13fd0]:hover .gm-number-interval-close[data-v-47a13fd0] {
|
|
774
824
|
display: flex;
|
|
775
825
|
}
|
|
776
|
-
.gm-flex-center[data-v-2a79bac9] {
|
|
777
|
-
align-items: center;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
781
|
-
justify-content: space-between;
|
|
782
|
-
}
|
|
783
|
-
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
784
|
-
margin-right: 0;
|
|
785
|
-
margin-bottom: 4px;
|
|
786
|
-
}
|
|
787
826
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
788
827
|
border-right: none;
|
|
789
828
|
}
|
|
@@ -807,6 +846,10 @@ video {
|
|
|
807
846
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__border-left-patch {
|
|
808
847
|
height: 0;
|
|
809
848
|
}
|
|
849
|
+
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
850
|
+
margin-right: 0;
|
|
851
|
+
margin-bottom: 4px;
|
|
852
|
+
}
|
|
810
853
|
|
|
811
854
|
.pagination-container[data-v-19230954] {
|
|
812
855
|
background: #fff;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _sfc_main from './Select.vue2.mjs';
|
|
2
|
+
import './Select.vue3.mjs';
|
|
2
3
|
import _export_sfc from '../../../../_virtual/_plugin-vue_export-helper.mjs';
|
|
3
4
|
|
|
4
|
-
var Select = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "Select.vue"]]);
|
|
5
|
+
var Select = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b391445c"], ["__file", "Select.vue"]]);
|
|
5
6
|
|
|
6
7
|
export { Select as default };
|
|
7
8
|
//# sourceMappingURL=Select.vue.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Select.vue.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, useSlots, ref, resolveComponent, openBlock, createBlock, mergeProps, toHandlers, unref, createSlots, withCtx, renderSlot, normalizeProps, guardReactiveProps } from 'vue';
|
|
1
|
+
import { defineComponent, useSlots, ref, resolveComponent, openBlock, createBlock, mergeProps, toHandlers, unref, createSlots, withCtx, renderSlot, createElementBlock, createElementVNode, normalizeProps, guardReactiveProps } from 'vue';
|
|
2
2
|
import '../../../../utils/index.mjs';
|
|
3
3
|
import { selectProps, selectEmits, elSelectEmits } from './select.mjs';
|
|
4
4
|
import { getGmEvent } from '../../../../utils/src/elementPlus/event.mjs';
|
|
@@ -37,58 +37,75 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
37
37
|
unref(slots).default ? {
|
|
38
38
|
name: "default",
|
|
39
39
|
fn: withCtx(() => [
|
|
40
|
-
renderSlot(_ctx.$slots, "default")
|
|
40
|
+
renderSlot(_ctx.$slots, "default", {}, void 0, true)
|
|
41
41
|
]),
|
|
42
42
|
key: "0"
|
|
43
43
|
} : void 0,
|
|
44
44
|
unref(slots).header ? {
|
|
45
45
|
name: "header",
|
|
46
46
|
fn: withCtx(() => [
|
|
47
|
-
renderSlot(_ctx.$slots, "header")
|
|
47
|
+
renderSlot(_ctx.$slots, "header", {}, void 0, true)
|
|
48
48
|
]),
|
|
49
49
|
key: "1"
|
|
50
50
|
} : void 0,
|
|
51
51
|
unref(slots).footer ? {
|
|
52
52
|
name: "footer",
|
|
53
53
|
fn: withCtx(() => [
|
|
54
|
-
renderSlot(_ctx.$slots, "footer")
|
|
54
|
+
renderSlot(_ctx.$slots, "footer", {}, void 0, true)
|
|
55
55
|
]),
|
|
56
56
|
key: "2"
|
|
57
57
|
} : void 0,
|
|
58
58
|
unref(slots).prefix ? {
|
|
59
59
|
name: "prefix",
|
|
60
60
|
fn: withCtx(() => [
|
|
61
|
-
renderSlot(_ctx.$slots, "prefix")
|
|
61
|
+
renderSlot(_ctx.$slots, "prefix", {}, void 0, true)
|
|
62
62
|
]),
|
|
63
63
|
key: "3"
|
|
64
64
|
} : void 0,
|
|
65
65
|
unref(slots).empty ? {
|
|
66
66
|
name: "empty",
|
|
67
67
|
fn: withCtx(() => [
|
|
68
|
-
renderSlot(_ctx.$slots, "empty")
|
|
68
|
+
renderSlot(_ctx.$slots, "empty", {}, void 0, true)
|
|
69
69
|
]),
|
|
70
70
|
key: "4"
|
|
71
71
|
} : void 0,
|
|
72
72
|
unref(slots).tag ? {
|
|
73
73
|
name: "tag",
|
|
74
74
|
fn: withCtx(() => [
|
|
75
|
-
renderSlot(_ctx.$slots, "tag")
|
|
75
|
+
renderSlot(_ctx.$slots, "tag", {}, void 0, true)
|
|
76
76
|
]),
|
|
77
77
|
key: "5"
|
|
78
78
|
} : void 0,
|
|
79
79
|
unref(slots).loading ? {
|
|
80
80
|
name: "loading",
|
|
81
81
|
fn: withCtx(() => [
|
|
82
|
-
renderSlot(_ctx.$slots, "loading")
|
|
82
|
+
renderSlot(_ctx.$slots, "loading", {}, void 0, true)
|
|
83
83
|
]),
|
|
84
84
|
key: "6"
|
|
85
|
-
} :
|
|
85
|
+
} : {
|
|
86
|
+
name: "loading",
|
|
87
|
+
fn: withCtx(() => [
|
|
88
|
+
(openBlock(), createElementBlock("svg", {
|
|
89
|
+
class: "circular gm-inline gm-h-[30px] gm-w-[30px]",
|
|
90
|
+
viewBox: "0 0 50 50"
|
|
91
|
+
}, [
|
|
92
|
+
createElementVNode("circle", {
|
|
93
|
+
class: "path gm-stroke-2",
|
|
94
|
+
cx: "25",
|
|
95
|
+
cy: "25",
|
|
96
|
+
r: "20",
|
|
97
|
+
fill: "none"
|
|
98
|
+
})
|
|
99
|
+
]))
|
|
100
|
+
]),
|
|
101
|
+
key: "7"
|
|
102
|
+
},
|
|
86
103
|
unref(slots).label ? {
|
|
87
104
|
name: "label",
|
|
88
105
|
fn: withCtx((slotValue) => [
|
|
89
|
-
renderSlot(_ctx.$slots, "label", normalizeProps(guardReactiveProps(slotValue)))
|
|
106
|
+
renderSlot(_ctx.$slots, "label", normalizeProps(guardReactiveProps(slotValue)), void 0, true)
|
|
90
107
|
]),
|
|
91
|
-
key: "
|
|
108
|
+
key: "8"
|
|
92
109
|
} : void 0
|
|
93
110
|
]),
|
|
94
111
|
1040
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.vue2.mjs","sources":["../../../../../../../packages/components/src/base/select/Select.vue"],"sourcesContent":["<template>\r\n <el-select ref=\"elRef\" v-bind=\"props\" v-on=\"elEvents\">\r\n <template v-if=\"slots.default\" #default>\r\n <slot name=\"default\" />\r\n </template>\r\n <template v-if=\"slots.header\" #header>\r\n <slot name=\"header\" />\r\n </template>\r\n <template v-if=\"slots.footer\" #footer>\r\n <slot name=\"footer\" />\r\n </template>\r\n <template v-if=\"slots.prefix\" #prefix>\r\n <slot name=\"prefix\" />\r\n </template>\r\n <template v-if=\"slots.empty\" #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n <template v-if=\"slots.tag\" #tag>\r\n <slot name=\"tag\" />\r\n </template>\r\n <template v-if=\"slots.loading\" #loading>\r\n <slot name=\"loading\" />\r\n </template>\r\n <template v-if=\"slots.label\" #label=\"slotValue\">\r\n <slot name=\"label\" v-bind=\"slotValue\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { ref, useSlots } from 'vue';\r\nimport { getGmEvent, getGmExports } from '@giime/utils';\r\nimport { elSelectEmits, selectEmits, selectProps } from './select';\r\n\r\ndefineOptions({\r\n name: 'GmSelect',\r\n});\r\nconst slots = useSlots();\r\nconst props = defineProps(selectProps);\r\nconst emit = defineEmits(selectEmits);\r\n// 重发el的事件\r\nconst elEvents = getGmEvent(elSelectEmits, emit);\r\n\r\nconst elRef = ref();\r\nconst exposeNames = ['focus', 'blur'] as const;\r\nconst { exposeFns } = getGmExports(elRef, exposeNames);\r\n\r\ndefineExpose({\r\n ...exposeFns,\r\n});\r\n</script>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Select.vue2.mjs","sources":["../../../../../../../packages/components/src/base/select/Select.vue"],"sourcesContent":["<template>\r\n <el-select ref=\"elRef\" v-bind=\"props\" v-on=\"elEvents\">\r\n <template v-if=\"slots.default\" #default>\r\n <slot name=\"default\" />\r\n </template>\r\n <template v-if=\"slots.header\" #header>\r\n <slot name=\"header\" />\r\n </template>\r\n <template v-if=\"slots.footer\" #footer>\r\n <slot name=\"footer\" />\r\n </template>\r\n <template v-if=\"slots.prefix\" #prefix>\r\n <slot name=\"prefix\" />\r\n </template>\r\n <template v-if=\"slots.empty\" #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n <template v-if=\"slots.tag\" #tag>\r\n <slot name=\"tag\" />\r\n </template>\r\n <template v-if=\"slots.loading\" #loading>\r\n <slot name=\"loading\" />\r\n </template>\r\n <template v-else #loading>\r\n <svg class=\"circular gm-inline gm-h-[30px] gm-w-[30px]\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path gm-stroke-2\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" />\r\n </svg>\r\n </template>\r\n <template v-if=\"slots.label\" #label=\"slotValue\">\r\n <slot name=\"label\" v-bind=\"slotValue\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { ref, useSlots } from 'vue';\r\nimport { getGmEvent, getGmExports } from '@giime/utils';\r\nimport { elSelectEmits, selectEmits, selectProps } from './select';\r\n\r\ndefineOptions({\r\n name: 'GmSelect',\r\n});\r\nconst slots = useSlots();\r\nconst props = defineProps(selectProps);\r\nconst emit = defineEmits(selectEmits);\r\n// 重发el的事件\r\nconst elEvents = getGmEvent(elSelectEmits, emit);\r\n\r\nconst elRef = ref();\r\nconst exposeNames = ['focus', 'blur'] as const;\r\nconst { exposeFns } = getGmExports(elRef, exposeNames);\r\n\r\ndefineExpose({\r\n ...exposeFns,\r\n});\r\n</script>\r\n<style lang=\"scss\" scoped>\r\n.circular {\r\n animation: loading-rotate 2s linear infinite;\r\n}\r\n.path {\r\n animation: loading-dash 1.5s ease-in-out infinite;\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: 0;\r\n stroke: var(--el-color-primary);\r\n stroke-linecap: round;\r\n}\r\n@keyframes loading-rotate {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n@keyframes loading-dash {\r\n 0% {\r\n stroke-dasharray: 1, 200;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: -40px;\r\n }\r\n 100% {\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: -120px;\r\n }\r\n}\r\n</style>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAyCA,IAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AACvB,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAEb,IAAM,MAAA,QAAA,GAAW,UAAW,CAAA,aAAA,EAAe,IAAI,CAAA,CAAA;AAE/C,IAAA,MAAM,QAAQ,GAAI,EAAA,CAAA;AAClB,IAAM,MAAA,WAAA,GAAc,CAAC,OAAA,EAAS,MAAM,CAAA,CAAA;AACpC,IAAA,MAAM,EAAE,SAAA,EAAc,GAAA,YAAA,CAAa,OAAO,WAAW,CAAA,CAAA;AAErD,IAAa,QAAA,CAAA;AAAA,MACX,GAAG,SAAA;AAAA,KACJ,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.vue3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
8
8
|
type: StringConstructor;
|
|
9
9
|
required: true;
|
|
10
10
|
};
|
|
11
|
+
loading: {
|
|
12
|
+
type: BooleanConstructor;
|
|
13
|
+
default: boolean;
|
|
14
|
+
};
|
|
11
15
|
multiple: {
|
|
12
16
|
type: BooleanConstructor;
|
|
13
17
|
default: boolean;
|
|
@@ -45,6 +49,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
45
49
|
type: StringConstructor;
|
|
46
50
|
required: true;
|
|
47
51
|
};
|
|
52
|
+
loading: {
|
|
53
|
+
type: BooleanConstructor;
|
|
54
|
+
default: boolean;
|
|
55
|
+
};
|
|
48
56
|
multiple: {
|
|
49
57
|
type: BooleanConstructor;
|
|
50
58
|
default: boolean;
|
|
@@ -75,6 +83,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
75
83
|
}, {
|
|
76
84
|
options: import("../../..").SelectOptionsOptionType[];
|
|
77
85
|
disabled: boolean;
|
|
86
|
+
loading: boolean;
|
|
78
87
|
label: string;
|
|
79
88
|
multiple: boolean;
|
|
80
89
|
optionLabel: string;
|
package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs
CHANGED
|
@@ -37,11 +37,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
37
37
|
disabled: _ctx.disabled,
|
|
38
38
|
options: _ctx.options,
|
|
39
39
|
labelKey: _ctx.labelKey,
|
|
40
|
+
loading: _ctx.loading,
|
|
40
41
|
optionLabel: _ctx.optionLabel,
|
|
41
42
|
optionValue: _ctx.optionValue,
|
|
42
43
|
class: "gm-w-full",
|
|
43
44
|
onChange: _cache[1] || (_cache[1] = ($event) => emit("change", $event))
|
|
44
|
-
}, null, 8, ["modelValue", "placeholder", "multiple", "disabled", "options", "labelKey", "optionLabel", "optionValue"])
|
|
45
|
+
}, null, 8, ["modelValue", "placeholder", "multiple", "disabled", "options", "labelKey", "loading", "optionLabel", "optionValue"])
|
|
45
46
|
]),
|
|
46
47
|
_: 1
|
|
47
48
|
/* STABLE */
|
package/es/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchFormSelect.vue2.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue"],"sourcesContent":["<template>\r\n <gm-form-item :prop=\"prop\" class=\"\">\r\n <gm-select-options\r\n v-model=\"modelValue\"\r\n :placeholder=\"label\"\r\n :multiple=\"multiple\"\r\n filterable\r\n clearable\r\n collapse-tags\r\n collapse-tags-tooltip\r\n :disabled=\"disabled\"\r\n :options=\"options\"\r\n :labelKey=\"labelKey\"\r\n :optionLabel=\"optionLabel\"\r\n :optionValue=\"optionValue\"\r\n class=\"gm-w-full\"\r\n @change=\"emit('change', $event)\"\r\n />\r\n </gm-form-item>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\r\nimport { SearchFormSelectName, searchFormSelectEmits, searchFormSelectProps } from './searchFormSelect';\r\nimport type { SelectProps } from '@giime/components/src/base/select';\r\n\r\ndefineOptions({\r\n name: SearchFormSelectName,\r\n});\r\nconst props = defineProps(searchFormSelectProps);\r\nconst modelValue = defineModel<SelectProps['modelValue'] | undefined>();\r\n\r\nconst emit = defineEmits(searchFormSelectEmits);\r\nuseWatchModelChange(modelValue, { prop: props.prop });\r\n</script>\r\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"SearchFormSelect.vue2.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue"],"sourcesContent":["<template>\r\n <gm-form-item :prop=\"prop\" class=\"\">\r\n <gm-select-options\r\n v-model=\"modelValue\"\r\n :placeholder=\"label\"\r\n :multiple=\"multiple\"\r\n filterable\r\n clearable\r\n collapse-tags\r\n collapse-tags-tooltip\r\n :disabled=\"disabled\"\r\n :options=\"options\"\r\n :labelKey=\"labelKey\"\r\n :loading=\"loading\"\r\n :optionLabel=\"optionLabel\"\r\n :optionValue=\"optionValue\"\r\n class=\"gm-w-full\"\r\n @change=\"emit('change', $event)\"\r\n />\r\n </gm-form-item>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\r\nimport { SearchFormSelectName, searchFormSelectEmits, searchFormSelectProps } from './searchFormSelect';\r\nimport type { SelectProps } from '@giime/components/src/base/select';\r\n\r\ndefineOptions({\r\n name: SearchFormSelectName,\r\n});\r\nconst props = defineProps(searchFormSelectProps);\r\nconst modelValue = defineModel<SelectProps['modelValue'] | undefined>();\r\n\r\nconst emit = defineEmits(searchFormSelectEmits);\r\nuseWatchModelChange(modelValue, { prop: props.prop });\r\n</script>\r\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;AA6BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAM,MAAA,UAAA,GAAaA,QAAmD,CAAA,OAAA,EAAA,YAAA,CAAA,CAAA;AAEtE,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAA,mBAAA,CAAoB,UAAY,EAAA,EAAE,IAAM,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -9,6 +9,10 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
9
9
|
type: StringConstructor;
|
|
10
10
|
required: true;
|
|
11
11
|
};
|
|
12
|
+
loading: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
12
16
|
multiple: {
|
|
13
17
|
type: BooleanConstructor;
|
|
14
18
|
default: boolean;
|
|
@@ -46,6 +50,10 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
46
50
|
type: StringConstructor;
|
|
47
51
|
required: true;
|
|
48
52
|
};
|
|
53
|
+
loading: {
|
|
54
|
+
type: BooleanConstructor;
|
|
55
|
+
default: boolean;
|
|
56
|
+
};
|
|
49
57
|
multiple: {
|
|
50
58
|
type: BooleanConstructor;
|
|
51
59
|
default: boolean;
|
|
@@ -76,6 +84,7 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
76
84
|
}, {
|
|
77
85
|
options: import("../../../index.js").SelectOptionsOptionType[];
|
|
78
86
|
disabled: boolean;
|
|
87
|
+
loading: boolean;
|
|
79
88
|
label: string;
|
|
80
89
|
multiple: boolean;
|
|
81
90
|
optionLabel: string;
|
package/es/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchFormSelect.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.ts"],"sourcesContent":["import { selectOptionsProps } from '@giime/components/src/composite/selectOptions/selectOptions';\r\nimport { searchFormCommonProps } from '../common';\r\nimport type { OptionProps } from '@giime/components/src/base';\r\n// import type { PropType } from 'vue';\r\nexport interface SearchFormSelectPropsOption {\r\n label: OptionProps['label'];\r\n value: OptionProps['value'];\r\n}\r\nexport const searchFormSelectProps = {\r\n ...searchFormCommonProps,\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n prop: {\r\n type: String,\r\n required: true as const,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: selectOptionsProps.options,\r\n optionLabel: selectOptionsProps.optionLabel,\r\n // 自定义指定option中的value字段\r\n optionValue: selectOptionsProps.optionValue,\r\n labelKey: selectOptionsProps.labelKey,\r\n};\r\n\r\nexport const searchFormSelectEmits = {\r\n change: (...value: any[]) => !!value,\r\n};\r\nexport const SearchFormSelectName = 'GmSearchFormSelect';\r\n"],"names":[],"mappings":";;;AAQO,MAAM,qBAAwB,GAAA;AAAA,EACnC,GAAG,qBAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,SAAS,kBAAmB,CAAA,OAAA;AAAA,EAC5B,aAAa,kBAAmB,CAAA,WAAA;AAAA;AAAA,EAEhC,aAAa,kBAAmB,CAAA,WAAA;AAAA,EAChC,UAAU,kBAAmB,CAAA,QAAA;AAC/B,EAAA;AAEO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,oBAAuB,GAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"searchFormSelect.mjs","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.ts"],"sourcesContent":["import { selectOptionsProps } from '@giime/components/src/composite/selectOptions/selectOptions';\r\nimport { searchFormCommonProps } from '../common';\r\nimport type { OptionProps } from '@giime/components/src/base';\r\n// import type { PropType } from 'vue';\r\nexport interface SearchFormSelectPropsOption {\r\n label: OptionProps['label'];\r\n value: OptionProps['value'];\r\n}\r\nexport const searchFormSelectProps = {\r\n ...searchFormCommonProps,\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n prop: {\r\n type: String,\r\n required: true as const,\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: selectOptionsProps.options,\r\n optionLabel: selectOptionsProps.optionLabel,\r\n // 自定义指定option中的value字段\r\n optionValue: selectOptionsProps.optionValue,\r\n labelKey: selectOptionsProps.labelKey,\r\n};\r\n\r\nexport const searchFormSelectEmits = {\r\n change: (...value: any[]) => !!value,\r\n};\r\nexport const SearchFormSelectName = 'GmSearchFormSelect';\r\n"],"names":[],"mappings":";;;AAQO,MAAM,qBAAwB,GAAA;AAAA,EACnC,GAAG,qBAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,SAAS,kBAAmB,CAAA,OAAA;AAAA,EAC5B,aAAa,kBAAmB,CAAA,WAAA;AAAA;AAAA,EAEhC,aAAa,kBAAmB,CAAA,WAAA;AAAA,EAChC,UAAU,kBAAmB,CAAA,QAAA;AAC/B,EAAA;AAEO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,oBAAuB,GAAA;;;;"}
|
package/es/giime/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.3.
|
|
1
|
+
export declare const version = "0.3.16";
|
|
@@ -9,5 +9,5 @@ export interface DateownloadZipItem {
|
|
|
9
9
|
export declare const useDownload: () => {
|
|
10
10
|
downloadByUrl: (url: string, options?: DownloadOptions) => Promise<void>;
|
|
11
11
|
downloadByRes: (res: AxiosResponse<any, any>, options?: DownloadOptions) => Promise<void>;
|
|
12
|
-
downloadToZip: (fileList: DateownloadZipItem[], filename: string) => Promise<
|
|
12
|
+
downloadToZip: (fileList: DateownloadZipItem[], filename: string) => Promise<unknown>;
|
|
13
13
|
};
|
|
@@ -49,7 +49,7 @@ const useDownload = () => {
|
|
|
49
49
|
modalInfo.close();
|
|
50
50
|
};
|
|
51
51
|
const downloadToZip = async (fileList, filename) => {
|
|
52
|
-
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
53
|
const currentContentClass = `message${Date.now()}`;
|
|
54
54
|
const downloadCount = ref(0);
|
|
55
55
|
const len = fileList.length;
|
|
@@ -72,19 +72,19 @@ const useDownload = () => {
|
|
|
72
72
|
editElementContent(currentContentClass, `\u603B\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${len}\uFF0C\u5DF2\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${downloadCount.value}`);
|
|
73
73
|
if (downloadCount.value == len) {
|
|
74
74
|
editElementContent(currentContentClass, `\u6B63\u5728\u5408\u5E76...`);
|
|
75
|
-
zipInstance.generateAsync({ type: "blob" }).then((res2) => {
|
|
75
|
+
zipInstance.generateAsync({ type: "blob" }).then(async (res2) => {
|
|
76
76
|
modalInfo.close();
|
|
77
77
|
const fileUrl = window.URL.createObjectURL(res2);
|
|
78
|
-
downloadByUrl(fileUrl, { filename });
|
|
78
|
+
await downloadByUrl(fileUrl, { filename });
|
|
79
|
+
resolve(true);
|
|
79
80
|
}).catch((error) => {
|
|
80
|
-
console.error(error);
|
|
81
|
+
console.error("error", error);
|
|
82
|
+
reject(error);
|
|
81
83
|
});
|
|
82
84
|
}
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
|
-
}
|
|
86
|
-
console.error(error);
|
|
87
|
-
}
|
|
87
|
+
});
|
|
88
88
|
};
|
|
89
89
|
const createDownload = (options) => {
|
|
90
90
|
return new Promise((resolve, reject) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\r\nimport FileSaver from 'file-saver';\r\n\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport JSZip from 'jszip';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport type { AxiosResponse } from 'axios';\r\n\r\nexport interface DownloadOptions {\r\n filename?: string;\r\n}\r\nexport interface DateownloadZipItem {\r\n url: string;\r\n filename?: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n const getUrlFilename = (url: string) => {\r\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\r\n return filename;\r\n };\r\n /**\r\n * 通过url下载\r\n * @param url\r\n * @param options\r\n */\r\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\r\n const filename = options?.filename || getUrlFilename(url);\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n await createDownload({\r\n url,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 通过接口响应结果下载\r\n * @param res\r\n * @param options\r\n */\r\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\r\n let contentDispositionName = (res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition'])?.split('filename=')[1];\r\n try {\r\n contentDispositionName = decodeURIComponent(contentDispositionName);\r\n } catch {}\r\n const filename = options?.filename || contentDispositionName || 'file';\r\n const resBlob = await res.data;\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n // 设置type类型\r\n const blob = new Blob([resBlob]);\r\n const fileUrl = window.URL.createObjectURL(blob);\r\n await createDownload({\r\n url: fileUrl,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 下载多文件 转为zip\r\n * @param fileList\r\n * @param filename\r\n */\r\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\r\n try {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n filename: currentItem.filename ?? getUrlFilename(currentItem.url),\r\n isZip: true,\r\n };\r\n createDownload(downblobOptions).then(res => {\r\n zipInstance.file(downblobOptions.filename, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n editElementContent(currentContentClass, `正在合并...`);\r\n\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(res => {\r\n modalInfo.close();\r\n\r\n const fileUrl = window.URL.createObjectURL(res);\r\n // FileSaver.saveAs(res, filename);\r\n downloadByUrl(fileUrl, { filename });\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // 创建一个新的 XMLHttpRequest 对象\r\n const xhr = new XMLHttpRequest();\r\n // 初始化一个GET请求\r\n xhr.open('GET', options.url, true);\r\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\r\n\r\n // 监听 progress 事件\r\n xhr.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\r\n if (options.uuid) {\r\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\r\n }\r\n }\r\n };\r\n\r\n // 监听 load 事件,表示下载完成\r\n xhr.onload = function (e) {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n // const url = window.URL.createObjectURL(blob);\r\n if (!options.isZip) {\r\n FileSaver.saveAs(blob, options.filename);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n\r\n resolve(blob);\r\n }\r\n };\r\n\r\n // 监听 error 事件\r\n xhr.onerror = function (e) {\r\n GmMessage.error('下载异常,请重试');\r\n reject(e);\r\n };\r\n\r\n // 发送请求\r\n xhr.send();\r\n });\r\n };\r\n return { downloadByUrl, downloadByRes, downloadToZip };\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["uuidv4","res"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\r\nimport FileSaver from 'file-saver';\r\n\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport JSZip from 'jszip';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport type { AxiosResponse } from 'axios';\r\n\r\nexport interface DownloadOptions {\r\n filename?: string;\r\n}\r\nexport interface DateownloadZipItem {\r\n url: string;\r\n filename?: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n const getUrlFilename = (url: string) => {\r\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\r\n return filename;\r\n };\r\n /**\r\n * 通过url下载\r\n * @param url\r\n * @param options\r\n */\r\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\r\n const filename = options?.filename || getUrlFilename(url);\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n await createDownload({\r\n url,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 通过接口响应结果下载\r\n * @param res\r\n * @param options\r\n */\r\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\r\n let contentDispositionName = (res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition'])?.split('filename=')[1];\r\n try {\r\n contentDispositionName = decodeURIComponent(contentDispositionName);\r\n } catch {}\r\n const filename = options?.filename || contentDispositionName || 'file';\r\n const resBlob = await res.data;\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n // 设置type类型\r\n const blob = new Blob([resBlob]);\r\n const fileUrl = window.URL.createObjectURL(blob);\r\n await createDownload({\r\n url: fileUrl,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 下载多文件 转为zip\r\n * @param fileList\r\n * @param filename\r\n */\r\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\r\n return new Promise((resolve, reject) => {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n filename: currentItem.filename ?? getUrlFilename(currentItem.url),\r\n isZip: true,\r\n };\r\n createDownload(downblobOptions).then(res => {\r\n zipInstance.file(downblobOptions.filename, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n editElementContent(currentContentClass, `正在合并...`);\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(async res => {\r\n modalInfo.close();\r\n\r\n const fileUrl = window.URL.createObjectURL(res);\r\n // FileSaver.saveAs(res, filename);\r\n await downloadByUrl(fileUrl, { filename });\r\n resolve(true);\r\n })\r\n .catch(error => {\r\n console.error('error', error);\r\n reject(error);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n };\r\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // 创建一个新的 XMLHttpRequest 对象\r\n const xhr = new XMLHttpRequest();\r\n // 初始化一个GET请求\r\n xhr.open('GET', options.url, true);\r\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\r\n\r\n // 监听 progress 事件\r\n xhr.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\r\n if (options.uuid) {\r\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\r\n }\r\n }\r\n };\r\n\r\n // 监听 load 事件,表示下载完成\r\n xhr.onload = function (e) {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n // const url = window.URL.createObjectURL(blob);\r\n if (!options.isZip) {\r\n FileSaver.saveAs(blob, options.filename);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n\r\n resolve(blob);\r\n }\r\n };\r\n\r\n // 监听 error 事件\r\n xhr.onerror = function (e) {\r\n GmMessage.error('下载异常,请重试');\r\n reject(e);\r\n };\r\n\r\n // 发送请求\r\n xhr.send();\r\n });\r\n };\r\n return { downloadByUrl, downloadByRes, downloadToZip };\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["uuidv4","res"],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/// <reference types="@vueuse/shared" />
|
|
2
2
|
import { type MaybeRefOrGetter } from '@vueuse/core';
|
|
3
3
|
import type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';
|
|
4
|
+
/**
|
|
5
|
+
* indexedDB 的封装
|
|
6
|
+
* 与 @vueuse/integrations/useIDBKeyval 的区别是,这个hook提供等待indexedDB 初始化完成的方法 initIndexedDBComplete
|
|
7
|
+
*/
|
|
4
8
|
export declare const useIDBKeyval: <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {
|
|
5
9
|
data: import("@vueuse/shared").RemovableRef<T>;
|
|
6
10
|
isFinished: import("vue").Ref<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useIDBKeyval/index.ts"],"sourcesContent":["import { watch } from 'vue';\r\nimport { useIDBKeyval as _useIDBKeyval } from '@vueuse/integrations/useIDBKeyval';\r\nimport { type MaybeRefOrGetter, createEventHook } from '@vueuse/core';\r\nimport type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';\r\n\r\nexport const useIDBKeyval = <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {\r\n const { data, isFinished, set } = _useIDBKeyval(key, initialValue, options);\r\n const IDBInitResult = createEventHook();\r\n /**当indexedDB 初始化完成 */\r\n const initIndexedDBComplete = async () => {\r\n if (isFinished.value) {\r\n return;\r\n }\r\n return new Promise<undefined>(resolve => {\r\n IDBInitResult.on(resolve);\r\n });\r\n };\r\n watch(isFinished, newValue => {\r\n if (newValue) {\r\n IDBInitResult.trigger();\r\n }\r\n });\r\n return {\r\n data,\r\n isFinished,\r\n set,\r\n initIndexedDBComplete,\r\n };\r\n};\r\n"],"names":["_useIDBKeyval"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/base/useIDBKeyval/index.ts"],"sourcesContent":["import { watch } from 'vue';\r\nimport { useIDBKeyval as _useIDBKeyval } from '@vueuse/integrations/useIDBKeyval';\r\nimport { type MaybeRefOrGetter, createEventHook } from '@vueuse/core';\r\nimport type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';\r\n\r\n/**\r\n * indexedDB 的封装\r\n * 与 @vueuse/integrations/useIDBKeyval 的区别是,这个hook提供等待indexedDB 初始化完成的方法 initIndexedDBComplete\r\n */\r\nexport const useIDBKeyval = <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {\r\n const { data, isFinished, set } = _useIDBKeyval(key, initialValue, options);\r\n const IDBInitResult = createEventHook();\r\n /**当indexedDB 初始化完成 */\r\n const initIndexedDBComplete = async () => {\r\n if (isFinished.value) {\r\n return;\r\n }\r\n return new Promise<undefined>(resolve => {\r\n IDBInitResult.on(resolve);\r\n });\r\n };\r\n watch(isFinished, newValue => {\r\n if (newValue) {\r\n IDBInitResult.trigger();\r\n }\r\n });\r\n return {\r\n data,\r\n isFinished,\r\n set,\r\n initIndexedDBComplete,\r\n };\r\n};\r\n"],"names":["_useIDBKeyval"],"mappings":";;;;AASO,MAAM,YAAe,GAAA,CAAI,GAAkB,EAAA,YAAA,EAAmC,OAA4B,KAAA;AAC/G,EAAM,MAAA,EAAE,MAAM,UAAY,EAAA,GAAA,KAAQA,cAAc,CAAA,GAAA,EAAK,cAAc,OAAO,CAAA,CAAA;AAC1E,EAAA,MAAM,gBAAgB,eAAgB,EAAA,CAAA;AAEtC,EAAA,MAAM,wBAAwB,YAAY;AACxC,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAA,OAAA;AAAA,KACF;AACA,IAAO,OAAA,IAAI,QAAmB,CAAW,OAAA,KAAA;AACvC,MAAA,aAAA,CAAc,GAAG,OAAO,CAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACH,CAAA;AACA,EAAA,KAAA,CAAM,YAAY,CAAY,QAAA,KAAA;AAC5B,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,aAAA,CAAc,OAAQ,EAAA,CAAA;AAAA,KACxB;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,qBAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
package/es/index.css
CHANGED
|
@@ -569,6 +569,9 @@ video {
|
|
|
569
569
|
.gm-inline-block {
|
|
570
570
|
display: inline-block;
|
|
571
571
|
}
|
|
572
|
+
.gm-inline {
|
|
573
|
+
display: inline;
|
|
574
|
+
}
|
|
572
575
|
.gm-flex {
|
|
573
576
|
display: flex;
|
|
574
577
|
}
|
|
@@ -587,6 +590,9 @@ video {
|
|
|
587
590
|
.gm-h-1 {
|
|
588
591
|
height: 0.25rem;
|
|
589
592
|
}
|
|
593
|
+
.gm-h-\[30px\] {
|
|
594
|
+
height: 30px;
|
|
595
|
+
}
|
|
590
596
|
.gm-h-\[36px\] {
|
|
591
597
|
height: 36px;
|
|
592
598
|
}
|
|
@@ -602,6 +608,9 @@ video {
|
|
|
602
608
|
.gm-w-\[120px\] {
|
|
603
609
|
width: 120px;
|
|
604
610
|
}
|
|
611
|
+
.gm-w-\[30px\] {
|
|
612
|
+
width: 30px;
|
|
613
|
+
}
|
|
605
614
|
.gm-w-full {
|
|
606
615
|
width: 100%;
|
|
607
616
|
}
|
|
@@ -671,6 +680,9 @@ video {
|
|
|
671
680
|
--tw-bg-opacity: 1;
|
|
672
681
|
background-color: rgb(236 254 255 / var(--tw-bg-opacity));
|
|
673
682
|
}
|
|
683
|
+
.gm-stroke-2 {
|
|
684
|
+
stroke-width: 2;
|
|
685
|
+
}
|
|
674
686
|
.gm-p-4 {
|
|
675
687
|
padding: 1rem;
|
|
676
688
|
}
|
|
@@ -755,6 +767,44 @@ video {
|
|
|
755
767
|
margin: 0;
|
|
756
768
|
}
|
|
757
769
|
|
|
770
|
+
.gm-flex-center[data-v-2a79bac9] {
|
|
771
|
+
align-items: center;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
775
|
+
justify-content: space-between;
|
|
776
|
+
}
|
|
777
|
+
.circular[data-v-b391445c] {
|
|
778
|
+
animation: loading-rotate-b391445c 2s linear infinite;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.path[data-v-b391445c] {
|
|
782
|
+
animation: loading-dash-b391445c 1.5s ease-in-out infinite;
|
|
783
|
+
stroke-dasharray: 90, 150;
|
|
784
|
+
stroke-dashoffset: 0;
|
|
785
|
+
stroke: var(--el-color-primary);
|
|
786
|
+
stroke-linecap: round;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
@keyframes loading-rotate-b391445c {
|
|
790
|
+
to {
|
|
791
|
+
transform: rotate(360deg);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
@keyframes loading-dash-b391445c {
|
|
795
|
+
0% {
|
|
796
|
+
stroke-dasharray: 1, 200;
|
|
797
|
+
stroke-dashoffset: 0;
|
|
798
|
+
}
|
|
799
|
+
50% {
|
|
800
|
+
stroke-dasharray: 90, 150;
|
|
801
|
+
stroke-dashoffset: -40px;
|
|
802
|
+
}
|
|
803
|
+
100% {
|
|
804
|
+
stroke-dasharray: 90, 150;
|
|
805
|
+
stroke-dashoffset: -120px;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
758
808
|
.gm-number-interval-single[data-v-47a13fd0] {
|
|
759
809
|
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
760
810
|
box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
|
|
@@ -773,17 +823,6 @@ video {
|
|
|
773
823
|
.gm-number-interval-single[data-v-47a13fd0]:hover .gm-number-interval-close[data-v-47a13fd0] {
|
|
774
824
|
display: flex;
|
|
775
825
|
}
|
|
776
|
-
.gm-flex-center[data-v-2a79bac9] {
|
|
777
|
-
align-items: center;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
781
|
-
justify-content: space-between;
|
|
782
|
-
}
|
|
783
|
-
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
784
|
-
margin-right: 0;
|
|
785
|
-
margin-bottom: 4px;
|
|
786
|
-
}
|
|
787
826
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
788
827
|
border-right: none;
|
|
789
828
|
}
|
|
@@ -807,6 +846,10 @@ video {
|
|
|
807
846
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__border-left-patch {
|
|
808
847
|
height: 0;
|
|
809
848
|
}
|
|
849
|
+
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
850
|
+
margin-right: 0;
|
|
851
|
+
margin-bottom: 4px;
|
|
852
|
+
}
|
|
810
853
|
|
|
811
854
|
.pagination-container[data-v-19230954] {
|
|
812
855
|
background: #fff;
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var Select_vue_vue_type_script_setup_true_lang = require('./Select.vue2.js');
|
|
6
|
+
require('./Select.vue3.js');
|
|
6
7
|
var _pluginVue_exportHelper = require('../../../../_virtual/_plugin-vue_export-helper.js');
|
|
7
8
|
|
|
8
|
-
var Select = /* @__PURE__ */ _pluginVue_exportHelper.default(Select_vue_vue_type_script_setup_true_lang.default, [["__file", "Select.vue"]]);
|
|
9
|
+
var Select = /* @__PURE__ */ _pluginVue_exportHelper.default(Select_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-b391445c"], ["__file", "Select.vue"]]);
|
|
9
10
|
|
|
10
11
|
exports.default = Select;
|
|
11
12
|
//# sourceMappingURL=Select.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Select.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -41,58 +41,75 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
41
41
|
vue.unref(slots).default ? {
|
|
42
42
|
name: "default",
|
|
43
43
|
fn: vue.withCtx(() => [
|
|
44
|
-
vue.renderSlot(_ctx.$slots, "default")
|
|
44
|
+
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
|
|
45
45
|
]),
|
|
46
46
|
key: "0"
|
|
47
47
|
} : void 0,
|
|
48
48
|
vue.unref(slots).header ? {
|
|
49
49
|
name: "header",
|
|
50
50
|
fn: vue.withCtx(() => [
|
|
51
|
-
vue.renderSlot(_ctx.$slots, "header")
|
|
51
|
+
vue.renderSlot(_ctx.$slots, "header", {}, void 0, true)
|
|
52
52
|
]),
|
|
53
53
|
key: "1"
|
|
54
54
|
} : void 0,
|
|
55
55
|
vue.unref(slots).footer ? {
|
|
56
56
|
name: "footer",
|
|
57
57
|
fn: vue.withCtx(() => [
|
|
58
|
-
vue.renderSlot(_ctx.$slots, "footer")
|
|
58
|
+
vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
|
|
59
59
|
]),
|
|
60
60
|
key: "2"
|
|
61
61
|
} : void 0,
|
|
62
62
|
vue.unref(slots).prefix ? {
|
|
63
63
|
name: "prefix",
|
|
64
64
|
fn: vue.withCtx(() => [
|
|
65
|
-
vue.renderSlot(_ctx.$slots, "prefix")
|
|
65
|
+
vue.renderSlot(_ctx.$slots, "prefix", {}, void 0, true)
|
|
66
66
|
]),
|
|
67
67
|
key: "3"
|
|
68
68
|
} : void 0,
|
|
69
69
|
vue.unref(slots).empty ? {
|
|
70
70
|
name: "empty",
|
|
71
71
|
fn: vue.withCtx(() => [
|
|
72
|
-
vue.renderSlot(_ctx.$slots, "empty")
|
|
72
|
+
vue.renderSlot(_ctx.$slots, "empty", {}, void 0, true)
|
|
73
73
|
]),
|
|
74
74
|
key: "4"
|
|
75
75
|
} : void 0,
|
|
76
76
|
vue.unref(slots).tag ? {
|
|
77
77
|
name: "tag",
|
|
78
78
|
fn: vue.withCtx(() => [
|
|
79
|
-
vue.renderSlot(_ctx.$slots, "tag")
|
|
79
|
+
vue.renderSlot(_ctx.$slots, "tag", {}, void 0, true)
|
|
80
80
|
]),
|
|
81
81
|
key: "5"
|
|
82
82
|
} : void 0,
|
|
83
83
|
vue.unref(slots).loading ? {
|
|
84
84
|
name: "loading",
|
|
85
85
|
fn: vue.withCtx(() => [
|
|
86
|
-
vue.renderSlot(_ctx.$slots, "loading")
|
|
86
|
+
vue.renderSlot(_ctx.$slots, "loading", {}, void 0, true)
|
|
87
87
|
]),
|
|
88
88
|
key: "6"
|
|
89
|
-
} :
|
|
89
|
+
} : {
|
|
90
|
+
name: "loading",
|
|
91
|
+
fn: vue.withCtx(() => [
|
|
92
|
+
(vue.openBlock(), vue.createElementBlock("svg", {
|
|
93
|
+
class: "circular gm-inline gm-h-[30px] gm-w-[30px]",
|
|
94
|
+
viewBox: "0 0 50 50"
|
|
95
|
+
}, [
|
|
96
|
+
vue.createElementVNode("circle", {
|
|
97
|
+
class: "path gm-stroke-2",
|
|
98
|
+
cx: "25",
|
|
99
|
+
cy: "25",
|
|
100
|
+
r: "20",
|
|
101
|
+
fill: "none"
|
|
102
|
+
})
|
|
103
|
+
]))
|
|
104
|
+
]),
|
|
105
|
+
key: "7"
|
|
106
|
+
},
|
|
90
107
|
vue.unref(slots).label ? {
|
|
91
108
|
name: "label",
|
|
92
109
|
fn: vue.withCtx((slotValue) => [
|
|
93
|
-
vue.renderSlot(_ctx.$slots, "label", vue.normalizeProps(vue.guardReactiveProps(slotValue)))
|
|
110
|
+
vue.renderSlot(_ctx.$slots, "label", vue.normalizeProps(vue.guardReactiveProps(slotValue)), void 0, true)
|
|
94
111
|
]),
|
|
95
|
-
key: "
|
|
112
|
+
key: "8"
|
|
96
113
|
} : void 0
|
|
97
114
|
]),
|
|
98
115
|
1040
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.vue2.js","sources":["../../../../../../../packages/components/src/base/select/Select.vue"],"sourcesContent":["<template>\r\n <el-select ref=\"elRef\" v-bind=\"props\" v-on=\"elEvents\">\r\n <template v-if=\"slots.default\" #default>\r\n <slot name=\"default\" />\r\n </template>\r\n <template v-if=\"slots.header\" #header>\r\n <slot name=\"header\" />\r\n </template>\r\n <template v-if=\"slots.footer\" #footer>\r\n <slot name=\"footer\" />\r\n </template>\r\n <template v-if=\"slots.prefix\" #prefix>\r\n <slot name=\"prefix\" />\r\n </template>\r\n <template v-if=\"slots.empty\" #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n <template v-if=\"slots.tag\" #tag>\r\n <slot name=\"tag\" />\r\n </template>\r\n <template v-if=\"slots.loading\" #loading>\r\n <slot name=\"loading\" />\r\n </template>\r\n <template v-if=\"slots.label\" #label=\"slotValue\">\r\n <slot name=\"label\" v-bind=\"slotValue\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { ref, useSlots } from 'vue';\r\nimport { getGmEvent, getGmExports } from '@giime/utils';\r\nimport { elSelectEmits, selectEmits, selectProps } from './select';\r\n\r\ndefineOptions({\r\n name: 'GmSelect',\r\n});\r\nconst slots = useSlots();\r\nconst props = defineProps(selectProps);\r\nconst emit = defineEmits(selectEmits);\r\n// 重发el的事件\r\nconst elEvents = getGmEvent(elSelectEmits, emit);\r\n\r\nconst elRef = ref();\r\nconst exposeNames = ['focus', 'blur'] as const;\r\nconst { exposeFns } = getGmExports(elRef, exposeNames);\r\n\r\ndefineExpose({\r\n ...exposeFns,\r\n});\r\n</script>\r\n"],"names":["useSlots","getGmEvent","elSelectEmits","ref","getGmExports"],"mappings":";;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Select.vue2.js","sources":["../../../../../../../packages/components/src/base/select/Select.vue"],"sourcesContent":["<template>\r\n <el-select ref=\"elRef\" v-bind=\"props\" v-on=\"elEvents\">\r\n <template v-if=\"slots.default\" #default>\r\n <slot name=\"default\" />\r\n </template>\r\n <template v-if=\"slots.header\" #header>\r\n <slot name=\"header\" />\r\n </template>\r\n <template v-if=\"slots.footer\" #footer>\r\n <slot name=\"footer\" />\r\n </template>\r\n <template v-if=\"slots.prefix\" #prefix>\r\n <slot name=\"prefix\" />\r\n </template>\r\n <template v-if=\"slots.empty\" #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n <template v-if=\"slots.tag\" #tag>\r\n <slot name=\"tag\" />\r\n </template>\r\n <template v-if=\"slots.loading\" #loading>\r\n <slot name=\"loading\" />\r\n </template>\r\n <template v-else #loading>\r\n <svg class=\"circular gm-inline gm-h-[30px] gm-w-[30px]\" viewBox=\"0 0 50 50\">\r\n <circle class=\"path gm-stroke-2\" cx=\"25\" cy=\"25\" r=\"20\" fill=\"none\" />\r\n </svg>\r\n </template>\r\n <template v-if=\"slots.label\" #label=\"slotValue\">\r\n <slot name=\"label\" v-bind=\"slotValue\" />\r\n </template>\r\n </el-select>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { ref, useSlots } from 'vue';\r\nimport { getGmEvent, getGmExports } from '@giime/utils';\r\nimport { elSelectEmits, selectEmits, selectProps } from './select';\r\n\r\ndefineOptions({\r\n name: 'GmSelect',\r\n});\r\nconst slots = useSlots();\r\nconst props = defineProps(selectProps);\r\nconst emit = defineEmits(selectEmits);\r\n// 重发el的事件\r\nconst elEvents = getGmEvent(elSelectEmits, emit);\r\n\r\nconst elRef = ref();\r\nconst exposeNames = ['focus', 'blur'] as const;\r\nconst { exposeFns } = getGmExports(elRef, exposeNames);\r\n\r\ndefineExpose({\r\n ...exposeFns,\r\n});\r\n</script>\r\n<style lang=\"scss\" scoped>\r\n.circular {\r\n animation: loading-rotate 2s linear infinite;\r\n}\r\n.path {\r\n animation: loading-dash 1.5s ease-in-out infinite;\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: 0;\r\n stroke: var(--el-color-primary);\r\n stroke-linecap: round;\r\n}\r\n@keyframes loading-rotate {\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n@keyframes loading-dash {\r\n 0% {\r\n stroke-dasharray: 1, 200;\r\n stroke-dashoffset: 0;\r\n }\r\n 50% {\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: -40px;\r\n }\r\n 100% {\r\n stroke-dasharray: 90, 150;\r\n stroke-dashoffset: -120px;\r\n }\r\n}\r\n</style>\r\n"],"names":["useSlots","getGmEvent","elSelectEmits","ref","getGmExports"],"mappings":";;;;;;;;;;;;;;;;;;AAyCA,IAAA,MAAM,QAAQA,YAAS,EAAA,CAAA;AACvB,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAEb,IAAM,MAAA,QAAA,GAAWC,gBAAW,CAAAC,oBAAA,EAAe,IAAI,CAAA,CAAA;AAE/C,IAAA,MAAM,QAAQC,OAAI,EAAA,CAAA;AAClB,IAAM,MAAA,WAAA,GAAc,CAAC,OAAA,EAAS,MAAM,CAAA,CAAA;AACpC,IAAA,MAAM,EAAE,SAAA,EAAc,GAAAC,sBAAA,CAAa,OAAO,WAAW,CAAA,CAAA;AAErD,IAAa,QAAA,CAAA;AAAA,MACX,GAAG,SAAA;AAAA,KACJ,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.vue3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
8
8
|
type: StringConstructor;
|
|
9
9
|
required: true;
|
|
10
10
|
};
|
|
11
|
+
loading: {
|
|
12
|
+
type: BooleanConstructor;
|
|
13
|
+
default: boolean;
|
|
14
|
+
};
|
|
11
15
|
multiple: {
|
|
12
16
|
type: BooleanConstructor;
|
|
13
17
|
default: boolean;
|
|
@@ -45,6 +49,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
45
49
|
type: StringConstructor;
|
|
46
50
|
required: true;
|
|
47
51
|
};
|
|
52
|
+
loading: {
|
|
53
|
+
type: BooleanConstructor;
|
|
54
|
+
default: boolean;
|
|
55
|
+
};
|
|
48
56
|
multiple: {
|
|
49
57
|
type: BooleanConstructor;
|
|
50
58
|
default: boolean;
|
|
@@ -75,6 +83,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
75
83
|
}, {
|
|
76
84
|
options: import("../../..").SelectOptionsOptionType[];
|
|
77
85
|
disabled: boolean;
|
|
86
|
+
loading: boolean;
|
|
78
87
|
label: string;
|
|
79
88
|
multiple: boolean;
|
|
80
89
|
optionLabel: string;
|
package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js
CHANGED
|
@@ -41,11 +41,12 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
41
41
|
disabled: _ctx.disabled,
|
|
42
42
|
options: _ctx.options,
|
|
43
43
|
labelKey: _ctx.labelKey,
|
|
44
|
+
loading: _ctx.loading,
|
|
44
45
|
optionLabel: _ctx.optionLabel,
|
|
45
46
|
optionValue: _ctx.optionValue,
|
|
46
47
|
class: "gm-w-full",
|
|
47
48
|
onChange: _cache[1] || (_cache[1] = ($event) => emit("change", $event))
|
|
48
|
-
}, null, 8, ["modelValue", "placeholder", "multiple", "disabled", "options", "labelKey", "optionLabel", "optionValue"])
|
|
49
|
+
}, null, 8, ["modelValue", "placeholder", "multiple", "disabled", "options", "labelKey", "loading", "optionLabel", "optionValue"])
|
|
49
50
|
]),
|
|
50
51
|
_: 1
|
|
51
52
|
/* STABLE */
|
package/lib/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchFormSelect.vue2.js","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue"],"sourcesContent":["<template>\r\n <gm-form-item :prop=\"prop\" class=\"\">\r\n <gm-select-options\r\n v-model=\"modelValue\"\r\n :placeholder=\"label\"\r\n :multiple=\"multiple\"\r\n filterable\r\n clearable\r\n collapse-tags\r\n collapse-tags-tooltip\r\n :disabled=\"disabled\"\r\n :options=\"options\"\r\n :labelKey=\"labelKey\"\r\n :optionLabel=\"optionLabel\"\r\n :optionValue=\"optionValue\"\r\n class=\"gm-w-full\"\r\n @change=\"emit('change', $event)\"\r\n />\r\n </gm-form-item>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\r\nimport { SearchFormSelectName, searchFormSelectEmits, searchFormSelectProps } from './searchFormSelect';\r\nimport type { SelectProps } from '@giime/components/src/base/select';\r\n\r\ndefineOptions({\r\n name: SearchFormSelectName,\r\n});\r\nconst props = defineProps(searchFormSelectProps);\r\nconst modelValue = defineModel<SelectProps['modelValue'] | undefined>();\r\n\r\nconst emit = defineEmits(searchFormSelectEmits);\r\nuseWatchModelChange(modelValue, { prop: props.prop });\r\n</script>\r\n"],"names":["_useModel","useWatchModelChange"],"mappings":";;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"SearchFormSelect.vue2.js","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/SearchFormSelect.vue"],"sourcesContent":["<template>\r\n <gm-form-item :prop=\"prop\" class=\"\">\r\n <gm-select-options\r\n v-model=\"modelValue\"\r\n :placeholder=\"label\"\r\n :multiple=\"multiple\"\r\n filterable\r\n clearable\r\n collapse-tags\r\n collapse-tags-tooltip\r\n :disabled=\"disabled\"\r\n :options=\"options\"\r\n :labelKey=\"labelKey\"\r\n :loading=\"loading\"\r\n :optionLabel=\"optionLabel\"\r\n :optionValue=\"optionValue\"\r\n class=\"gm-w-full\"\r\n @change=\"emit('change', $event)\"\r\n />\r\n </gm-form-item>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { useWatchModelChange } from '../../composables/useWatchModelChange';\r\nimport { SearchFormSelectName, searchFormSelectEmits, searchFormSelectProps } from './searchFormSelect';\r\nimport type { SelectProps } from '@giime/components/src/base/select';\r\n\r\ndefineOptions({\r\n name: SearchFormSelectName,\r\n});\r\nconst props = defineProps(searchFormSelectProps);\r\nconst modelValue = defineModel<SelectProps['modelValue'] | undefined>();\r\n\r\nconst emit = defineEmits(searchFormSelectEmits);\r\nuseWatchModelChange(modelValue, { prop: props.prop });\r\n</script>\r\n"],"names":["_useModel","useWatchModelChange"],"mappings":";;;;;;;;;;;;;;;;;;;AA6BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAM,MAAA,UAAA,GAAaA,YAAmD,CAAA,OAAA,EAAA,YAAA,CAAA,CAAA;AAEtE,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AACb,IAAAC,uCAAA,CAAoB,UAAY,EAAA,EAAE,IAAM,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -9,6 +9,10 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
9
9
|
type: StringConstructor;
|
|
10
10
|
required: true;
|
|
11
11
|
};
|
|
12
|
+
loading: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
12
16
|
multiple: {
|
|
13
17
|
type: BooleanConstructor;
|
|
14
18
|
default: boolean;
|
|
@@ -46,6 +50,10 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
46
50
|
type: StringConstructor;
|
|
47
51
|
required: true;
|
|
48
52
|
};
|
|
53
|
+
loading: {
|
|
54
|
+
type: BooleanConstructor;
|
|
55
|
+
default: boolean;
|
|
56
|
+
};
|
|
49
57
|
multiple: {
|
|
50
58
|
type: BooleanConstructor;
|
|
51
59
|
default: boolean;
|
|
@@ -76,6 +84,7 @@ export declare const GmSearchFormSelect: import("../../../../../../utils").SFCWi
|
|
|
76
84
|
}, {
|
|
77
85
|
options: import("../../../index.js").SelectOptionsOptionType[];
|
|
78
86
|
disabled: boolean;
|
|
87
|
+
loading: boolean;
|
|
79
88
|
label: string;
|
|
80
89
|
multiple: boolean;
|
|
81
90
|
optionLabel: string;
|
package/lib/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchFormSelect.js","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.ts"],"sourcesContent":["import { selectOptionsProps } from '@giime/components/src/composite/selectOptions/selectOptions';\r\nimport { searchFormCommonProps } from '../common';\r\nimport type { OptionProps } from '@giime/components/src/base';\r\n// import type { PropType } from 'vue';\r\nexport interface SearchFormSelectPropsOption {\r\n label: OptionProps['label'];\r\n value: OptionProps['value'];\r\n}\r\nexport const searchFormSelectProps = {\r\n ...searchFormCommonProps,\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n prop: {\r\n type: String,\r\n required: true as const,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: selectOptionsProps.options,\r\n optionLabel: selectOptionsProps.optionLabel,\r\n // 自定义指定option中的value字段\r\n optionValue: selectOptionsProps.optionValue,\r\n labelKey: selectOptionsProps.labelKey,\r\n};\r\n\r\nexport const searchFormSelectEmits = {\r\n change: (...value: any[]) => !!value,\r\n};\r\nexport const SearchFormSelectName = 'GmSearchFormSelect';\r\n"],"names":["searchFormCommonProps","selectOptionsProps"],"mappings":";;;;;AAQO,MAAM,qBAAwB,GAAA;AAAA,EACnC,GAAGA,4BAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,SAASC,gCAAmB,CAAA,OAAA;AAAA,EAC5B,aAAaA,gCAAmB,CAAA,WAAA;AAAA;AAAA,EAEhC,aAAaA,gCAAmB,CAAA,WAAA;AAAA,EAChC,UAAUA,gCAAmB,CAAA,QAAA;AAC/B,EAAA;AAEO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,oBAAuB,GAAA;;;;;;"}
|
|
1
|
+
{"version":3,"file":"searchFormSelect.js","sources":["../../../../../../../../../packages/components/src/composite/searchForm/searchFormItems/select/searchFormSelect.ts"],"sourcesContent":["import { selectOptionsProps } from '@giime/components/src/composite/selectOptions/selectOptions';\r\nimport { searchFormCommonProps } from '../common';\r\nimport type { OptionProps } from '@giime/components/src/base';\r\n// import type { PropType } from 'vue';\r\nexport interface SearchFormSelectPropsOption {\r\n label: OptionProps['label'];\r\n value: OptionProps['value'];\r\n}\r\nexport const searchFormSelectProps = {\r\n ...searchFormCommonProps,\r\n label: {\r\n type: String,\r\n default: '',\r\n },\r\n prop: {\r\n type: String,\r\n required: true as const,\r\n },\r\n loading: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n multiple: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n options: selectOptionsProps.options,\r\n optionLabel: selectOptionsProps.optionLabel,\r\n // 自定义指定option中的value字段\r\n optionValue: selectOptionsProps.optionValue,\r\n labelKey: selectOptionsProps.labelKey,\r\n};\r\n\r\nexport const searchFormSelectEmits = {\r\n change: (...value: any[]) => !!value,\r\n};\r\nexport const SearchFormSelectName = 'GmSearchFormSelect';\r\n"],"names":["searchFormCommonProps","selectOptionsProps"],"mappings":";;;;;AAQO,MAAM,qBAAwB,GAAA;AAAA,EACnC,GAAGA,4BAAA;AAAA,EACH,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,IAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,SAASC,gCAAmB,CAAA,OAAA;AAAA,EAC5B,aAAaA,gCAAmB,CAAA,WAAA;AAAA;AAAA,EAEhC,aAAaA,gCAAmB,CAAA,WAAA;AAAA,EAChC,UAAUA,gCAAmB,CAAA,QAAA;AAC/B,EAAA;AAEO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAQ,EAAA,CAAA,GAAI,KAAiB,KAAA,CAAC,CAAC,KAAA;AACjC,EAAA;AACO,MAAM,oBAAuB,GAAA;;;;;;"}
|
package/lib/giime/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.3.
|
|
1
|
+
export declare const version = "0.3.16";
|
|
@@ -9,5 +9,5 @@ export interface DateownloadZipItem {
|
|
|
9
9
|
export declare const useDownload: () => {
|
|
10
10
|
downloadByUrl: (url: string, options?: DownloadOptions) => Promise<void>;
|
|
11
11
|
downloadByRes: (res: AxiosResponse<any, any>, options?: DownloadOptions) => Promise<void>;
|
|
12
|
-
downloadToZip: (fileList: DateownloadZipItem[], filename: string) => Promise<
|
|
12
|
+
downloadToZip: (fileList: DateownloadZipItem[], filename: string) => Promise<unknown>;
|
|
13
13
|
};
|
|
@@ -51,7 +51,7 @@ const useDownload = () => {
|
|
|
51
51
|
modalInfo.close();
|
|
52
52
|
};
|
|
53
53
|
const downloadToZip = async (fileList, filename) => {
|
|
54
|
-
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
55
|
const currentContentClass = `message${Date.now()}`;
|
|
56
56
|
const downloadCount = vue.ref(0);
|
|
57
57
|
const len = fileList.length;
|
|
@@ -74,19 +74,19 @@ const useDownload = () => {
|
|
|
74
74
|
editElementContent(currentContentClass, `\u603B\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${len}\uFF0C\u5DF2\u4E0B\u8F7D\u6587\u4EF6\u6570\uFF1A${downloadCount.value}`);
|
|
75
75
|
if (downloadCount.value == len) {
|
|
76
76
|
editElementContent(currentContentClass, `\u6B63\u5728\u5408\u5E76...`);
|
|
77
|
-
zipInstance.generateAsync({ type: "blob" }).then((res2) => {
|
|
77
|
+
zipInstance.generateAsync({ type: "blob" }).then(async (res2) => {
|
|
78
78
|
modalInfo.close();
|
|
79
79
|
const fileUrl = window.URL.createObjectURL(res2);
|
|
80
|
-
downloadByUrl(fileUrl, { filename });
|
|
80
|
+
await downloadByUrl(fileUrl, { filename });
|
|
81
|
+
resolve(true);
|
|
81
82
|
}).catch((error) => {
|
|
82
|
-
console.error(error);
|
|
83
|
+
console.error("error", error);
|
|
84
|
+
reject(error);
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
87
|
});
|
|
86
88
|
}
|
|
87
|
-
}
|
|
88
|
-
console.error(error);
|
|
89
|
-
}
|
|
89
|
+
});
|
|
90
90
|
};
|
|
91
91
|
const createDownload = (options) => {
|
|
92
92
|
return new Promise((resolve, reject) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\r\nimport FileSaver from 'file-saver';\r\n\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport JSZip from 'jszip';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport type { AxiosResponse } from 'axios';\r\n\r\nexport interface DownloadOptions {\r\n filename?: string;\r\n}\r\nexport interface DateownloadZipItem {\r\n url: string;\r\n filename?: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n const getUrlFilename = (url: string) => {\r\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\r\n return filename;\r\n };\r\n /**\r\n * 通过url下载\r\n * @param url\r\n * @param options\r\n */\r\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\r\n const filename = options?.filename || getUrlFilename(url);\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n await createDownload({\r\n url,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 通过接口响应结果下载\r\n * @param res\r\n * @param options\r\n */\r\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\r\n let contentDispositionName = (res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition'])?.split('filename=')[1];\r\n try {\r\n contentDispositionName = decodeURIComponent(contentDispositionName);\r\n } catch {}\r\n const filename = options?.filename || contentDispositionName || 'file';\r\n const resBlob = await res.data;\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n // 设置type类型\r\n const blob = new Blob([resBlob]);\r\n const fileUrl = window.URL.createObjectURL(blob);\r\n await createDownload({\r\n url: fileUrl,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 下载多文件 转为zip\r\n * @param fileList\r\n * @param filename\r\n */\r\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\r\n try {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n filename: currentItem.filename ?? getUrlFilename(currentItem.url),\r\n isZip: true,\r\n };\r\n createDownload(downblobOptions).then(res => {\r\n zipInstance.file(downblobOptions.filename, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n editElementContent(currentContentClass, `正在合并...`);\r\n\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(res => {\r\n modalInfo.close();\r\n\r\n const fileUrl = window.URL.createObjectURL(res);\r\n // FileSaver.saveAs(res, filename);\r\n downloadByUrl(fileUrl, { filename });\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n });\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // 创建一个新的 XMLHttpRequest 对象\r\n const xhr = new XMLHttpRequest();\r\n // 初始化一个GET请求\r\n xhr.open('GET', options.url, true);\r\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\r\n\r\n // 监听 progress 事件\r\n xhr.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\r\n if (options.uuid) {\r\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\r\n }\r\n }\r\n };\r\n\r\n // 监听 load 事件,表示下载完成\r\n xhr.onload = function (e) {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n // const url = window.URL.createObjectURL(blob);\r\n if (!options.isZip) {\r\n FileSaver.saveAs(blob, options.filename);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n\r\n resolve(blob);\r\n }\r\n };\r\n\r\n // 监听 error 事件\r\n xhr.onerror = function (e) {\r\n GmMessage.error('下载异常,请重试');\r\n reject(e);\r\n };\r\n\r\n // 发送请求\r\n xhr.send();\r\n });\r\n };\r\n return { downloadByUrl, downloadByRes, downloadToZip };\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["uuidv4","GmNotification","h","ref","res","GmMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useDownload/index.ts"],"sourcesContent":["import { h, ref } from 'vue';\r\nimport FileSaver from 'file-saver';\r\n\r\nimport GmNotification from '@giime/components/src/plugins/notification';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport JSZip from 'jszip';\r\nimport { GmMessage } from '@giime/components/src/plugins/message';\r\nimport type { AxiosResponse } from 'axios';\r\n\r\nexport interface DownloadOptions {\r\n filename?: string;\r\n}\r\nexport interface DateownloadZipItem {\r\n url: string;\r\n filename?: string;\r\n}\r\n\r\nexport const useDownload = () => {\r\n const getUrlFilename = (url: string) => {\r\n const filename = url.split('/').pop()?.split('?')[0] || 'file';\r\n return filename;\r\n };\r\n /**\r\n * 通过url下载\r\n * @param url\r\n * @param options\r\n */\r\n const downloadByUrl = async (url: string, options?: DownloadOptions) => {\r\n const filename = options?.filename || getUrlFilename(url);\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n await createDownload({\r\n url,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 通过接口响应结果下载\r\n * @param res\r\n * @param options\r\n */\r\n const downloadByRes = async (res: AxiosResponse<any, any>, options?: DownloadOptions) => {\r\n let contentDispositionName = (res?.headers?.['content-disposition'] || res?.headers?.['Content-Disposition'])?.split('filename=')[1];\r\n try {\r\n contentDispositionName = decodeURIComponent(contentDispositionName);\r\n } catch {}\r\n const filename = options?.filename || contentDispositionName || 'file';\r\n const resBlob = await res.data;\r\n const curId = uuidv4();\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', { className: curId }, [`当前下载进度 0%`]),\r\n duration: 0,\r\n });\r\n // 设置type类型\r\n const blob = new Blob([resBlob]);\r\n const fileUrl = window.URL.createObjectURL(blob);\r\n await createDownload({\r\n url: fileUrl,\r\n filename,\r\n uuid: curId,\r\n });\r\n modalInfo.close();\r\n };\r\n /**\r\n * 下载多文件 转为zip\r\n * @param fileList\r\n * @param filename\r\n */\r\n const downloadToZip = async (fileList: DateownloadZipItem[], filename: string) => {\r\n return new Promise((resolve, reject) => {\r\n const currentContentClass = `message${Date.now()}`;\r\n const downloadCount = ref(0);\r\n const len = fileList.length;\r\n const modalInfo = GmNotification({\r\n title: '下载中',\r\n message: h('div', [h('div', { className: currentContentClass }, [`总下载文件数:${len},已下载文件数:${downloadCount.value}`])]),\r\n duration: 0,\r\n });\r\n // h('div', { className: currentClass }, [`当前下载进度 ${progress.value}%`]),\r\n const zipInstance = new JSZip();\r\n for (let i = 0; i < len; i++) {\r\n const currentItem = fileList[i];\r\n // const fileBlob = await\r\n const downblobOptions = {\r\n url: currentItem.url,\r\n filename: currentItem.filename ?? getUrlFilename(currentItem.url),\r\n isZip: true,\r\n };\r\n createDownload(downblobOptions).then(res => {\r\n zipInstance.file(downblobOptions.filename, res);\r\n downloadCount.value++;\r\n editElementContent(currentContentClass, `总下载文件数:${len},已下载文件数:${downloadCount.value}`);\r\n if (downloadCount.value == len) {\r\n editElementContent(currentContentClass, `正在合并...`);\r\n zipInstance\r\n .generateAsync({ type: 'blob' })\r\n .then(async res => {\r\n modalInfo.close();\r\n\r\n const fileUrl = window.URL.createObjectURL(res);\r\n // FileSaver.saveAs(res, filename);\r\n await downloadByUrl(fileUrl, { filename });\r\n resolve(true);\r\n })\r\n .catch(error => {\r\n console.error('error', error);\r\n reject(error);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n };\r\n const createDownload = (options: { url: string; filename: string; uuid?: string; isZip?: boolean }) => {\r\n return new Promise<Blob>((resolve, reject) => {\r\n // 创建一个新的 XMLHttpRequest 对象\r\n const xhr = new XMLHttpRequest();\r\n // 初始化一个GET请求\r\n xhr.open('GET', options.url, true);\r\n xhr.responseType = 'blob'; // 设置响应类型为blob,以便处理二进制文件\r\n\r\n // 监听 progress 事件\r\n xhr.onprogress = function (event) {\r\n if (event.lengthComputable) {\r\n const percentComplete = Math.floor((event.loaded / event.total) * 100);\r\n if (options.uuid) {\r\n editElementContent(options.uuid, `当前下载进度 ${percentComplete}%`);\r\n }\r\n }\r\n };\r\n\r\n // 监听 load 事件,表示下载完成\r\n xhr.onload = function (e) {\r\n const eventTarget = e.target as XMLHttpRequest;\r\n if ([200, 304].includes(eventTarget.status)) {\r\n const blob = eventTarget.response;\r\n // const url = window.URL.createObjectURL(blob);\r\n if (!options.isZip) {\r\n FileSaver.saveAs(blob, options.filename);\r\n GmNotification({\r\n type: 'success',\r\n title: '温馨提示',\r\n message: '下载完成',\r\n duration: 3000,\r\n });\r\n }\r\n\r\n resolve(blob);\r\n }\r\n };\r\n\r\n // 监听 error 事件\r\n xhr.onerror = function (e) {\r\n GmMessage.error('下载异常,请重试');\r\n reject(e);\r\n };\r\n\r\n // 发送请求\r\n xhr.send();\r\n });\r\n };\r\n return { downloadByUrl, downloadByRes, downloadToZip };\r\n};\r\n\r\n// 动态更新 notify 中的message 信息\r\nconst editElementContent = (className: string, content: string) => {\r\n // eslint-disable-next-line unicorn/prefer-query-selector\r\n const currentEle = document.getElementsByClassName(className)[0];\r\n if (currentEle) {\r\n currentEle.innerHTML = content;\r\n }\r\n};\r\n"],"names":["uuidv4","GmNotification","h","ref","res","GmMessage"],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/// <reference types="@vueuse/shared" />
|
|
2
2
|
import { type MaybeRefOrGetter } from '@vueuse/core';
|
|
3
3
|
import type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';
|
|
4
|
+
/**
|
|
5
|
+
* indexedDB 的封装
|
|
6
|
+
* 与 @vueuse/integrations/useIDBKeyval 的区别是,这个hook提供等待indexedDB 初始化完成的方法 initIndexedDBComplete
|
|
7
|
+
*/
|
|
4
8
|
export declare const useIDBKeyval: <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {
|
|
5
9
|
data: import("@vueuse/shared").RemovableRef<T>;
|
|
6
10
|
isFinished: import("vue").Ref<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useIDBKeyval/index.ts"],"sourcesContent":["import { watch } from 'vue';\r\nimport { useIDBKeyval as _useIDBKeyval } from '@vueuse/integrations/useIDBKeyval';\r\nimport { type MaybeRefOrGetter, createEventHook } from '@vueuse/core';\r\nimport type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';\r\n\r\nexport const useIDBKeyval = <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {\r\n const { data, isFinished, set } = _useIDBKeyval(key, initialValue, options);\r\n const IDBInitResult = createEventHook();\r\n /**当indexedDB 初始化完成 */\r\n const initIndexedDBComplete = async () => {\r\n if (isFinished.value) {\r\n return;\r\n }\r\n return new Promise<undefined>(resolve => {\r\n IDBInitResult.on(resolve);\r\n });\r\n };\r\n watch(isFinished, newValue => {\r\n if (newValue) {\r\n IDBInitResult.trigger();\r\n }\r\n });\r\n return {\r\n data,\r\n isFinished,\r\n set,\r\n initIndexedDBComplete,\r\n };\r\n};\r\n"],"names":["_useIDBKeyval","createEventHook","watch"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../packages/hooks/base/useIDBKeyval/index.ts"],"sourcesContent":["import { watch } from 'vue';\r\nimport { useIDBKeyval as _useIDBKeyval } from '@vueuse/integrations/useIDBKeyval';\r\nimport { type MaybeRefOrGetter, createEventHook } from '@vueuse/core';\r\nimport type { UseIDBOptions } from '@vueuse/integrations/useIDBKeyval';\r\n\r\n/**\r\n * indexedDB 的封装\r\n * 与 @vueuse/integrations/useIDBKeyval 的区别是,这个hook提供等待indexedDB 初始化完成的方法 initIndexedDBComplete\r\n */\r\nexport const useIDBKeyval = <T>(key: IDBValidKey, initialValue: MaybeRefOrGetter<T>, options?: UseIDBOptions) => {\r\n const { data, isFinished, set } = _useIDBKeyval(key, initialValue, options);\r\n const IDBInitResult = createEventHook();\r\n /**当indexedDB 初始化完成 */\r\n const initIndexedDBComplete = async () => {\r\n if (isFinished.value) {\r\n return;\r\n }\r\n return new Promise<undefined>(resolve => {\r\n IDBInitResult.on(resolve);\r\n });\r\n };\r\n watch(isFinished, newValue => {\r\n if (newValue) {\r\n IDBInitResult.trigger();\r\n }\r\n });\r\n return {\r\n data,\r\n isFinished,\r\n set,\r\n initIndexedDBComplete,\r\n };\r\n};\r\n"],"names":["_useIDBKeyval","createEventHook","watch"],"mappings":";;;;;;AASO,MAAM,YAAe,GAAA,CAAI,GAAkB,EAAA,YAAA,EAAmC,OAA4B,KAAA;AAC/G,EAAM,MAAA,EAAE,MAAM,UAAY,EAAA,GAAA,KAAQA,2BAAc,CAAA,GAAA,EAAK,cAAc,OAAO,CAAA,CAAA;AAC1E,EAAA,MAAM,gBAAgBC,oBAAgB,EAAA,CAAA;AAEtC,EAAA,MAAM,wBAAwB,YAAY;AACxC,IAAA,IAAI,WAAW,KAAO,EAAA;AACpB,MAAA,OAAA;AAAA,KACF;AACA,IAAO,OAAA,IAAI,QAAmB,CAAW,OAAA,KAAA;AACvC,MAAA,aAAA,CAAc,GAAG,OAAO,CAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAAA,GACH,CAAA;AACA,EAAAC,SAAA,CAAM,YAAY,CAAY,QAAA,KAAA;AAC5B,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,aAAA,CAAc,OAAQ,EAAA,CAAA;AAAA,KACxB;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,qBAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
package/lib/index.css
CHANGED
|
@@ -569,6 +569,9 @@ video {
|
|
|
569
569
|
.gm-inline-block {
|
|
570
570
|
display: inline-block;
|
|
571
571
|
}
|
|
572
|
+
.gm-inline {
|
|
573
|
+
display: inline;
|
|
574
|
+
}
|
|
572
575
|
.gm-flex {
|
|
573
576
|
display: flex;
|
|
574
577
|
}
|
|
@@ -587,6 +590,9 @@ video {
|
|
|
587
590
|
.gm-h-1 {
|
|
588
591
|
height: 0.25rem;
|
|
589
592
|
}
|
|
593
|
+
.gm-h-\[30px\] {
|
|
594
|
+
height: 30px;
|
|
595
|
+
}
|
|
590
596
|
.gm-h-\[36px\] {
|
|
591
597
|
height: 36px;
|
|
592
598
|
}
|
|
@@ -602,6 +608,9 @@ video {
|
|
|
602
608
|
.gm-w-\[120px\] {
|
|
603
609
|
width: 120px;
|
|
604
610
|
}
|
|
611
|
+
.gm-w-\[30px\] {
|
|
612
|
+
width: 30px;
|
|
613
|
+
}
|
|
605
614
|
.gm-w-full {
|
|
606
615
|
width: 100%;
|
|
607
616
|
}
|
|
@@ -671,6 +680,9 @@ video {
|
|
|
671
680
|
--tw-bg-opacity: 1;
|
|
672
681
|
background-color: rgb(236 254 255 / var(--tw-bg-opacity));
|
|
673
682
|
}
|
|
683
|
+
.gm-stroke-2 {
|
|
684
|
+
stroke-width: 2;
|
|
685
|
+
}
|
|
674
686
|
.gm-p-4 {
|
|
675
687
|
padding: 1rem;
|
|
676
688
|
}
|
|
@@ -755,6 +767,44 @@ video {
|
|
|
755
767
|
margin: 0;
|
|
756
768
|
}
|
|
757
769
|
|
|
770
|
+
.gm-flex-center[data-v-2a79bac9] {
|
|
771
|
+
align-items: center;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
775
|
+
justify-content: space-between;
|
|
776
|
+
}
|
|
777
|
+
.circular[data-v-b391445c] {
|
|
778
|
+
animation: loading-rotate-b391445c 2s linear infinite;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.path[data-v-b391445c] {
|
|
782
|
+
animation: loading-dash-b391445c 1.5s ease-in-out infinite;
|
|
783
|
+
stroke-dasharray: 90, 150;
|
|
784
|
+
stroke-dashoffset: 0;
|
|
785
|
+
stroke: var(--el-color-primary);
|
|
786
|
+
stroke-linecap: round;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
@keyframes loading-rotate-b391445c {
|
|
790
|
+
to {
|
|
791
|
+
transform: rotate(360deg);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
@keyframes loading-dash-b391445c {
|
|
795
|
+
0% {
|
|
796
|
+
stroke-dasharray: 1, 200;
|
|
797
|
+
stroke-dashoffset: 0;
|
|
798
|
+
}
|
|
799
|
+
50% {
|
|
800
|
+
stroke-dasharray: 90, 150;
|
|
801
|
+
stroke-dashoffset: -40px;
|
|
802
|
+
}
|
|
803
|
+
100% {
|
|
804
|
+
stroke-dasharray: 90, 150;
|
|
805
|
+
stroke-dashoffset: -120px;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
758
808
|
.gm-number-interval-single[data-v-47a13fd0] {
|
|
759
809
|
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
|
|
760
810
|
box-shadow: 0 0 0 1px var(--el-input-border-color, var(--el-border-color)) inset;
|
|
@@ -773,17 +823,6 @@ video {
|
|
|
773
823
|
.gm-number-interval-single[data-v-47a13fd0]:hover .gm-number-interval-close[data-v-47a13fd0] {
|
|
774
824
|
display: flex;
|
|
775
825
|
}
|
|
776
|
-
.gm-flex-center[data-v-2a79bac9] {
|
|
777
|
-
align-items: center;
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
.gm-flex-justify-between[data-v-2a79bac9] {
|
|
781
|
-
justify-content: space-between;
|
|
782
|
-
}
|
|
783
|
-
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
784
|
-
margin-right: 0;
|
|
785
|
-
margin-bottom: 4px;
|
|
786
|
-
}
|
|
787
826
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__body .el-table__cell {
|
|
788
827
|
border-right: none;
|
|
789
828
|
}
|
|
@@ -807,6 +846,10 @@ video {
|
|
|
807
846
|
[data-v-72a53f6c] .gmTableNoBorder .el-table__border-left-patch {
|
|
808
847
|
height: 0;
|
|
809
848
|
}
|
|
849
|
+
[data-v-ec3af0bb] .gmSearchForm .el-form-item {
|
|
850
|
+
margin-right: 0;
|
|
851
|
+
margin-bottom: 4px;
|
|
852
|
+
}
|
|
810
853
|
|
|
811
854
|
.pagination-container[data-v-19230954] {
|
|
812
855
|
background: #fff;
|