vome-core 0.0.43 → 0.0.45

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.
@@ -1 +1,13 @@
1
- function _0x4383(_0x4a7ebf,_0x3fb436){_0x4a7ebf=_0x4a7ebf-0x82;const _0x3fe1ca=_0x3fe1();let _0x438381=_0x3fe1ca[_0x4a7ebf];if(_0x4383['fjimsy']===undefined){var _0x18fbb0=function(_0x12f001){const _0x6e983c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5d5c64='',_0x41e8aa='';for(let _0x5078ec=0x0,_0x13fd58,_0x370b5a,_0x5bdd3b=0x0;_0x370b5a=_0x12f001['charAt'](_0x5bdd3b++);~_0x370b5a&&(_0x13fd58=_0x5078ec%0x4?_0x13fd58*0x40+_0x370b5a:_0x370b5a,_0x5078ec++%0x4)?_0x5d5c64+=String['fromCharCode'](0xff&_0x13fd58>>(-0x2*_0x5078ec&0x6)):0x0){_0x370b5a=_0x6e983c['indexOf'](_0x370b5a);}for(let _0x319531=0x0,_0xcab093=_0x5d5c64['length'];_0x319531<_0xcab093;_0x319531++){_0x41e8aa+='%'+('00'+_0x5d5c64['charCodeAt'](_0x319531)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x41e8aa);};_0x4383['xncJRN']=_0x18fbb0,_0x4383['JwCGCo']={},_0x4383['fjimsy']=!![];}const _0x52f541=_0x3fe1ca[0x0],_0x2a5e79=_0x4a7ebf+_0x52f541,_0x1a27dd=_0x4383['JwCGCo'][_0x2a5e79];return!_0x1a27dd?(_0x438381=_0x4383['xncJRN'](_0x438381),_0x4383['JwCGCo'][_0x2a5e79]=_0x438381):_0x438381=_0x1a27dd,_0x438381;}(function(_0x3ee3ca,_0x2d0d87){const _0x5b8742=_0x4383,_0x2f0e40=_0x3ee3ca();while(!![]){try{const _0x347cda=parseInt(_0x5b8742(0x91))/0x1+-parseInt(_0x5b8742(0x8b))/0x2*(parseInt(_0x5b8742(0x8e))/0x3)+-parseInt(_0x5b8742(0x8a))/0x4+-parseInt(_0x5b8742(0x86))/0x5*(parseInt(_0x5b8742(0x90))/0x6)+parseInt(_0x5b8742(0x84))/0x7*(parseInt(_0x5b8742(0x8d))/0x8)+-parseInt(_0x5b8742(0x89))/0x9*(-parseInt(_0x5b8742(0x88))/0xa)+parseInt(_0x5b8742(0x82))/0xb*(parseInt(_0x5b8742(0x85))/0xc);if(_0x347cda===_0x2d0d87)break;else _0x2f0e40['push'](_0x2f0e40['shift']());}catch(_0x1364f9){_0x2f0e40['push'](_0x2f0e40['shift']());}}}(_0x3fe1,0xec118));export const DIALOG_FLOAT_CLASS='vm-dialog-float';export function isDialogFloatTarget(_0x5d5c64){const _0xcce765=_0x4383,_0x41e8aa=_0x5d5c64[_0xcce765(0x8c)],_0x5078ec=_0x41e8aa?.['originalEvent']?.[_0xcce765(0x87)]??_0x5d5c64[_0xcce765(0x87)];if(!_0x5078ec)return![];const _0x13fd58=_0x5078ec instanceof Element?_0x5078ec:_0x5078ec[_0xcce765(0x83)];return Boolean(_0x13fd58?.['closest']('.'+DIALOG_FLOAT_CLASS));}export function preventDialogOutsideClose(_0x370b5a){const _0x406a7e=_0x4383;if(isDialogFloatTarget(_0x370b5a))_0x370b5a[_0x406a7e(0x8f)]();}function _0x3fe1(){const _0x4f780a=['nurSzMjova','DgfYz2v0','mtbpCNvKAw0','mta4mZa0mZHfvMPqqKK','mJC2nJGXmMHQu2LXqW','mJG0mdG3nhLKDvLQsW','zgv0ywLS','mtG0oe9zDeDRDW','m2XSz3PgCq','ChjLDMvUDerLzMf1Bhq','nZGYmZC2nNLhvgPvrq','nZy4mZnhzvHTrKq','ntK0DNPkzLjl','CgfYzw50rwXLBwvUDa','mJiZndrLwuvmwMy','nti1nJyWt2PPweDN'];_0x3fe1=function(){return _0x4f780a;};return _0x3fe1();}
1
+ export const DIALOG_FLOAT_CLASS = "vm-dialog-float";
2
+ export function isDialogFloatTarget(event) {
3
+ const detail = event.detail;
4
+ const t = detail?.originalEvent?.target ?? event.target;
5
+ if (!t)
6
+ return false;
7
+ const el = t instanceof Element ? t : t.parentElement;
8
+ return Boolean(el?.closest(`.${DIALOG_FLOAT_CLASS}`));
9
+ }
10
+ export function preventDialogOutsideClose(event) {
11
+ if (isDialogFloatTarget(event))
12
+ event.preventDefault();
13
+ }
@@ -1 +1,64 @@
1
- (function(_0x321c99,_0xb42e72){const _0x40e924=_0x189b,_0x48460b=_0x321c99();while(!![]){try{const _0x13441a=parseInt(_0x40e924(0x1d8))/0x1+parseInt(_0x40e924(0x1eb))/0x2*(-parseInt(_0x40e924(0x1da))/0x3)+-parseInt(_0x40e924(0x1e5))/0x4+parseInt(_0x40e924(0x1ee))/0x5+-parseInt(_0x40e924(0x1ec))/0x6+-parseInt(_0x40e924(0x1db))/0x7+parseInt(_0x40e924(0x1d5))/0x8;if(_0x13441a===_0xb42e72)break;else _0x48460b['push'](_0x48460b['shift']());}catch(_0x307840){_0x48460b['push'](_0x48460b['shift']());}}}(_0x4c50,0xc4f48));import{toValue}from'vue';import{buildExcelBuffer,excelFilename}from'../../shared/excel';function _0x189b(_0xe10b05,_0x246a1d){_0xe10b05=_0xe10b05-0x1d4;const _0x4c506e=_0x4c50();let _0x189b17=_0x4c506e[_0xe10b05];if(_0x189b['TAFthJ']===undefined){var _0x1b8478=function(_0xcfb8b2){const _0x156860='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1aec83='',_0x3d226a='';for(let _0x2f8435=0x0,_0x1cd152,_0x4e0db8,_0x1d8774=0x0;_0x4e0db8=_0xcfb8b2['charAt'](_0x1d8774++);~_0x4e0db8&&(_0x1cd152=_0x2f8435%0x4?_0x1cd152*0x40+_0x4e0db8:_0x4e0db8,_0x2f8435++%0x4)?_0x1aec83+=String['fromCharCode'](0xff&_0x1cd152>>(-0x2*_0x2f8435&0x6)):0x0){_0x4e0db8=_0x156860['indexOf'](_0x4e0db8);}for(let _0x2e92a0=0x0,_0x496aad=_0x1aec83['length'];_0x2e92a0<_0x496aad;_0x2e92a0++){_0x3d226a+='%'+('00'+_0x1aec83['charCodeAt'](_0x2e92a0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3d226a);};_0x189b['PnJJvH']=_0x1b8478,_0x189b['gHBUeQ']={},_0x189b['TAFthJ']=!![];}const _0xf1ef99=_0x4c506e[0x0],_0x2653aa=_0xe10b05+_0xf1ef99,_0x57512e=_0x189b['gHBUeQ'][_0x2653aa];return!_0x57512e?(_0x189b17=_0x189b['PnJJvH'](_0x189b17),_0x189b['gHBUeQ'][_0x2653aa]=_0x189b17):_0x189b17=_0x57512e,_0x189b17;}import{flattenTree}from'./tree';export{buildExcelBuffer,excelFilename,excelResponseHeaders}from'../../shared/excel';export function pickExportColumns(_0x1aec83){const _0x41010d=_0x189b;return _0x1aec83[_0x41010d(0x1e9)](_0x3d226a=>Boolean(_0x3d226a[_0x41010d(0x1ed)])&&_0x3d226a[_0x41010d(0x1d9)]!==_0x41010d(0x1e2)&&_0x3d226a[_0x41010d(0x1d9)]!=='op'&&_0x3d226a[_0x41010d(0x1d9)]!==_0x41010d(0x1f1)&&_0x3d226a[_0x41010d(0x1d9)]!==_0x41010d(0x1e6)&&!_0x3d226a[_0x41010d(0x1de)]);}function formatExportCell(_0x2f8435,_0x1cd152){const _0x388fa9=_0x189b;if(!_0x2f8435['prop'])return'';const _0x4e0db8=_0x1cd152[_0x2f8435[_0x388fa9(0x1ed)]];if(_0x2f8435[_0x388fa9(0x1ef)])return _0x2f8435[_0x388fa9(0x1ef)](_0x1cd152,_0x4e0db8);const _0x1d8774=_0x2f8435['dict']==null?[]:toValue(_0x2f8435['dict']);if(Array[_0x388fa9(0x1e8)](_0x1d8774)&&_0x1d8774[_0x388fa9(0x1e4)]&&_0x4e0db8!=null&&_0x4e0db8!==''){const _0x2e92a0=_0x1d8774[_0x388fa9(0x1dc)](_0x496aad=>_0x496aad[_0x388fa9(0x1e3)]===_0x4e0db8||String(_0x496aad[_0x388fa9(0x1e3)])===String(_0x4e0db8));if(_0x2e92a0)return _0x2e92a0[_0x388fa9(0x1ea)];}if(_0x4e0db8==null)return'';return String(_0x4e0db8);}export function flattenExportRows(_0x355819,_0x443ba3){const _0x30863f=_0x189b;if(!_0x443ba3)return _0x355819;const _0x40e31e=_0x355819[_0x30863f(0x1dd)](_0x38e502=>Array[_0x30863f(0x1e8)](_0x38e502['children'])&&_0x38e502[_0x30863f(0x1e0)]['length']);if(!_0x40e31e)return _0x355819;return flattenTree(_0x355819);}export function crudColumnsToExcel(_0x17ac0f){const _0x3f67d7=_0x189b;return pickExportColumns(_0x17ac0f)[_0x3f67d7(0x1e7)](_0x5ad42c=>({'prop':_0x5ad42c['prop'],'label':_0x5ad42c[_0x3f67d7(0x1ea)]||_0x5ad42c['prop']}));}function _0x4c50(){const _0xfdc2b=['BwfW','AxnbCNjHEq','zMLSDgvY','BgfIzwW','mJGXoeTLr2TfAW','mJa3nduXoe1Av29dAq','ChjVCa','ndKWmde3nw1Vt3niBW','zM9YBwf0DgvY','y2XPy2S','zxHWyw5K','AhjLzG','mtiWmJm3nJbuBhzIEgK','y3jLyxrLt2jQzwn0vvjm','y3jLyxrLrwXLBwvUDa','mtu3mZm2nxHqqwDjta','DhLWzq','mJGYmg1wzxnRqG','odKYntm5oujoD0vjAG','zMLUza','C29Tzq','AgLKzgvU','yxbWBgLJyxrPB24VDM5KlM9Wzw54BwXMB3jTyxrZlw9MzMLJzwrVy3vTzw50lNnWCMvHzhnOzwv0BwWUC2HLzxq','y2HPBgrYzw4','CMv2B2TLt2jQzwn0vvjm','C2vSzwn0Aw9U','DMfSDwu','BgvUz3rO','mtiXnZq4ogTYuLPNyG','Aw5KzxG'];_0x4c50=function(){return _0xfdc2b;};return _0x4c50();}export function downloadExcelBuffer(_0x3770fc,_0x2b7bc5){const _0x46e0a6=_0x189b,_0x558e76=new Blob([_0x3770fc],{'type':_0x46e0a6(0x1df)}),_0x139146=URL[_0x46e0a6(0x1d6)](_0x558e76),_0x45a056=document[_0x46e0a6(0x1d7)]('a');_0x45a056[_0x46e0a6(0x1d4)]=_0x139146,_0x45a056['download']=excelFilename(_0x2b7bc5),_0x45a056[_0x46e0a6(0x1f0)](),URL[_0x46e0a6(0x1e1)](_0x139146);}export function exportCrudExcel(_0x156cad,_0x516906,_0x150675){const _0x12747c=pickExportColumns(_0x156cad),_0x6a8619=crudColumnsToExcel(_0x12747c),_0x5e9c84=buildExcelBuffer(_0x6a8619,_0x516906,(_0x1d34d9,_0x1dbe05)=>{const _0x202032=_0x189b,_0xcdfdbd=_0x12747c[_0x202032(0x1dc)](_0x6270a6=>_0x6270a6[_0x202032(0x1ed)]===_0x1d34d9);return _0xcdfdbd?formatExportCell(_0xcdfdbd,_0x1dbe05):String(_0x1dbe05[_0x1d34d9]??'');});downloadExcelBuffer(_0x5e9c84,_0x150675);}
1
+ import { toValue } from "vue";
2
+ import {
3
+ buildExcelBuffer,
4
+ excelFilename
5
+ } from "../../shared/excel";
6
+ import { flattenTree } from "./tree";
7
+ export {
8
+ buildExcelBuffer,
9
+ excelFilename,
10
+ excelResponseHeaders
11
+ } from "../../shared/excel";
12
+ export function pickExportColumns(columns) {
13
+ return columns.filter((c) => Boolean(c.prop) && c.type !== "selection" && c.type !== "op" && c.type !== "expand" && c.type !== "index" && !c.hidden);
14
+ }
15
+ function formatExportCell(col, row) {
16
+ if (!col.prop)
17
+ return "";
18
+ const val = row[col.prop];
19
+ if (col.formatter)
20
+ return col.formatter(row, val);
21
+ const dict = col.dict == null ? [] : toValue(col.dict);
22
+ if (Array.isArray(dict) && dict.length && val != null && val !== "") {
23
+ const hit = dict.find((d) => d.value === val || String(d.value) === String(val));
24
+ if (hit)
25
+ return hit.label;
26
+ }
27
+ if (val == null)
28
+ return "";
29
+ return String(val);
30
+ }
31
+ export function flattenExportRows(rows, tree) {
32
+ if (!tree)
33
+ return rows;
34
+ const nested = rows.some((r) => Array.isArray(r.children) && r.children.length);
35
+ if (!nested)
36
+ return rows;
37
+ return flattenTree(rows);
38
+ }
39
+ export function crudColumnsToExcel(columns) {
40
+ return pickExportColumns(columns).map((c) => ({
41
+ prop: c.prop,
42
+ label: c.label || c.prop
43
+ }));
44
+ }
45
+ export function downloadExcelBuffer(buffer, filename) {
46
+ const blob = new Blob([buffer], {
47
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
48
+ });
49
+ const url = URL.createObjectURL(blob);
50
+ const link = document.createElement("a");
51
+ link.href = url;
52
+ link.download = excelFilename(filename);
53
+ link.click();
54
+ URL.revokeObjectURL(url);
55
+ }
56
+ export function exportCrudExcel(columns, rows, filename) {
57
+ const exportCols = pickExportColumns(columns);
58
+ const excelCols = crudColumnsToExcel(exportCols);
59
+ const buffer = buildExcelBuffer(excelCols, rows, (prop, row) => {
60
+ const col = exportCols.find((c) => c.prop === prop);
61
+ return col ? formatExportCell(col, row) : String(row[prop] ?? "");
62
+ });
63
+ downloadExcelBuffer(buffer, filename);
64
+ }
@@ -1 +1,74 @@
1
- function _0x1228(){const _0x3d7032=['zxHJzwW','Bg9N','DNvL','DxrPBhm','nJi0odDquwLpvK0','DhH0','DM0TzMLSzs1WCMv2Awv3lxnOzwv0','5yQG6l295AsX6lsLicG','Cg9W','yxvKAw8','mZa1mdC1nMjuwejgDq','u2HLzxroyw1LCW','EwfTBa','Dhn4','CgrM','C2HLzxrFDg9FAhrTBa','nw94ugnoCG','yxjYyxK','ANn4','Ew1S','Aw5JBhvKzq','AgfZ','AhrTBa','AhrT','Chb0','mte5nJq1mfLVDgTguW','mJaWnJKWn3PovxPwzG','Dgv4Da','DhLWzq','BwfYA2rVD24','ohDprwjnEG','nZqXndi5D29pyvn1','mtmWwxvmBvjl','mJq1mti1mK5mu2vPwq','mte5mta0mNb5yvvIsq','D29Yza','ANnVBG','u2HLzxrZ','Aw1Hz2u','Dw5ZDxbWB3j0zwq','EgXZEa','y3nZ','Aw5P','C3fS','yxjYyxLcDwzMzxi'];_0x1228=function(){return _0x3d7032;};return _0x1228();}const _0x16766e=_0x1439;(function(_0x46cb87,_0xe8c6f4){const _0x24ee92=_0x1439,_0x1fee8d=_0x46cb87();while(!![]){try{const _0xc78a40=parseInt(_0x24ee92(0xb1))/0x1+-parseInt(_0x24ee92(0xab))/0x2+parseInt(_0x24ee92(0xb4))/0x3+-parseInt(_0x24ee92(0xc9))/0x4+parseInt(_0x24ee92(0xcf))/0x5*(parseInt(_0x24ee92(0xb3))/0x6)+parseInt(_0x24ee92(0xac))/0x7*(parseInt(_0x24ee92(0xb0))/0x8)+-parseInt(_0x24ee92(0xc3))/0x9*(parseInt(_0x24ee92(0xb2))/0xa);if(_0xc78a40===_0xe8c6f4)break;else _0x1fee8d['push'](_0x1fee8d['shift']());}catch(_0x5b0d98){_0x1fee8d['push'](_0x1fee8d['shift']());}}}(_0x1228,0x5d631));import{extname,fileRule}from'./upload';function _0x1439(_0x235700,_0x1a712d){_0x235700=_0x235700-0xa5;const _0x12280e=_0x1228();let _0x143995=_0x12280e[_0x235700];if(_0x1439['ChYJuC']===undefined){var _0x3de4e7=function(_0x27b556){const _0x2b11d0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3aae5f='',_0x35682c='';for(let _0x1838fe=0x0,_0x4371a7,_0xa0356a,_0x594546=0x0;_0xa0356a=_0x27b556['charAt'](_0x594546++);~_0xa0356a&&(_0x4371a7=_0x1838fe%0x4?_0x4371a7*0x40+_0xa0356a:_0xa0356a,_0x1838fe++%0x4)?_0x3aae5f+=String['fromCharCode'](0xff&_0x4371a7>>(-0x2*_0x1838fe&0x6)):0x0){_0xa0356a=_0x2b11d0['indexOf'](_0xa0356a);}for(let _0x4fb780=0x0,_0x44ed96=_0x3aae5f['length'];_0x4fb780<_0x44ed96;_0x4fb780++){_0x35682c+='%'+('00'+_0x3aae5f['charCodeAt'](_0x4fb780)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x35682c);};_0x1439['fDkFAx']=_0x3de4e7,_0x1439['bfIqLy']={},_0x1439['ChYJuC']=!![];}const _0x49284d=_0x12280e[0x0],_0x7d8c6c=_0x235700+_0x49284d,_0x113ac9=_0x1439['bfIqLy'][_0x7d8c6c];return!_0x113ac9?(_0x143995=_0x1439['fDkFAx'](_0x143995),_0x1439['bfIqLy'][_0x7d8c6c]=_0x143995):_0x143995=_0x113ac9,_0x143995;}const TEXT_EXTS=new Set([_0x16766e(0xc4),'md',_0x16766e(0xaf),_0x16766e(0xb6),_0x16766e(0xc0),'csv','xml',_0x16766e(0xa8),_0x16766e(0xa9),_0x16766e(0xbb),'js','ts',_0x16766e(0xd1),_0x16766e(0xcc),_0x16766e(0xc1),_0x16766e(0xcb),_0x16766e(0xa5),_0x16766e(0xbc),'conf',_0x16766e(0xbd)]);export function getMediaPreviewKind(_0x3aae5f=''){const _0x44f770=_0x16766e,_0x35682c=fileRule(_0x3aae5f);if(_0x35682c[_0x44f770(0xae)]===_0x44f770(0xb8))return'image';if(_0x35682c[_0x44f770(0xae)]==='video')return'video';if(_0x35682c['type']===_0x44f770(0xc8))return _0x44f770(0xc8);return getFilePreviewKind(_0x3aae5f);}export function getFilePreviewKind(_0x1838fe=''){const _0x13950f=_0x16766e,_0x4371a7=fileRule(_0x1838fe);if(_0x4371a7[_0x13950f(0xae)]===_0x13950f(0xcd))return _0x13950f(0xcd);if(_0x4371a7[_0x13950f(0xae)]===_0x13950f(0xbf))return _0x13950f(0xbf);const _0xa0356a=extname(_0x1838fe);if(TEXT_EXTS[_0x13950f(0xa7)](_0xa0356a))return'text';if(_0x4371a7[_0x13950f(0xae)]===_0x13950f(0xb5)||_0x4371a7[_0x13950f(0xae)]===_0x13950f(0xaa))return'office';return _0x13950f(0xb9);}export function fileDisplayName(_0x594546='',_0x4fb780='文件'){const _0x49cbb7=_0x16766e,_0x44ed96=String(_0x594546)['split']('?')[0x0]?.['split']('/')[_0x49cbb7(0xc7)]()||'';return _0x44ed96||_0x4fb780;}export async function fetchFileText(_0x17033f){const _0x580951=_0x16766e,_0x5c97db=await fetch(_0x17033f,{'credentials':_0x580951(0xa6)});if(!_0x5c97db['ok'])throw new Error(_0x580951(0xc6)+_0x5c97db['status']+')');return _0x5c97db[_0x580951(0xad)]();}export async function fetchFileArrayBuffer(_0xadff70){const _0x4f90ff=_0x16766e,_0x5ca214=await fetch(_0xadff70,{'credentials':_0x4f90ff(0xa6)});if(!_0x5ca214['ok'])throw new Error(_0x4f90ff(0xc6)+_0x5ca214['status']+')');return _0x5ca214[_0x4f90ff(0xbe)]();}export async function loadExcelPreviewHtml(_0x2fcfca){const _0x64fd62=_0x16766e,_0x4e5774=await import(_0x64fd62(0xba)),_0x1561f8=await fetchFileArrayBuffer(_0x2fcfca),_0x25a458=_0x4e5774['read'](_0x1561f8,{'type':_0x64fd62(0xd0)}),_0x5bf34c=_0x25a458[_0x64fd62(0xca)][0x0];if(!_0x5bf34c)return'<p>空工作簿</p>';const _0x30b3b7=_0x25a458[_0x64fd62(0xb7)][_0x5bf34c];if(!_0x30b3b7)return'<p>空工作表</p>';return _0x4e5774[_0x64fd62(0xc2)][_0x64fd62(0xce)](_0x30b3b7,{'id':_0x64fd62(0xc5),'editable':![]});}
1
+ import { extname, fileRule } from "./upload";
2
+ const TEXT_EXTS = new Set([
3
+ "txt",
4
+ "md",
5
+ "markdown",
6
+ "json",
7
+ "log",
8
+ "csv",
9
+ "xml",
10
+ "html",
11
+ "htm",
12
+ "css",
13
+ "js",
14
+ "ts",
15
+ "jsx",
16
+ "tsx",
17
+ "vue",
18
+ "yaml",
19
+ "yml",
20
+ "ini",
21
+ "conf",
22
+ "sql"
23
+ ]);
24
+ export function getMediaPreviewKind(path = "") {
25
+ const rule = fileRule(path);
26
+ if (rule.type === "image")
27
+ return "image";
28
+ if (rule.type === "video")
29
+ return "video";
30
+ if (rule.type === "audio")
31
+ return "audio";
32
+ return getFilePreviewKind(path);
33
+ }
34
+ export function getFilePreviewKind(path = "") {
35
+ const rule = fileRule(path);
36
+ if (rule.type === "pdf")
37
+ return "pdf";
38
+ if (rule.type === "excel")
39
+ return "excel";
40
+ const ext = extname(path);
41
+ if (TEXT_EXTS.has(ext))
42
+ return "text";
43
+ if (rule.type === "word" || rule.type === "ppt")
44
+ return "office";
45
+ return "unsupported";
46
+ }
47
+ export function fileDisplayName(path = "", fallback = "文件") {
48
+ const base = String(path).split("?")[0]?.split("/").pop() || "";
49
+ return base || fallback;
50
+ }
51
+ export async function fetchFileText(url) {
52
+ const res = await fetch(url, { credentials: "include" });
53
+ if (!res.ok)
54
+ throw new Error(`加载失败 (${res.status})`);
55
+ return res.text();
56
+ }
57
+ export async function fetchFileArrayBuffer(url) {
58
+ const res = await fetch(url, { credentials: "include" });
59
+ if (!res.ok)
60
+ throw new Error(`加载失败 (${res.status})`);
61
+ return res.arrayBuffer();
62
+ }
63
+ export async function loadExcelPreviewHtml(url) {
64
+ const XLSX = await import("xlsx");
65
+ const buf = await fetchFileArrayBuffer(url);
66
+ const wb = XLSX.read(buf, { type: "array" });
67
+ const name = wb.SheetNames[0];
68
+ if (!name)
69
+ return "<p>空工作簿</p>";
70
+ const sheet = wb.Sheets[name];
71
+ if (!sheet)
72
+ return "<p>空工作表</p>";
73
+ return XLSX.utils.sheet_to_html(sheet, { id: "vm-file-preview-sheet", editable: false });
74
+ }
@@ -1 +1,61 @@
1
- const _0x58be14=_0xb892;function _0xb892(_0xa3bdf4,_0x1ba5b3){_0xa3bdf4=_0xa3bdf4-0x72;const _0x484caa=_0x484c();let _0xb892c0=_0x484caa[_0xa3bdf4];if(_0xb892['LJDvEc']===undefined){var _0x29eeb8=function(_0x17c555){const _0x346aae='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xb7bdc4='',_0x5ce1f2='';for(let _0xc38de=0x0,_0x515de3,_0x253f13,_0x422f69=0x0;_0x253f13=_0x17c555['charAt'](_0x422f69++);~_0x253f13&&(_0x515de3=_0xc38de%0x4?_0x515de3*0x40+_0x253f13:_0x253f13,_0xc38de++%0x4)?_0xb7bdc4+=String['fromCharCode'](0xff&_0x515de3>>(-0x2*_0xc38de&0x6)):0x0){_0x253f13=_0x346aae['indexOf'](_0x253f13);}for(let _0x14b282=0x0,_0x5932a3=_0xb7bdc4['length'];_0x14b282<_0x5932a3;_0x14b282++){_0x5ce1f2+='%'+('00'+_0xb7bdc4['charCodeAt'](_0x14b282)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5ce1f2);};_0xb892['jgPtIn']=_0x29eeb8,_0xb892['heMuTq']={},_0xb892['LJDvEc']=!![];}const _0x5283f6=_0x484caa[0x0],_0xd40647=_0xa3bdf4+_0x5283f6,_0x4ad7f5=_0xb892['heMuTq'][_0xd40647];return!_0x4ad7f5?(_0xb892c0=_0xb892['jgPtIn'](_0xb892c0),_0xb892['heMuTq'][_0xd40647]=_0xb892c0):_0xb892c0=_0x4ad7f5,_0xb892c0;}(function(_0xd2c9bd,_0x2ec9e6){const _0x39d2d3=_0xb892,_0x719e26=_0xd2c9bd();while(!![]){try{const _0x181684=parseInt(_0x39d2d3(0x78))/0x1*(-parseInt(_0x39d2d3(0x74))/0x2)+parseInt(_0x39d2d3(0x77))/0x3*(parseInt(_0x39d2d3(0x87))/0x4)+-parseInt(_0x39d2d3(0x8d))/0x5*(parseInt(_0x39d2d3(0x79))/0x6)+parseInt(_0x39d2d3(0x8e))/0x7*(-parseInt(_0x39d2d3(0x8c))/0x8)+parseInt(_0x39d2d3(0x7d))/0x9*(parseInt(_0x39d2d3(0x81))/0xa)+parseInt(_0x39d2d3(0x76))/0xb+-parseInt(_0x39d2d3(0x90))/0xc;if(_0x181684===_0x2ec9e6)break;else _0x719e26['push'](_0x719e26['shift']());}catch(_0x10b89f){_0x719e26['push'](_0x719e26['shift']());}}}(_0x484c,0xb1236));import{apiUrl,getAccessToken}from'../api/client';import{downloadExcelBuffer}from'./export-excel';import{parseExcelBuffer}from'../../shared/excel';function authHeaders(_0xb7bdc4){const _0xaa6459=_0xb892,_0x5ce1f2=new Headers(_0xb7bdc4),_0xc38de=getAccessToken();if(_0xc38de)_0x5ce1f2[_0xaa6459(0x7b)](_0xaa6459(0x73),_0xaa6459(0x7c)+_0xc38de);return _0x5ce1f2;}function resolveNamespace(_0x515de3){const _0x1c01f0=_0xb892;if(!_0x515de3)return'';return _0x515de3[_0x1c01f0(0x7e)]('/')?_0x515de3:'/'+_0x515de3;}function headersFromRows(_0x253f13){const _0xc851c5=_0xb892,_0x422f69=[],_0x14b282=new Set();for(const _0x5932a3 of _0x253f13){for(const _0x27e35d of Object['keys'](_0x5932a3)){if(_0x14b282[_0xc851c5(0x8f)](_0x27e35d))continue;_0x14b282[_0xc851c5(0x8a)](_0x27e35d),_0x422f69[_0xc851c5(0x75)](_0x27e35d);}}return _0x422f69;}export async function parseImportExcelPreview(_0x176836){const _0x1cfc65=new Uint8Array(await _0x176836['arrayBuffer']()),_0x3b12d2=parseExcelBuffer(_0x1cfc65);return{'headers':headersFromRows(_0x3b12d2),'rows':_0x3b12d2};}export async function downloadImportTemplate(_0xec5f71,_0x5b2c02=_0x58be14(0x91)){const _0x50a888=_0x58be14,_0x4fbcbc=apiUrl(resolveNamespace(_0xec5f71)+_0x50a888(0x86)),_0x336dee=await fetch(_0x4fbcbc,{'headers':authHeaders()});if(!_0x336dee['ok']){const _0x1423e6=await _0x336dee[_0x50a888(0x8b)]();throw new Error(_0x1423e6||_0x50a888(0x89)+_0x336dee[_0x50a888(0x85)]+')');}const _0x5d8a93=new Uint8Array(await _0x336dee[_0x50a888(0x84)]());downloadExcelBuffer(_0x5d8a93,_0x5b2c02);}function _0x484c(){const _0x25c27e=['5A+85ywL5AsX6lsLicG','5lIl6l295QIH5P2/5AsX6lsLicG','ywrK','Dgv4Da','mtqWndaXnMPzy1DMBa','mta2oda1AKrMu2vp','mJH0reHvBNe','AgfZ','mta2nZC2mg1UrNjmyq','5A+85ywL5QIH5P2/','yxbWzw5K','yxv0Ag9YAxPHDgLVBG','mJe0nJi2swThzNj0','ChvZAa','mJGZntG2nKnvCMz5rW','nte2m1j2EgTLvG','n1HfD2HIuq','mtC0q0nZBMT1','CgfYC2u','C2v0','qMvHCMvYia','mtiZm0fms2XhAW','C3rHCNrZv2L0Aa','ue9tva','y29Kzq','otiZmtbOq0HXA3K','BwvZC2fNzq','zgf0yq','yxjYyxLcDwzMzxi','C3rHDhvZ','l2LTCg9YDfrLBxbSyxrL','mZe3mLHctg9Lqq'];_0x484c=function(){return _0x25c27e;};return _0x484c();}export async function uploadImportExcel(_0x48f1a5,_0xb061c5){const _0x2ce765=_0x58be14,_0x160e0c=apiUrl(resolveNamespace(_0x48f1a5)+'/import'),_0x12eee1=new FormData();_0x12eee1[_0x2ce765(0x72)]('file',_0xb061c5);const _0x8f0c14=await fetch(_0x160e0c,{'method':_0x2ce765(0x7f),'headers':authHeaders(),'body':_0x12eee1}),_0x509327=await _0x8f0c14[_0x2ce765(0x8b)]();let _0x1043d0=null;try{_0x1043d0=_0x509327?JSON[_0x2ce765(0x7a)](_0x509327):null;}catch{}if(_0x1043d0?.[_0x2ce765(0x80)]===0x3e8&&_0x1043d0[_0x2ce765(0x83)])return _0x1043d0['data'];throw new Error(_0x1043d0?.[_0x2ce765(0x82)]||_0x509327||_0x2ce765(0x88)+_0x8f0c14[_0x2ce765(0x85)]+')');}
1
+ import { apiUrl, getAccessToken } from "../api/client";
2
+ import { downloadExcelBuffer } from "./export-excel";
3
+ import { parseExcelBuffer } from "../../shared/excel";
4
+ function authHeaders(extra) {
5
+ const headers = new Headers(extra);
6
+ const token = getAccessToken();
7
+ if (token)
8
+ headers.set("authorization", `Bearer ${token}`);
9
+ return headers;
10
+ }
11
+ function resolveNamespace(ns) {
12
+ if (!ns)
13
+ return "";
14
+ return ns.startsWith("/") ? ns : `/${ns}`;
15
+ }
16
+ function headersFromRows(rows) {
17
+ const ordered = [];
18
+ const seen = new Set;
19
+ for (const row of rows) {
20
+ for (const key of Object.keys(row)) {
21
+ if (seen.has(key))
22
+ continue;
23
+ seen.add(key);
24
+ ordered.push(key);
25
+ }
26
+ }
27
+ return ordered;
28
+ }
29
+ export async function parseImportExcelPreview(file) {
30
+ const buf = new Uint8Array(await file.arrayBuffer());
31
+ const rows = parseExcelBuffer(buf);
32
+ return { headers: headersFromRows(rows), rows };
33
+ }
34
+ export async function downloadImportTemplate(namespace, filename = "导入模板") {
35
+ const url = apiUrl(`${resolveNamespace(namespace)}/importTemplate`);
36
+ const res = await fetch(url, { headers: authHeaders() });
37
+ if (!res.ok) {
38
+ const text = await res.text();
39
+ throw new Error(text || `下载模板失败 (${res.status})`);
40
+ }
41
+ const buf = new Uint8Array(await res.arrayBuffer());
42
+ downloadExcelBuffer(buf, filename);
43
+ }
44
+ export async function uploadImportExcel(namespace, file) {
45
+ const url = apiUrl(`${resolveNamespace(namespace)}/import`);
46
+ const fd = new FormData;
47
+ fd.append("file", file);
48
+ const res = await fetch(url, {
49
+ method: "POST",
50
+ headers: authHeaders(),
51
+ body: fd
52
+ });
53
+ const raw = await res.text();
54
+ let json = null;
55
+ try {
56
+ json = raw ? JSON.parse(raw) : null;
57
+ } catch {}
58
+ if (json?.code === 1000 && json.data)
59
+ return json.data;
60
+ throw new Error(json?.message || raw || `导入失败 (${res.status})`);
61
+ }
@@ -1 +1,42 @@
1
- (function(_0x3a6bee,_0xcf963c){const _0x256523=_0x1f64,_0x598cbf=_0x3a6bee();while(!![]){try{const _0x47d36e=-parseInt(_0x256523(0x1d3))/0x1*(parseInt(_0x256523(0x1de))/0x2)+parseInt(_0x256523(0x1d8))/0x3*(-parseInt(_0x256523(0x1e2))/0x4)+-parseInt(_0x256523(0x1dc))/0x5*(parseInt(_0x256523(0x1d9))/0x6)+-parseInt(_0x256523(0x1d1))/0x7+parseInt(_0x256523(0x1d5))/0x8+-parseInt(_0x256523(0x1da))/0x9*(-parseInt(_0x256523(0x1e1))/0xa)+parseInt(_0x256523(0x1dd))/0xb;if(_0x47d36e===_0xcf963c)break;else _0x598cbf['push'](_0x598cbf['shift']());}catch(_0x3faefd){_0x598cbf['push'](_0x598cbf['shift']());}}}(_0x2b26,0xa567f));function _0x1f64(_0x37e3a7,_0x48e45d){_0x37e3a7=_0x37e3a7-0x1d1;const _0x2b26a2=_0x2b26();let _0x1f6431=_0x2b26a2[_0x37e3a7];if(_0x1f64['DpNYvQ']===undefined){var _0x22ece6=function(_0x922b90){const _0x4a0064='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1c8e1a='',_0x1a1123='';for(let _0x3baf1a=0x0,_0x1fc104,_0x53e9ad,_0x341d24=0x0;_0x53e9ad=_0x922b90['charAt'](_0x341d24++);~_0x53e9ad&&(_0x1fc104=_0x3baf1a%0x4?_0x1fc104*0x40+_0x53e9ad:_0x53e9ad,_0x3baf1a++%0x4)?_0x1c8e1a+=String['fromCharCode'](0xff&_0x1fc104>>(-0x2*_0x3baf1a&0x6)):0x0){_0x53e9ad=_0x4a0064['indexOf'](_0x53e9ad);}for(let _0x145b88=0x0,_0x134475=_0x1c8e1a['length'];_0x145b88<_0x134475;_0x145b88++){_0x1a1123+='%'+('00'+_0x1c8e1a['charCodeAt'](_0x145b88)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1a1123);};_0x1f64['XSzcUn']=_0x22ece6,_0x1f64['qYVXWW']={},_0x1f64['DpNYvQ']=!![];}const _0x3c45cf=_0x2b26a2[0x0],_0x4b4171=_0x37e3a7+_0x3c45cf,_0x2c67ca=_0x1f64['qYVXWW'][_0x4b4171];return!_0x2c67ca?(_0x1f6431=_0x1f64['XSzcUn'](_0x1f6431),_0x1f64['qYVXWW'][_0x4b4171]=_0x1f6431):_0x1f6431=_0x2c67ca,_0x1f6431;}export function textOfJson(_0x1c8e1a){const _0x23db8f=_0x1f64;if(_0x1c8e1a==null)return'';if(typeof _0x1c8e1a===_0x23db8f(0x1d2))return _0x1c8e1a;try{return JSON[_0x23db8f(0x1db)](_0x1c8e1a);}catch{return String(_0x1c8e1a);}}export function prettyJson(_0x1a1123,_0x3baf1a='(空)'){const _0x50a040=_0x1f64,_0x1fc104=textOfJson(_0x1a1123)[_0x50a040(0x1df)]();if(!_0x1fc104)return _0x3baf1a;try{return JSON[_0x50a040(0x1db)](JSON[_0x50a040(0x1d7)](_0x1fc104),null,0x2);}catch{if(typeof _0x1a1123===_0x50a040(0x1d6)&&_0x1a1123!==null)try{return JSON[_0x50a040(0x1db)](_0x1a1123,null,0x2);}catch{}return _0x1fc104;}}export function hasJsonContent(_0x53e9ad){return Boolean(textOfJson(_0x53e9ad)['trim']());}export function parseJsonInput(_0x341d24){const _0x3fb698=_0x1f64,_0x145b88=_0x341d24[_0x3fb698(0x1df)]();if(!_0x145b88)return{'ok':!![],'value':null};try{return{'ok':!![],'value':JSON[_0x3fb698(0x1d7)](_0x145b88)};}catch(_0x134475){return{'ok':![],'error':_0x134475 instanceof Error?_0x134475[_0x3fb698(0x1d4)]:_0x3fb698(0x1e0)};}}function _0x2b26(){const _0x203b10=['ntqZnKvHrwzsta','C3rYAw5NAwz5','mJaYnvjty2nXqq','ndG1mdaWmdfQChPczeG','ndu2nZa2r1zpuMDP','DhjPBq','sLnptIdMOlZLVi/PLjNOR68','ntC5mfDryKzeqG','otG4mdrlrxbPAgK','nJy2otG3m3nfEu1gCG','C3rYAw5N','nuDxs0Pisa','BwvZC2fNzq','ndG1mdqYngPNC05sua','B2jQzwn0','CgfYC2u','mtu5su5Xwhj0','mtKWmJbAt2HkDge'];_0x2b26=function(){return _0x203b10;};return _0x2b26();}
1
+ export function textOfJson(v) {
2
+ if (v == null)
3
+ return "";
4
+ if (typeof v === "string")
5
+ return v;
6
+ try {
7
+ return JSON.stringify(v);
8
+ } catch {
9
+ return String(v);
10
+ }
11
+ }
12
+ export function prettyJson(raw, empty = "(空)") {
13
+ const s = textOfJson(raw).trim();
14
+ if (!s)
15
+ return empty;
16
+ try {
17
+ return JSON.stringify(JSON.parse(s), null, 2);
18
+ } catch {
19
+ if (typeof raw === "object" && raw !== null) {
20
+ try {
21
+ return JSON.stringify(raw, null, 2);
22
+ } catch {}
23
+ }
24
+ return s;
25
+ }
26
+ }
27
+ export function hasJsonContent(raw) {
28
+ return Boolean(textOfJson(raw).trim());
29
+ }
30
+ export function parseJsonInput(raw) {
31
+ const s = raw.trim();
32
+ if (!s)
33
+ return { ok: true, value: null };
34
+ try {
35
+ return { ok: true, value: JSON.parse(s) };
36
+ } catch (e) {
37
+ return {
38
+ ok: false,
39
+ error: e instanceof Error ? e.message : "JSON 格式错误"
40
+ };
41
+ }
42
+ }
@@ -1 +1,11 @@
1
- function _0x3011(){const _0x4e54f3=['mti3mMDysffHzG','mtKZnZe4ng9bA2nWBa','ndr0tfnzEKy','mte1nZrQAe1YzMG','DhLWzq','odm5ndy2reDRDeLM','CM91DgvY','zMLSDgvY','AxnbCNjHEq','y2HPBgrYzw4','BgvUz3rO','mtiWrNLfqLLU','mJa5mKnQqxvwBG','mtr0rw9gBKC','mtuZmtC5mhzezuXeDa','mZu5n1fZswLRDW','AxntAg93','mJqYmJmYmKTiAgDxEa'];_0x3011=function(){return _0x4e54f3;};return _0x3011();}function _0x5f2b(_0x7be4ff,_0x8beb2){_0x7be4ff=_0x7be4ff-0xeb;const _0x30118d=_0x3011();let _0x5f2b3b=_0x30118d[_0x7be4ff];if(_0x5f2b['hSAREi']===undefined){var _0x43aad5=function(_0x3b69f1){const _0x462b1c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x195c2c='',_0x2d133e='';for(let _0x1274a3=0x0,_0x4bd967,_0x5a723a,_0x97988b=0x0;_0x5a723a=_0x3b69f1['charAt'](_0x97988b++);~_0x5a723a&&(_0x4bd967=_0x1274a3%0x4?_0x4bd967*0x40+_0x5a723a:_0x5a723a,_0x1274a3++%0x4)?_0x195c2c+=String['fromCharCode'](0xff&_0x4bd967>>(-0x2*_0x1274a3&0x6)):0x0){_0x5a723a=_0x462b1c['indexOf'](_0x5a723a);}for(let _0x32dbdc=0x0,_0xc74905=_0x195c2c['length'];_0x32dbdc<_0xc74905;_0x32dbdc++){_0x2d133e+='%'+('00'+_0x195c2c['charCodeAt'](_0x32dbdc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2d133e);};_0x5f2b['ZlXVgM']=_0x43aad5,_0x5f2b['KMpAif']={},_0x5f2b['hSAREi']=!![];}const _0x5b0435=_0x30118d[0x0],_0x50d9ad=_0x7be4ff+_0x5b0435,_0x4cdd21=_0x5f2b['KMpAif'][_0x50d9ad];return!_0x4cdd21?(_0x5f2b3b=_0x5f2b['ZlXVgM'](_0x5f2b3b),_0x5f2b['KMpAif'][_0x50d9ad]=_0x5f2b3b):_0x5f2b3b=_0x4cdd21,_0x5f2b3b;}(function(_0x58f92a,_0x137b1b){const _0x1e38e5=_0x5f2b,_0x46b8bb=_0x58f92a();while(!![]){try{const _0x32f084=parseInt(_0x1e38e5(0xfb))/0x1*(parseInt(_0x1e38e5(0xf9))/0x2)+-parseInt(_0x1e38e5(0xf1))/0x3+parseInt(_0x1e38e5(0xf8))/0x4*(parseInt(_0x1e38e5(0xf7))/0x5)+-parseInt(_0x1e38e5(0xed))/0x6+parseInt(_0x1e38e5(0xeb))/0x7+parseInt(_0x1e38e5(0xec))/0x8*(-parseInt(_0x1e38e5(0xef))/0x9)+parseInt(_0x1e38e5(0xfa))/0xa*(parseInt(_0x1e38e5(0xee))/0xb);if(_0x32f084===_0x137b1b)break;else _0x46b8bb['push'](_0x46b8bb['shift']());}catch(_0x199489){_0x46b8bb['push'](_0x46b8bb['shift']());}}}(_0x3011,0x2e395));export function filterShowMenus(_0x195c2c){const _0xa0d7d7=_0x5f2b;if(!Array[_0xa0d7d7(0xf4)](_0x195c2c)||!_0x195c2c[_0xa0d7d7(0xf6)])return[];return _0x195c2c['filter'](_0x2d133e=>_0x2d133e&&_0x2d133e[_0xa0d7d7(0xfc)]!==![])['map'](_0x1274a3=>({..._0x1274a3,'children':_0x1274a3['children']?.[_0xa0d7d7(0xf6)]?filterShowMenus(_0x1274a3['children']):undefined}))[_0xa0d7d7(0xf3)](_0x4bd967=>{const _0xae2943=_0xa0d7d7,_0x5a723a=Number(_0x4bd967[_0xae2943(0xf0)]);return _0x5a723a===0x0||_0x5a723a===0x1&&_0x4bd967[_0xae2943(0xf2)]||(_0x4bd967[_0xae2943(0xf5)]?.[_0xae2943(0xf6)]??0x0)>0x0;});}
1
+ export function filterShowMenus(nodes) {
2
+ if (!Array.isArray(nodes) || !nodes.length)
3
+ return [];
4
+ return nodes.filter((n) => n && n.isShow !== false).map((n) => ({
5
+ ...n,
6
+ children: n.children?.length ? filterShowMenus(n.children) : undefined
7
+ })).filter((n) => {
8
+ const t = Number(n.type);
9
+ return t === 0 || t === 1 && n.router || (n.children?.length ?? 0) > 0;
10
+ });
11
+ }
@@ -1 +1 @@
1
- function _0x5456(){var _0x30c64f=['nZK1mJu1u1jWA1zI','nZeYote2mhfpsuLlAq','mtC3m3zpBMr6AG','mZKYmZboCLjNqMu','ode4uhfjwuzy','mtm1odu4z0HOsfDu','nZi4odC5mNDKzu1pCG','mJyWrLj4rNrn','nKjVzMPbDG','mJHWs2Lryum','ode5nteYmu55CMvZzW'];_0x5456=function(){return _0x30c64f;};return _0x5456();}(function(_0x7be91c,_0x4b332e){var _0x9fa1e9=_0x3113,_0x230cf9=_0x7be91c();while(!![]){try{var _0x30af25=-parseInt(_0x9fa1e9(0x1b6))/0x1*(parseInt(_0x9fa1e9(0x1be))/0x2)+-parseInt(_0x9fa1e9(0x1b4))/0x3*(parseInt(_0x9fa1e9(0x1b8))/0x4)+-parseInt(_0x9fa1e9(0x1ba))/0x5+-parseInt(_0x9fa1e9(0x1b7))/0x6*(parseInt(_0x9fa1e9(0x1b5))/0x7)+parseInt(_0x9fa1e9(0x1bb))/0x8+-parseInt(_0x9fa1e9(0x1bc))/0x9*(-parseInt(_0x9fa1e9(0x1bd))/0xa)+parseInt(_0x9fa1e9(0x1b9))/0xb;if(_0x30af25===_0x4b332e)break;else _0x230cf9['push'](_0x230cf9['shift']());}catch(_0x2a1b9c){_0x230cf9['push'](_0x230cf9['shift']());}}}(_0x5456,0xbfbba));function _0x3113(_0x1bd2fd,_0x8a8132){_0x1bd2fd=_0x1bd2fd-0x1b4;var _0x545693=_0x5456();var _0x3113a8=_0x545693[_0x1bd2fd];if(_0x3113['fnZTjA']===undefined){var _0x5e81de=function(_0x50a95b){var _0x456cba='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x489f8c='',_0x2c75df='';for(var _0x2610cf=0x0,_0x2adc42,_0x101498,_0x4abd62=0x0;_0x101498=_0x50a95b['charAt'](_0x4abd62++);~_0x101498&&(_0x2adc42=_0x2610cf%0x4?_0x2adc42*0x40+_0x101498:_0x101498,_0x2610cf++%0x4)?_0x489f8c+=String['fromCharCode'](0xff&_0x2adc42>>(-0x2*_0x2610cf&0x6)):0x0){_0x101498=_0x456cba['indexOf'](_0x101498);}for(var _0x4725f6=0x0,_0x52aa87=_0x489f8c['length'];_0x4725f6<_0x52aa87;_0x4725f6++){_0x2c75df+='%'+('00'+_0x489f8c['charCodeAt'](_0x4725f6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2c75df);};_0x3113['pBzRIm']=_0x5e81de,_0x3113['DJDQIM']={},_0x3113['fnZTjA']=!![];}var _0x2d7afa=_0x545693[0x0],_0x3ed117=_0x1bd2fd+_0x2d7afa,_0x2fa2ed=_0x3113['DJDQIM'][_0x3ed117];return!_0x2fa2ed?(_0x3113a8=_0x3113['pBzRIm'](_0x3113a8),_0x3113['DJDQIM'][_0x3ed117]=_0x3113a8):_0x3113a8=_0x2fa2ed,_0x3113a8;}export{deepTree,flattenTree}from'../../shared/tree';
1
+ export { deepTree, flattenTree } from "../../shared/tree";
@@ -1 +1,88 @@
1
- const _0x17ee75=_0x4aef;(function(_0x444805,_0x644c05){const _0x89d684=_0x4aef,_0xb6e2e1=_0x444805();while(!![]){try{const _0x369d4a=-parseInt(_0x89d684(0x169))/0x1*(-parseInt(_0x89d684(0x134))/0x2)+parseInt(_0x89d684(0x145))/0x3+parseInt(_0x89d684(0x12e))/0x4*(-parseInt(_0x89d684(0x161))/0x5)+parseInt(_0x89d684(0x12f))/0x6+parseInt(_0x89d684(0x14f))/0x7+-parseInt(_0x89d684(0x142))/0x8+parseInt(_0x89d684(0x16a))/0x9*(-parseInt(_0x89d684(0x16d))/0xa);if(_0x369d4a===_0x644c05)break;else _0xb6e2e1['push'](_0xb6e2e1['shift']());}catch(_0x119e3d){_0xb6e2e1['push'](_0xb6e2e1['shift']());}}}(_0x26a5,0x660f3));export const DEFAULT_UPLOAD_RULES=[{'name':'图片','type':'image','color':_0x17ee75(0x13a),'exts':[_0x17ee75(0x13c),_0x17ee75(0x165),_0x17ee75(0x156),_0x17ee75(0x140),'tif',_0x17ee75(0x151),_0x17ee75(0x126),_0x17ee75(0x163)]},{'name':'视频','type':_0x17ee75(0x16f),'color':'#826aec','exts':['avi',_0x17ee75(0x166),_0x17ee75(0x13f),_0x17ee75(0x160),_0x17ee75(0x152),'rm',_0x17ee75(0x121),'swf',_0x17ee75(0x138),'mp4',_0x17ee75(0x141)]},{'name':'音频','type':'audio','color':_0x17ee75(0x120),'exts':[_0x17ee75(0x15c),_0x17ee75(0x137),_0x17ee75(0x147),'mp2',_0x17ee75(0x158),_0x17ee75(0x14e),'ra',_0x17ee75(0x16c),_0x17ee75(0x14c),'cda']},{'name':'文档','type':_0x17ee75(0x157),'color':'#53B7F4','exts':[_0x17ee75(0x124),'docx',_0x17ee75(0x162),_0x17ee75(0x12b),_0x17ee75(0x15a),_0x17ee75(0x149)]},{'name':'表格','type':'excel','color':_0x17ee75(0x14a),'exts':[_0x17ee75(0x133),_0x17ee75(0x14b),_0x17ee75(0x167),_0x17ee75(0x128),_0x17ee75(0x16b),_0x17ee75(0x143)]},{'name':'演示','type':'ppt','color':_0x17ee75(0x168),'exts':[_0x17ee75(0x127),'pptx',_0x17ee75(0x13e),_0x17ee75(0x150),_0x17ee75(0x12c),'pps','potx',_0x17ee75(0x144),_0x17ee75(0x136),_0x17ee75(0x123)]},{'name':'PDF','type':_0x17ee75(0x131),'color':_0x17ee75(0x132),'exts':[_0x17ee75(0x131)]},{'name':_0x17ee75(0x164),'type':_0x17ee75(0x12d),'color':_0x17ee75(0x135),'exts':['rar',_0x17ee75(0x15d),'7z',_0x17ee75(0x148),'gz']},{'name':'文件','type':_0x17ee75(0x15f),'color':_0x17ee75(0x13d),'exts':[]}];export function extname(_0x52eb63=''){const _0x68c922=_0x17ee75,_0x1e80cf=String(_0x52eb63)[_0x68c922(0x11f)]('?')[0x0]?.[_0x68c922(0x14d)](/\.([^.]+)$/);return _0x1e80cf?_0x1e80cf[0x1][_0x68c922(0x154)]():'';}export function filename(_0x348a1b=''){const _0x43d445=_0x17ee75,_0x6a82ec=String(_0x348a1b)['split']('?')[0x0]?.[_0x43d445(0x11f)]('/')[_0x43d445(0x16e)]()||'',_0x1d39a3=extname(_0x6a82ec);return _0x1d39a3?_0x6a82ec[_0x43d445(0x15b)](0x0,-(_0x1d39a3[_0x43d445(0x153)]+0x1)):_0x6a82ec;}export function fileRule(_0x166175,_0x24180a=DEFAULT_UPLOAD_RULES){const _0x52dcf3=_0x17ee75;if(_0x166175?.['includes'](_0x52dcf3(0x122)))return _0x24180a[_0x52dcf3(0x159)](_0x1aff76=>_0x1aff76[_0x52dcf3(0x130)]===_0x52dcf3(0x146));const _0x5f10cb=extname(_0x166175||''),_0x519549=_0x24180a['find'](_0x1f0054=>_0x1f0054[_0x52dcf3(0x125)][_0x52dcf3(0x12a)](_0x5f10cb));return _0x519549||_0x24180a[_0x52dcf3(0x159)](_0x349c6f=>_0x349c6f[_0x52dcf3(0x130)]===_0x52dcf3(0x15f));}export function getFileType(_0x5a6297,_0x1a94b6=DEFAULT_UPLOAD_RULES){const _0x28a275=_0x17ee75;return fileRule(_0x5a6297,_0x1a94b6)[_0x28a275(0x130)];}function _0x26a5(){const _0x362f06=['D29Yza','zMXHyW','zMLUza','zg90Ea','C2XPy2u','BxaZ','EMLW','CMfUzg9T','zMLSzq','BxbLzW','odGXmJCWu1LMC2nV','zg9JBq','D2vICa','5y6l57YP5yYf','ANbN','D212','EgXZBq','i0y1nKm2qW','mJHHt0LSyNi','nZGXmZu5m0XWr1zRza','EgX0Ea','yxbL','mtbnBwX0yNK','Cg9W','DMLKzw8','C3bSAxq','iZGYnMfLyW','CMfT','zgf0ytPPBwfNzs8','zhbZ','zg9J','zxH0CW','C3zN','Chb0','EgX0','BwfW','Aw5JBhvKzxm','zg90','ChbZBq','CMfY','neLwvhbzza','nZe2odC0Ehv4v0vN','DhLWzq','CgrM','iZHMmZuWma','EgXZ','mtm2mJHNzxziq0K','i0zgqZC1nW','zhb0','D2f2','zMX2','DxjS','iZy3qZiZqq','CMvWBgfJzq','yM1W','iZKWotm5oq','Chb0Bq','BxbN','Cg5N','m2DW','mZy1ndi0q2znu1HK','EgX0Bq','Cg90Bq','mtm1otKXogTRv3nIyq','Aw1Hz2u','D21H','DgfY','zg90Bq','iZuZrdm5qW','EgXZEa','ywfJ','Bwf0y2G','BwLKAq','ntiXmtK2ouLPtgfnsq','ChbZEa','z2LM','Bw92','BgvUz3rO','Dg9mB3DLCKnHC2u','zMLSDgvY','ANbLzW'];_0x26a5=function(){return _0x362f06;};return _0x26a5();}export function getUploadRule(_0x56ec3c,_0x1a2106=DEFAULT_UPLOAD_RULES){const _0x4f546a=_0x17ee75;return _0x1a2106[_0x4f546a(0x159)](_0x2517ea=>_0x2517ea[_0x4f546a(0x130)]===_0x56ec3c)||_0x1a2106[_0x1a2106[_0x4f546a(0x153)]-0x1];}export function getUrls(_0x5c9eee){const _0x5169dc=_0x17ee75;return _0x5c9eee[_0x5169dc(0x129)](_0x1a2e3d=>String(_0x1a2e3d[_0x5169dc(0x139)]||'')[_0x5169dc(0x13b)](/,/g,encodeURIComponent(',')));}export function pathJoin(..._0x1917c0){const _0x13e6d7=_0x17ee75;return _0x1917c0[_0x13e6d7(0x129)](_0x4c0f95=>_0x4c0f95[_0x13e6d7(0x13b)](/(^\/+|\/+$)/g,''))[_0x13e6d7(0x155)](Boolean)['join']('/');}function _0x4aef(_0x47c029,_0x289e1c){_0x47c029=_0x47c029-0x11f;const _0x26a5dc=_0x26a5();let _0x4aef6b=_0x26a5dc[_0x47c029];if(_0x4aef['JYWrTy']===undefined){var _0x597555=function(_0x394021){const _0x288f6a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x52eb63='',_0x1e80cf='';for(let _0x348a1b=0x0,_0x6a82ec,_0x1d39a3,_0x166175=0x0;_0x1d39a3=_0x394021['charAt'](_0x166175++);~_0x1d39a3&&(_0x6a82ec=_0x348a1b%0x4?_0x6a82ec*0x40+_0x1d39a3:_0x1d39a3,_0x348a1b++%0x4)?_0x52eb63+=String['fromCharCode'](0xff&_0x6a82ec>>(-0x2*_0x348a1b&0x6)):0x0){_0x1d39a3=_0x288f6a['indexOf'](_0x1d39a3);}for(let _0x24180a=0x0,_0x5f10cb=_0x52eb63['length'];_0x24180a<_0x5f10cb;_0x24180a++){_0x1e80cf+='%'+('00'+_0x52eb63['charCodeAt'](_0x24180a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1e80cf);};_0x4aef['yVVCKa']=_0x597555,_0x4aef['NEKfda']={},_0x4aef['JYWrTy']=!![];}const _0x15ec16=_0x26a5dc[0x0],_0xa605a5=_0x47c029+_0x15ec16,_0x466d9c=_0x4aef['NEKfda'][_0xa605a5];return!_0x466d9c?(_0x4aef6b=_0x4aef['yVVCKa'](_0x4aef6b),_0x4aef['NEKfda'][_0xa605a5]=_0x4aef6b):_0x4aef6b=_0x466d9c,_0x4aef6b;}export function uploadUid(){const _0x3b567e=_0x17ee75;return Date['now']()+'_'+Math[_0x3b567e(0x15e)]()['toString'](0x24)[_0x3b567e(0x15b)](0x2,0x9);}
1
+ export const DEFAULT_UPLOAD_RULES = [
2
+ {
3
+ name: "图片",
4
+ type: "image",
5
+ color: "#67C23A",
6
+ exts: ["bmp", "jpg", "jpeg", "png", "tif", "gif", "svg", "webp"]
7
+ },
8
+ {
9
+ name: "视频",
10
+ type: "video",
11
+ color: "#826aec",
12
+ exts: ["avi", "wmv", "mpg", "mpeg", "mov", "rm", "ram", "swf", "flv", "mp4", "3gp"]
13
+ },
14
+ {
15
+ name: "音频",
16
+ type: "audio",
17
+ color: "#826aec",
18
+ exts: ["mp3", "wav", "wma", "mp2", "flac", "midi", "ra", "ape", "aac", "cda"]
19
+ },
20
+ {
21
+ name: "文档",
22
+ type: "word",
23
+ color: "#53B7F4",
24
+ exts: ["doc", "docx", "docm", "dot", "dotx", "dotm"]
25
+ },
26
+ {
27
+ name: "表格",
28
+ type: "excel",
29
+ color: "#53D39C",
30
+ exts: ["xls", "xlsx", "xlsm", "xlt", "xltx", "xltm"]
31
+ },
32
+ {
33
+ name: "演示",
34
+ type: "ppt",
35
+ color: "#F56C6C",
36
+ exts: ["ppt", "pptx", "pptm", "ppsx", "ppsm", "pps", "potx", "potm", "dpt", "dps"]
37
+ },
38
+ {
39
+ name: "PDF",
40
+ type: "pdf",
41
+ color: "#8f3500",
42
+ exts: ["pdf"]
43
+ },
44
+ {
45
+ name: "压缩包",
46
+ type: "rar",
47
+ color: "#FFC757",
48
+ exts: ["rar", "zip", "7z", "tar", "gz"]
49
+ },
50
+ {
51
+ name: "文件",
52
+ type: "file",
53
+ color: "#909399",
54
+ exts: []
55
+ }
56
+ ];
57
+ export function extname(path = "") {
58
+ const m = String(path).split("?")[0]?.match(/\.([^.]+)$/);
59
+ return m ? m[1].toLowerCase() : "";
60
+ }
61
+ export function filename(path = "") {
62
+ const base = String(path).split("?")[0]?.split("/").pop() || "";
63
+ const ext = extname(base);
64
+ return ext ? base.slice(0, -(ext.length + 1)) : base;
65
+ }
66
+ export function fileRule(path, rules = DEFAULT_UPLOAD_RULES) {
67
+ if (path?.includes("data:image/")) {
68
+ return rules.find((r) => r.type === "image");
69
+ }
70
+ const ext = extname(path || "");
71
+ const hit = rules.find((r) => r.exts.includes(ext));
72
+ return hit || rules.find((r) => r.type === "file");
73
+ }
74
+ export function getFileType(path, rules = DEFAULT_UPLOAD_RULES) {
75
+ return fileRule(path, rules).type;
76
+ }
77
+ export function getUploadRule(type, rules = DEFAULT_UPLOAD_RULES) {
78
+ return rules.find((r) => r.type === type) || rules[rules.length - 1];
79
+ }
80
+ export function getUrls(list) {
81
+ return list.map((e) => String(e.url || "").replace(/,/g, encodeURIComponent(",")));
82
+ }
83
+ export function pathJoin(...parts) {
84
+ return parts.map((p) => p.replace(/(^\/+|\/+$)/g, "")).filter(Boolean).join("/");
85
+ }
86
+ export function uploadUid() {
87
+ return `${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
88
+ }
@@ -1 +1,80 @@
1
- function _0x9fcc(_0x260b1b,_0x1fa994){_0x260b1b=_0x260b1b-0x158;const _0x11195d=_0x1119();let _0x9fccc3=_0x11195d[_0x260b1b];if(_0x9fcc['lMhZRG']===undefined){var _0x132d1e=function(_0x185561){const _0x1afa40='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2525fd='',_0x1f8f14='';for(let _0x33b0d5=0x0,_0x231e6b,_0x2ac7a4,_0x1e97ef=0x0;_0x2ac7a4=_0x185561['charAt'](_0x1e97ef++);~_0x2ac7a4&&(_0x231e6b=_0x33b0d5%0x4?_0x231e6b*0x40+_0x2ac7a4:_0x2ac7a4,_0x33b0d5++%0x4)?_0x2525fd+=String['fromCharCode'](0xff&_0x231e6b>>(-0x2*_0x33b0d5&0x6)):0x0){_0x2ac7a4=_0x1afa40['indexOf'](_0x2ac7a4);}for(let _0xc358bf=0x0,_0x3f99cf=_0x2525fd['length'];_0xc358bf<_0x3f99cf;_0xc358bf++){_0x1f8f14+='%'+('00'+_0x2525fd['charCodeAt'](_0xc358bf)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f8f14);};_0x9fcc['vYBMuy']=_0x132d1e,_0x9fcc['ojyzQV']={},_0x9fcc['lMhZRG']=!![];}const _0x384bc9=_0x11195d[0x0],_0x52765b=_0x260b1b+_0x384bc9,_0x1fb9c7=_0x9fcc['ojyzQV'][_0x52765b];return!_0x1fb9c7?(_0x9fccc3=_0x9fcc['vYBMuy'](_0x9fccc3),_0x9fcc['ojyzQV'][_0x52765b]=_0x9fccc3):_0x9fccc3=_0x1fb9c7,_0x9fccc3;}function _0x1119(){const _0xdc24bc=['CMvZB2X2zq','DMLKzw9izwLNAhq','Bxv0zwq','mZiZmdCZD2ntvw9X','CgXHExnjBMXPBMu','mJe2odiWELnSr0jp','Dw5KzwzPBMvK','ywrKrxzLBNrmAxn0zw5LCG','Dg9eyxrHvvjm','ChjLBg9Hza','zhjHD0LTywDL','C2vLA2vK','mZyWndiWnZbNBuP5tK4','D2LKDgG','y3jLyxrLrwXLBwvUDa','Aw1Hz2uVANbLzW','mtC2sNLyCuni','zxjYB3i','mJbvCwvAswi','DMLKzw8','ntq0ndC5nKDRuw5Mwa','DgHLBG','nda1mtG2zKnxzufm','Bg9HzgvKzgf0yq','y3vYCMvUDfrPBwu','C2v0vgLTzw91Da','odC4nJK2u2PYu3vO','AgvPz2H0','y2XLyxjuAw1LB3v0','nZy4otKXohzqqxLQtW','DMfSDwu','yxv0BW','nxDIthHgDa','C3jJ'];_0x1119=function(){return _0xdc24bc;};return _0x1119();}(function(_0x44ea77,_0x1ab2ff){const _0x407a33=_0x9fcc,_0x395d43=_0x44ea77();while(!![]){try{const _0x4c03ee=-parseInt(_0x407a33(0x177))/0x1+-parseInt(_0x407a33(0x162))/0x2+-parseInt(_0x407a33(0x173))/0x3*(parseInt(_0x407a33(0x16f))/0x4)+-parseInt(_0x407a33(0x15b))/0x5*(parseInt(_0x407a33(0x158))/0x6)+parseInt(_0x407a33(0x171))/0x7+-parseInt(_0x407a33(0x16d))/0x8*(parseInt(_0x407a33(0x160))/0x9)+parseInt(_0x407a33(0x169))/0xa;if(_0x4c03ee===_0x1ab2ff)break;else _0x395d43['push'](_0x395d43['shift']());}catch(_0x5222e8){_0x395d43['push'](_0x395d43['shift']());}}}(_0x1119,0x9e428));import{onUnmounted,ref,watch}from'vue';export const FRAME_CAPTURE_TIMEOUT_MS=0x1f40;export function captureVideoFrame(_0x2525fd){const _0x1b8f9b=_0x9fcc;if(typeof document===_0x1b8f9b(0x163))return Promise[_0x1b8f9b(0x15d)](null);return new Promise(_0x1f8f14=>{const _0x1cc997=_0x1b8f9b,_0x33b0d5=document['createElement'](_0x1cc997(0x170));_0x33b0d5['crossOrigin']='anonymous',_0x33b0d5[_0x1cc997(0x15f)]=!![],_0x33b0d5[_0x1cc997(0x161)]=!![],_0x33b0d5[_0x1cc997(0x166)]=_0x1cc997(0x15a);let _0x231e6b=![];const _0x2ac7a4=_0xc358bf=>{const _0x266e68=_0x1cc997;if(_0x231e6b)return;_0x231e6b=!![],window[_0x266e68(0x179)](_0x1e97ef),_0x33b0d5['removeAttribute'](_0x266e68(0x15c)),_0x33b0d5['load'](),_0x1f8f14(_0xc358bf);},_0x1e97ef=window[_0x1cc997(0x176)](()=>_0x2ac7a4(null),FRAME_CAPTURE_TIMEOUT_MS);_0x33b0d5[_0x1cc997(0x164)](_0x1cc997(0x16e),()=>_0x2ac7a4(null),{'once':!![]}),_0x33b0d5[_0x1cc997(0x164)](_0x1cc997(0x174),()=>{const _0x3d4846=_0x1cc997;try{_0x33b0d5[_0x3d4846(0x175)]=0.01;}catch{_0x2ac7a4(null);}},{'once':!![]}),_0x33b0d5[_0x1cc997(0x164)](_0x1cc997(0x168),()=>{const _0x3c8ee4=_0x1cc997;try{const _0x3f99cf=_0x33b0d5['videoWidth'],_0x2d349f=_0x33b0d5[_0x3c8ee4(0x15e)];if(!_0x3f99cf||!_0x2d349f){_0x2ac7a4(null);return;}const _0x2eb087=document[_0x3c8ee4(0x16b)]('canvas');_0x2eb087[_0x3c8ee4(0x16a)]=_0x3f99cf,_0x2eb087[_0x3c8ee4(0x178)]=_0x2d349f;const _0xbb5cce=_0x2eb087['getContext']('2d');if(!_0xbb5cce){_0x2ac7a4(null);return;}_0xbb5cce[_0x3c8ee4(0x167)](_0x33b0d5,0x0,0x0,_0x3f99cf,_0x2d349f),_0x2ac7a4(_0x2eb087[_0x3c8ee4(0x165)](_0x3c8ee4(0x16c),0.82));}catch{_0x2ac7a4(null);}},{'once':!![]}),_0x33b0d5['src']=_0x2525fd;});}export function useVideoFrame(_0x4a92d9){const _0x2c9f2e=ref(''),_0x328d79=ref(![]);let _0x288c72=0x0;return watch(_0x4a92d9,_0x5b80d0=>{const _0xab1b27=_0x9fcc;_0x288c72+=0x1;const _0x101980=_0x288c72;_0x2c9f2e[_0xab1b27(0x159)]='',_0x328d79[_0xab1b27(0x159)]=![];if(!_0x5b80d0)return;captureVideoFrame(_0x5b80d0)[_0xab1b27(0x172)](_0x51439e=>{const _0x1445f2=_0xab1b27;if(_0x101980!==_0x288c72)return;if(_0x51439e)_0x2c9f2e[_0x1445f2(0x159)]=_0x51439e;else _0x328d79[_0x1445f2(0x159)]=!![];});},{'immediate':!![]}),onUnmounted(()=>{_0x288c72+=0x1;}),{'videoFrameSrc':_0x2c9f2e,'frameFailed':_0x328d79};}
1
+ import { onUnmounted, ref, watch } from "vue";
2
+ export const FRAME_CAPTURE_TIMEOUT_MS = 8000;
3
+ export function captureVideoFrame(url) {
4
+ if (typeof document === "undefined")
5
+ return Promise.resolve(null);
6
+ return new Promise((resolve) => {
7
+ const video = document.createElement("video");
8
+ video.crossOrigin = "anonymous";
9
+ video.muted = true;
10
+ video.playsInline = true;
11
+ video.preload = "auto";
12
+ let settled = false;
13
+ const finish = (value) => {
14
+ if (settled)
15
+ return;
16
+ settled = true;
17
+ window.clearTimeout(timer);
18
+ video.removeAttribute("src");
19
+ video.load();
20
+ resolve(value);
21
+ };
22
+ const timer = window.setTimeout(() => finish(null), FRAME_CAPTURE_TIMEOUT_MS);
23
+ video.addEventListener("error", () => finish(null), { once: true });
24
+ video.addEventListener("loadeddata", () => {
25
+ try {
26
+ video.currentTime = 0.01;
27
+ } catch {
28
+ finish(null);
29
+ }
30
+ }, { once: true });
31
+ video.addEventListener("seeked", () => {
32
+ try {
33
+ const w = video.videoWidth;
34
+ const h = video.videoHeight;
35
+ if (!w || !h) {
36
+ finish(null);
37
+ return;
38
+ }
39
+ const canvas = document.createElement("canvas");
40
+ canvas.width = w;
41
+ canvas.height = h;
42
+ const ctx = canvas.getContext("2d");
43
+ if (!ctx) {
44
+ finish(null);
45
+ return;
46
+ }
47
+ ctx.drawImage(video, 0, 0, w, h);
48
+ finish(canvas.toDataURL("image/jpeg", 0.82));
49
+ } catch {
50
+ finish(null);
51
+ }
52
+ }, { once: true });
53
+ video.src = url;
54
+ });
55
+ }
56
+ export function useVideoFrame(source) {
57
+ const videoFrameSrc = ref("");
58
+ const frameFailed = ref(false);
59
+ let captureToken = 0;
60
+ watch(source, (url) => {
61
+ captureToken += 1;
62
+ const token = captureToken;
63
+ videoFrameSrc.value = "";
64
+ frameFailed.value = false;
65
+ if (!url)
66
+ return;
67
+ captureVideoFrame(url).then((dataUrl) => {
68
+ if (token !== captureToken)
69
+ return;
70
+ if (dataUrl)
71
+ videoFrameSrc.value = dataUrl;
72
+ else
73
+ frameFailed.value = true;
74
+ });
75
+ }, { immediate: true });
76
+ onUnmounted(() => {
77
+ captureToken += 1;
78
+ });
79
+ return { videoFrameSrc, frameFailed };
80
+ }