@yimou6/common-ui 1.12.13 → 1.12.15
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/cdn/index.cdn.js +13 -13
- package/cdn/index.cdn.js.map +1 -1
- package/cdn/index.cdn.mjs +13 -13
- package/cdn/index.cdn.mjs.map +1 -1
- package/cdn/index.css +1 -1
- package/es/components/radio/index.d.ts +63 -38
- package/es/components/radio/src/radio.d.ts +25 -10
- package/es/components/radio/src/radio.mjs +26 -5
- package/es/components/radio/src/radio.mjs.map +1 -1
- package/es/components/radio/src/radio.vue.d.ts +63 -38
- package/es/components/radio/src/radio.vue2.mjs +4 -5
- package/es/components/radio/src/radio.vue2.mjs.map +1 -1
- package/es/components/search/src/search.vue.d.ts +1 -1
- package/es/components/search/src/search.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/ctyun-player.vue2.mjs +2 -3
- package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs +2 -4
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/tzj-player.vue2.mjs +9 -16
- package/es/components/tzj-player/src/tzj-player.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/ysPlayer.vue2.mjs +1 -2
- package/es/components/tzj-player/src/ysPlayer.vue2.mjs.map +1 -1
- package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +1 -2
- package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
- package/es/element-plus.types.d.ts +9 -0
- package/lib/components/radio/index.d.ts +63 -38
- package/lib/components/radio/src/radio.d.ts +25 -10
- package/lib/components/radio/src/radio.js +26 -4
- package/lib/components/radio/src/radio.js.map +1 -1
- package/lib/components/radio/src/radio.vue.d.ts +63 -38
- package/lib/components/radio/src/radio.vue2.js +3 -4
- package/lib/components/radio/src/radio.vue2.js.map +1 -1
- package/lib/components/search/src/search.vue.d.ts +1 -1
- package/lib/components/search/src/search.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/ctyun-player.vue2.js +2 -3
- package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/easyPlayer.vue2.js +2 -4
- package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/tzj-player.vue2.js +9 -16
- package/lib/components/tzj-player/src/tzj-player.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/ysPlayer.vue2.js +1 -2
- package/lib/components/tzj-player/src/ysPlayer.vue2.js.map +1 -1
- package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +1 -2
- package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
- package/lib/element-plus.types.d.ts +9 -0
- package/package.json +1 -1
- package/theme-default/i-tzj-player.css +1 -1
- package/theme-default/index.css +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.mjs","sources":["../../../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import type { ExtractPropTypes, ExtractPublicPropTypes, PropType } from
|
|
1
|
+
{"version":3,"file":"radio.mjs","sources":["../../../../../../../packages/components/radio/src/radio.ts"],"sourcesContent":["import type { ExtractPropTypes, ExtractPublicPropTypes, PropType } from \"vue\";\nimport type { ElRadioGroupProps } from \"../../../element-plus.types\";\nimport type Radio from \"./radio.vue\";\n\nexport const RadioProps = {\n modelValue: {\n type: [String, Number, Boolean] as PropType<\n ElRadioGroupProps[\"modelValue\"]\n >,\n },\n size: {\n type: String as PropType<ElRadioGroupProps[\"size\"]>,\n default: \"\",\n },\n disabled: Boolean as PropType<ElRadioGroupProps[\"disabled\"]>,\n textColor: {\n type: String as PropType<ElRadioGroupProps[\"textColor\"]>,\n default: \"\",\n },\n fill: {\n type: String as PropType<ElRadioGroupProps[\"fill\"]>,\n },\n validateEvent: {\n type: Boolean as PropType<ElRadioGroupProps[\"validateEvent\"]>,\n },\n type: {\n type: String as PropType<\"button\" | \"\">,\n default: \"\",\n },\n data: {\n type: [String, Array] as PropType<string | Record<string, any>[]>,\n default: () => [],\n },\n dataCallback: {\n type: Function as PropType<(list: Record<string, any>[]) => any[]>,\n },\n optLabel: {\n type: String,\n default: \"label\",\n },\n optValue: {\n type: String,\n default: \"value\",\n },\n onChange: {\n type: Function as PropType<\n (value: string | number | boolean | undefined) => void\n >,\n },\n};\n\nexport const RadioEmits = {\n \"update:modelValue\": (_value: string | number | boolean | undefined) => true,\n change: (_value: string | number | boolean | undefined) => true,\n};\n\nexport const excludeRadioKeys = [\n \"type\",\n \"data\",\n \"dataCallback\",\n \"optLabel\",\n \"optValue\",\n \"modelValue\",\n \"onChange\",\n];\n\nexport type RadioPropsType = ExtractPropTypes<typeof RadioProps>;\nexport type RadioPublicPropsType = ExtractPublicPropTypes<typeof RadioProps>;\nexport type RadioInstance = InstanceType<typeof Radio>;\nexport type RadioEmitsType = typeof RadioEmits;\n"],"names":[],"mappings":";;AAIO,MAAM,UAAa,GAAA;AAAA,EACxB,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,CAAC,MAAQ,EAAA,MAAA,EAAQ,OAAO;AAAA,GAGhC;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA,OAAA;AAAA,EACV,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAA,EAAM,CAAC,MAAA,EAAQ,KAAK,CAAA;AAAA,IACpB,OAAA,kBAAe,MAAA,CAAA,MAAA,EAAN,EAAA,SAAA;AAAA,GACX;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA;AAAA;AAIV;AAEO,MAAM,UAAa,GAAA;AAAA,EACxB,mBAAA,kBAAsB,MAAA,CAAA,CAAA,MAAA,KAAkD,IAAnD,EAAA,mBAAA,CAAA;AAAA,EACrB,MAAA,kBAAS,MAAA,CAAA,CAAA,MAAA,KAAkD,IAAnD,EAAA,QAAA;AACV;AAEO,MAAM,gBAAmB,GAAA;AAAA,EAC9B,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF;;;;"}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
-
modelValue:
|
|
2
|
+
modelValue: {
|
|
3
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["modelValue"]>;
|
|
4
|
+
};
|
|
3
5
|
size: {
|
|
4
|
-
type: import("vue").PropType<"
|
|
6
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["size"]>;
|
|
5
7
|
default: string;
|
|
6
8
|
};
|
|
7
|
-
disabled:
|
|
9
|
+
disabled: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["disabled"]>;
|
|
8
10
|
textColor: {
|
|
9
|
-
type:
|
|
11
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["textColor"]>;
|
|
10
12
|
default: string;
|
|
11
13
|
};
|
|
12
|
-
fill:
|
|
13
|
-
|
|
14
|
+
fill: {
|
|
15
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["fill"]>;
|
|
16
|
+
};
|
|
17
|
+
validateEvent: {
|
|
18
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["validateEvent"]>;
|
|
19
|
+
};
|
|
14
20
|
type: {
|
|
15
21
|
type: import("vue").PropType<"button" | "">;
|
|
16
22
|
default: string;
|
|
17
23
|
};
|
|
18
24
|
data: {
|
|
19
|
-
type: (
|
|
25
|
+
type: import("vue").PropType<string | Record<string, any>[]>;
|
|
20
26
|
default: () => never[];
|
|
21
27
|
};
|
|
22
28
|
dataCallback: {
|
|
23
|
-
type:
|
|
29
|
+
type: import("vue").PropType<(list: Record<string, any>[]) => any[]>;
|
|
24
30
|
};
|
|
25
31
|
optLabel: {
|
|
26
32
|
type: StringConstructor;
|
|
@@ -30,30 +36,39 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
30
36
|
type: StringConstructor;
|
|
31
37
|
default: string;
|
|
32
38
|
};
|
|
39
|
+
onChange: {
|
|
40
|
+
type: import("vue").PropType<(value: string | number | boolean | undefined) => void>;
|
|
41
|
+
};
|
|
33
42
|
}>, {
|
|
34
43
|
props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
|
|
35
|
-
modelValue:
|
|
44
|
+
modelValue: {
|
|
45
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["modelValue"]>;
|
|
46
|
+
};
|
|
36
47
|
size: {
|
|
37
|
-
type: import("vue").PropType<"
|
|
48
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["size"]>;
|
|
38
49
|
default: string;
|
|
39
50
|
};
|
|
40
|
-
disabled:
|
|
51
|
+
disabled: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["disabled"]>;
|
|
41
52
|
textColor: {
|
|
42
|
-
type:
|
|
53
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["textColor"]>;
|
|
43
54
|
default: string;
|
|
44
55
|
};
|
|
45
|
-
fill:
|
|
46
|
-
|
|
56
|
+
fill: {
|
|
57
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["fill"]>;
|
|
58
|
+
};
|
|
59
|
+
validateEvent: {
|
|
60
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["validateEvent"]>;
|
|
61
|
+
};
|
|
47
62
|
type: {
|
|
48
63
|
type: import("vue").PropType<"button" | "">;
|
|
49
64
|
default: string;
|
|
50
65
|
};
|
|
51
66
|
data: {
|
|
52
|
-
type: (
|
|
67
|
+
type: import("vue").PropType<string | Record<string, any>[]>;
|
|
53
68
|
default: () => never[];
|
|
54
69
|
};
|
|
55
70
|
dataCallback: {
|
|
56
|
-
type:
|
|
71
|
+
type: import("vue").PropType<(list: Record<string, any>[]) => any[]>;
|
|
57
72
|
};
|
|
58
73
|
optLabel: {
|
|
59
74
|
type: StringConstructor;
|
|
@@ -63,21 +78,24 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
63
78
|
type: StringConstructor;
|
|
64
79
|
default: string;
|
|
65
80
|
};
|
|
81
|
+
onChange: {
|
|
82
|
+
type: import("vue").PropType<(value: string | number | boolean | undefined) => void>;
|
|
83
|
+
};
|
|
66
84
|
}>> & Readonly<{
|
|
67
|
-
"onUpdate:modelValue"?: ((
|
|
68
|
-
onChange?: ((
|
|
85
|
+
"onUpdate:modelValue"?: ((_value: string | number | boolean | undefined) => any) | undefined;
|
|
86
|
+
onChange?: ((_value: string | number | boolean | undefined) => any) | undefined;
|
|
69
87
|
}> & {}>;
|
|
70
|
-
emit: ((event: "update:modelValue",
|
|
88
|
+
emit: ((event: "update:modelValue", _value: string | number | boolean | undefined) => void) & ((event: "change", _value: string | number | boolean | undefined) => void);
|
|
71
89
|
dictStore: {
|
|
72
90
|
dict: import("vue").Ref<Record<string, any>>;
|
|
73
91
|
getDict: (dictType: string) => Promise<any[]>;
|
|
74
92
|
} | undefined;
|
|
75
93
|
bindAttrs: import("vue").ComputedRef<any>;
|
|
76
|
-
radioOptions: import("vue").Ref<any[], any[]>;
|
|
94
|
+
radioOptions: import("vue").Ref<Record<string, any>[], Record<string, any>[]>;
|
|
77
95
|
setOptions: () => Promise<void>;
|
|
78
96
|
getList: () => Promise<any[]>;
|
|
79
97
|
value: import("vue").Ref<string, string>;
|
|
80
|
-
handleChange: (val:
|
|
98
|
+
handleChange: (val: string | number | boolean | undefined) => void;
|
|
81
99
|
readonly ElRadio: import("element-plus/es/utils").SFCWithInstall<{
|
|
82
100
|
new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
|
|
83
101
|
readonly border: BooleanConstructor;
|
|
@@ -516,31 +534,37 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
516
534
|
};
|
|
517
535
|
})>;
|
|
518
536
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
519
|
-
|
|
520
|
-
change: (
|
|
537
|
+
"update:modelValue": (_value: string | number | boolean | undefined) => boolean;
|
|
538
|
+
change: (_value: string | number | boolean | undefined) => boolean;
|
|
521
539
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
522
|
-
modelValue:
|
|
540
|
+
modelValue: {
|
|
541
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["modelValue"]>;
|
|
542
|
+
};
|
|
523
543
|
size: {
|
|
524
|
-
type: import("vue").PropType<"
|
|
544
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["size"]>;
|
|
525
545
|
default: string;
|
|
526
546
|
};
|
|
527
|
-
disabled:
|
|
547
|
+
disabled: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["disabled"]>;
|
|
528
548
|
textColor: {
|
|
529
|
-
type:
|
|
549
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["textColor"]>;
|
|
530
550
|
default: string;
|
|
531
551
|
};
|
|
532
|
-
fill:
|
|
533
|
-
|
|
552
|
+
fill: {
|
|
553
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["fill"]>;
|
|
554
|
+
};
|
|
555
|
+
validateEvent: {
|
|
556
|
+
type: import("vue").PropType<import("../../../element-plus.types").ElRadioGroupProps["validateEvent"]>;
|
|
557
|
+
};
|
|
534
558
|
type: {
|
|
535
559
|
type: import("vue").PropType<"button" | "">;
|
|
536
560
|
default: string;
|
|
537
561
|
};
|
|
538
562
|
data: {
|
|
539
|
-
type: (
|
|
563
|
+
type: import("vue").PropType<string | Record<string, any>[]>;
|
|
540
564
|
default: () => never[];
|
|
541
565
|
};
|
|
542
566
|
dataCallback: {
|
|
543
|
-
type:
|
|
567
|
+
type: import("vue").PropType<(list: Record<string, any>[]) => any[]>;
|
|
544
568
|
};
|
|
545
569
|
optLabel: {
|
|
546
570
|
type: StringConstructor;
|
|
@@ -550,17 +574,18 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
550
574
|
type: StringConstructor;
|
|
551
575
|
default: string;
|
|
552
576
|
};
|
|
577
|
+
onChange: {
|
|
578
|
+
type: import("vue").PropType<(value: string | number | boolean | undefined) => void>;
|
|
579
|
+
};
|
|
553
580
|
}>> & Readonly<{
|
|
554
|
-
"onUpdate:modelValue"?: ((
|
|
555
|
-
onChange?: ((
|
|
581
|
+
"onUpdate:modelValue"?: ((_value: string | number | boolean | undefined) => any) | undefined;
|
|
582
|
+
onChange?: ((_value: string | number | boolean | undefined) => any) | undefined;
|
|
556
583
|
}>, {
|
|
557
|
-
size: "" | "small" | "large" | "default";
|
|
584
|
+
size: "" | "small" | "large" | "default" | undefined;
|
|
558
585
|
type: "" | "button";
|
|
559
|
-
data: string |
|
|
586
|
+
data: string | Record<string, any>[];
|
|
560
587
|
optLabel: string;
|
|
561
588
|
optValue: string;
|
|
562
|
-
|
|
563
|
-
textColor: string;
|
|
564
|
-
validateEvent: boolean;
|
|
589
|
+
textColor: string | undefined;
|
|
565
590
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
566
591
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineComponent, inject, computed, ref, onMounted, watch, openBlock, createBlock, unref, mergeProps, withCtx, createElementBlock, Fragment, renderList, createTextVNode, toDisplayString } from 'vue';
|
|
2
2
|
import { ElRadioGroup, ElRadioButton, ElRadio } from 'element-plus';
|
|
3
3
|
import '../../../utils/index.mjs';
|
|
4
|
-
import { RadioProps, excludeRadioKeys } from './radio.mjs';
|
|
4
|
+
import { RadioProps, RadioEmits, excludeRadioKeys } from './radio.mjs';
|
|
5
5
|
import { DICT_STORE } from '../../../utils/provide.mjs';
|
|
6
6
|
import { excludeObjectKeys } from '../../../utils/util.mjs';
|
|
7
7
|
|
|
@@ -13,10 +13,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
13
13
|
},
|
|
14
14
|
__name: "radio",
|
|
15
15
|
props: RadioProps,
|
|
16
|
-
emits:
|
|
17
|
-
"update:modelValue": /* @__PURE__ */ __name((value) => value, "update:modelValue"),
|
|
18
|
-
change: /* @__PURE__ */ __name((value) => value, "change")
|
|
19
|
-
},
|
|
16
|
+
emits: RadioEmits,
|
|
20
17
|
setup(__props, { emit: __emit }) {
|
|
21
18
|
const props = __props;
|
|
22
19
|
const emit = __emit;
|
|
@@ -51,6 +48,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
51
48
|
{ deep: true, immediate: true }
|
|
52
49
|
);
|
|
53
50
|
const handleChange = /* @__PURE__ */ __name((val) => {
|
|
51
|
+
var _a;
|
|
52
|
+
(_a = props.onChange) == null ? void 0 : _a.call(props, val);
|
|
54
53
|
emit("change", val);
|
|
55
54
|
emit("update:modelValue", val);
|
|
56
55
|
}, "handleChange");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radio.vue2.mjs","sources":["../../../../../../../packages/components/radio/src/radio.vue"],"sourcesContent":["<script lang=\"ts\" setup>\
|
|
1
|
+
{"version":3,"file":"radio.vue2.mjs","sources":["../../../../../../../packages/components/radio/src/radio.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ElRadio, ElRadioButton, ElRadioGroup } from \"element-plus\";\nimport { computed, inject, onMounted, ref, watch } from \"vue\";\nimport { DICT_STORE, excludeObjectKeys } from \"../../../utils\";\nimport { excludeRadioKeys, RadioEmits, RadioProps } from \"./radio\";\n\ndefineOptions({\n name: \"IRadio\",\n});\nconst props = defineProps(RadioProps);\nconst emit = defineEmits(RadioEmits);\nconst dictStore = inject(DICT_STORE);\nconst bindAttrs = computed(() => excludeObjectKeys(props, excludeRadioKeys));\n\nconst radioOptions = ref<Record<string, any>[]>([]);\nonMounted(() => setOptions());\nwatch(\n () => props.data,\n () => setOptions(),\n { deep: true },\n);\nasync function setOptions() {\n const list = await getList();\n radioOptions.value = props.dataCallback ? props.dataCallback(list) : list;\n}\n\nasync function getList() {\n if (Array.isArray(props.data)) {\n return props.data;\n }\n if (dictStore) {\n return await dictStore.getDict(props.data);\n }\n return [];\n}\n\nconst value = ref(\"\");\nwatch(\n () => props.modelValue,\n (val: any) => (value.value = val),\n { deep: true, immediate: true },\n);\nconst handleChange = (val: string | number | boolean | undefined) => {\n props.onChange?.(val);\n emit(\"change\", val);\n emit(\"update:modelValue\", val);\n};\n</script>\n\n<template>\n <ElRadioGroup v-model=\"value\" v-bind=\"bindAttrs\" @change=\"handleChange\">\n <template v-if=\"type === 'button'\">\n <ElRadioButton\n v-for=\"item of radioOptions\"\n :key=\"item[optValue]\"\n :label=\"item[optValue]\"\n :disabled=\"item.disabled\"\n >\n {{ item[optLabel] }}\n </ElRadioButton>\n </template>\n <template v-else>\n <ElRadio\n v-for=\"item of radioOptions\"\n :key=\"item[optValue]\"\n :label=\"item[optValue]\"\n :disabled=\"item.disabled\"\n >\n {{ item[optLabel] }}\n </ElRadio>\n </template>\n </ElRadioGroup>\n</template>\n"],"names":["_openBlock","_createBlock","_unref","_mergeProps","type","_createElementBlock","_Fragment","_renderList","optValue","_createTextVNode","_toDisplayString","optLabel"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.vue2.mjs","sources":["../../../../../../../packages/components/search/src/search.vue"],"sourcesContent":["<script lang=\"ts\" setup>\
|
|
1
|
+
{"version":3,"file":"search.vue2.mjs","sources":["../../../../../../../packages/components/search/src/search.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ElButton } from \"element-plus\";\nimport { ref, watchEffect } from \"vue\";\nimport { excludeObjectKeys } from \"../../../utils\";\nimport IForm from \"../../form/src/form.vue\";\nimport { excludeSearchPropsKeys, SearchEmits, SearchProps } from \"./search\";\n\ndefineOptions({\n name: \"ISearch\",\n});\nconst props = defineProps(SearchProps);\nconst emit = defineEmits(SearchEmits);\n\nconst bindAttrs = ref<any>();\nwatchEffect(() => {\n const attrs = excludeObjectKeys(props, excludeSearchPropsKeys);\n if (!attrs.fileds) {\n attrs.fileds = [];\n }\n if (!attrs.fields.some((item: any) => item.prop === \"searchBtn\")) {\n attrs.fields.push({\n prop: \"searchBtn\",\n comp: \"slot\",\n });\n }\n bindAttrs.value = attrs;\n});\n\nconst formRef = ref();\ndefineExpose({\n getRef() {\n return formRef.value?.getRef();\n },\n});\n\nconst handleChange = (key: string, value: any, ref: any, comp: string) => {\n emit(\"change\", key, value, ref, comp);\n if (comp === \"el-input\") {\n // el-input change 调用查询事件\n // 即在输入框值变化和按下回车时,触发查询事件。\n // emit('search', props.model);\n }\n};\n</script>\n\n<template>\n <div class=\"i-search\">\n <IForm ref=\"formRef\" v-bind=\"bindAttrs\" @change=\"handleChange\">\n <template v-for=\"(item, key) in $slots\" :key=\"key\" #[key]>\n <slot\n v-if=\"key !== 'searchBtn' && key !== 'btn'\"\n :name=\"key\"\n v-bind=\"item\"\n />\n </template>\n <template #searchBtn>\n <div class=\"i-search__opera\">\n <template v-if=\"showDefaultBtn\">\n <ElButton\n type=\"primary\"\n :loading=\"loading\"\n @click=\"emit('search', model)\"\n >\n {{ searchBtnText }}\n </ElButton>\n <ElButton :loading=\"loading\" @click=\"emit('reset')\">\n {{ resetBtnText }}\n </ElButton>\n </template>\n <template v-if=\"$slots.btn\">\n <slot name=\"btn\" />\n </template>\n </div>\n </template>\n </IForm>\n </div>\n</template>\n"],"names":["ref","_openBlock","_createElementBlock","_createVNode","IForm","_mergeProps","_createSlots","_createElementVNode","showDefaultBtn","_Fragment","_unref","loading","model","searchBtnText","resetBtnText","$slots","_renderSlot","_normalizeProps"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { defineComponent, ref, shallowRef, onMounted, openBlock, createElementBlock, Fragment, createBlock, withCtx, createCommentVNode, createElementVNode, normalizeClass, toDisplayString } from 'vue';
|
|
2
2
|
import { GetCtyunDeviceVideoUrl, ctyunRequest } from './ctyun-player.mjs';
|
|
3
3
|
import './easyPlayer.vue.mjs';
|
|
4
|
-
import { TzjPlayerProps } from './tzj-player.mjs';
|
|
5
4
|
import './errorPage.vue.mjs';
|
|
5
|
+
import { TzjPlayerProps } from './tzj-player.mjs';
|
|
6
6
|
import _sfc_main$1 from './errorPage.vue2.mjs';
|
|
7
7
|
import _sfc_main$2 from './easyPlayer.vue2.mjs';
|
|
8
8
|
|
|
@@ -412,9 +412,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
412
412
|
[
|
|
413
413
|
errorMsg.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
414
414
|
key: 0,
|
|
415
|
-
videoName: _ctx.areaName || _ctx.deviceSerial,
|
|
416
415
|
message: errorMsg.value
|
|
417
|
-
}, null, 8, ["
|
|
416
|
+
}, null, 8, ["message"])) : videoUrl.value ? (openBlock(), createBlock(_sfc_main$2, {
|
|
418
417
|
key: 1,
|
|
419
418
|
ref_key: "playerRef",
|
|
420
419
|
ref: playerRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ctyun-player.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref, shallowRef } from \"vue\";\nimport { ctyunRequest, GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\nimport ErrorPage from \"./errorPage.vue\";\n\n// 天翼云播放器\ndefineOptions({\n name: \"CtyunPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst showBottomBar = ref(false);\nconst errorMsg = ref(\"\");\n\n// 播放器相关状态\nconst playerRef = shallowRef();\nconst isPlaying = ref(false); // 是否播放,播放true,暂停false\nconst isVoice = ref(false); // 是否开启语音对讲\nconst isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\n// 音频对讲相关状态\nconst isIntercomActive = ref<boolean>(false);\nconst audioContext = ref<AudioContext | null>(null);\nconst mediaStream = ref<MediaStream | null>(null);\nconst websocket = ref<WebSocket | null>(null);\nconst audioWorkletNode = ref<AudioWorkletNode | null>(null);\nconst intercomTimer = ref<any>(null); // 语音对讲定时器\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\nconst taskId = ref(\"\");\n\n// 音频配置常量\nconst AUDIO_CONFIG = {\n sampleRate: 48000,\n channelCount: 1,\n sampleSize: 16,\n} as const;\n\nconst initPlayer = async () => {\n // console.log(\"initPlayer\");\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\n // console.log(\"initPlayer\", url);\n videoUrl.value = url;\n errorMsg.value = \"\";\n } catch (error) {\n if (props.debug) {\n console.error(\"初始化天翼云播放器失败:\", error);\n }\n errorMsg.value = `初始化失败: ${error instanceof Error ? error.message : \"未知错误\"}`;\n }\n};\n\n/**\n * 播放视频\n */\nconst playerPlay = (): void => {\n playerRef.value?.play();\n};\n\n/**\n * 暂停视频\n */\nconst playerPause = (): void => {\n playerRef.value?.pause();\n};\n\n/**\n * 截图\n */\nconst playerScreenShot = (): void => {\n playerRef.value?.screenshot();\n};\n\n/**\n * 切换全屏状态\n * @param fullscreen 是否全屏\n */\nconst playerFullscreen = (fullscreen: boolean): void => {\n isFullscreen.value = fullscreen;\n playerRef.value?.fullscreen(fullscreen);\n};\n\n// 获取视频信息,判断当前是否为静音状态\nconst handleVideoInfo = () => {\n // 判断是否静音\n isVolumeMuted.value = playerRef.value?.isMute();\n};\nconst handleMute = (mute: boolean) => {\n isVolumeMuted.value = mute;\n};\nconst handleSetMute = (volume: number) => {\n playerRef.value?.setMute(volume);\n};\n\nconst audioErrorMsg = (msg: string) => {\n audioMsg.value = {\n type: \"error\",\n msg,\n };\n // 3秒后清除错误信息\n setTimeout(() => {\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n }, 3000);\n};\n\n/**\n * 初始化音频上下文\n */\nconst initAudioContext = async (): Promise<void> => {\n try {\n // 检测浏览器是否支持AudioContext\n if (typeof window === \"undefined\") {\n throw new Error(\"非浏览器环境,无法使用AudioContext\");\n }\n\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) {\n throw new Error(\"当前浏览器不支持AudioContext\");\n }\n\n // 创建音频上下文,使用指定的采样率\n audioContext.value = new AudioContext({\n sampleRate: AUDIO_CONFIG.sampleRate,\n });\n\n // 确保音频上下文处于运行状态\n if (audioContext.value.state === \"suspended\") {\n await audioContext.value.resume();\n }\n\n if (props.debug) {\n console.log(\n \"音频上下文初始化成功,采样率:\",\n audioContext.value.sampleRate,\n );\n }\n } catch (error) {\n throw new Error(`音频上下文初始化失败: ${error}`);\n }\n};\n\n/**\n * 初始化麦克风\n */\nconst initMicrophone = async (): Promise<void> => {\n try {\n // 检查浏览器是否支持getUserMedia\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n throw new Error(\"当前浏览器不支持麦克风访问\");\n }\n\n // 请求麦克风权限\n const constraints: MediaStreamConstraints = {\n audio: {\n channelCount: AUDIO_CONFIG.channelCount,\n sampleRate: AUDIO_CONFIG.sampleRate,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n },\n video: false,\n };\n\n mediaStream.value = await navigator.mediaDevices.getUserMedia(constraints);\n if (props.debug) {\n console.log(\"麦克风初始化成功\");\n }\n } catch (error) {\n if (error instanceof Error) {\n switch (error.name) {\n case \"NotAllowedError\":\n throw new Error(\"麦克风权限被拒绝,请允许访问麦克风\");\n case \"NotFoundError\":\n throw new Error(\"未找到可用的麦克风设备\");\n case \"NotReadableError\":\n throw new Error(\"麦克风设备被其他应用占用\");\n case \"OverconstrainedError\":\n throw new Error(\"麦克风设备不支持指定的音频参数\");\n default:\n throw new Error(`麦克风初始化失败: ${error.message}`);\n }\n }\n throw new Error(`麦克风初始化失败: ${error}`);\n }\n};\n\n/**\n * 建立WebSocket连接\n */\nconst connectWebSocket = async (url: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n websocket.value = new WebSocket(url);\n websocket.value.binaryType = \"arraybuffer\";\n\n let isResolved = false;\n\n // 连接成功\n websocket.value.onopen = () => {\n if (props.debug) {\n console.log(\"WebSocket连接成功\");\n }\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n\n // 连接错误\n websocket.value.onerror = (error) => {\n if (props.debug) {\n console.error(\"WebSocket连接错误:\", error);\n }\n if (!isResolved) {\n isResolved = true;\n reject(new Error(\"WebSocket连接失败\"));\n }\n };\n\n // 连接关闭\n websocket.value.onclose = (event) => {\n if (props.debug) {\n console.log(\"WebSocket连接关闭:\", event.code, event.reason);\n }\n if (isIntercomActive.value) {\n isIntercomActive.value = false;\n isVoice.value = false;\n }\n };\n\n // 接收消息(如果服务端有响应)\n websocket.value.onmessage = (event) => {\n if (props.debug) {\n console.log(\"收到服务端消息:\", event.data);\n }\n };\n\n // 设置连接超时\n const timeoutId = setTimeout(() => {\n if (!isResolved && websocket.value?.readyState !== WebSocket.OPEN) {\n isResolved = true;\n websocket.value?.close();\n reject(new Error(\"WebSocket连接超时\"));\n }\n }, 10000); // 10秒超时\n\n // 清理超时定时器\n if (websocket.value) {\n const originalOnOpen = websocket.value.onopen;\n const originalOnError = websocket.value.onerror;\n\n websocket.value.onopen = function (event) {\n clearTimeout(timeoutId);\n originalOnOpen?.call(this, event);\n };\n\n websocket.value.onerror = function (event) {\n clearTimeout(timeoutId);\n originalOnError?.call(this, event);\n };\n }\n } catch (error) {\n reject(new Error(`WebSocket创建失败: ${error}`));\n }\n });\n};\n\n/**\n * 将Float32Array音频数据转换为16位PCM数据\n */\nconst convertToPCM16 = (float32Array: Float32Array): ArrayBuffer => {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n\n for (let i = 0; i < float32Array.length; i++) {\n // 将浮点数(-1.0 到 1.0)转换为16位整数(-32768 到 32767)\n const sample = Math.max(-1, Math.min(1, float32Array[i]));\n const intSample = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n view.setInt16(i * 2, intSample, true); // true表示小端字节序\n }\n\n return buffer;\n};\n/**\n * 开始音频数据处理\n */\nconst startAudioProcessing = async (): Promise<void> => {\n try {\n if (!audioContext.value || !mediaStream.value) {\n throw new Error(\"音频上下文或媒体流未初始化\");\n }\n\n // 创建音频源节点\n const sourceNode = audioContext.value.createMediaStreamSource(\n mediaStream.value,\n );\n\n // 创建ScriptProcessor节点用于音频数据处理\n const bufferSize = 4096;\n const processor = audioContext.value.createScriptProcessor(\n bufferSize,\n 1,\n 1,\n );\n\n // 音频数据处理回调\n processor.onaudioprocess = (event) => {\n if (\n !isIntercomActive.value ||\n !websocket.value ||\n websocket.value.readyState !== WebSocket.OPEN\n ) {\n return;\n }\n\n try {\n // 获取音频数据\n const inputBuffer = event.inputBuffer;\n const inputData = inputBuffer.getChannelData(0); // 获取单声道数据\n\n // 检查音频数据是否有效\n if (inputData.length === 0) {\n return;\n }\n\n // 将Float32Array转换为16位PCM数据\n const pcmData = convertToPCM16(inputData);\n\n // 发送音频数据到WebSocket\n websocket.value.send(pcmData);\n } catch (error) {\n if (props.debug) {\n console.error(\"音频数据处理错误:\", error);\n }\n }\n };\n\n // 连接音频节点\n sourceNode.connect(processor);\n processor.connect(audioContext.value.destination);\n\n // 保存处理器引用以便后续清理\n audioWorkletNode.value = processor as any;\n\n if (props.debug) {\n console.log(\"音频数据处理开始\");\n }\n } catch (error) {\n throw new Error(`音频数据处理启动失败: ${error}`);\n }\n};\n\n/**\n * 停止语音对讲\n */\nconst stopIntercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"正在停止语音对讲...\");\n }\n isVoice.value = false;\n isIntercomActive.value = false;\n\n // 清除定时器\n if (intercomTimer.value) {\n clearTimeout(intercomTimer.value);\n intercomTimer.value = null;\n }\n\n // 关闭服务端语音对讲\n if (props.deviceSerial && taskId.value) {\n try {\n // await GetYunZhiYanCloseVoiceIntercom(props.deviceSerial, taskId.value);\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭服务端语音对讲失败:\", error);\n }\n }\n }\n\n // 关闭WebSocket连接\n if (websocket.value) {\n if (websocket.value.readyState === WebSocket.OPEN) {\n websocket.value.close(1000, \"用户主动关闭\");\n }\n websocket.value = null;\n }\n\n // 停止媒体流\n if (mediaStream.value) {\n mediaStream.value.getTracks().forEach((track) => {\n track.stop();\n });\n mediaStream.value = null;\n }\n\n // 关闭音频上下文\n if (audioContext.value && audioContext.value.state !== \"closed\") {\n try {\n await audioContext.value.close();\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭音频上下文失败:\", error);\n }\n }\n audioContext.value = null;\n }\n\n // 清理音频工作节点\n if (audioWorkletNode.value) {\n try {\n audioWorkletNode.value.disconnect();\n } catch (error) {\n if (props.debug) {\n console.error(\"断开音频工作节点失败:\", error);\n }\n }\n audioWorkletNode.value = null;\n }\n\n // 清理任务ID\n taskId.value = \"\";\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n if (props.debug) {\n console.log(\"语音对讲已停止\");\n }\n } catch (error) {\n if (props.debug) {\n console.error(\"停止语音对讲时发生错误:\", error);\n }\n }\n};\n\n/**\n * 开启语音对讲\n */\nconst intercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"开始语音对讲...\");\n }\n audioMsg.value = {\n type: \"info\",\n msg: \"正在连接...\",\n };\n // 防止重复开启\n if (isIntercomActive.value) {\n if (props.debug) {\n console.warn(\"语音对讲已在进行中\");\n }\n return;\n }\n // 设置加载状态\n isVoice.value = true;\n\n // 1. 获取语音推送地址\n if (props.debug) {\n console.log(\"正在获取语音推送地址...\");\n }\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${props.deviceSerial}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n if (result.statusCode === 200) {\n // ...\n } else {\n audioErrorMsg(result?.message || \"开启语音对讲失败\");\n return;\n }\n console.log(result);\n if (props.debug) {\n console.log(\"语音推送地址:\", \"\");\n }\n } catch (error) {\n console.error(\"开启语音对讲失败:\", error);\n audioErrorMsg(\"开启语音对讲失败\");\n }\n};\n\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <ErrorPage\n v-if=\"errorMsg\"\n :videoName=\"areaName || deviceSerial\"\n :message=\"errorMsg\"\n />\n <EasyPlayer\n v-else-if=\"videoUrl\"\n ref=\"playerRef\"\n :url=\"videoUrl\"\n :debug=\"debug\"\n :access-token=\"accessToken\"\n :platform-type-name=\"platformTypeName\"\n :device-serial=\"deviceSerial\"\n :area-name=\"areaName\"\n :pause-mode=\"pauseMode\"\n @mouseenter=\"showBottomBar = true\"\n @mouseleave=\"showBottomBar = false\"\n @pause=\"isPlaying = false\"\n @play=\"isPlaying = true\"\n @video-info=\"handleVideoInfo\"\n @mute=\"handleMute\"\n >\n <template #customBar>\n <div v-if=\"showBottomBar\" class=\"i-easy-player-bar\">\n <!-- 左侧:播放/暂停 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-left\">\n <!-- 播放 -->\n <div\n v-if=\"!isPlaying\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerPlay\"\n >\n <i class=\"iconfont icon-playfill\" />\n </div>\n <!-- 暂停 -->\n <div v-else class=\"i-easy-player-bottom-bar\" @click=\"playerPause\">\n <i class=\"iconfont icon-stop\" />\n </div>\n\n <div v-if=\"!isVolumeMuted\" class=\"i-easy-player-bottom-bar\">\n <!-- 音量图标 -->\n <i\n class=\"iconfont icon-notificationfill\"\n @click=\"handleSetMute(1)\"\n />\n </div>\n <div v-else class=\"i-easy-player-bottom-bar\">\n <!-- 静音图标 -->\n <i\n class=\"iconfont icon-notificationforbidfill\"\n @click=\"handleSetMute(0)\"\n />\n </div>\n </div>\n <!-- 截图,全屏 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-right\">\n <!-- 语音对讲:关闭状态 -->\n <div\n v-if=\"!isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"intercom\"\n >\n <i class=\"iconfont icon-voice\" />\n </div>\n <!-- 语音对讲:开启状态 -->\n <div\n v-if=\"isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"stopIntercom\"\n >\n <i class=\"iconfont icon-voicefill\" />\n </div>\n <!-- 截图 -->\n <div class=\"i-easy-player-bottom-bar\" @click=\"playerScreenShot\">\n <i class=\"iconfont icon-picfill\" />\n </div>\n <!-- 全屏 -->\n <div\n v-if=\"!isFullscreen\"\n title=\"全屏\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(true)\"\n >\n <i class=\"iconfont icon-full\" />\n </div>\n <!-- 取消全屏 -->\n <div\n v-if=\"isFullscreen\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(false)\"\n >\n <i class=\"iconfont icon-reduction\" />\n </div>\n </div>\n </div>\n </template>\n </EasyPlayer>\n <!-- 语音对讲错误提示 -->\n <div\n v-if=\"audioMsg.msg\"\n class=\"i-tzj-player__voice-default\"\n :class=\"`i-tzj-player__voice-${audioMsg.type}`\"\n >\n {{ audioMsg.msg }}\n </div>\n</template>\n"],"names":["_createBlock","ErrorPage","areaName","deviceSerial","EasyPlayer","debug","accessToken","platformTypeName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAA,MAAM,KAAQ,GAAA,OAAA;AACd,IAAM,MAAA,QAAA,GAAW,IAAI,EAAE,CAAA;AACvB,IAAM,MAAA,aAAA,GAAgB,IAAI,KAAK,CAAA;AAC/B,IAAM,MAAA,QAAA,GAAW,IAAI,EAAE,CAAA;AAGvB,IAAA,MAAM,YAAY,UAAW,EAAA;AAC7B,IAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA;AAC3B,IAAM,MAAA,OAAA,GAAU,IAAI,KAAK,CAAA;AACzB,IAAM,MAAA,YAAA,GAAe,IAAI,KAAK,CAAA;AAC9B,IAAM,MAAA,aAAA,GAAgB,IAAI,IAAI,CAAA;AAG9B,IAAM,MAAA,gBAAA,GAAmB,IAAa,KAAK,CAAA;AAC3C,IAAM,MAAA,YAAA,GAAe,IAAyB,IAAI,CAAA;AAClD,IAAM,MAAA,WAAA,GAAc,IAAwB,IAAI,CAAA;AAChD,IAAM,MAAA,SAAA,GAAY,IAAsB,IAAI,CAAA;AAC5C,IAAM,MAAA,gBAAA,GAAmB,IAA6B,IAAI,CAAA;AAC1D,IAAM,MAAA,aAAA,GAAgB,IAAS,IAAI,CAAA;AACnC,IAAA,MAAM,WAAW,GAAI,CAAA;AAAA,MACnB,IAAM,EAAA,EAAA;AAAA,MACN,GAAK,EAAA;AAAA,KACN,CAAA;AACD,IAAM,MAAA,MAAA,GAAS,IAAI,EAAE,CAAA;AAGrB,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,UAAY,EAAA,IAAA;AAAA,MACZ,YAAc,EAAA,CAAA;AAAA,MACd,UAAY,EAAA;AAAA,KACd;AAEA,IAAA,MAAM,6BAAyB,MAAA,CAAA,YAAA;AAE7B,MAAI,IAAA;AACF,QAAI,IAAA,CAAC,MAAM,YAAc,EAAA;AACvB,UAAA,QAAA,CAAS,KAAQ,GAAA,wDAAA;AACjB,UAAA;AAAA;AAGF,QAAA,MAAM,GAAM,GAAA,MAAM,sBAAuB,CAAA,KAAA,CAAM,YAAY,CAAA;AAC3D,QAAA,IAAI,CAAC,GAAK,EAAA;AACR,UAAA,QAAA,CAAS,KAAQ,GAAA,8DAAA;AACjB,UAAA;AAAA;AAIF,QAAA,QAAA,CAAS,KAAQ,GAAA,GAAA;AACjB,QAAA,QAAA,CAAS,KAAQ,GAAA,EAAA;AAAA,eACV,KAAO,EAAA;AACd,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAQ,OAAA,CAAA,KAAA,CAAM,uEAAgB,KAAK,CAAA;AAAA;AAErC,QAAA,QAAA,CAAS,QAAQ,CAAU,gCAAA,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,UAAU,0BAAM,CAAA,CAAA;AAAA;AAC5E,KAtBiB,EAAA,YAAA,CAAA;AA4BnB,IAAA,MAAM,6BAAyB,MAAA,CAAA,MAAA;;AAC7B,MAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA;AAAA,KADA,EAAA,YAAA,CAAA;AAOnB,IAAA,MAAM,8BAA0B,MAAA,CAAA,MAAA;;AAC9B,MAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA;AAAA,KADC,EAAA,aAAA,CAAA;AAOpB,IAAA,MAAM,mCAA+B,MAAA,CAAA,MAAA;;AACnC,MAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,EAAA;AAAA,KADM,EAAA,kBAAA,CAAA;AAQzB,IAAM,MAAA,gBAAA,2BAAoB,UAA8B,KAAA;;AACtD,MAAA,YAAA,CAAa,KAAQ,GAAA,UAAA;AACrB,MAAU,CAAA,EAAA,GAAA,SAAA,CAAA,KAAA,KAAV,mBAAiB,UAAW,CAAA,UAAA,CAAA;AAAA,KAFL,EAAA,kBAAA,CAAA;AAMzB,IAAA,MAAM,kCAAwB,MAAA,CAAA,MAAA;;AAE5B,MAAc,aAAA,CAAA,KAAA,GAAA,CAAQ,EAAU,GAAA,SAAA,CAAA,KAAA,KAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,EAAA;AAAA,KAFjB,EAAA,iBAAA,CAAA;AAIxB,IAAM,MAAA,UAAA,2BAAc,IAAkB,KAAA;AACpC,MAAA,aAAA,CAAc,KAAQ,GAAA,IAAA;AAAA,KADL,EAAA,YAAA,CAAA;AAGnB,IAAM,MAAA,aAAA,2BAAiB,MAAmB,KAAA;;AACxC,MAAU,CAAA,EAAA,GAAA,SAAA,CAAA,KAAA,KAAV,mBAAiB,OAAQ,CAAA,MAAA,CAAA;AAAA,KADL,EAAA,eAAA,CAAA;AAItB,IAAM,MAAA,aAAA,2BAAiB,GAAgB,KAAA;AACrC,MAAA,QAAA,CAAS,KAAQ,GAAA;AAAA,QACf,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACF;AAEA,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,QAAA,CAAS,KAAQ,GAAA;AAAA,UACf,IAAM,EAAA,EAAA;AAAA,UACN,GAAK,EAAA;AAAA,SACP;AAAA,SACC,GAAI,CAAA;AAAA,KAXa,EAAA,eAAA,CAAA;AAiBtB,IAAA,MAAM,mCAA8C,MAAA,CAAA,YAAA;AAClD,MAAI,IAAA;AAEF,QAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,UAAM,MAAA,IAAI,MAAM,gFAAyB,CAAA;AAAA;AAG3C,QAAM,MAAA,YAAA,GACJ,MAAO,CAAA,YAAA,IAAiB,MAAe,CAAA,kBAAA;AACzC,QAAA,IAAI,CAAC,YAAc,EAAA;AACjB,UAAM,MAAA,IAAI,MAAM,8DAAsB,CAAA;AAAA;AAIxC,QAAa,YAAA,CAAA,KAAA,GAAQ,IAAI,YAAa,CAAA;AAAA,UACpC,YAAY,YAAa,CAAA;AAAA,SAC1B,CAAA;AAGD,QAAI,IAAA,YAAA,CAAa,KAAM,CAAA,KAAA,KAAU,WAAa,EAAA;AAC5C,UAAM,MAAA,YAAA,CAAa,MAAM,MAAO,EAAA;AAAA;AAGlC,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAQ,OAAA,CAAA,GAAA;AAAA,YACN,uFAAA;AAAA,YACA,aAAa,KAAM,CAAA;AAAA,WACrB;AAAA;AACF,eACO,KAAO,EAAA;AACd,QAAA,MAAM,IAAI,KAAA,CAAM,CAAe,8DAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AACxC,KA/BuB,EAAA,kBAAA,CAAA;AAqCzB,IAAA,MAAM,iCAA4C,MAAA,CAAA,YAAA;AAChD,MAAI,IAAA;AAEF,QAAA,IAAI,CAAC,SAAU,CAAA,YAAA,IAAgB,CAAC,SAAA,CAAU,aAAa,YAAc,EAAA;AACnE,UAAM,MAAA,IAAI,MAAM,gFAAe,CAAA;AAAA;AAIjC,QAAA,MAAM,WAAsC,GAAA;AAAA,UAC1C,KAAO,EAAA;AAAA,YACL,cAAc,YAAa,CAAA,YAAA;AAAA,YAC3B,YAAY,YAAa,CAAA,UAAA;AAAA,YACzB,gBAAkB,EAAA,IAAA;AAAA,YAClB,gBAAkB,EAAA,IAAA;AAAA,YAClB,eAAiB,EAAA;AAAA,WACnB;AAAA,UACA,KAAO,EAAA;AAAA,SACT;AAEA,QAAA,WAAA,CAAY,KAAQ,GAAA,MAAM,SAAU,CAAA,YAAA,CAAa,aAAa,WAAW,CAAA;AACzE,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,kDAAU,CAAA;AAAA;AACxB,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,UAAA,QAAQ,MAAM,IAAM;AAAA,YAClB,KAAK,iBAAA;AACH,cAAM,MAAA,IAAI,MAAM,wGAAmB,CAAA;AAAA,YACrC,KAAK,eAAA;AACH,cAAM,MAAA,IAAI,MAAM,oEAAa,CAAA;AAAA,YAC/B,KAAK,kBAAA;AACH,cAAM,MAAA,IAAI,MAAM,0EAAc,CAAA;AAAA,YAChC,KAAK,sBAAA;AACH,cAAM,MAAA,IAAI,MAAM,4FAAiB,CAAA;AAAA,YACnC;AACE,cAAA,MAAM,IAAI,KAAA,CAAM,CAAa,kDAAA,EAAA,KAAA,CAAM,OAAO,CAAE,CAAA,CAAA;AAAA;AAChD;AAEF,QAAA,MAAM,IAAI,KAAA,CAAM,CAAa,kDAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AACtC,KAvCqB,EAAA,gBAAA,CAAA;AA6CvB,IAAM,MAAA,gBAAA,iCAA0B,GAA+B,KAAA;AAC7D,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,QAAI,IAAA;AACF,UAAU,SAAA,CAAA,KAAA,GAAQ,IAAI,SAAA,CAAU,GAAG,CAAA;AACnC,UAAA,SAAA,CAAU,MAAM,UAAa,GAAA,aAAA;AAE7B,UAAA,IAAI,UAAa,GAAA,KAAA;AAGjB,UAAU,SAAA,CAAA,KAAA,CAAM,SAAS,MAAM;AAC7B,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAA,OAAA,CAAQ,IAAI,mCAAe,CAAA;AAAA;AAE7B,YAAA,IAAI,CAAC,UAAY,EAAA;AACf,cAAa,UAAA,GAAA,IAAA;AACb,cAAQ,OAAA,EAAA;AAAA;AACV,WACF;AAGA,UAAU,SAAA,CAAA,KAAA,CAAM,OAAU,GAAA,CAAC,KAAU,KAAA;AACnC,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,KAAA,CAAM,sCAAkB,KAAK,CAAA;AAAA;AAEvC,YAAA,IAAI,CAAC,UAAY,EAAA;AACf,cAAa,UAAA,GAAA,IAAA;AACb,cAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mCAAe,CAAC,CAAA;AAAA;AACnC,WACF;AAGA,UAAU,SAAA,CAAA,KAAA,CAAM,OAAU,GAAA,CAAC,KAAU,KAAA;AACnC,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAA,OAAA,CAAQ,GAAI,CAAA,oCAAA,EAAkB,KAAM,CAAA,IAAA,EAAM,MAAM,MAAM,CAAA;AAAA;AAExD,YAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,cAAA,gBAAA,CAAiB,KAAQ,GAAA,KAAA;AACzB,cAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA;AAAA;AAClB,WACF;AAGA,UAAU,SAAA,CAAA,KAAA,CAAM,SAAY,GAAA,CAAC,KAAU,KAAA;AACrC,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,GAAA,CAAI,6CAAY,EAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AACpC,WACF;AAGA,UAAM,MAAA,SAAA,GAAY,WAAW,MAAM;;AACjC,YAAA,IAAI,CAAC,UAAc,IAAA,CAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,MAAe,UAAU,IAAM,EAAA;AACjE,cAAa,UAAA,GAAA,IAAA;AACb,cAAA,CAAA,EAAA,GAAA,SAAA,CAAU,UAAV,IAAiB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA;AACjB,cAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mCAAe,CAAC,CAAA;AAAA;AACnC,aACC,GAAK,CAAA;AAGR,UAAA,IAAI,UAAU,KAAO,EAAA;AACnB,YAAM,MAAA,cAAA,GAAiB,UAAU,KAAM,CAAA,MAAA;AACvC,YAAM,MAAA,eAAA,GAAkB,UAAU,KAAM,CAAA,OAAA;AAExC,YAAU,SAAA,CAAA,KAAA,CAAM,MAAS,GAAA,SAAU,KAAO,EAAA;AACxC,cAAA,YAAA,CAAa,SAAS,CAAA;AACtB,cAAA,cAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAgB,KAAK,IAAM,EAAA,KAAA,CAAA;AAAA,aAC7B;AAEA,YAAU,SAAA,CAAA,KAAA,CAAM,OAAU,GAAA,SAAU,KAAO,EAAA;AACzC,cAAA,YAAA,CAAa,SAAS,CAAA;AACtB,cAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,KAAK,IAAM,EAAA,KAAA,CAAA;AAAA,aAC9B;AAAA;AACF,iBACO,KAAO,EAAA;AACd,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAkB,mCAAA,EAAA,KAAK,EAAE,CAAC,CAAA;AAAA;AAC7C,OACD,CAAA;AAAA,KA3EsB,EAAA,kBAAA,CAAA;AAiFzB,IAAM,MAAA,cAAA,2BAAkB,YAA4C,KAAA;AAClE,MAAA,MAAM,MAAS,GAAA,IAAI,WAAY,CAAA,YAAA,CAAa,SAAS,CAAC,CAAA;AACtD,MAAM,MAAA,IAAA,GAAO,IAAI,QAAA,CAAS,MAAM,CAAA;AAEhC,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,CAAa,QAAQ,CAAK,EAAA,EAAA;AAE5C,QAAM,MAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAI,CAAI,CAAA,EAAA,IAAA,CAAK,IAAI,CAAG,EAAA,YAAA,CAAa,CAAC,CAAC,CAAC,CAAA;AACxD,QAAA,MAAM,SAAY,GAAA,MAAA,GAAS,CAAI,GAAA,MAAA,GAAS,QAAS,MAAS,GAAA,KAAA;AAC1D,QAAA,IAAA,CAAK,QAAS,CAAA,CAAA,GAAI,CAAG,EAAA,SAAA,EAAW,IAAI,CAAA;AAAA;AAGtC,MAAO,OAAA,MAAA;AAAA,KAXc,EAAA,gBAAA,CAAA;AAgBvB,IAAA,MAAM,uCAAkD,MAAA,CAAA,YAAA;AACtD,MAAI,IAAA;AACF,QAAA,IAAI,CAAC,YAAA,CAAa,KAAS,IAAA,CAAC,YAAY,KAAO,EAAA;AAC7C,UAAM,MAAA,IAAI,MAAM,gFAAe,CAAA;AAAA;AAIjC,QAAM,MAAA,UAAA,GAAa,aAAa,KAAM,CAAA,uBAAA;AAAA,UACpC,WAAY,CAAA;AAAA,SACd;AAGA,QAAA,MAAM,UAAa,GAAA,IAAA;AACnB,QAAM,MAAA,SAAA,GAAY,aAAa,KAAM,CAAA,qBAAA;AAAA,UACnC,UAAA;AAAA,UACA,CAAA;AAAA,UACA;AAAA,SACF;AAGA,QAAU,SAAA,CAAA,cAAA,GAAiB,CAAC,KAAU,KAAA;AACpC,UACE,IAAA,CAAC,gBAAiB,CAAA,KAAA,IAClB,CAAC,SAAA,CAAU,SACX,SAAU,CAAA,KAAA,CAAM,UAAe,KAAA,SAAA,CAAU,IACzC,EAAA;AACA,YAAA;AAAA;AAGF,UAAI,IAAA;AAEF,YAAA,MAAM,cAAc,KAAM,CAAA,WAAA;AAC1B,YAAM,MAAA,SAAA,GAAY,WAAY,CAAA,cAAA,CAAe,CAAC,CAAA;AAG9C,YAAI,IAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AAC1B,cAAA;AAAA;AAIF,YAAM,MAAA,OAAA,GAAU,eAAe,SAAS,CAAA;AAGxC,YAAU,SAAA,CAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,mBACrB,KAAO,EAAA;AACd,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,KAAA,CAAM,qDAAa,KAAK,CAAA;AAAA;AAClC;AACF,SACF;AAGA,QAAA,UAAA,CAAW,QAAQ,SAAS,CAAA;AAC5B,QAAU,SAAA,CAAA,OAAA,CAAQ,YAAa,CAAA,KAAA,CAAM,WAAW,CAAA;AAGhD,QAAA,gBAAA,CAAiB,KAAQ,GAAA,SAAA;AAEzB,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,kDAAU,CAAA;AAAA;AACxB,eACO,KAAO,EAAA;AACd,QAAA,MAAM,IAAI,KAAA,CAAM,CAAe,8DAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AACxC,KA/D2B,EAAA,sBAAA,CAAA;AAqE7B,IAAA,MAAM,+BAA0C,MAAA,CAAA,YAAA;AAC9C,MAAI,IAAA;AACF,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,qDAAa,CAAA;AAAA;AAE3B,QAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA;AAChB,QAAA,gBAAA,CAAiB,KAAQ,GAAA,KAAA;AAGzB,QAAA,IAAI,cAAc,KAAO,EAAA;AACvB,UAAA,YAAA,CAAa,cAAc,KAAK,CAAA;AAChC,UAAA,aAAA,CAAc,KAAQ,GAAA,IAAA;AAAA;AAIxB,QAAI,IAAA,KAAA,CAAM,YAAgB,IAAA,MAAA,CAAO,KAAO,EAAA;AACtC,UAAI,IAAA;AAAA,mBAEK,KAAO,EAAA;AACd,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,KAAA,CAAM,uEAAgB,KAAK,CAAA;AAAA;AACrC;AACF;AAIF,QAAA,IAAI,UAAU,KAAO,EAAA;AACnB,UAAA,IAAI,SAAU,CAAA,KAAA,CAAM,UAAe,KAAA,SAAA,CAAU,IAAM,EAAA;AACjD,YAAU,SAAA,CAAA,KAAA,CAAM,KAAM,CAAA,GAAA,EAAM,sCAAQ,CAAA;AAAA;AAEtC,UAAA,SAAA,CAAU,KAAQ,GAAA,IAAA;AAAA;AAIpB,QAAA,IAAI,YAAY,KAAO,EAAA;AACrB,UAAA,WAAA,CAAY,KAAM,CAAA,SAAA,EAAY,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AAC/C,YAAA,KAAA,CAAM,IAAK,EAAA;AAAA,WACZ,CAAA;AACD,UAAA,WAAA,CAAY,KAAQ,GAAA,IAAA;AAAA;AAItB,QAAA,IAAI,YAAa,CAAA,KAAA,IAAS,YAAa,CAAA,KAAA,CAAM,UAAU,QAAU,EAAA;AAC/D,UAAI,IAAA;AACF,YAAM,MAAA,YAAA,CAAa,MAAM,KAAM,EAAA;AAAA,mBACxB,KAAO,EAAA;AACd,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,KAAA,CAAM,2DAAc,KAAK,CAAA;AAAA;AACnC;AAEF,UAAA,YAAA,CAAa,KAAQ,GAAA,IAAA;AAAA;AAIvB,QAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,UAAI,IAAA;AACF,YAAA,gBAAA,CAAiB,MAAM,UAAW,EAAA;AAAA,mBAC3B,KAAO,EAAA;AACd,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAQ,OAAA,CAAA,KAAA,CAAM,iEAAe,KAAK,CAAA;AAAA;AACpC;AAEF,UAAA,gBAAA,CAAiB,KAAQ,GAAA,IAAA;AAAA;AAI3B,QAAA,MAAA,CAAO,KAAQ,GAAA,EAAA;AACf,QAAA,QAAA,CAAS,KAAQ,GAAA;AAAA,UACf,IAAM,EAAA,EAAA;AAAA,UACN,GAAK,EAAA;AAAA,SACP;AACA,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,4CAAS,CAAA;AAAA;AACvB,eACO,KAAO,EAAA;AACd,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAQ,OAAA,CAAA,KAAA,CAAM,uEAAgB,KAAK,CAAA;AAAA;AACrC;AACF,KA9EmB,EAAA,cAAA,CAAA;AAoFrB,IAAA,MAAM,2BAAsC,MAAA,CAAA,YAAA;AAC1C,MAAI,IAAA;AACF,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,yCAAW,CAAA;AAAA;AAEzB,QAAA,QAAA,CAAS,KAAQ,GAAA;AAAA,UACf,IAAM,EAAA,MAAA;AAAA,UACN,GAAK,EAAA;AAAA,SACP;AAEA,QAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,UAAA,IAAI,MAAM,KAAO,EAAA;AACf,YAAA,OAAA,CAAQ,KAAK,wDAAW,CAAA;AAAA;AAE1B,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA;AAGhB,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAA,OAAA,CAAQ,IAAI,iEAAe,CAAA;AAAA;AAE7B,QAAA,MAAM,SAAS,MAAM,YAAA;AAAA,UACnB,MAAA;AAAA,UACA,CAAA,SAAA,EAAY,MAAM,YAAY,CAAA,UAAA,CAAA;AAAA,UAC9B;AAAA,YACE,IAAM,EAAA;AAAA;AAAA,cAEJ,aAAe,EAAA,KAAA;AAAA;AAAA,cAEf,UAAY,EAAA;AAAA;AACd;AACF,SACF;AACA,QAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,QAAI,IAAA,MAAA,CAAO,eAAe,GAAK,EAAA;AAAA,SAExB,MAAA;AACL,UAAc,aAAA,CAAA,CAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,YAAW,kDAAU,CAAA;AAC3C,UAAA;AAAA;AAEF,QAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAQ,OAAA,CAAA,GAAA,CAAI,yCAAW,EAAE,CAAA;AAAA;AAC3B,eACO,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,qDAAa,KAAK,CAAA;AAChC,QAAA,aAAA,CAAc,kDAAU,CAAA;AAAA;AAC1B,KAjDe,EAAA,UAAA,CAAA;AAoDjB,IAAA,SAAA,CAAU,MAAM;AACd,MAAW,UAAA,EAAA;AAAA,KACZ,CAAA;;;;;;UAKS,QAAQ,CAAA,KAAA,iBADhBA,YAIEC,WAAA,EAAA;AAAA;YAFC,SAAA,EAAWC,IAAQ,CAAA,QAAA,IAAIC,IAAY,CAAA,YAAA;AAAA,YACnC,SAAS,QAAQ,CAAA;AAAA,mDAGP,QAAQ,CAAA,KAAA,iBADrBH,YA2FaI,WAAA,EAAA;AAAA;mBAzFP,EAAA,WAAA;AAAA,YAAJ,GAAI,EAAA,SAAA;AAAA,YACH,KAAK,QAAQ,CAAA,KAAA;AAAA,YACb,OAAOC,IAAK,CAAA,KAAA;AAAA,YACZ,gBAAcC,IAAW,CAAA,WAAA;AAAA,YACzB,sBAAoBC,IAAgB,CAAA,gBAAA;AAAA,YACpC,iBAAeJ,IAAY,CAAA,YAAA;AAAA,YAC3B,aAAWD,IAAQ,CAAA,QAAA;AAAA,YACnB,cAAYM,IAAS,CAAA,SAAA;AAAA,YACrB,YAAA,mCAAY,KAAA,aAAA,CAAa,KAAA,GAAA,IAAA,CAAA;AAAA,YACzB,YAAA,mCAAY,KAAA,aAAA,CAAa,KAAA,GAAA,KAAA,CAAA;AAAA,YACzB,OAAA,mCAAO,KAAA,SAAA,CAAS,KAAA,GAAA,KAAA,CAAA;AAAA,YAChB,MAAA,mCAAM,KAAA,SAAA,CAAS,KAAA,GAAA,IAAA,CAAA;AAAA,YACf,WAAY,EAAA,eAAA;AAAA,YACZ,MAAM,EAAA;AAAA;YAEI,SAAA,UACT,MAuEM;AAAA,cAvEK,cAAa,KAAxB,IAAAC,SAAA,EAAA,EAAAC,kBAAA,CAuEM,OAvEN,UAuEM,EAAA;AAAA,gBAtEJC,mBAAiB,+CAAA,CAAA;AAAA,gBACjBC,kBAAA,CA4BM,OA5BN,UA4BM,EAAA;AAAA,kBA3BJD,mBAAW,gBAAA,CAAA;AAAA,mBAEF,SAAS,CAAA,KAAA,iBADlBD,mBAMM,KAAA,EAAA;AAAA;oBAJJ,KAAM,EAAA,0BAAA;AAAA,oBACL,OAAO,EAAA;AAAA;oBAERE,kBAAA;AAAA,sBAAoC,GAAA;AAAA,sBAAA,EAAjC,OAAM,wBAAwB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA,qCAGnC,EAAAF,kBAAA;AAAA,oBAEMG,QAAA;AAAA,oBAAA,EAAA,KAAA,CAAA,EAAA;AAAA,oBAAA;AAAA,sBAHNF,mBAAW,gBAAA,CAAA;AAAA,sBACXC,mBAEM,KAAA,EAAA;AAAA,wBAFM,KAAM,EAAA,0BAAA;AAAA,wBAA4B,OAAO,EAAA;AAAA;wBACnDA,kBAAA;AAAA,0BAAgC,GAAA;AAAA,0BAAA,EAA7B,OAAM,oBAAoB,EAAA;AAAA,0BAAA,IAAA;AAAA,0BAAA,CAAA;AAAA;AAAA;AAAA;;;;;mBAGnB,aAAa,CAAA,KAAA,IAAzBH,WAAA,EAAAC,kBAAA,CAMM,OANN,UAMM,EAAA;AAAA,oBALJC,mBAAa,4BAAA,CAAA;AAAA,oBACbC,mBAGE,GAAA,EAAA;AAAA,sBAFA,KAAM,EAAA,gCAAA;AAAA,sBACL,OAAA,mCAAO,KAAA,aAAA,CAAa,CAAA,CAAA;AAAA;oBAGzB,KAAAH,SAAA,EAAA,EAAAC,kBAAA,CAMM,OANN,UAMM,EAAA;AAAA,oBALJC,mBAAa,4BAAA,CAAA;AAAA,oBACbC,mBAGE,GAAA,EAAA;AAAA,sBAFA,KAAM,EAAA,sCAAA;AAAA,sBACL,OAAA,mCAAO,KAAA,aAAA,CAAa,CAAA,CAAA;AAAA;;;gBAI3BD,mBAAc,6BAAA,CAAA;AAAA,gBACdC,kBAAA,CAsCM,OAtCN,UAsCM,EAAA;AAAA,kBArCJD,mBAAkB,qDAAA,CAAA;AAAA,mBAET,OAAO,CAAA,KAAA,iBADhBD,mBAMM,KAAA,EAAA;AAAA;oBAJJ,KAAM,EAAA,0BAAA;AAAA,oBACL,OAAO,EAAA;AAAA;oBAERE,kBAAA;AAAA,sBAAiC,GAAA;AAAA,sBAAA,EAA9B,OAAM,qBAAqB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA;kBAEhCD,mBAAkB,qDAAA,CAAA;AAAA,kBAEV,OAAO,CAAA,KAAA,iBADfD,mBAMM,KAAA,EAAA;AAAA;oBAJJ,KAAM,EAAA,0BAAA;AAAA,oBACL,OAAO,EAAA;AAAA;oBAERE,kBAAA;AAAA,sBAAqC,GAAA;AAAA,sBAAA,EAAlC,OAAM,yBAAyB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA;kBAEpCD,mBAAW,gBAAA,CAAA;AAAA,kBACXC,mBAEM,KAAA,EAAA;AAAA,oBAFD,KAAM,EAAA,0BAAA;AAAA,oBAA4B,OAAO,EAAA;AAAA;oBAC5CA,kBAAA;AAAA,sBAAmC,GAAA;AAAA,sBAAA,EAAhC,OAAM,uBAAuB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA;kBAElCD,mBAAW,gBAAA,CAAA;AAAA,mBAEF,YAAY,CAAA,KAAA,iBADrBD,mBAOM,KAAA,EAAA;AAAA;oBALJ,KAAM,EAAA,cAAA;AAAA,oBACN,KAAM,EAAA,0BAAA;AAAA,oBACL,OAAA,mCAAO,KAAA,gBAAA,CAAgB,IAAA,CAAA;AAAA;oBAExBE,kBAAA;AAAA,sBAAgC,GAAA;AAAA,sBAAA,EAA7B,OAAM,oBAAoB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA;kBAE/BD,mBAAa,4BAAA,CAAA;AAAA,kBAEL,YAAY,CAAA,KAAA,iBADpBD,mBAMM,KAAA,EAAA;AAAA;oBAJJ,KAAM,EAAA,0BAAA;AAAA,oBACL,OAAA,mCAAO,KAAA,gBAAA,CAAgB,KAAA,CAAA;AAAA;oBAExBE,kBAAA;AAAA,sBAAqC,GAAA;AAAA,sBAAA,EAAlC,OAAM,yBAAyB,EAAA;AAAA,sBAAA,IAAA;AAAA,sBAAA,CAAA;AAAA;AAAA;AAAA;;;;;;;UAM5CD,mBAAiB,oDAAA,CAAA;AAAA,UAET,QAAA,CAAA,KAAA,CAAS,kBADjB,EAAAD,kBAAA;AAAA,YAMM,KAAA;AAAA,YAAA;AAAA;cAJJ,KAAA,EAAMI,eAAA,CAAA,6BAAA,EACyB,uBAAA,QAAA,CAAA,KAAA,CAAS,IAAI,CAAA,CAAA,CAAA;AAAA,aAEzC;AAAA,YAAAC,eAAA,CAAA,QAAA,CAAA,KAAA,CAAS,GAAG,CAAA;AAAA,YAAA;AAAA;AAAA,WAAA;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"ctyun-player.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, ref, shallowRef } from \"vue\";\nimport { ctyunRequest, GetCtyunDeviceVideoUrl } from \"./ctyun-player\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport ErrorPage from \"./errorPage.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\n\n// 天翼云播放器\ndefineOptions({\n name: \"CtyunPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst showBottomBar = ref(false);\nconst errorMsg = ref(\"\");\n\n// 播放器相关状态\nconst playerRef = shallowRef();\nconst isPlaying = ref(false); // 是否播放,播放true,暂停false\nconst isVoice = ref(false); // 是否开启语音对讲\nconst isFullscreen = ref(false);\nconst isVolumeMuted = ref(true);\n\n// 音频对讲相关状态\nconst isIntercomActive = ref<boolean>(false);\nconst audioContext = ref<AudioContext | null>(null);\nconst mediaStream = ref<MediaStream | null>(null);\nconst websocket = ref<WebSocket | null>(null);\nconst audioWorkletNode = ref<AudioWorkletNode | null>(null);\nconst intercomTimer = ref<any>(null); // 语音对讲定时器\nconst audioMsg = ref({\n type: \"\",\n msg: \"\",\n}); // 语音对讲提示信息\nconst taskId = ref(\"\");\n\n// 音频配置常量\nconst AUDIO_CONFIG = {\n sampleRate: 48000,\n channelCount: 1,\n sampleSize: 16,\n} as const;\n\nconst initPlayer = async () => {\n // console.log(\"initPlayer\");\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n const url = await GetCtyunDeviceVideoUrl(props.deviceSerial);\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\n // console.log(\"initPlayer\", url);\n videoUrl.value = url;\n errorMsg.value = \"\";\n } catch (error) {\n if (props.debug) {\n console.error(\"初始化天翼云播放器失败:\", error);\n }\n errorMsg.value = `初始化失败: ${error instanceof Error ? error.message : \"未知错误\"}`;\n }\n};\n\n/**\n * 播放视频\n */\nconst playerPlay = (): void => {\n playerRef.value?.play();\n};\n\n/**\n * 暂停视频\n */\nconst playerPause = (): void => {\n playerRef.value?.pause();\n};\n\n/**\n * 截图\n */\nconst playerScreenShot = (): void => {\n playerRef.value?.screenshot();\n};\n\n/**\n * 切换全屏状态\n * @param fullscreen 是否全屏\n */\nconst playerFullscreen = (fullscreen: boolean): void => {\n isFullscreen.value = fullscreen;\n playerRef.value?.fullscreen(fullscreen);\n};\n\n// 获取视频信息,判断当前是否为静音状态\nconst handleVideoInfo = () => {\n // 判断是否静音\n isVolumeMuted.value = playerRef.value?.isMute();\n};\nconst handleMute = (mute: boolean) => {\n isVolumeMuted.value = mute;\n};\nconst handleSetMute = (volume: number) => {\n playerRef.value?.setMute(volume);\n};\n\nconst audioErrorMsg = (msg: string) => {\n audioMsg.value = {\n type: \"error\",\n msg,\n };\n // 3秒后清除错误信息\n setTimeout(() => {\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n }, 3000);\n};\n\n/**\n * 初始化音频上下文\n */\nconst initAudioContext = async (): Promise<void> => {\n try {\n // 检测浏览器是否支持AudioContext\n if (typeof window === \"undefined\") {\n throw new Error(\"非浏览器环境,无法使用AudioContext\");\n }\n\n const AudioContext =\n window.AudioContext || (window as any).webkitAudioContext;\n if (!AudioContext) {\n throw new Error(\"当前浏览器不支持AudioContext\");\n }\n\n // 创建音频上下文,使用指定的采样率\n audioContext.value = new AudioContext({\n sampleRate: AUDIO_CONFIG.sampleRate,\n });\n\n // 确保音频上下文处于运行状态\n if (audioContext.value.state === \"suspended\") {\n await audioContext.value.resume();\n }\n\n if (props.debug) {\n console.log(\n \"音频上下文初始化成功,采样率:\",\n audioContext.value.sampleRate,\n );\n }\n } catch (error) {\n throw new Error(`音频上下文初始化失败: ${error}`);\n }\n};\n\n/**\n * 初始化麦克风\n */\nconst initMicrophone = async (): Promise<void> => {\n try {\n // 检查浏览器是否支持getUserMedia\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n throw new Error(\"当前浏览器不支持麦克风访问\");\n }\n\n // 请求麦克风权限\n const constraints: MediaStreamConstraints = {\n audio: {\n channelCount: AUDIO_CONFIG.channelCount,\n sampleRate: AUDIO_CONFIG.sampleRate,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n },\n video: false,\n };\n\n mediaStream.value = await navigator.mediaDevices.getUserMedia(constraints);\n if (props.debug) {\n console.log(\"麦克风初始化成功\");\n }\n } catch (error) {\n if (error instanceof Error) {\n switch (error.name) {\n case \"NotAllowedError\":\n throw new Error(\"麦克风权限被拒绝,请允许访问麦克风\");\n case \"NotFoundError\":\n throw new Error(\"未找到可用的麦克风设备\");\n case \"NotReadableError\":\n throw new Error(\"麦克风设备被其他应用占用\");\n case \"OverconstrainedError\":\n throw new Error(\"麦克风设备不支持指定的音频参数\");\n default:\n throw new Error(`麦克风初始化失败: ${error.message}`);\n }\n }\n throw new Error(`麦克风初始化失败: ${error}`);\n }\n};\n\n/**\n * 建立WebSocket连接\n */\nconst connectWebSocket = async (url: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n websocket.value = new WebSocket(url);\n websocket.value.binaryType = \"arraybuffer\";\n\n let isResolved = false;\n\n // 连接成功\n websocket.value.onopen = () => {\n if (props.debug) {\n console.log(\"WebSocket连接成功\");\n }\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n\n // 连接错误\n websocket.value.onerror = (error) => {\n if (props.debug) {\n console.error(\"WebSocket连接错误:\", error);\n }\n if (!isResolved) {\n isResolved = true;\n reject(new Error(\"WebSocket连接失败\"));\n }\n };\n\n // 连接关闭\n websocket.value.onclose = (event) => {\n if (props.debug) {\n console.log(\"WebSocket连接关闭:\", event.code, event.reason);\n }\n if (isIntercomActive.value) {\n isIntercomActive.value = false;\n isVoice.value = false;\n }\n };\n\n // 接收消息(如果服务端有响应)\n websocket.value.onmessage = (event) => {\n if (props.debug) {\n console.log(\"收到服务端消息:\", event.data);\n }\n };\n\n // 设置连接超时\n const timeoutId = setTimeout(() => {\n if (!isResolved && websocket.value?.readyState !== WebSocket.OPEN) {\n isResolved = true;\n websocket.value?.close();\n reject(new Error(\"WebSocket连接超时\"));\n }\n }, 10000); // 10秒超时\n\n // 清理超时定时器\n if (websocket.value) {\n const originalOnOpen = websocket.value.onopen;\n const originalOnError = websocket.value.onerror;\n\n websocket.value.onopen = function (event) {\n clearTimeout(timeoutId);\n originalOnOpen?.call(this, event);\n };\n\n websocket.value.onerror = function (event) {\n clearTimeout(timeoutId);\n originalOnError?.call(this, event);\n };\n }\n } catch (error) {\n reject(new Error(`WebSocket创建失败: ${error}`));\n }\n });\n};\n\n/**\n * 将Float32Array音频数据转换为16位PCM数据\n */\nconst convertToPCM16 = (float32Array: Float32Array): ArrayBuffer => {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n\n for (let i = 0; i < float32Array.length; i++) {\n // 将浮点数(-1.0 到 1.0)转换为16位整数(-32768 到 32767)\n const sample = Math.max(-1, Math.min(1, float32Array[i]));\n const intSample = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n view.setInt16(i * 2, intSample, true); // true表示小端字节序\n }\n\n return buffer;\n};\n/**\n * 开始音频数据处理\n */\nconst startAudioProcessing = async (): Promise<void> => {\n try {\n if (!audioContext.value || !mediaStream.value) {\n throw new Error(\"音频上下文或媒体流未初始化\");\n }\n\n // 创建音频源节点\n const sourceNode = audioContext.value.createMediaStreamSource(\n mediaStream.value,\n );\n\n // 创建ScriptProcessor节点用于音频数据处理\n const bufferSize = 4096;\n const processor = audioContext.value.createScriptProcessor(\n bufferSize,\n 1,\n 1,\n );\n\n // 音频数据处理回调\n processor.onaudioprocess = (event) => {\n if (\n !isIntercomActive.value ||\n !websocket.value ||\n websocket.value.readyState !== WebSocket.OPEN\n ) {\n return;\n }\n\n try {\n // 获取音频数据\n const inputBuffer = event.inputBuffer;\n const inputData = inputBuffer.getChannelData(0); // 获取单声道数据\n\n // 检查音频数据是否有效\n if (inputData.length === 0) {\n return;\n }\n\n // 将Float32Array转换为16位PCM数据\n const pcmData = convertToPCM16(inputData);\n\n // 发送音频数据到WebSocket\n websocket.value.send(pcmData);\n } catch (error) {\n if (props.debug) {\n console.error(\"音频数据处理错误:\", error);\n }\n }\n };\n\n // 连接音频节点\n sourceNode.connect(processor);\n processor.connect(audioContext.value.destination);\n\n // 保存处理器引用以便后续清理\n audioWorkletNode.value = processor as any;\n\n if (props.debug) {\n console.log(\"音频数据处理开始\");\n }\n } catch (error) {\n throw new Error(`音频数据处理启动失败: ${error}`);\n }\n};\n\n/**\n * 停止语音对讲\n */\nconst stopIntercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"正在停止语音对讲...\");\n }\n isVoice.value = false;\n isIntercomActive.value = false;\n\n // 清除定时器\n if (intercomTimer.value) {\n clearTimeout(intercomTimer.value);\n intercomTimer.value = null;\n }\n\n // 关闭服务端语音对讲\n if (props.deviceSerial && taskId.value) {\n try {\n // await GetYunZhiYanCloseVoiceIntercom(props.deviceSerial, taskId.value);\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭服务端语音对讲失败:\", error);\n }\n }\n }\n\n // 关闭WebSocket连接\n if (websocket.value) {\n if (websocket.value.readyState === WebSocket.OPEN) {\n websocket.value.close(1000, \"用户主动关闭\");\n }\n websocket.value = null;\n }\n\n // 停止媒体流\n if (mediaStream.value) {\n mediaStream.value.getTracks().forEach((track) => {\n track.stop();\n });\n mediaStream.value = null;\n }\n\n // 关闭音频上下文\n if (audioContext.value && audioContext.value.state !== \"closed\") {\n try {\n await audioContext.value.close();\n } catch (error) {\n if (props.debug) {\n console.error(\"关闭音频上下文失败:\", error);\n }\n }\n audioContext.value = null;\n }\n\n // 清理音频工作节点\n if (audioWorkletNode.value) {\n try {\n audioWorkletNode.value.disconnect();\n } catch (error) {\n if (props.debug) {\n console.error(\"断开音频工作节点失败:\", error);\n }\n }\n audioWorkletNode.value = null;\n }\n\n // 清理任务ID\n taskId.value = \"\";\n audioMsg.value = {\n type: \"\",\n msg: \"\",\n };\n if (props.debug) {\n console.log(\"语音对讲已停止\");\n }\n } catch (error) {\n if (props.debug) {\n console.error(\"停止语音对讲时发生错误:\", error);\n }\n }\n};\n\n/**\n * 开启语音对讲\n */\nconst intercom = async (): Promise<void> => {\n try {\n if (props.debug) {\n console.log(\"开始语音对讲...\");\n }\n audioMsg.value = {\n type: \"info\",\n msg: \"正在连接...\",\n };\n // 防止重复开启\n if (isIntercomActive.value) {\n if (props.debug) {\n console.warn(\"语音对讲已在进行中\");\n }\n return;\n }\n // 设置加载状态\n isVoice.value = true;\n\n // 1. 获取语音推送地址\n if (props.debug) {\n console.log(\"正在获取语音推送地址...\");\n }\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${props.deviceSerial}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n if (result.statusCode === 200) {\n // ...\n } else {\n audioErrorMsg(result?.message || \"开启语音对讲失败\");\n return;\n }\n console.log(result);\n if (props.debug) {\n console.log(\"语音推送地址:\", \"\");\n }\n } catch (error) {\n console.error(\"开启语音对讲失败:\", error);\n audioErrorMsg(\"开启语音对讲失败\");\n }\n};\n\nonMounted(() => {\n initPlayer();\n});\n</script>\n\n<template>\n <ErrorPage v-if=\"errorMsg\" :message=\"errorMsg\" />\n <EasyPlayer\n v-else-if=\"videoUrl\"\n ref=\"playerRef\"\n :url=\"videoUrl\"\n :debug=\"debug\"\n :access-token=\"accessToken\"\n :platform-type-name=\"platformTypeName\"\n :device-serial=\"deviceSerial\"\n :area-name=\"areaName\"\n :pause-mode=\"pauseMode\"\n @mouseenter=\"showBottomBar = true\"\n @mouseleave=\"showBottomBar = false\"\n @pause=\"isPlaying = false\"\n @play=\"isPlaying = true\"\n @video-info=\"handleVideoInfo\"\n @mute=\"handleMute\"\n >\n <template #customBar>\n <div v-if=\"showBottomBar\" class=\"i-easy-player-bar\">\n <!-- 左侧:播放/暂停 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-left\">\n <!-- 播放 -->\n <div\n v-if=\"!isPlaying\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerPlay\"\n >\n <i class=\"iconfont icon-playfill\" />\n </div>\n <!-- 暂停 -->\n <div v-else class=\"i-easy-player-bottom-bar\" @click=\"playerPause\">\n <i class=\"iconfont icon-stop\" />\n </div>\n\n <div v-if=\"!isVolumeMuted\" class=\"i-easy-player-bottom-bar\">\n <!-- 音量图标 -->\n <i\n class=\"iconfont icon-notificationfill\"\n @click=\"handleSetMute(1)\"\n />\n </div>\n <div v-else class=\"i-easy-player-bottom-bar\">\n <!-- 静音图标 -->\n <i\n class=\"iconfont icon-notificationforbidfill\"\n @click=\"handleSetMute(0)\"\n />\n </div>\n </div>\n <!-- 截图,全屏 -->\n <div class=\"i-easy-player-bar-item i-easy-player-bar-right\">\n <!-- 语音对讲:关闭状态 -->\n <div\n v-if=\"!isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"intercom\"\n >\n <i class=\"iconfont icon-voice\" />\n </div>\n <!-- 语音对讲:开启状态 -->\n <div\n v-if=\"isVoice\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"stopIntercom\"\n >\n <i class=\"iconfont icon-voicefill\" />\n </div>\n <!-- 截图 -->\n <div class=\"i-easy-player-bottom-bar\" @click=\"playerScreenShot\">\n <i class=\"iconfont icon-picfill\" />\n </div>\n <!-- 全屏 -->\n <div\n v-if=\"!isFullscreen\"\n title=\"全屏\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(true)\"\n >\n <i class=\"iconfont icon-full\" />\n </div>\n <!-- 取消全屏 -->\n <div\n v-if=\"isFullscreen\"\n class=\"i-easy-player-bottom-bar\"\n @click=\"playerFullscreen(false)\"\n >\n <i class=\"iconfont icon-reduction\" />\n </div>\n </div>\n </div>\n </template>\n </EasyPlayer>\n <!-- 语音对讲错误提示 -->\n <div\n v-if=\"audioMsg.msg\"\n class=\"i-tzj-player__voice-default\"\n :class=\"`i-tzj-player__voice-${audioMsg.type}`\"\n >\n {{ audioMsg.msg }}\n </div>\n</template>\n"],"names":["_createBlock","ErrorPage","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","pauseMode","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass","_toDisplayString"],"mappings":"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"}
|
|
@@ -438,14 +438,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
438
438
|
[
|
|
439
439
|
!playSuccess.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
440
440
|
key: 0,
|
|
441
|
-
"video-name": _ctx.areaName || _ctx.deviceSerial,
|
|
442
441
|
message: "\u65E0\u4FE1\u53F7"
|
|
443
|
-
}
|
|
442
|
+
})) : createCommentVNode("v-if", true),
|
|
444
443
|
!playUrl.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
445
444
|
key: 1,
|
|
446
|
-
"video-name": _ctx.areaName || _ctx.deviceSerial,
|
|
447
445
|
message: "\u65E0\u64AD\u653E\u5730\u5740"
|
|
448
|
-
}
|
|
446
|
+
})) : createCommentVNode("v-if", true),
|
|
449
447
|
createCommentVNode(" \u64AD\u653E\u5668\u5E95\u90E8\u64CD\u4F5C\u680F "),
|
|
450
448
|
renderSlot(_ctx.$slots, "customBar")
|
|
451
449
|
],
|