@yimou6/common-ui 1.10.12 → 1.10.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/cdn/index.cdn.js +7 -7
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +7 -7
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/es/components/tenant-enterprise/index.d.ts +13 -0
  6. package/es/components/tenant-enterprise/src/tenant-enterprise.d.ts +4 -0
  7. package/es/components/tenant-enterprise/src/tenant-enterprise.mjs +7 -0
  8. package/es/components/tenant-enterprise/src/tenant-enterprise.mjs.map +1 -1
  9. package/es/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +13 -0
  10. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs +3 -0
  11. package/es/components/tenant-enterprise/src/tenant-enterprise.vue2.mjs.map +1 -1
  12. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +3 -3
  13. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  14. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +2 -1
  15. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  16. package/lib/components/tenant-enterprise/index.d.ts +13 -0
  17. package/lib/components/tenant-enterprise/src/tenant-enterprise.d.ts +4 -0
  18. package/lib/components/tenant-enterprise/src/tenant-enterprise.js +7 -0
  19. package/lib/components/tenant-enterprise/src/tenant-enterprise.js.map +1 -1
  20. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue.d.ts +13 -0
  21. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js +3 -0
  22. package/lib/components/tenant-enterprise/src/tenant-enterprise.vue2.js.map +1 -1
  23. package/lib/components/tzj-player/src/easyPlayer.vue2.js +3 -3
  24. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  25. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +2 -1
  26. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  27. package/package.json +1 -1
@@ -20,6 +20,10 @@ export declare const ITenantEnterprise: import("../../types").SFCWithInstall<imp
20
20
  type: StringConstructor;
21
21
  default: string;
22
22
  };
23
+ defaultMode: {
24
+ type: import("vue").PropType<"default" | "all-child">;
25
+ default: string;
26
+ };
23
27
  action: ObjectConstructor;
24
28
  }>, {
25
29
  props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
@@ -43,6 +47,10 @@ export declare const ITenantEnterprise: import("../../types").SFCWithInstall<imp
43
47
  type: StringConstructor;
44
48
  default: string;
45
49
  };
50
+ defaultMode: {
51
+ type: import("vue").PropType<"default" | "all-child">;
52
+ default: string;
53
+ };
46
54
  action: ObjectConstructor;
47
55
  }>> & Readonly<{
48
56
  onChange?: ((value: import("./src/tenant-enterprise").TenantEnterpriseChangeValueType) => any) | undefined;
@@ -1344,6 +1352,10 @@ export declare const ITenantEnterprise: import("../../types").SFCWithInstall<imp
1344
1352
  type: StringConstructor;
1345
1353
  default: string;
1346
1354
  };
1355
+ defaultMode: {
1356
+ type: import("vue").PropType<"default" | "all-child">;
1357
+ default: string;
1358
+ };
1347
1359
  action: ObjectConstructor;
1348
1360
  }>> & Readonly<{
1349
1361
  onChange?: ((value: import("./src/tenant-enterprise").TenantEnterpriseChangeValueType) => any) | undefined;
@@ -1353,5 +1365,6 @@ export declare const ITenantEnterprise: import("../../types").SFCWithInstall<imp
1353
1365
  multiple: boolean;
1354
1366
  popperClass: string;
1355
1367
  showLabel: boolean;
1368
+ defaultMode: "default" | "all-child";
1356
1369
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>>;
1357
1370
  export default ITenantEnterprise;
@@ -21,6 +21,10 @@ export declare const TenantEnterpriseProps: {
21
21
  type: StringConstructor;
22
22
  default: string;
23
23
  };
24
+ defaultMode: {
25
+ type: PropType<"default" | "all-child">;
26
+ default: string;
27
+ };
24
28
  action: ObjectConstructor;
25
29
  };
26
30
  export interface TenantEnterpriseItem {
@@ -21,6 +21,13 @@ const TenantEnterpriseProps = {
21
21
  type: String,
22
22
  default: ""
23
23
  },
24
+ // 默认选中模式
25
+ // default 默认选中当前单位
26
+ // all-child 默认选中当前单位及子单位
27
+ defaultMode: {
28
+ type: String,
29
+ default: "default"
30
+ },
24
31
  /**
25
32
  * pinia window.microApp.getData()
26
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-enterprise.mjs","sources":["../../../../../../../packages/components/tenant-enterprise/src/tenant-enterprise.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from 'vue';\nimport type TenantEnterprise from './tenant-enterprise.vue';\n\nexport const TenantEnterpriseProps = {\n label: {\n type: String,\n default: '当前单位',\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n data: {\n type: Array as PropType<any[]>,\n default: () => [],\n },\n multiple: {\n type: Boolean,\n default: true,\n },\n popperClass: {\n type: String,\n default: '',\n },\n /**\n * pinia window.microApp.getData()\n */\n action: Object,\n};\n\nexport interface TenantEnterpriseItem {\n name: string;\n enterpriseId: number | string;\n tenantId: number | string;\n}\nexport interface TenantEnterpriseChangeValueType {\n arr: TenantEnterpriseItem[];\n obj: TenantEnterpriseItem;\n}\n\nexport const TenantEnterpriseEmits = {\n change: (value: TenantEnterpriseChangeValueType) => value,\n};\n\nexport type TenantEnterprisePropsType = ExtractPropTypes<typeof TenantEnterpriseProps>;\nexport type TenantEnterpriseInstance = InstanceType<typeof TenantEnterprise>;\n"],"names":[],"mappings":";;AAGO,MAAM,qBAAwB,GAAA;AAAA,EACnC,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,KAAA;AAAA,IACN,OAAA,kBAAe,MAAA,CAAA,MAAA,EAAN,EAAA,SAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AACV;AAYO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAA,kBAAS,MAAA,CAAA,CAAA,KAAA,KAA2C,KAA5C,EAAA,QAAA;AACV;;;;"}
1
+ {"version":3,"file":"tenant-enterprise.mjs","sources":["../../../../../../../packages/components/tenant-enterprise/src/tenant-enterprise.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from 'vue';\nimport type TenantEnterprise from './tenant-enterprise.vue';\n\nexport const TenantEnterpriseProps = {\n label: {\n type: String,\n default: '当前单位',\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n data: {\n type: Array as PropType<any[]>,\n default: () => [],\n },\n multiple: {\n type: Boolean,\n default: true,\n },\n popperClass: {\n type: String,\n default: '',\n },\n // 默认选中模式\n // default 默认选中当前单位\n // all-child 默认选中当前单位及子单位\n defaultMode: {\n type: String as PropType<'default' | 'all-child'>,\n default: 'default'\n },\n /**\n * pinia window.microApp.getData()\n */\n action: Object,\n};\n\nexport interface TenantEnterpriseItem {\n name: string;\n enterpriseId: number | string;\n tenantId: number | string;\n}\nexport interface TenantEnterpriseChangeValueType {\n arr: TenantEnterpriseItem[];\n obj: TenantEnterpriseItem;\n}\n\nexport const TenantEnterpriseEmits = {\n change: (value: TenantEnterpriseChangeValueType) => value,\n};\n\nexport type TenantEnterprisePropsType = ExtractPropTypes<typeof TenantEnterpriseProps>;\nexport type TenantEnterpriseInstance = InstanceType<typeof TenantEnterprise>;\n"],"names":[],"mappings":";;AAGO,MAAM,qBAAwB,GAAA;AAAA,EACnC,KAAO,EAAA;AAAA,IACL,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,KAAA;AAAA,IACN,OAAA,kBAAe,MAAA,CAAA,MAAA,EAAN,EAAA,SAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,MAAQ,EAAA;AACV;AAYO,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAA,kBAAS,MAAA,CAAA,CAAA,KAAA,KAA2C,KAA5C,EAAA,QAAA;AACV;;;;"}
@@ -19,6 +19,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
19
19
  type: StringConstructor;
20
20
  default: string;
21
21
  };
22
+ defaultMode: {
23
+ type: import("vue").PropType<"default" | "all-child">;
24
+ default: string;
25
+ };
22
26
  action: ObjectConstructor;
23
27
  }>, {
24
28
  props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
@@ -42,6 +46,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
42
46
  type: StringConstructor;
43
47
  default: string;
44
48
  };
49
+ defaultMode: {
50
+ type: import("vue").PropType<"default" | "all-child">;
51
+ default: string;
52
+ };
45
53
  action: ObjectConstructor;
46
54
  }>> & Readonly<{
47
55
  onChange?: ((value: import("./tenant-enterprise").TenantEnterpriseChangeValueType) => any) | undefined;
@@ -1343,6 +1351,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
1343
1351
  type: StringConstructor;
1344
1352
  default: string;
1345
1353
  };
1354
+ defaultMode: {
1355
+ type: import("vue").PropType<"default" | "all-child">;
1356
+ default: string;
1357
+ };
1346
1358
  action: ObjectConstructor;
1347
1359
  }>> & Readonly<{
1348
1360
  onChange?: ((value: import("./tenant-enterprise").TenantEnterpriseChangeValueType) => any) | undefined;
@@ -1352,5 +1364,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
1352
1364
  multiple: boolean;
1353
1365
  popperClass: string;
1354
1366
  showLabel: boolean;
1367
+ defaultMode: "default" | "all-child";
1355
1368
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
1356
1369
  export default _default;
@@ -94,6 +94,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
94
94
  );
95
95
  if (current) {
96
96
  (_g = treeRef.value) == null ? void 0 : _g.setCheckedKeys([current.id], true);
97
+ if (props.defaultMode === "all-child") {
98
+ recursionSetChecked(current, true);
99
+ }
97
100
  await handleCheckChange();
98
101
  handleVisibleChange(false);
99
102
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-enterprise.vue2.mjs","sources":["../../../../../../../packages/components/tenant-enterprise/src/tenant-enterprise.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ElInput, ElSelect, ElTreeV2 } from \"element-plus\";\nimport {\n inject,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n useId,\n watch,\n} from \"vue\";\nimport { SERVER_CONFIG, SITE_UNIT_STORE, USER_INFO } from \"../../../utils\";\nimport {\n TenantEnterpriseEmits,\n TenantEnterpriseProps,\n} from \"./tenant-enterprise\";\nimport TreeLine from \"./tree-line\";\n\ndefineOptions({\n name: \"ITenantEnterprise\",\n});\n\nconst props = defineProps(TenantEnterpriseProps);\nconst emits = defineEmits(TenantEnterpriseEmits);\n\nconst simpleModeBaseInfo = ref<any>({});\nconst systemConfig = props?.action?.serverConfig || inject(SERVER_CONFIG);\nconst isSimple = systemConfig?.menuMode === \"simple\";\nconst tenantStore = props?.action?.tenantStore || inject(SITE_UNIT_STORE);\nconst userStore = props?.action?.user || inject(USER_INFO);\n\nconst CHILDREN_KEY = \"enterpriseTreeVoList\";\nconst NODE_KEY = \"id\";\n\nconst modelValue = ref();\nconst loading = ref(false);\nconst treeRef = shallowRef();\nconst treeContainerId = useId();\nconst selectRef = shallowRef();\nconst searchValue = ref(\"\");\nconst treeData = ref<any[]>([]);\n// 默认选中\n// 1、选中用户当前单位站点及其子节点;\n// 2、simple模式下,默认选中接收到的单位站点(大屏那边目前都是单选)\nconst defaultCheck = ref<Record<string, any>>({\n enterpriseId: null,\n tenantId: null,\n name: null,\n});\nlet cacheChangeKeys: any[] = [];\n\nonMounted(async () => {\n treeData.value = await GetTenantEnterpriseTree();\n await setDefaultCheck();\n});\n\nwatch(\n () => tenantStore?.currentTenantId,\n async () => {\n treeData.value = await GetTenantEnterpriseTree();\n await setDefaultCheck();\n },\n);\n\nwindow.microApp?.addDataListener((val: any) => {\n // 只在 simple 模式下运行\n // simple 模式下不显示单位选择框,所以无需更新视图,只需要触发emits.change,让组件调用者知道单位发生了变更即可。\n if (isSimple && val) {\n const obj = {\n name: val.enterpriseName,\n enterpriseId: val.enterpriseId,\n tenantId: val.tenantId,\n };\n emits(\"change\", {\n arr: [obj],\n obj,\n });\n }\n}, true);\n\n/**\n * 获取租户下的所有单位树\n */\nasync function GetTenantEnterpriseTree(): Promise<any[]> {\n return (await tenantStore?.getEnterprise()) || [];\n}\n\n/**\n * 设置默认选中\n */\nasync function setDefaultCheck() {\n await clearChecked();\n\n // 当前用户站点是否在当前站点树中\n // 在:默认选中当前\n defaultCheck.value.enterpriseId =\n simpleModeBaseInfo?.value?.enterpriseId ??\n userStore?.userInfo.tenantEnterpriseId;\n defaultCheck.value.tenantId =\n simpleModeBaseInfo?.value?.tenantId ?? userStore?.userInfo.tenantId;\n defaultCheck.value.name =\n simpleModeBaseInfo?.value?.enterpriseName ??\n userStore?.userInfo.enterpriseName;\n // 不在:选中第一项\n if (\n String(tenantStore?.getCurrentTenantId) !==\n String(userStore?.userInfo.tenantId)\n ) {\n if (treeData.value.length > 0) {\n console.log(\"非当前用户所在站点\");\n defaultCheck.value.name = treeData.value[0].enterpriseName;\n defaultCheck.value.tenantId = treeData.value[0].tenantId;\n defaultCheck.value.enterpriseId = treeData.value[0].id;\n }\n }\n\n // 选中的单位节点\n const current = findEnterprise(\n defaultCheck.value.enterpriseId,\n treeData.value,\n );\n if (current) {\n treeRef.value?.setCheckedKeys([current.id], true);\n await handleCheckChange();\n handleVisibleChange(false);\n } else {\n console.error(\"未找到单位!\", defaultCheck.value.enterpriseId);\n }\n}\n\n/**\n * 清空所有选中\n */\nasync function clearChecked() {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n if (checkedList.length > 0) {\n treeRef.value?.setCheckedKeys(checkedList, false);\n }\n}\n\n/**\n * 根据单位ID在tree中查找单位\n */\nfunction findEnterprise(enterpriseId: number, tree: any[]): any {\n let enterprise = null;\n for (let i = 0; i < tree.length; i++) {\n if (tree[i].id === enterpriseId) {\n enterprise = tree[i];\n break;\n }\n if (tree[i][CHILDREN_KEY] && tree[i][CHILDREN_KEY].length) {\n enterprise = findEnterprise(enterpriseId, tree[i][CHILDREN_KEY]);\n if (enterprise) {\n break;\n }\n }\n }\n return enterprise;\n}\n/**\n * 节点选中状态变化\n */\nasync function handleCheckChange() {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedNodes(false) || [];\n const val = checkedList.map(\n (item: any) => item.enterpriseName || item.tenantName,\n );\n modelValue.value = props.multiple ? val : val[0];\n if (!props.multiple) {\n // 单选时,选中之后就隐藏下拉框\n selectRef.value.blur();\n }\n}\n\n/**\n * el-select 面板 显示、隐藏\n */\nfunction handleVisibleChange(visible: boolean) {\n if (!visible) {\n const diff = diffChecked();\n if (!diff) {\n const checkedList = treeRef.value?.getCheckedNodes() || [];\n if (checkedList.length === 0) {\n setDefaultCheck();\n } else {\n const arrObj: Record<string, any[]> = {\n name: [],\n enterpriseId: [],\n tenantId: [],\n };\n const arr = checkedList.map((item: any) => {\n arrObj.name.push(item.enterpriseName || item.tenantName);\n arrObj.enterpriseId.push(item.id);\n if (!arrObj.tenantId.includes(item.tenantId)) {\n arrObj.tenantId.push(item.tenantId);\n }\n return {\n name: item.enterpriseName || item.tenantName,\n enterpriseId: item.id,\n tenantId: item.tenantId || item.id,\n };\n });\n emits(\"change\", {\n arr,\n obj: {\n name: arrObj.name.join(\",\"),\n enterpriseId: arrObj.enterpriseId.join(\",\"),\n tenantId: arrObj.tenantId.join(\",\"),\n },\n });\n }\n }\n } else {\n // 重置过滤\n searchValue.value = \"\";\n handleSearch();\n }\n}\n\n/**\n * 比较选中节点是否发生变化\n */\nfunction diffChecked() {\n const checkedList = treeRef.value?.getCheckedNodes() || [];\n const checkedKeys = checkedList\n .map((item: any) => item[NODE_KEY])\n .filter(Boolean);\n // 比较 checkedKeys 和 cacheChangeKeys\n const diff = diffArr(checkedKeys, cacheChangeKeys);\n cacheChangeKeys = checkedKeys;\n return diff;\n}\n\n/**\n * 比较两个数组是否相等\n * 数组下标不影响结果,即 [1,2] 等于 [2,1] 返回true\n */\nfunction diffArr(arr1: number[], arr2: number[]): boolean {\n if (arr1.length !== arr2.length) {\n return false;\n }\n const sortedArr1 = [...arr1].sort();\n const sortedArr2 = [...arr2].sort();\n for (let i = 0; i < sortedArr1.length; i++) {\n if (sortedArr1[i] !== sortedArr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 触发过滤\n */\nfunction handleSearch() {\n treeRef.value?.filter(searchValue.value);\n if (!searchValue.value) {\n // 如果过滤为空,则展开默认选中的节点\n setDefaultExpanded();\n }\n // 实现搜索高亮\n highlightNodes(treeData.value, searchValue.value);\n}\n\n/**\n * 高亮节点标签\n * @param nodes - 节点数组\n * @param query - 搜索关键词\n */\nfunction highlightNodes(nodes: any[], query: string) {\n nodes.forEach((node: any) => {\n if (node[CHILDREN_KEY] && node[CHILDREN_KEY].length > 0) {\n highlightNodes(node[CHILDREN_KEY], query);\n }\n if (query && (node.enterpriseName || node.tenantName)) {\n const label = node.enterpriseName || node.tenantName;\n const regex = new RegExp(`(${query})`, \"gi\");\n node.label = label.replace(regex, '<span class=\"highlight\">$1</span>');\n } else {\n // 如果没有搜索关键词,则恢复节点标签\n node.label = node.enterpriseName || node.tenantName;\n }\n });\n}\n\n/**\n * 点击checkbox选择框\n */\nconst handleCheck = async (data: any) => {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n const isChecked = checkedList.includes(data[NODE_KEY]);\n if (props.multiple) {\n // 多选\n recursionSetChecked(data, isChecked);\n } else {\n // 单选\n // 取消其他选中\n checkedList.forEach((item: any) => {\n if (item !== data[NODE_KEY]) {\n treeRef.value?.setChecked(item, false);\n }\n });\n }\n};\n\n/**\n * 递归设置选中/取消选中\n * @param data\n * @param isChecked\n */\nfunction recursionSetChecked(data: any, isChecked: boolean) {\n if (data[CHILDREN_KEY] && data[CHILDREN_KEY].length > 0) {\n // 选中/取消子节点\n data[CHILDREN_KEY].forEach((item: any) => {\n treeRef.value?.setChecked(item[NODE_KEY], isChecked);\n recursionSetChecked(item, isChecked);\n });\n }\n}\n\n/**\n * 点击树节点\n */\nconst handleNodeClick = async (data: any) => {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n if (props.multiple) {\n const isChecked = checkedList.includes(data[NODE_KEY]);\n treeRef.value?.setChecked(data[NODE_KEY], !isChecked);\n } else {\n // 单选\n treeRef.value?.setChecked(data[NODE_KEY], true);\n // 取消其他选中\n checkedList.forEach((item: any) => {\n if (item !== data[NODE_KEY]) {\n treeRef.value?.setChecked(item, false);\n }\n });\n }\n await handleCheckChange();\n};\n\n/**\n * 节点过滤\n */\nconst filterMethod = (query: string, node: any) => {\n const label = node?.enterpriseName || node?.tenantName;\n return new RegExp(query, \"i\").test(label);\n};\n\n/**\n * 根据当前选中节点,设置展开的节点\n */\nfunction setDefaultExpanded() {\n const checkedKeys = treeRef.value?.getCheckedKeys() || [];\n if (checkedKeys.length === 0) return;\n // 1、调用 findParentEnterprise 查找父节点数组\n // 2、过滤掉无效数组,最上层的节点找不到父节点会返回null\n // 3、展开二维数组\n // 4、得到 单位ID 数组\n const expandedKeys = checkedKeys\n .map((item: any) => {\n return findParentEnterprise(item, treeData.value);\n })\n .filter(Boolean)\n .flat()\n .map((item: any) => item[NODE_KEY]);\n treeRef.value?.setExpandedKeys([...checkedKeys, ...expandedKeys]);\n\n if (treeRef.value && treeRef.value?.scrollTo) {\n const top = getNodeTop(checkedKeys[0]);\n treeRef.value.scrollTo(top);\n }\n}\n\n/**\n * 根据单位ID在tree中查找父级单位\n * @param enterpriseId - 要查找的单位ID\n * @param tree - 当前树数据\n * @returns {Array|null} - 返回从根到子的父级单位数组,未找到则返回 null\n */\nfunction findParentEnterprise(enterpriseId: number, tree: any[]): any[] | null {\n const traverse = (node: any, path: any[], targetId: number): any[] | null => {\n // 如果当前节点是目标节点,则返回当前路径(不包含自己)\n if (node.id === targetId) {\n return path.length > 0 ? [...path] : null;\n }\n\n // 如果有子节点,继续递归查找\n if (node[CHILDREN_KEY] && node[CHILDREN_KEY].length > 0) {\n for (let i = 0; i < node[CHILDREN_KEY].length; i++) {\n const result = traverse(\n node[CHILDREN_KEY][i],\n [...path, node],\n targetId,\n );\n if (result) {\n return result;\n }\n }\n }\n\n return null;\n };\n\n // 遍历整个树,尝试在每个顶级节点下查找\n for (let i = 0; i < tree.length; i++) {\n const result = traverse(tree[i], [], enterpriseId);\n if (result) {\n return result;\n }\n }\n\n return null;\n}\n\n/**\n * 根据选中的key值,获取到节点离顶端的距离\n * @param key\n */\nfunction getNodeTop(key: number | string) {\n // 节点高度\n const LINE_HEIGHT = 32;\n const node = treeRef.value?.getNode(key);\n const level = node.level;\n let top = 0;\n let _node = node;\n for (let i = 1; i < level; i++) {\n const children = _node?.parent?.children || [];\n const index = children.findIndex((item: any) => item.key === _node.key);\n top += index * LINE_HEIGHT;\n _node = _node.parent;\n }\n return top;\n}\n// todo element-plus 需升级为 2.9.0+\n// @ts-ignore\nconst nodeClass = (data: any, node: any) => {\n if (node.children && node.children?.length > 0) {\n return \"\";\n }\n return \"tenant-e-empty-node\";\n};\n</script>\n\n<template>\n <div v-show=\"!isSimple\" class=\"t-tenant-enterprise\">\n <label v-if=\"showLabel\" class=\"t-tenant-enterprise__label\">{{\n label\n }}</label>\n <ElSelect\n ref=\"selectRef\"\n v-model=\"modelValue\"\n :multiple=\"multiple\"\n collapse-tags\n :clearable=\"false\"\n style=\"width: 240px\"\n placement=\"bottom-end\"\n :popper-class=\"`tenant-enterprise-popper ${popperClass}`\"\n @visible-change=\"handleVisibleChange\"\n >\n <template #empty>\n <div class=\"t-tenant-enterprise__search\">\n <ElInput\n v-model=\"searchValue\"\n placeholder=\"输入关键词,按Enter键搜索...\"\n clearable\n maxlength=\"30\"\n @change=\"handleSearch\"\n />\n </div>\n <div :id=\"treeContainerId\" v-loading=\"loading\" class=\"p-2\">\n <ElTreeV2\n ref=\"treeRef\"\n :height=\"300\"\n class=\"tenant-enterprise-tree\"\n :class=\"{\n 'tenant-enterprise-tree__only': !multiple,\n }\"\n :data=\"treeData\"\n :props=\"{\n children: CHILDREN_KEY,\n class: nodeClass,\n }\"\n highlight-current\n :expand-on-click-node=\"false\"\n check-on-click-node\n :default-expanded-keys=\"[]\"\n show-checkbox\n check-strictly\n :default-checked-keys=\"[]\"\n :filter-method=\"filterMethod\"\n :indent=\"30\"\n :item-size=\"32\"\n :node-key=\"NODE_KEY\"\n @check=\"handleCheck\"\n @check-change=\"handleCheckChange\"\n >\n <template #default=\"{ node }\">\n <TreeLine\n :node=\"node\"\n show-label-line\n @click.stop=\"handleNodeClick(node.data)\"\n >\n <template #node-label>\n <span\n :title=\"node.data?.enterpriseName || node?.data.tenantName\"\n v-html=\"\n node.data?.label ||\n node.data?.enterpriseName ||\n node?.data.tenantName\n \"\n />\n </template>\n </TreeLine>\n </template>\n </ElTreeV2>\n </div>\n </template>\n </ElSelect>\n </div>\n</template>\n"],"names":["_b","_a","_d","_c","_withDirectives","_openBlock","_createElementBlock","showLabel","_toDisplayString","label","_createVNode","_unref","multiple","popperClass","_createElementVNode","_withCtx","_withModifiers"],"mappings":"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"}
1
+ {"version":3,"file":"tenant-enterprise.vue2.mjs","sources":["../../../../../../../packages/components/tenant-enterprise/src/tenant-enterprise.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ElInput, ElSelect, ElTreeV2 } from \"element-plus\";\nimport {\n inject,\n nextTick,\n onMounted,\n ref,\n shallowRef,\n useId,\n watch,\n} from \"vue\";\nimport { SERVER_CONFIG, SITE_UNIT_STORE, USER_INFO } from \"../../../utils\";\nimport {\n TenantEnterpriseEmits,\n TenantEnterpriseProps,\n} from \"./tenant-enterprise\";\nimport TreeLine from \"./tree-line\";\n\ndefineOptions({\n name: \"ITenantEnterprise\",\n});\n\nconst props = defineProps(TenantEnterpriseProps);\nconst emits = defineEmits(TenantEnterpriseEmits);\n\nconst simpleModeBaseInfo = ref<any>({});\nconst systemConfig = props?.action?.serverConfig || inject(SERVER_CONFIG);\nconst isSimple = systemConfig?.menuMode === \"simple\";\nconst tenantStore = props?.action?.tenantStore || inject(SITE_UNIT_STORE);\nconst userStore = props?.action?.user || inject(USER_INFO);\n\nconst CHILDREN_KEY = \"enterpriseTreeVoList\";\nconst NODE_KEY = \"id\";\n\nconst modelValue = ref();\nconst loading = ref(false);\nconst treeRef = shallowRef();\nconst treeContainerId = useId();\nconst selectRef = shallowRef();\nconst searchValue = ref(\"\");\nconst treeData = ref<any[]>([]);\n// 默认选中\n// 1、选中用户当前单位站点及其子节点;\n// 2、simple模式下,默认选中接收到的单位站点(大屏那边目前都是单选)\nconst defaultCheck = ref<Record<string, any>>({\n enterpriseId: null,\n tenantId: null,\n name: null,\n});\nlet cacheChangeKeys: any[] = [];\n\nonMounted(async () => {\n treeData.value = await GetTenantEnterpriseTree();\n await setDefaultCheck();\n});\n\nwatch(\n () => tenantStore?.currentTenantId,\n async () => {\n treeData.value = await GetTenantEnterpriseTree();\n await setDefaultCheck();\n },\n);\n\nwindow.microApp?.addDataListener((val: any) => {\n // 只在 simple 模式下运行\n // simple 模式下不显示单位选择框,所以无需更新视图,只需要触发emits.change,让组件调用者知道单位发生了变更即可。\n if (isSimple && val) {\n const obj = {\n name: val.enterpriseName,\n enterpriseId: val.enterpriseId,\n tenantId: val.tenantId,\n };\n emits(\"change\", {\n arr: [obj],\n obj,\n });\n }\n}, true);\n\n/**\n * 获取租户下的所有单位树\n */\nasync function GetTenantEnterpriseTree(): Promise<any[]> {\n return (await tenantStore?.getEnterprise()) || [];\n}\n\n/**\n * 设置默认选中\n */\nasync function setDefaultCheck() {\n await clearChecked();\n\n // 当前用户站点是否在当前站点树中\n // 在:默认选中当前\n defaultCheck.value.enterpriseId =\n simpleModeBaseInfo?.value?.enterpriseId ??\n userStore?.userInfo.tenantEnterpriseId;\n defaultCheck.value.tenantId =\n simpleModeBaseInfo?.value?.tenantId ?? userStore?.userInfo.tenantId;\n defaultCheck.value.name =\n simpleModeBaseInfo?.value?.enterpriseName ??\n userStore?.userInfo.enterpriseName;\n // 不在:选中第一项\n if (\n String(tenantStore?.getCurrentTenantId) !==\n String(userStore?.userInfo.tenantId)\n ) {\n if (treeData.value.length > 0) {\n console.log(\"非当前用户所在站点\");\n defaultCheck.value.name = treeData.value[0].enterpriseName;\n defaultCheck.value.tenantId = treeData.value[0].tenantId;\n defaultCheck.value.enterpriseId = treeData.value[0].id;\n }\n }\n\n // 选中的单位节点\n const current = findEnterprise(\n defaultCheck.value.enterpriseId,\n treeData.value,\n );\n if (current) {\n treeRef.value?.setCheckedKeys([current.id], true);\n if (props.defaultMode === \"all-child\") {\n recursionSetChecked(current, true)\n }\n await handleCheckChange();\n handleVisibleChange(false);\n } else {\n console.error(\"未找到单位!\", defaultCheck.value.enterpriseId);\n }\n}\n\n/**\n * 清空所有选中\n */\nasync function clearChecked() {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n if (checkedList.length > 0) {\n treeRef.value?.setCheckedKeys(checkedList, false);\n }\n}\n\n/**\n * 根据单位ID在tree中查找单位\n */\nfunction findEnterprise(enterpriseId: number, tree: any[]): any {\n let enterprise = null;\n for (let i = 0; i < tree.length; i++) {\n if (tree[i].id === enterpriseId) {\n enterprise = tree[i];\n break;\n }\n if (tree[i][CHILDREN_KEY] && tree[i][CHILDREN_KEY].length) {\n enterprise = findEnterprise(enterpriseId, tree[i][CHILDREN_KEY]);\n if (enterprise) {\n break;\n }\n }\n }\n return enterprise;\n}\n/**\n * 节点选中状态变化\n */\nasync function handleCheckChange() {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedNodes(false) || [];\n const val = checkedList.map(\n (item: any) => item.enterpriseName || item.tenantName,\n );\n modelValue.value = props.multiple ? val : val[0];\n if (!props.multiple) {\n // 单选时,选中之后就隐藏下拉框\n selectRef.value.blur();\n }\n}\n\n/**\n * el-select 面板 显示、隐藏\n */\nfunction handleVisibleChange(visible: boolean) {\n if (!visible) {\n const diff = diffChecked();\n if (!diff) {\n const checkedList = treeRef.value?.getCheckedNodes() || [];\n if (checkedList.length === 0) {\n setDefaultCheck();\n } else {\n const arrObj: Record<string, any[]> = {\n name: [],\n enterpriseId: [],\n tenantId: [],\n };\n const arr = checkedList.map((item: any) => {\n arrObj.name.push(item.enterpriseName || item.tenantName);\n arrObj.enterpriseId.push(item.id);\n if (!arrObj.tenantId.includes(item.tenantId)) {\n arrObj.tenantId.push(item.tenantId);\n }\n return {\n name: item.enterpriseName || item.tenantName,\n enterpriseId: item.id,\n tenantId: item.tenantId || item.id,\n };\n });\n emits(\"change\", {\n arr,\n obj: {\n name: arrObj.name.join(\",\"),\n enterpriseId: arrObj.enterpriseId.join(\",\"),\n tenantId: arrObj.tenantId.join(\",\"),\n },\n });\n }\n }\n } else {\n // 重置过滤\n searchValue.value = \"\";\n handleSearch();\n }\n}\n\n/**\n * 比较选中节点是否发生变化\n */\nfunction diffChecked() {\n const checkedList = treeRef.value?.getCheckedNodes() || [];\n const checkedKeys = checkedList\n .map((item: any) => item[NODE_KEY])\n .filter(Boolean);\n // 比较 checkedKeys 和 cacheChangeKeys\n const diff = diffArr(checkedKeys, cacheChangeKeys);\n cacheChangeKeys = checkedKeys;\n return diff;\n}\n\n/**\n * 比较两个数组是否相等\n * 数组下标不影响结果,即 [1,2] 等于 [2,1] 返回true\n */\nfunction diffArr(arr1: number[], arr2: number[]): boolean {\n if (arr1.length !== arr2.length) {\n return false;\n }\n const sortedArr1 = [...arr1].sort();\n const sortedArr2 = [...arr2].sort();\n for (let i = 0; i < sortedArr1.length; i++) {\n if (sortedArr1[i] !== sortedArr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 触发过滤\n */\nfunction handleSearch() {\n treeRef.value?.filter(searchValue.value);\n if (!searchValue.value) {\n // 如果过滤为空,则展开默认选中的节点\n setDefaultExpanded();\n }\n // 实现搜索高亮\n highlightNodes(treeData.value, searchValue.value);\n}\n\n/**\n * 高亮节点标签\n * @param nodes - 节点数组\n * @param query - 搜索关键词\n */\nfunction highlightNodes(nodes: any[], query: string) {\n nodes.forEach((node: any) => {\n if (node[CHILDREN_KEY] && node[CHILDREN_KEY].length > 0) {\n highlightNodes(node[CHILDREN_KEY], query);\n }\n if (query && (node.enterpriseName || node.tenantName)) {\n const label = node.enterpriseName || node.tenantName;\n const regex = new RegExp(`(${query})`, \"gi\");\n node.label = label.replace(regex, '<span class=\"highlight\">$1</span>');\n } else {\n // 如果没有搜索关键词,则恢复节点标签\n node.label = node.enterpriseName || node.tenantName;\n }\n });\n}\n\n/**\n * 点击checkbox选择框\n */\nconst handleCheck = async (data: any) => {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n const isChecked = checkedList.includes(data[NODE_KEY]);\n if (props.multiple) {\n // 多选\n recursionSetChecked(data, isChecked);\n } else {\n // 单选\n // 取消其他选中\n checkedList.forEach((item: any) => {\n if (item !== data[NODE_KEY]) {\n treeRef.value?.setChecked(item, false);\n }\n });\n }\n};\n\n/**\n * 递归设置选中/取消选中\n * @param data\n * @param isChecked\n */\nfunction recursionSetChecked(data: any, isChecked: boolean) {\n if (data[CHILDREN_KEY] && data[CHILDREN_KEY].length > 0) {\n // 选中/取消子节点\n data[CHILDREN_KEY].forEach((item: any) => {\n treeRef.value?.setChecked(item[NODE_KEY], isChecked);\n recursionSetChecked(item, isChecked);\n });\n }\n}\n\n/**\n * 点击树节点\n */\nconst handleNodeClick = async (data: any) => {\n await nextTick();\n const checkedList = treeRef.value?.getCheckedKeys() || [];\n if (props.multiple) {\n const isChecked = checkedList.includes(data[NODE_KEY]);\n treeRef.value?.setChecked(data[NODE_KEY], !isChecked);\n } else {\n // 单选\n treeRef.value?.setChecked(data[NODE_KEY], true);\n // 取消其他选中\n checkedList.forEach((item: any) => {\n if (item !== data[NODE_KEY]) {\n treeRef.value?.setChecked(item, false);\n }\n });\n }\n await handleCheckChange();\n};\n\n/**\n * 节点过滤\n */\nconst filterMethod = (query: string, node: any) => {\n const label = node?.enterpriseName || node?.tenantName;\n return new RegExp(query, \"i\").test(label);\n};\n\n/**\n * 根据当前选中节点,设置展开的节点\n */\nfunction setDefaultExpanded() {\n const checkedKeys = treeRef.value?.getCheckedKeys() || [];\n if (checkedKeys.length === 0) return;\n // 1、调用 findParentEnterprise 查找父节点数组\n // 2、过滤掉无效数组,最上层的节点找不到父节点会返回null\n // 3、展开二维数组\n // 4、得到 单位ID 数组\n const expandedKeys = checkedKeys\n .map((item: any) => {\n return findParentEnterprise(item, treeData.value);\n })\n .filter(Boolean)\n .flat()\n .map((item: any) => item[NODE_KEY]);\n treeRef.value?.setExpandedKeys([...checkedKeys, ...expandedKeys]);\n\n if (treeRef.value && treeRef.value?.scrollTo) {\n const top = getNodeTop(checkedKeys[0]);\n treeRef.value.scrollTo(top);\n }\n}\n\n/**\n * 根据单位ID在tree中查找父级单位\n * @param enterpriseId - 要查找的单位ID\n * @param tree - 当前树数据\n * @returns {Array|null} - 返回从根到子的父级单位数组,未找到则返回 null\n */\nfunction findParentEnterprise(enterpriseId: number, tree: any[]): any[] | null {\n const traverse = (node: any, path: any[], targetId: number): any[] | null => {\n // 如果当前节点是目标节点,则返回当前路径(不包含自己)\n if (node.id === targetId) {\n return path.length > 0 ? [...path] : null;\n }\n\n // 如果有子节点,继续递归查找\n if (node[CHILDREN_KEY] && node[CHILDREN_KEY].length > 0) {\n for (let i = 0; i < node[CHILDREN_KEY].length; i++) {\n const result = traverse(\n node[CHILDREN_KEY][i],\n [...path, node],\n targetId,\n );\n if (result) {\n return result;\n }\n }\n }\n\n return null;\n };\n\n // 遍历整个树,尝试在每个顶级节点下查找\n for (let i = 0; i < tree.length; i++) {\n const result = traverse(tree[i], [], enterpriseId);\n if (result) {\n return result;\n }\n }\n\n return null;\n}\n\n/**\n * 根据选中的key值,获取到节点离顶端的距离\n * @param key\n */\nfunction getNodeTop(key: number | string) {\n // 节点高度\n const LINE_HEIGHT = 32;\n const node = treeRef.value?.getNode(key);\n const level = node.level;\n let top = 0;\n let _node = node;\n for (let i = 1; i < level; i++) {\n const children = _node?.parent?.children || [];\n const index = children.findIndex((item: any) => item.key === _node.key);\n top += index * LINE_HEIGHT;\n _node = _node.parent;\n }\n return top;\n}\n// todo element-plus 需升级为 2.9.0+\n// @ts-ignore\nconst nodeClass = (data: any, node: any) => {\n if (node.children && node.children?.length > 0) {\n return \"\";\n }\n return \"tenant-e-empty-node\";\n};\n</script>\n\n<template>\n <div v-show=\"!isSimple\" class=\"t-tenant-enterprise\">\n <label v-if=\"showLabel\" class=\"t-tenant-enterprise__label\">{{\n label\n }}</label>\n <ElSelect\n ref=\"selectRef\"\n v-model=\"modelValue\"\n :multiple=\"multiple\"\n collapse-tags\n :clearable=\"false\"\n style=\"width: 240px\"\n placement=\"bottom-end\"\n :popper-class=\"`tenant-enterprise-popper ${popperClass}`\"\n @visible-change=\"handleVisibleChange\"\n >\n <template #empty>\n <div class=\"t-tenant-enterprise__search\">\n <ElInput\n v-model=\"searchValue\"\n placeholder=\"输入关键词,按Enter键搜索...\"\n clearable\n maxlength=\"30\"\n @change=\"handleSearch\"\n />\n </div>\n <div :id=\"treeContainerId\" v-loading=\"loading\" class=\"p-2\">\n <ElTreeV2\n ref=\"treeRef\"\n :height=\"300\"\n class=\"tenant-enterprise-tree\"\n :class=\"{\n 'tenant-enterprise-tree__only': !multiple,\n }\"\n :data=\"treeData\"\n :props=\"{\n children: CHILDREN_KEY,\n class: nodeClass,\n }\"\n highlight-current\n :expand-on-click-node=\"false\"\n check-on-click-node\n :default-expanded-keys=\"[]\"\n show-checkbox\n check-strictly\n :default-checked-keys=\"[]\"\n :filter-method=\"filterMethod\"\n :indent=\"30\"\n :item-size=\"32\"\n :node-key=\"NODE_KEY\"\n @check=\"handleCheck\"\n @check-change=\"handleCheckChange\"\n >\n <template #default=\"{ node }\">\n <TreeLine\n :node=\"node\"\n show-label-line\n @click.stop=\"handleNodeClick(node.data)\"\n >\n <template #node-label>\n <span\n :title=\"node.data?.enterpriseName || node?.data.tenantName\"\n v-html=\"\n node.data?.label ||\n node.data?.enterpriseName ||\n node?.data.tenantName\n \"\n />\n </template>\n </TreeLine>\n </template>\n </ElTreeV2>\n </div>\n </template>\n </ElSelect>\n </div>\n</template>\n"],"names":["_b","_a","_d","_c","_withDirectives","_openBlock","_createElementBlock","showLabel","_toDisplayString","label","_createVNode","_unref","multiple","popperClass","_createElementVNode","_withCtx","_withModifiers"],"mappings":"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"}
@@ -166,7 +166,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
166
166
  const { width, height } = playerRef.value.getBoundingClientRect();
167
167
  dom.id = id;
168
168
  dom.style.width = `${width}px`;
169
- dom.style.height = props.areaName ? `${height - 32}px` : `${height}px`;
169
+ dom.style.height = props.areaName || props.deviceSerial ? `${height - 32}px` : `${height}px`;
170
170
  (_a = playerRef.value) == null ? void 0 : _a.appendChild(dom);
171
171
  }
172
172
  }
@@ -260,7 +260,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
260
260
  },
261
261
  [
262
262
  createCommentVNode(" \u64AD\u653E\u5668\u9876\u90E8\u663E\u793A\u533A\u57DF(\u8BBE\u5907)\u540D\u79F0 "),
263
- _ctx.areaName ? (openBlock(), createElementBlock("div", _hoisted_1, [
263
+ _ctx.areaName || _ctx.deviceSerial ? (openBlock(), createElementBlock("div", _hoisted_1, [
264
264
  _cache[0] || (_cache[0] = createElementVNode(
265
265
  "i",
266
266
  { class: "iconfont icon-shexiangtou4" },
@@ -271,7 +271,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
271
271
  createElementVNode(
272
272
  "span",
273
273
  null,
274
- toDisplayString(_ctx.areaName),
274
+ toDisplayString(_ctx.areaName || _ctx.deviceSerial),
275
275
  1
276
276
  /* TEXT */
277
277
  )
@@ -1 +1 @@
1
- {"version":3,"file":"easyPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst isFullscreen = ref(false);\nconst videoInfo = ref<any>(null);\n\nonMounted(() => {\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\nconst playerFullscreen = (fullscreen: boolean) => {\n if (props.debug) {\n console.log(\"全屏\");\n }\n // 自定义全屏逻辑\n if (typeof document !== \"undefined\") {\n if (!fullscreen) {\n document.exitFullscreen?.();\n } else {\n playerRef.value?.requestFullscreen?.();\n }\n }\n isFullscreen.value = !fullscreen;\n};\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n fullscreen: playerFullscreen,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n const timer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n createPlayer();\n clearInterval(timer);\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom() {\n removePlayerDom();\n if (typeof document !== \"undefined\") {\n const dom = document.createElement(\"div\");\n const { width, height } = playerRef.value!.getBoundingClientRect();\n dom.id = id;\n dom.style.width = `${width}px`;\n dom.style.height = props.areaName ? `${height - 32}px` : `${height}px`;\n playerRef.value?.appendChild(dom);\n }\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n createPlayerDom();\n await nextTick();\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: true, // 是否解析音频\n bufferTime: 0.2, // 缓存时长\n stretch: true, // 加视频拉伸\n MSE: false,\n WCS: false,\n WASM: true,\n debug: false,\n operateBtns: {\n performance: false,\n },\n });\n }\n if (player) {\n player.play(playUrl.value);\n\n // 15s未获取到视频信息,认为播放失败\n const videoInfoTimer = setTimeout(() => {\n if (!videoInfo.value) {\n props.debug && console.log(\"15s未获取到视频信息\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n }\n }, 3000);\n // 加载超时\n player.on(\"timeout\", () => {\n clearTimeout(videoInfoTimer);\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n });\n // 播放异常\n player.on(\"error\", () => {\n props.debug && console.log(\"播放异常\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n });\n player.on(\"play\", () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n });\n player.on(\"pause\", () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n });\n player.on(\"videoInfo\", (info: any) => {\n clearTimeout(videoInfoTimer);\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n });\n player.on(\"mute\", (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n });\n }\n}\n\nfunction destroy() {\n if (player) {\n player.destroy();\n player = null;\n }\n removePlayerDom();\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <!-- 播放器顶部显示区域(设备)名称 -->\n <div v-if=\"areaName\" class=\"i-tzj-easyPlayer__top\">\n <i class=\"iconfont icon-shexiangtou4\" />\n <span>{{ areaName }}</span>\n </div>\n\n <div v-if=\"!playSuccess\" class=\"i-tzj-player__error\">无信号</div>\n <div v-if=\"!playUrl\" class=\"i-tzj-player__error\">无播放地址</div>\n\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createCommentVNode","areaName","_openBlock","_createElementVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"easyPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/easyPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n shallowRef,\n useSlots,\n watch,\n} from \"vue\";\nimport { TzjPlayerProps, uuid } from \"./tzj-player\";\n\ndefineOptions({\n name: \"EasyPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst emits = defineEmits([\n \"timeout\",\n \"error\",\n \"play\",\n \"pause\",\n \"mute\",\n \"videoInfo\",\n]);\nconst slots = useSlots();\nconst customBar = computed(() => slots.customBar);\n\nlet player: any = null;\nconst id = uuid();\nconst playerRef = shallowRef<HTMLDivElement>();\nconst playSuccess = ref(true);\nconst playUrl = ref(\"\");\nconst isFullscreen = ref(false);\nconst videoInfo = ref<any>(null);\n\nonMounted(() => {\n initPlayer(props.url || \"\");\n});\n\nwatch(\n () => props.url,\n (newUrl: string) => {\n initPlayer(newUrl || \"\");\n },\n);\n\nonBeforeUnmount(() => {\n if (props.debug) {\n console.log(\"组件卸载\");\n }\n playUrl.value = \"\";\n destroy();\n});\n\nconst play = (url?: string) => {\n if (url) {\n initPlayer(url);\n } else {\n if (player) {\n player.play(playUrl.value);\n } else {\n destroy();\n }\n }\n};\n\nconst playerPause = () => {\n if (props.debug) {\n console.log(\"暂停\");\n }\n player?.pause?.();\n};\n\nconst playerScreenShot = () => {\n if (props.debug) {\n console.log(\"截图\");\n }\n player?.screenshot?.(\n `${props.areaName}_${new Date().getTime()}`,\n \"png\",\n 0.5,\n \"download\",\n );\n};\n\nconst playerFullscreen = (fullscreen: boolean) => {\n if (props.debug) {\n console.log(\"全屏\");\n }\n // 自定义全屏逻辑\n if (typeof document !== \"undefined\") {\n if (!fullscreen) {\n document.exitFullscreen?.();\n } else {\n playerRef.value?.requestFullscreen?.();\n }\n }\n isFullscreen.value = !fullscreen;\n};\ndefineExpose({\n play,\n destroy,\n getPlayer: () => player,\n pause: playerPause,\n screenshot: playerScreenShot,\n fullscreen: playerFullscreen,\n isMute: () => {\n return player?.isMute?.();\n },\n setMute: (mute: number) => {\n player?.setMute?.(mute);\n },\n});\n\n/**\n * 格式化URL,确保使用完整的URL\n * @param url - 原始URL\n * @returns 格式化后的URL\n */\nconst formatUrl = (url: string): string => {\n if (!url) return \"\";\n\n // 如果已经是完整URL,直接返回\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n return url;\n }\n\n // 检查是否在浏览器环境中,避免SSR环境下的location访问错误\n if (typeof window !== \"undefined\" && window.location) {\n // 如果是相对路径,添加当前域名\n return `${window.location.origin}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n }\n\n // SSR 环境下返回相对路径\n return url;\n};\n\nasync function initPlayer(url: string) {\n if (props.debug) {\n console.log(\"初始化播放器\", url);\n }\n removePlayerDom();\n if (url) {\n playUrl.value = formatUrl(url);\n if (props.debug) {\n console.log(\"格式化后的url\", playUrl.value);\n }\n if (typeof window !== \"undefined\" && window?.EasyPlayerPro) {\n createPlayer();\n } else if (typeof window !== \"undefined\") {\n const timer = setInterval(() => {\n if (window?.EasyPlayerPro) {\n createPlayer();\n clearInterval(timer);\n }\n }, 100);\n }\n }\n}\n\n/**\n * 移除播放器DOM\n */\nfunction removePlayerDom() {\n if (typeof document !== \"undefined\") {\n const dom = document.getElementById(id);\n dom && dom.remove();\n }\n}\n\n/**\n * 创建播放器DOM\n */\nfunction createPlayerDom() {\n removePlayerDom();\n if (typeof document !== \"undefined\") {\n const dom = document.createElement(\"div\");\n const { width, height } = playerRef.value!.getBoundingClientRect();\n dom.id = id;\n dom.style.width = `${width}px`;\n dom.style.height = (props.areaName || props.deviceSerial) ? `${height - 32}px` : `${height}px`;\n playerRef.value?.appendChild(dom);\n }\n}\n\nasync function createPlayer() {\n if (props.debug) {\n console.log(\"创建播放器\");\n }\n videoInfo.value = null;\n createPlayerDom();\n await nextTick();\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n player = new window.EasyPlayerPro(document.getElementById(id), {\n isLive: true, // 是否直播\n hasAudio: true, // 是否解析音频\n bufferTime: 0.2, // 缓存时长\n stretch: true, // 加视频拉伸\n MSE: false,\n WCS: false,\n WASM: true,\n debug: false,\n operateBtns: {\n performance: false,\n },\n });\n }\n if (player) {\n player.play(playUrl.value);\n\n // 15s未获取到视频信息,认为播放失败\n const videoInfoTimer = setTimeout(() => {\n if (!videoInfo.value) {\n props.debug && console.log(\"15s未获取到视频信息\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n }\n }, 3000);\n // 加载超时\n player.on(\"timeout\", () => {\n clearTimeout(videoInfoTimer);\n props.debug && console.log(\"加载超时\");\n emits(\"timeout\");\n playSuccess.value = false;\n destroy();\n });\n // 播放异常\n player.on(\"error\", () => {\n props.debug && console.log(\"播放异常\");\n emits(\"error\");\n playSuccess.value = false;\n destroy();\n });\n player.on(\"play\", () => {\n playSuccess.value = true;\n props.debug && console.log(\"播放\");\n emits(\"play\");\n });\n player.on(\"pause\", () => {\n props.debug && console.log(\"暂停\");\n emits(\"pause\");\n });\n player.on(\"videoInfo\", (info: any) => {\n clearTimeout(videoInfoTimer);\n props.debug && console.log(\"视频信息\", info);\n videoInfo.value = info;\n emits(\"videoInfo\", info);\n });\n player.on(\"mute\", (mute: false) => {\n props.debug && console.log(\"静音\");\n emits(\"mute\", mute);\n });\n }\n}\n\nfunction destroy() {\n if (player) {\n player.destroy();\n player = null;\n }\n removePlayerDom();\n}\n</script>\n\n<template>\n <div\n ref=\"playerRef\"\n class=\"i-tzj-easyPlayer\"\n :class=\"customBar ? 'i-tzj-easyPlayer--custom' : ''\"\n >\n <!-- 播放器顶部显示区域(设备)名称 -->\n <div v-if=\"areaName || deviceSerial\" class=\"i-tzj-easyPlayer__top\">\n <i class=\"iconfont icon-shexiangtou4\" />\n <span>{{ areaName || deviceSerial }}</span>\n </div>\n\n <div v-if=\"!playSuccess\" class=\"i-tzj-player__error\">无信号</div>\n <div v-if=\"!playUrl\" class=\"i-tzj-player__error\">无播放地址</div>\n\n <!-- 播放器底部操作栏 -->\n <slot name=\"customBar\" />\n </div>\n</template>\n"],"names":["_createElementBlock","_normalizeClass","_createCommentVNode","areaName","deviceSerial","_openBlock","_createElementVNode","_toDisplayString","_renderSlot"],"mappings":"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"}
@@ -478,6 +478,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
478
478
  "access-token": _ctx.accessToken,
479
479
  "platform-type-name": _ctx.platformTypeName,
480
480
  "device-serial": _ctx.deviceSerial,
481
+ areaName: _ctx.areaName,
481
482
  onMouseenter: _cache[4] || (_cache[4] = ($event) => showBottomBar.value = true),
482
483
  onMouseleave: _cache[5] || (_cache[5] = ($event) => showBottomBar.value = false),
483
484
  onPause: _cache[6] || (_cache[6] = ($event) => isPlaying.value = false),
@@ -614,7 +615,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
614
615
  ]),
615
616
  _: 1
616
617
  /* STABLE */
617
- }, 8, ["url", "debug", "access-token", "platform-type-name", "device-serial"])) : createCommentVNode("v-if", true),
618
+ }, 8, ["url", "debug", "access-token", "platform-type-name", "device-serial", "areaName"])) : createCommentVNode("v-if", true),
618
619
  createCommentVNode(" \u8BED\u97F3\u5BF9\u8BB2\u9519\u8BEF\u63D0\u793A "),
619
620
  audioMsg.value.msg ? (openBlock(), createElementBlock(
620
621
  "div",
@@ -1 +1 @@
1
- {"version":3,"file":"yunzhiyanPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/yunzhiyanPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref, shallowRef } from \"vue\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\nimport {\n GetYunZhiYanCloseVoiceIntercom,\n GetYunZhiYanDeviceChannel,\n GetYunZhiYanDeviceVideoUrl,\n GetYunZhiYanOpenVoiceIntercom,\n GetYunZhiYanUserPlaySecretKey,\n} from \"./yunzhiyan\";\n\ndefineOptions({\n name: \"YunzhiyanPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst errorMsg = ref(\"\");\nconst taskId = ref(\"\"); // 语音对讲任务ID\nconst showBottomBar = ref(false);\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}); // 语音对讲提示信息\n\n// 音频配置常量\nconst AUDIO_CONFIG = {\n sampleRate: 48000,\n channelCount: 1,\n sampleSize: 16,\n} as const;\n\n/**\n * 初始化云智眼播放器\n * 获取设备通道ID和视频播放地址\n */\nconst initPlayer = async (): Promise<void> => {\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n // 1.通过设备ID获取通道ID\n const channelId = await GetYunZhiYanDeviceChannel(props.deviceSerial);\n if (props.debug) {\n console.log(\"获取云智眼设备通道ID\", channelId);\n }\n\n if (!channelId) {\n errorMsg.value = \"获取设备通道ID失败\";\n return;\n }\n\n // 2.通过设备ID和通道ID获取播放地址\n const url = await GetYunZhiYanDeviceVideoUrl(props.deviceSerial, channelId);\n if (props.debug) {\n console.log(\"获取云智眼设备视频播放地址\", url);\n }\n\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\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/**\n * 获取语音对讲WebSocket地址\n * @returns WebSocket连接地址\n */\nconst getAudioUrl = async (): Promise<string> => {\n try {\n if (!props.deviceSerial) {\n throw new Error(\"设备序列号不能为空\");\n }\n\n const res = await GetYunZhiYanOpenVoiceIntercom(props.deviceSerial);\n if (props.debug) {\n console.log(\"开启语音对讲响应:\", res);\n }\n\n if (!res) {\n throw new Error(\"开启语音对讲失败\");\n }\n\n taskId.value = res.taskId;\n const wssUrl = res.wssUrl;\n\n if (!taskId.value || !wssUrl) {\n throw new Error(\"获取语音对讲参数失败\");\n }\n\n const sign = await GetYunZhiYanUserPlaySecretKey(taskId.value);\n if (!sign) {\n throw new Error(\"获取签名失败\");\n }\n\n const url = new URL(wssUrl);\n url.searchParams.append(\"sign\", sign);\n return url.toString();\n } catch (error) {\n if (props.debug) {\n console.error(\"获取语音对讲地址失败:\", error);\n }\n throw error;\n }\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// 获取视频信息,判断当前是否为静音状态\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/**\n * 开启语音对讲\n *\n * 功能说明:\n * 1. 获取语音推送WebSocket地址\n * 2. 初始化音频上下文和麦克风\n * 3. 建立WebSocket连接\n * 4. 实时采集并发送音频数据\n *\n * 音频编码要求:PCM 单声道 采样率48000Hz 采样位深16位\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 // 防止重复开启\n if (isIntercomActive.value) {\n if (props.debug) {\n console.warn(\"语音对讲已在进行中\");\n }\n return;\n }\n\n // 设置加载状态\n isVoice.value = true;\n\n // 1. 获取语音推送地址\n if (props.debug) {\n console.log(\"正在获取语音推送地址...\");\n }\n const audioUrl: string = await getAudioUrl();\n if (props.debug) {\n console.log(\"语音推送地址:\", audioUrl);\n }\n\n // 2. 初始化音频上下文\n await initAudioContext();\n\n // 3. 获取麦克风权限并初始化媒体流\n await initMicrophone();\n\n // 4. 建立WebSocket连接\n await connectWebSocket(audioUrl);\n\n // 5. 开始音频数据处理\n await startAudioProcessing();\n\n isIntercomActive.value = true;\n // 如果是静音状态则开启声音\n if (isVolumeMuted.value) {\n handleSetMute(0);\n }\n\n audioMsg.value = {\n type: \"success\",\n msg: \"语音对讲...\",\n };\n\n // 6. 设置30秒自动停止定时器\n intercomTimer.value = setTimeout(async () => {\n if (props.debug) {\n console.log(\"语音对讲30秒时间到,自动停止\");\n }\n await stopIntercom();\n }, 30000); // 30秒\n\n if (props.debug) {\n console.log(\"语音对讲启动成功\");\n }\n } catch (error) {\n if (props.debug) {\n console.error(\"语音对讲启动失败:\", error);\n }\n // 清理资源\n await stopIntercom();\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\nonMounted(() => {\n initPlayer();\n});\n\n// 组件卸载时清理资源\nonUnmounted(() => {\n if (isIntercomActive.value) {\n stopIntercom();\n }\n});\n</script>\n\n<template>\n <div v-if=\"errorMsg\" class=\"i-tzj-player__error\">{{ errorMsg }}</div>\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 @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 <!-- 语音对讲错误提示 -->\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":["_createElementBlock","_toDisplayString","_createBlock","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","_openBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass"],"mappings":"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"}
1
+ {"version":3,"file":"yunzhiyanPlayer.vue2.mjs","sources":["../../../../../../../packages/components/tzj-player/src/yunzhiyanPlayer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUnmounted, ref, shallowRef } from \"vue\";\nimport EasyPlayer from \"./easyPlayer.vue\";\nimport { TzjPlayerProps } from \"./tzj-player\";\nimport {\n GetYunZhiYanCloseVoiceIntercom,\n GetYunZhiYanDeviceChannel,\n GetYunZhiYanDeviceVideoUrl,\n GetYunZhiYanOpenVoiceIntercom,\n GetYunZhiYanUserPlaySecretKey,\n} from \"./yunzhiyan\";\n\ndefineOptions({\n name: \"YunzhiyanPlayer\",\n});\n\nconst props = defineProps(TzjPlayerProps);\nconst videoUrl = ref(\"\");\nconst errorMsg = ref(\"\");\nconst taskId = ref(\"\"); // 语音对讲任务ID\nconst showBottomBar = ref(false);\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}); // 语音对讲提示信息\n\n// 音频配置常量\nconst AUDIO_CONFIG = {\n sampleRate: 48000,\n channelCount: 1,\n sampleSize: 16,\n} as const;\n\n/**\n * 初始化云智眼播放器\n * 获取设备通道ID和视频播放地址\n */\nconst initPlayer = async (): Promise<void> => {\n try {\n if (!props.deviceSerial) {\n errorMsg.value = \"设备序列号不能为空\";\n return;\n }\n\n // 1.通过设备ID获取通道ID\n const channelId = await GetYunZhiYanDeviceChannel(props.deviceSerial);\n if (props.debug) {\n console.log(\"获取云智眼设备通道ID\", channelId);\n }\n\n if (!channelId) {\n errorMsg.value = \"获取设备通道ID失败\";\n return;\n }\n\n // 2.通过设备ID和通道ID获取播放地址\n const url = await GetYunZhiYanDeviceVideoUrl(props.deviceSerial, channelId);\n if (props.debug) {\n console.log(\"获取云智眼设备视频播放地址\", url);\n }\n\n if (!url) {\n errorMsg.value = \"获取视频播放地址失败\";\n return;\n }\n\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/**\n * 获取语音对讲WebSocket地址\n * @returns WebSocket连接地址\n */\nconst getAudioUrl = async (): Promise<string> => {\n try {\n if (!props.deviceSerial) {\n throw new Error(\"设备序列号不能为空\");\n }\n\n const res = await GetYunZhiYanOpenVoiceIntercom(props.deviceSerial);\n if (props.debug) {\n console.log(\"开启语音对讲响应:\", res);\n }\n\n if (!res) {\n throw new Error(\"开启语音对讲失败\");\n }\n\n taskId.value = res.taskId;\n const wssUrl = res.wssUrl;\n\n if (!taskId.value || !wssUrl) {\n throw new Error(\"获取语音对讲参数失败\");\n }\n\n const sign = await GetYunZhiYanUserPlaySecretKey(taskId.value);\n if (!sign) {\n throw new Error(\"获取签名失败\");\n }\n\n const url = new URL(wssUrl);\n url.searchParams.append(\"sign\", sign);\n return url.toString();\n } catch (error) {\n if (props.debug) {\n console.error(\"获取语音对讲地址失败:\", error);\n }\n throw error;\n }\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// 获取视频信息,判断当前是否为静音状态\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/**\n * 开启语音对讲\n *\n * 功能说明:\n * 1. 获取语音推送WebSocket地址\n * 2. 初始化音频上下文和麦克风\n * 3. 建立WebSocket连接\n * 4. 实时采集并发送音频数据\n *\n * 音频编码要求:PCM 单声道 采样率48000Hz 采样位深16位\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 // 防止重复开启\n if (isIntercomActive.value) {\n if (props.debug) {\n console.warn(\"语音对讲已在进行中\");\n }\n return;\n }\n\n // 设置加载状态\n isVoice.value = true;\n\n // 1. 获取语音推送地址\n if (props.debug) {\n console.log(\"正在获取语音推送地址...\");\n }\n const audioUrl: string = await getAudioUrl();\n if (props.debug) {\n console.log(\"语音推送地址:\", audioUrl);\n }\n\n // 2. 初始化音频上下文\n await initAudioContext();\n\n // 3. 获取麦克风权限并初始化媒体流\n await initMicrophone();\n\n // 4. 建立WebSocket连接\n await connectWebSocket(audioUrl);\n\n // 5. 开始音频数据处理\n await startAudioProcessing();\n\n isIntercomActive.value = true;\n // 如果是静音状态则开启声音\n if (isVolumeMuted.value) {\n handleSetMute(0);\n }\n\n audioMsg.value = {\n type: \"success\",\n msg: \"语音对讲...\",\n };\n\n // 6. 设置30秒自动停止定时器\n intercomTimer.value = setTimeout(async () => {\n if (props.debug) {\n console.log(\"语音对讲30秒时间到,自动停止\");\n }\n await stopIntercom();\n }, 30000); // 30秒\n\n if (props.debug) {\n console.log(\"语音对讲启动成功\");\n }\n } catch (error) {\n if (props.debug) {\n console.error(\"语音对讲启动失败:\", error);\n }\n // 清理资源\n await stopIntercom();\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\nonMounted(() => {\n initPlayer();\n});\n\n// 组件卸载时清理资源\nonUnmounted(() => {\n if (isIntercomActive.value) {\n stopIntercom();\n }\n});\n</script>\n\n<template>\n <div v-if=\"errorMsg\" class=\"i-tzj-player__error\">{{ errorMsg }}</div>\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 :areaName=\"areaName\"\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 <!-- 语音对讲错误提示 -->\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":["_createElementBlock","_toDisplayString","_createBlock","EasyPlayer","debug","accessToken","platformTypeName","deviceSerial","areaName","_openBlock","_createCommentVNode","_createElementVNode","_Fragment","_normalizeClass"],"mappings":"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"}