@yimou6/common-ui 1.12.3 → 1.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/index.cdn.js +15 -15
- package/cdn/index.cdn.js.map +1 -1
- package/cdn/index.cdn.mjs +15 -15
- package/cdn/index.cdn.mjs.map +1 -1
- package/cdn/index.css +1 -1
- package/es/components/image-verification/index.mjs.map +1 -1
- package/es/components/index.d.ts +22 -21
- package/es/components/index.mjs +1 -0
- package/es/components/index.mjs.map +1 -1
- package/es/components/monitor-playback/index.d.ts +573 -0
- package/es/components/monitor-playback/index.mjs +8 -0
- package/es/components/monitor-playback/index.mjs.map +1 -0
- package/es/components/monitor-playback/src/monitor-playback.d.ts +30 -0
- package/es/components/monitor-playback/src/monitor-playback.mjs +44 -0
- package/es/components/monitor-playback/src/monitor-playback.mjs.map +1 -0
- package/es/components/monitor-playback/src/monitor-playback.vue.d.ts +573 -0
- package/es/components/monitor-playback/src/monitor-playback.vue.mjs +6 -0
- package/es/components/monitor-playback/src/monitor-playback.vue.mjs.map +1 -0
- package/es/components/monitor-playback/src/monitor-playback.vue2.mjs +202 -0
- package/es/components/monitor-playback/src/monitor-playback.vue2.mjs.map +1 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs +26 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.mjs.map +1 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs +6 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.mjs.map +1 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs +507 -0
- package/es/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.mjs.map +1 -0
- package/es/components/page-header/src/page-header.d.ts +2 -2
- package/es/components/page-header/src/page-header.mjs.map +1 -1
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs +2 -10
- package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
- package/es/index.mjs +1 -0
- package/es/index.mjs.map +1 -1
- package/es/installer.mjs +2 -0
- package/es/installer.mjs.map +1 -1
- package/global.d.ts +2 -0
- package/lib/components/image-verification/index.js.map +1 -1
- package/lib/components/index.d.ts +22 -21
- package/lib/components/index.js +23 -21
- package/lib/components/index.js.map +1 -1
- package/lib/components/monitor-playback/index.d.ts +573 -0
- package/lib/components/monitor-playback/index.js +13 -0
- package/lib/components/monitor-playback/index.js.map +1 -0
- package/lib/components/monitor-playback/src/monitor-playback.d.ts +30 -0
- package/lib/components/monitor-playback/src/monitor-playback.js +46 -0
- package/lib/components/monitor-playback/src/monitor-playback.js.map +1 -0
- package/lib/components/monitor-playback/src/monitor-playback.vue.d.ts +573 -0
- package/lib/components/monitor-playback/src/monitor-playback.vue.js +10 -0
- package/lib/components/monitor-playback/src/monitor-playback.vue.js.map +1 -0
- package/lib/components/monitor-playback/src/monitor-playback.vue2.js +206 -0
- package/lib/components/monitor-playback/src/monitor-playback.vue2.js.map +1 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.d.ts +25 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js +28 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.js.map +1 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.d.ts +104 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js +10 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue.js.map +1 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js +511 -0
- package/lib/components/monitor-playback/timeline-ruler/src/timeline-ruler.vue2.js.map +1 -0
- package/lib/components/page-header/src/page-header.d.ts +2 -2
- package/lib/components/page-header/src/page-header.js.map +1 -1
- package/lib/components/tzj-player/src/easyPlayer.vue2.js +2 -10
- package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
- package/lib/index.js +27 -25
- package/lib/index.js.map +1 -1
- package/lib/installer.js +6 -4
- package/lib/installer.js.map +1 -1
- package/package.json +1 -1
- package/theme-default/i-monitor-playback.css +1 -0
- package/theme-default/index.css +1 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var vue = require('vue');
|
|
6
|
+
require('../timeline-ruler/src/timeline-ruler.vue.js');
|
|
7
|
+
var monitorPlayback = require('./monitor-playback.js');
|
|
8
|
+
var timelineRuler_vue_vue_type_script_setup_true_lang = require('../timeline-ruler/src/timeline-ruler.vue2.js');
|
|
9
|
+
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
12
|
+
const _hoisted_1 = { class: "replay-page" };
|
|
13
|
+
const _hoisted_2 = { class: "player-wrap" };
|
|
14
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
15
|
+
...{
|
|
16
|
+
name: "IMonitorPlayback"
|
|
17
|
+
},
|
|
18
|
+
__name: "monitor-playback",
|
|
19
|
+
props: monitorPlayback.MonitorPlaybackProps,
|
|
20
|
+
setup(__props) {
|
|
21
|
+
const props = __props;
|
|
22
|
+
const videoRef = vue.ref(null);
|
|
23
|
+
const timelineRef = vue.ref(null);
|
|
24
|
+
const kbpsInfo = vue.ref("-- KB/s");
|
|
25
|
+
const overlayTimeText = vue.ref("2026-05-02 15:02:17");
|
|
26
|
+
let mpegts = null;
|
|
27
|
+
let player = null;
|
|
28
|
+
const currentUrl = vue.ref(
|
|
29
|
+
props.url || "ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc"
|
|
30
|
+
);
|
|
31
|
+
let playTimerId = null;
|
|
32
|
+
function pad(n) {
|
|
33
|
+
return String(n).padStart(2, "0");
|
|
34
|
+
}
|
|
35
|
+
__name(pad, "pad");
|
|
36
|
+
function syncStartTimeToUrl(unixSec) {
|
|
37
|
+
const d = new Date(unixSec * 1e3);
|
|
38
|
+
const val = `${pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())}T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
|
|
39
|
+
currentUrl.value = currentUrl.value.replace(
|
|
40
|
+
/starttime=\d{8}T\d{6}/i,
|
|
41
|
+
`starttime=${val}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
__name(syncStartTimeToUrl, "syncStartTimeToUrl");
|
|
45
|
+
function commitWithTime(sec) {
|
|
46
|
+
syncStartTimeToUrl(sec);
|
|
47
|
+
playStream(currentUrl.value);
|
|
48
|
+
}
|
|
49
|
+
__name(commitWithTime, "commitWithTime");
|
|
50
|
+
function fmtTF(s) {
|
|
51
|
+
const d = new Date(s * 1e3);
|
|
52
|
+
return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
|
53
|
+
}
|
|
54
|
+
__name(fmtTF, "fmtTF");
|
|
55
|
+
function fmtD(s) {
|
|
56
|
+
const d = new Date(s * 1e3);
|
|
57
|
+
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
|
|
58
|
+
}
|
|
59
|
+
__name(fmtD, "fmtD");
|
|
60
|
+
function parseStartTime(url) {
|
|
61
|
+
const m = url.match(/starttime=(\d{8}T\d{6})/i);
|
|
62
|
+
if (m)
|
|
63
|
+
return new Date(
|
|
64
|
+
m[1].replace(
|
|
65
|
+
/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
|
|
66
|
+
"$1-$2-$3T$4:$5:$6"
|
|
67
|
+
)
|
|
68
|
+
);
|
|
69
|
+
const dm = url.match(/duration=(\d+)/i);
|
|
70
|
+
if (dm) return parseInt(dm[1]);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
__name(parseStartTime, "parseStartTime");
|
|
74
|
+
function playStream(url) {
|
|
75
|
+
if (!url) return;
|
|
76
|
+
if (!mpegts || !mpegts.isSupported()) return;
|
|
77
|
+
destroyPlayer();
|
|
78
|
+
const st = parseStartTime(url);
|
|
79
|
+
let dur = 3600;
|
|
80
|
+
const dm = url.match(/duration=(\d+)/i);
|
|
81
|
+
if (dm) dur = parseInt(dm[1]);
|
|
82
|
+
if (st && timelineRef.value) {
|
|
83
|
+
timelineRef.value.initRuler(st, dur);
|
|
84
|
+
}
|
|
85
|
+
player = mpegts.createPlayer(
|
|
86
|
+
{ type: "flv", isLive: false, hasAudio: false, url },
|
|
87
|
+
{
|
|
88
|
+
enableStashBuffer: false,
|
|
89
|
+
stashInitialSize: 128,
|
|
90
|
+
lazyLoadMaxDuration: 1800,
|
|
91
|
+
seekType: "range"
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
player.attachMediaElement(videoRef.value);
|
|
95
|
+
player.on(mpegts.Events.ERROR, () => {
|
|
96
|
+
});
|
|
97
|
+
player.on(mpegts.Events.LOADING_COMPLETE, () => {
|
|
98
|
+
});
|
|
99
|
+
player.on(mpegts.Events.MEDIA_INFO, (_e) => {
|
|
100
|
+
});
|
|
101
|
+
player.on(mpegts.Events.STATISTICS_INFO, (s) => {
|
|
102
|
+
kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;
|
|
103
|
+
});
|
|
104
|
+
player.load();
|
|
105
|
+
videoRef.value.play().catch(() => {
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
__name(playStream, "playStream");
|
|
109
|
+
function destroyPlayer() {
|
|
110
|
+
if (!player) return;
|
|
111
|
+
try {
|
|
112
|
+
player.pause();
|
|
113
|
+
player.unload();
|
|
114
|
+
player.detachMediaElement();
|
|
115
|
+
player.destroy();
|
|
116
|
+
} catch (_e) {
|
|
117
|
+
}
|
|
118
|
+
player = null;
|
|
119
|
+
}
|
|
120
|
+
__name(destroyPlayer, "destroyPlayer");
|
|
121
|
+
function onTimelineSeek(sec) {
|
|
122
|
+
commitWithTime(sec);
|
|
123
|
+
}
|
|
124
|
+
__name(onTimelineSeek, "onTimelineSeek");
|
|
125
|
+
const win = window;
|
|
126
|
+
vue.onMounted(async () => {
|
|
127
|
+
if (typeof window !== "undefined" && !win.mpegts) {
|
|
128
|
+
const script = document.createElement("script");
|
|
129
|
+
script.src = "https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js";
|
|
130
|
+
script.onload = () => {
|
|
131
|
+
mpegts = win.mpegts;
|
|
132
|
+
playStream(currentUrl.value);
|
|
133
|
+
startPlayTimer();
|
|
134
|
+
};
|
|
135
|
+
script.onerror = () => {
|
|
136
|
+
};
|
|
137
|
+
document.head.appendChild(script);
|
|
138
|
+
} else {
|
|
139
|
+
mpegts = win.mpegts;
|
|
140
|
+
playStream(currentUrl.value);
|
|
141
|
+
startPlayTimer();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
function startPlayTimer() {
|
|
145
|
+
playTimerId = setInterval(() => {
|
|
146
|
+
if (!player || !videoRef.value || videoRef.value.paused || !timelineRef.value)
|
|
147
|
+
return;
|
|
148
|
+
const baseMatch = currentUrl.value.match(/starttime=(\d{8}T\d{6})/i);
|
|
149
|
+
if (baseMatch && baseMatch[1]) {
|
|
150
|
+
const base = new Date(
|
|
151
|
+
baseMatch[1].replace(
|
|
152
|
+
/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})/,
|
|
153
|
+
"$1-$2-$3T$4:$5:$6"
|
|
154
|
+
)
|
|
155
|
+
);
|
|
156
|
+
const timeMs = base.getTime() + videoRef.value.currentTime * (videoRef.value.playbackRate || 1) * 1e3;
|
|
157
|
+
timelineRef.value.updateRulerTime(timeMs);
|
|
158
|
+
timelineRef.value.autoFollow();
|
|
159
|
+
overlayTimeText.value = `${fmtD(timeMs / 1e3)} ${fmtTF(timeMs / 1e3)}`;
|
|
160
|
+
}
|
|
161
|
+
}, 250);
|
|
162
|
+
}
|
|
163
|
+
__name(startPlayTimer, "startPlayTimer");
|
|
164
|
+
vue.onBeforeUnmount(() => {
|
|
165
|
+
if (playTimerId) clearInterval(playTimerId);
|
|
166
|
+
destroyPlayer();
|
|
167
|
+
});
|
|
168
|
+
return (_ctx, _cache) => {
|
|
169
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
170
|
+
vue.createCommentVNode(" \u64AD\u653E\u5668 "),
|
|
171
|
+
vue.createElementVNode("div", _hoisted_2, [
|
|
172
|
+
vue.createElementVNode(
|
|
173
|
+
"video",
|
|
174
|
+
{
|
|
175
|
+
id: "player",
|
|
176
|
+
ref_key: "videoRef",
|
|
177
|
+
ref: videoRef,
|
|
178
|
+
muted: "",
|
|
179
|
+
controls: "",
|
|
180
|
+
onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
|
|
181
|
+
}, ["prevent"]))
|
|
182
|
+
},
|
|
183
|
+
null,
|
|
184
|
+
512
|
|
185
|
+
/* NEED_PATCH */
|
|
186
|
+
)
|
|
187
|
+
]),
|
|
188
|
+
vue.createCommentVNode(" \u523B\u5EA6\u5C3A\u65F6\u95F4\u8F74 "),
|
|
189
|
+
vue.createVNode(
|
|
190
|
+
timelineRuler_vue_vue_type_script_setup_true_lang.default,
|
|
191
|
+
{
|
|
192
|
+
ref_key: "timelineRef",
|
|
193
|
+
ref: timelineRef,
|
|
194
|
+
onSeek: onTimelineSeek
|
|
195
|
+
},
|
|
196
|
+
null,
|
|
197
|
+
512
|
|
198
|
+
/* NEED_PATCH */
|
|
199
|
+
)
|
|
200
|
+
]);
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
exports.default = _sfc_main;
|
|
206
|
+
//# sourceMappingURL=monitor-playback.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-playback.vue2.js","sources":["../../../../../../../packages/components/monitor-playback/src/monitor-playback.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport ITimelineRuler from \"../timeline-ruler/src/timeline-ruler.vue\";\nimport { MonitorPlaybackProps } from \"./monitor-playback\";\n\ndefineOptions({\n name: \"IMonitorPlayback\",\n});\n\n// ==================== Props / State ====================\nconst props = defineProps(MonitorPlaybackProps);\n\n// ==================== DOM Refs ====================\nconst videoRef = ref<HTMLVideoElement | null>(null);\nconst timelineRef = ref<InstanceType<typeof ITimelineRuler> | null>(null);\n\n// ==================== UI State ====================\nconst kbpsInfo = ref(\"-- KB/s\");\nconst overlayTimeText = ref(\"2026-05-02 15:02:17\");\n\n// ==================== Player State ====================\nlet mpegts: any = null;\nlet player: any = null;\nconst currentUrl = ref(\n props.url ||\n \"ws://cms.abaixun.com/websocket/0402b0580060f0df/0000000001.flv?starttime=20260502T150217&duration=3600&uuid=s1vwaoh0rse31rpgars33u1d68384buc\",\n);\n\n// Timer ref\nlet playTimerId: ReturnType<typeof setInterval> | null = null;\n\n// ==================== Utils ====================\nfunction pad(n: number) {\n return String(n).padStart(2, \"0\");\n}\n\nfunction syncStartTimeToUrl(unixSec: number) {\n const d = new Date(unixSec * 1000);\n const val = `${\n pad(d.getFullYear()) + pad(d.getMonth() + 1) + pad(d.getDate())\n }T${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n currentUrl.value = currentUrl.value.replace(\n /starttime=\\d{8}T\\d{6}/i,\n `starttime=${val}`,\n );\n}\n\nfunction commitWithTime(sec: number) {\n syncStartTimeToUrl(sec);\n playStream(currentUrl.value);\n}\n\nfunction fmtTF(s: number) {\n const d = new Date(s * 1000);\n return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;\n}\n\nfunction fmtD(s: number) {\n const d = new Date(s * 1000);\n return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\n}\n\n// ==================== Player Functions ====================\nfunction parseStartTime(url: string): Date | number | null {\n const m = url.match(/starttime=(\\d{8}T\\d{6})/i);\n if (m)\n return new Date(\n m[1].replace(\n /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/,\n \"$1-$2-$3T$4:$5:$6\",\n ),\n );\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) return parseInt(dm[1]);\n return null;\n}\n\nfunction playStream(url: string) {\n if (!url) return;\n if (!mpegts || !mpegts.isSupported()) return;\n\n destroyPlayer();\n\n const st = parseStartTime(url);\n let dur = 3600;\n const dm = url.match(/duration=(\\d+)/i);\n if (dm) dur = parseInt(dm[1]);\n\n if (st && timelineRef.value) {\n timelineRef.value.initRuler(st as Date, dur);\n }\n\n player = mpegts.createPlayer(\n { type: \"flv\", isLive: false, hasAudio: false, url },\n {\n enableStashBuffer: false,\n stashInitialSize: 128,\n lazyLoadMaxDuration: 1800,\n seekType: \"range\",\n },\n );\n player.attachMediaElement(videoRef.value!);\n\n player.on(mpegts.Events.ERROR, () => {});\n player.on(mpegts.Events.LOADING_COMPLETE, () => {});\n player.on(mpegts.Events.MEDIA_INFO, (_e: unknown) => {});\n player.on(mpegts.Events.STATISTICS_INFO, (s: any) => {\n kbpsInfo.value = `${Math.round(s.speed / 1024)}KB/s`;\n });\n\n player.load();\n videoRef.value!.play().catch(() => {});\n}\n\nfunction destroyPlayer() {\n if (!player) return;\n try {\n player.pause();\n player.unload();\n player.detachMediaElement();\n player.destroy();\n } catch (_e) {}\n player = null;\n}\n\n/** 时间轴 seek 跳转 */\nfunction onTimelineSeek(sec: number) {\n commitWithTime(sec);\n}\n\n// ==================== Lifecycle ====================\n// mpegts is loaded dynamically via script tag\nconst win = window as any;\nonMounted(async () => {\n // 加载 mpegts.js\n if (typeof window !== \"undefined\" && !win.mpegts) {\n const script = document.createElement(\"script\");\n script.src =\n \"https://cdn.jsdelivr.net/npm/mpegts.js@1.7.3/dist/mpegts.min.js\";\n script.onload = () => {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n };\n script.onerror = () => {};\n document.head.appendChild(script);\n } else {\n mpegts = win.mpegts;\n playStream(currentUrl.value);\n startPlayTimer();\n }\n});\n\n/** 定时同步播放进度到时间轴 */\nfunction startPlayTimer() {\n playTimerId = setInterval(() => {\n if (\n !player ||\n !videoRef.value ||\n videoRef.value.paused ||\n !timelineRef.value\n )\n return;\n const baseMatch = currentUrl.value.match(/starttime=(\\d{8}T\\d{6})/i);\n if (baseMatch && baseMatch[1]) {\n const base = new Date(\n baseMatch[1].replace(\n /^(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/,\n \"$1-$2-$3T$4:$5:$6\",\n ),\n );\n const timeMs =\n base.getTime() +\n videoRef.value!.currentTime *\n (videoRef.value!.playbackRate || 1) *\n 1000;\n timelineRef.value.updateRulerTime(timeMs);\n timelineRef.value.autoFollow();\n\n // 更新叠加时间\n overlayTimeText.value = `${fmtD(timeMs / 1000)} ${fmtTF(timeMs / 1000)}`;\n }\n }, 250);\n}\n\nonBeforeUnmount(() => {\n if (playTimerId) clearInterval(playTimerId);\n destroyPlayer();\n});\n</script>\n\n<template>\n <div class=\"replay-page\">\n <!-- 播放器 -->\n <div class=\"player-wrap\">\n <video id=\"player\" ref=\"videoRef\" muted controls @click.prevent />\n </div>\n\n <!-- 刻度尺时间轴 -->\n <ITimelineRuler ref=\"timelineRef\" @seek=\"onTimelineSeek\" />\n </div>\n</template>\n"],"names":["ref","onMounted","onBeforeUnmount","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_createVNode","ITimelineRuler"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ExtractPropTypes } from "vue";
|
|
2
|
+
import type TimelineRuler from "./timeline-ruler.vue";
|
|
3
|
+
export declare const TimelineRulerProps: {
|
|
4
|
+
startTime: {
|
|
5
|
+
type: DateConstructor;
|
|
6
|
+
default: null;
|
|
7
|
+
};
|
|
8
|
+
duration: {
|
|
9
|
+
type: NumberConstructor;
|
|
10
|
+
default: number;
|
|
11
|
+
};
|
|
12
|
+
currentTimeMs: {
|
|
13
|
+
type: NumberConstructor;
|
|
14
|
+
default: null;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type TimelineRulerPropsType = ExtractPropTypes<typeof TimelineRulerProps>;
|
|
18
|
+
export type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;
|
|
19
|
+
export interface TickCfg {
|
|
20
|
+
iv: number;
|
|
21
|
+
h: number;
|
|
22
|
+
w: number;
|
|
23
|
+
c: string;
|
|
24
|
+
lbl?: boolean;
|
|
25
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const TimelineRulerProps = {
|
|
4
|
+
/**
|
|
5
|
+
* 起始时间(Date 对象)
|
|
6
|
+
*/
|
|
7
|
+
startTime: {
|
|
8
|
+
type: Date,
|
|
9
|
+
default: null
|
|
10
|
+
},
|
|
11
|
+
/**
|
|
12
|
+
* 持续时长(秒)
|
|
13
|
+
*/
|
|
14
|
+
duration: {
|
|
15
|
+
type: Number,
|
|
16
|
+
default: 3600
|
|
17
|
+
},
|
|
18
|
+
/**
|
|
19
|
+
* 当前播放位置(毫秒时间戳),由外部同步
|
|
20
|
+
*/
|
|
21
|
+
currentTimeMs: {
|
|
22
|
+
type: Number,
|
|
23
|
+
default: null
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
exports.TimelineRulerProps = TimelineRulerProps;
|
|
28
|
+
//# sourceMappingURL=timeline-ruler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-ruler.js","sources":["../../../../../../../../packages/components/monitor-playback/timeline-ruler/src/timeline-ruler.ts"],"sourcesContent":["import type { ExtractPropTypes } from \"vue\";\n\nimport type TimelineRuler from \"./timeline-ruler.vue\";\n\nexport const TimelineRulerProps = {\n /**\n * 起始时间(Date 对象)\n */\n startTime: {\n type: Date,\n default: null,\n },\n /**\n * 持续时长(秒)\n */\n duration: {\n type: Number,\n default: 3600,\n },\n /**\n * 当前播放位置(毫秒时间戳),由外部同步\n */\n currentTimeMs: {\n type: Number,\n default: null,\n },\n};\n\nexport type TimelineRulerPropsType = ExtractPropTypes<\n typeof TimelineRulerProps\n>;\nexport type TimelineRulerInstance = InstanceType<typeof TimelineRuler>;\n\n/** 刻度配置项 */\nexport interface TickCfg {\n iv: number;\n h: number;\n w: number;\n c: string;\n lbl?: boolean;\n}\n"],"names":[],"mappings":";;AAIO,MAAM,kBAAqB,GAAA;AAAA;AAAA;AAAA;AAAA,EAIhC,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,IAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA;AAAA;AAEb;;;;"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { TickCfg } from "./timeline-ruler";
|
|
2
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
3
|
+
startTime: {
|
|
4
|
+
type: DateConstructor;
|
|
5
|
+
default: null;
|
|
6
|
+
};
|
|
7
|
+
duration: {
|
|
8
|
+
type: NumberConstructor;
|
|
9
|
+
default: number;
|
|
10
|
+
};
|
|
11
|
+
currentTimeMs: {
|
|
12
|
+
type: NumberConstructor;
|
|
13
|
+
default: null;
|
|
14
|
+
};
|
|
15
|
+
}>, {
|
|
16
|
+
props: import("@vue/shared").LooseRequired<Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
startTime: {
|
|
18
|
+
type: DateConstructor;
|
|
19
|
+
default: null;
|
|
20
|
+
};
|
|
21
|
+
duration: {
|
|
22
|
+
type: NumberConstructor;
|
|
23
|
+
default: number;
|
|
24
|
+
};
|
|
25
|
+
currentTimeMs: {
|
|
26
|
+
type: NumberConstructor;
|
|
27
|
+
default: null;
|
|
28
|
+
};
|
|
29
|
+
}>> & Readonly<{
|
|
30
|
+
onSeek?: ((...args: any[]) => any) | undefined;
|
|
31
|
+
}> & {}>;
|
|
32
|
+
emit: (event: "seek", ...args: any[]) => void;
|
|
33
|
+
canvasRef: import("vue").Ref<HTMLCanvasElement | null, HTMLCanvasElement | null>;
|
|
34
|
+
rulerAreaRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
|
|
35
|
+
recTrackRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
|
|
36
|
+
timeBigHtml: import("vue").Ref<string, string>;
|
|
37
|
+
timeDateText: import("vue").Ref<string, string>;
|
|
38
|
+
tipShow: import("vue").Ref<boolean, boolean>;
|
|
39
|
+
tipText: import("vue").Ref<string, string>;
|
|
40
|
+
tipElProxy: Element | null;
|
|
41
|
+
tipStyle: import("vue").Ref<Record<string, string>, Record<string, string>>;
|
|
42
|
+
zoomTagText: import("vue").Ref<string, string>;
|
|
43
|
+
RH: number;
|
|
44
|
+
BASE_Y: number;
|
|
45
|
+
FRIC: number;
|
|
46
|
+
BASE_TIME: number | null;
|
|
47
|
+
pph: number;
|
|
48
|
+
tPph: number;
|
|
49
|
+
offX: number;
|
|
50
|
+
dragging: boolean;
|
|
51
|
+
dragSX: number;
|
|
52
|
+
dragSO: number;
|
|
53
|
+
vel: number;
|
|
54
|
+
lpX: number;
|
|
55
|
+
lpT: number;
|
|
56
|
+
mX: number;
|
|
57
|
+
mIn: boolean;
|
|
58
|
+
_startTime: Date | null;
|
|
59
|
+
_durationSec: number;
|
|
60
|
+
_currentPlayMs: number | null;
|
|
61
|
+
cvs: HTMLCanvasElement | null;
|
|
62
|
+
cx: CanvasRenderingContext2D | null;
|
|
63
|
+
dpr: number;
|
|
64
|
+
rafId: number | null;
|
|
65
|
+
pad: (n: number) => string;
|
|
66
|
+
fmtT: (s: number) => string;
|
|
67
|
+
fmtTF: (s: number) => string;
|
|
68
|
+
fmtD: (s: number) => string;
|
|
69
|
+
dateToSec: (dt: Date) => number;
|
|
70
|
+
t2x: (t: number) => number;
|
|
71
|
+
x2t: (x: number) => number;
|
|
72
|
+
resize: () => void;
|
|
73
|
+
tCfg: () => Record<string, TickCfg>;
|
|
74
|
+
draw: () => void;
|
|
75
|
+
renderRecSegs: (w?: number) => void;
|
|
76
|
+
loop: () => void;
|
|
77
|
+
gx: (e: MouseEvent | TouchEvent) => number;
|
|
78
|
+
onDown: (e: MouseEvent | TouchEvent) => void;
|
|
79
|
+
onMove: (e: MouseEvent | TouchEvent) => void;
|
|
80
|
+
onUp: () => void;
|
|
81
|
+
initRuler: (startTimeDate: Date, durationSeconds?: number) => void;
|
|
82
|
+
updateRulerTime: (timeMs: number) => void;
|
|
83
|
+
autoFollow: () => void;
|
|
84
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "seek"[], "seek", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
85
|
+
startTime: {
|
|
86
|
+
type: DateConstructor;
|
|
87
|
+
default: null;
|
|
88
|
+
};
|
|
89
|
+
duration: {
|
|
90
|
+
type: NumberConstructor;
|
|
91
|
+
default: number;
|
|
92
|
+
};
|
|
93
|
+
currentTimeMs: {
|
|
94
|
+
type: NumberConstructor;
|
|
95
|
+
default: null;
|
|
96
|
+
};
|
|
97
|
+
}>> & Readonly<{
|
|
98
|
+
onSeek?: ((...args: any[]) => any) | undefined;
|
|
99
|
+
}>, {
|
|
100
|
+
duration: number;
|
|
101
|
+
startTime: Date;
|
|
102
|
+
currentTimeMs: number;
|
|
103
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
104
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var timelineRuler_vue_vue_type_script_setup_true_lang = require('./timeline-ruler.vue2.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.default = timelineRuler_vue_vue_type_script_setup_true_lang.default;
|
|
10
|
+
//# sourceMappingURL=timeline-ruler.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-ruler.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|