sctj-components 1.0.9 → 1.0.11
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/README.md +317 -325
- package/lib/sctj-components.es.js +2367 -3894
- package/lib/sctj-components.umd.js +1 -1
- package/lib/style.css +1 -1
- package/package.json +2 -1
- package/lib/chunks/404-8b5347fb.js +0 -4
- package/lib/chunks/bug-29d5a8c8.js +0 -4
- package/lib/chunks/build-0e8711f7.js +0 -4
- package/lib/chunks/button-abec46ef.js +0 -4
- package/lib/chunks/cascader-328523ba.js +0 -4
- package/lib/chunks/chart-04ef8147.js +0 -4
- package/lib/chunks/checkbox-1238324c.js +0 -4
- package/lib/chunks/clipboard-625a991f.js +0 -4
- package/lib/chunks/code-2f6398b5.js +0 -4
- package/lib/chunks/color-13488c06.js +0 -4
- package/lib/chunks/component-495e49d4.js +0 -4
- package/lib/chunks/dashboard-3a81480c.js +0 -4
- package/lib/chunks/date-c2ef6759.js +0 -4
- package/lib/chunks/date-range-551e4fd6.js +0 -4
- package/lib/chunks/dict-5539087c.js +0 -4
- package/lib/chunks/documentation-8d81c185.js +0 -4
- package/lib/chunks/download-11fa6102.js +0 -4
- package/lib/chunks/drag-2fbf0e89.js +0 -4
- package/lib/chunks/druid-57209587.js +0 -4
- package/lib/chunks/edit-9e3738f0.js +0 -4
- package/lib/chunks/education-7fb0e453.js +0 -4
- package/lib/chunks/email-7477951a.js +0 -4
- package/lib/chunks/example-b8091a8b.js +0 -4
- package/lib/chunks/excel-9e8720a6.js +0 -4
- package/lib/chunks/exit-fullscreen-fe7ec08b.js +0 -4
- package/lib/chunks/eye-1a093b92.js +0 -4
- package/lib/chunks/eye-open-312c146f.js +0 -4
- package/lib/chunks/form-54837ed4.js +0 -4
- package/lib/chunks/fullscreen-552cc3b4.js +0 -4
- package/lib/chunks/github-0539cc3d.js +0 -4
- package/lib/chunks/guide-407e9748.js +0 -4
- package/lib/chunks/icon-83dfff61.js +0 -4
- package/lib/chunks/input-de62ab83.js +0 -4
- package/lib/chunks/international-7bb87f29.js +0 -4
- package/lib/chunks/job-e78e9a3d.js +0 -4
- package/lib/chunks/language-8b7629d9.js +0 -4
- package/lib/chunks/link-f264a825.js +0 -4
- package/lib/chunks/list-2e431778.js +0 -4
- package/lib/chunks/lock-5e8f10d7.js +0 -4
- package/lib/chunks/log-80bfb029.js +0 -4
- package/lib/chunks/logininfor-47a5f04e.js +0 -4
- package/lib/chunks/message-06f1d593.js +0 -4
- package/lib/chunks/money-14039a58.js +0 -4
- package/lib/chunks/monitor-b020306f.js +0 -4
- package/lib/chunks/nested-13647a6a.js +0 -4
- package/lib/chunks/number-290265fd.js +0 -4
- package/lib/chunks/online-64589b70.js +0 -4
- package/lib/chunks/password-1192ad67.js +0 -4
- package/lib/chunks/pdf-8176f032.js +0 -4
- package/lib/chunks/people-6e6b61b6.js +0 -4
- package/lib/chunks/peoples-35c96c5c.js +0 -4
- package/lib/chunks/phone-6bc01ca6.js +0 -4
- package/lib/chunks/post-0d01cf1a.js +0 -4
- package/lib/chunks/qq-df2843d2.js +0 -4
- package/lib/chunks/question-c1e9a4e7.js +0 -4
- package/lib/chunks/radio-5c66d676.js +0 -4
- package/lib/chunks/rate-eb858d5b.js +0 -4
- package/lib/chunks/redis-788c8d4f.js +0 -4
- package/lib/chunks/redis-list-6792700e.js +0 -4
- package/lib/chunks/row-d431ba9c.js +0 -4
- package/lib/chunks/search-990fe622.js +0 -4
- package/lib/chunks/select-1d794732.js +0 -4
- package/lib/chunks/server-b0c98c01.js +0 -4
- package/lib/chunks/shopping-2a187e37.js +0 -4
- package/lib/chunks/sip-0.13.6.min-53cd1379.js +0 -5546
- package/lib/chunks/size-e3f93f23.js +0 -4
- package/lib/chunks/skill-abe26c0c.js +0 -4
- package/lib/chunks/slider-cb3330ba.js +0 -4
- package/lib/chunks/star-5182766b.js +0 -4
- package/lib/chunks/swagger-266c9f25.js +0 -4
- package/lib/chunks/switch-74aa5d5b.js +0 -4
- package/lib/chunks/system-943da249.js +0 -4
- package/lib/chunks/tab-9202c247.js +0 -4
- package/lib/chunks/table-2d14e126.js +0 -4
- package/lib/chunks/textarea-4d9d0b2c.js +0 -4
- package/lib/chunks/theme-7bbe2d45.js +0 -4
- package/lib/chunks/time-f08907ac.js +0 -4
- package/lib/chunks/time-range-e7b40483.js +0 -4
- package/lib/chunks/tool-6f22c373.js +0 -4
- package/lib/chunks/tree-0118a113.js +0 -4
- package/lib/chunks/tree-table-54984188.js +0 -4
- package/lib/chunks/upload-e852b478.js +0 -4
- package/lib/chunks/user-82704b02.js +0 -4
- package/lib/chunks/validCode-ba29b5b3.js +0 -4
- package/lib/chunks/wechat-22f119d5.js +0 -4
- package/lib/chunks/zip-c3a63b61.js +0 -4
- package/public/hkPlayerPlugin/h5player.min.js +0 -1
- package/public/hkPlayerPlugin/playctrl1/DecodeWorker.js +0 -705
- package/public/hkPlayerPlugin/playctrl1/Decoder.js +0 -171
- package/public/hkPlayerPlugin/playctrl1simd/DecodeWorker.js +0 -705
- package/public/hkPlayerPlugin/playctrl1simd/Decoder.js +0 -171
- package/public/hkPlayerPlugin/playctrl2/Decoder.js +0 -21
- package/public/hkPlayerPlugin/playctrl2/Decoder.wasm +0 -0
- package/public/hkPlayerPlugin/playctrl2/Decoder.worker.js +0 -1
- package/public/hkPlayerPlugin/playctrl3/Decoder.js +0 -21
- package/public/hkPlayerPlugin/playctrl3/Decoder.wasm +0 -0
- package/public/hkPlayerPlugin/playctrl3/Decoder.worker.js +0 -1
- package/public/hkPlayerPlugin/talk/AudioInterCom.js +0 -21
- package/public/hkPlayerPlugin/talk/AudioInterCom.wasm +0 -0
- package/public/hkPlayerPlugin/talkW/AudioInterCom.js +0 -21
- package/public/hkPlayerPlugin/talkW/AudioInterCom.wasm +0 -0
- package/public/hkPlayerPlugin/talkW/AudioInterCom.worker.js +0 -1
- package/public/hkPlayerPlugin/transform/libSystemTransform.js +0 -6589
- package/public/hkPlayerPlugin/transform/libSystemTransform.wasm +0 -0
- package/public/hkPlayerPlugin/transform/systemTransform-worker.js +0 -126
package/README.md
CHANGED
|
@@ -26,14 +26,8 @@ npm install vue@^3.2.0 element-plus@^2.2.0 @element-plus/icons-vue@^2.0.0
|
|
|
26
26
|
# 使用图表组件时
|
|
27
27
|
npm install echarts@^5.0.0
|
|
28
28
|
|
|
29
|
-
# 使用 3D/BIM 组件时
|
|
30
|
-
npm install three@^0.150.0
|
|
31
|
-
|
|
32
29
|
# 使用地图组件时
|
|
33
30
|
npm install @amap/amap-jsapi-loader@^1.0.0
|
|
34
|
-
|
|
35
|
-
# 使用 SCTJYsyPlayer 萤石云播放器组件时
|
|
36
|
-
npm install ezuikit-js@^8.1.0
|
|
37
31
|
```
|
|
38
32
|
|
|
39
33
|
### 第二步:引入组件库
|
|
@@ -74,8 +68,7 @@ import { SCTJDictTag, SCTJTable, SCTJSearch } from 'sctj-components'
|
|
|
74
68
|
```vue
|
|
75
69
|
<template>
|
|
76
70
|
<SCTJDictTag :options="dictOptions" :value="status" />
|
|
77
|
-
<sctj-
|
|
78
|
-
<sctj-search :visible="visible" />
|
|
71
|
+
<sctj-search v-model:visible="showSearch" />
|
|
79
72
|
</template>
|
|
80
73
|
```
|
|
81
74
|
|
|
@@ -83,47 +76,43 @@ import { SCTJDictTag, SCTJTable, SCTJSearch } from 'sctj-components'
|
|
|
83
76
|
|
|
84
77
|
### 基础组件
|
|
85
78
|
- `SCTJDictTag` - 字典标签
|
|
86
|
-
- `
|
|
87
|
-
- `SCTJSvgIcon` - SVG 图标组件
|
|
79
|
+
- `SCTJIcon` - SVG 图标组件
|
|
88
80
|
|
|
89
81
|
### 表单组件
|
|
90
82
|
- `SCTJFileUpload` - 文件上传
|
|
91
83
|
- `SCTJImageUpload` - 图片上传
|
|
92
84
|
- `SCTJImagePreview` - 图片预览
|
|
93
85
|
- `SCTJIconSelect` - 图标选择器
|
|
94
|
-
- `SCTJSearch` - 搜索组件
|
|
95
86
|
- `SCTJDateRangePicker` - 日期范围选择器
|
|
87
|
+
- `SCTJTreeSelect` - 树形选择器
|
|
96
88
|
|
|
97
89
|
### 表格组件
|
|
98
90
|
- `SCTJTable` - 表格组件
|
|
99
|
-
- `SCTJTableContainer` - 表格容器(布局组件)
|
|
100
|
-
- `SCTJTablePageContainer` - 表格页面容器
|
|
101
|
-
- `SCTJTableTopActionContainer` - 表格顶部操作容器
|
|
102
91
|
- `SCTJRightToolbar` - 右侧工具栏
|
|
103
92
|
|
|
104
93
|
### 布局组件
|
|
105
94
|
- `SCTJBtnContainer` - 按钮容器
|
|
95
|
+
- `SCTJSearch` - 搜索容器
|
|
96
|
+
- `SCTJTablePageContainer` - 表格页面容器
|
|
106
97
|
|
|
107
98
|
### 图表组件
|
|
108
99
|
- `SCTJBaseChart` - 基础图表
|
|
109
|
-
- `SCTJCommonChart` - 通用图表
|
|
110
|
-
- `SCTJPieChart` - 饼图
|
|
100
|
+
- `SCTJCommonChart` - 通用图表(支持柱图、折线图)
|
|
101
|
+
- `SCTJPieChart` - 饼图(支持饼图、环形图、玫瑰图)
|
|
111
102
|
|
|
112
103
|
### 播放器组件
|
|
113
104
|
- `SCTJFlvPlayer` - FLV 播放器
|
|
114
|
-
|
|
115
|
-
- `SCTJHelmetPlayer` - 头盔播放器
|
|
116
|
-
- `SCTJYsyPlayer` - 萤石云播放器
|
|
105
|
+
|
|
117
106
|
|
|
118
107
|
### 其他组件
|
|
119
108
|
- `SCTJIframe` - iframe 组件
|
|
120
109
|
- `SCTJImportDialog` - 导入对话框
|
|
121
|
-
- `SCTJDialogTable` -
|
|
110
|
+
- `SCTJDialogTable` - 弹窗表格(支持弹窗选择)
|
|
122
111
|
|
|
123
112
|
### 地图组件
|
|
124
|
-
- `SCTJMapViewer` - 地图查看器
|
|
125
|
-
- `SCTJMapDrawingDialog` - 地图绘制对话框
|
|
126
|
-
- `SCTJBusinessMapDrawingDialog` - 业务地图绘制对话框
|
|
113
|
+
- `SCTJMapViewer` - 地图查看器(基于高德地图)
|
|
114
|
+
- `SCTJMapDrawingDialog` - 地图绘制对话框(基于高德地图)
|
|
115
|
+
- `SCTJBusinessMapDrawingDialog` - 业务地图绘制对话框(基于高德地图)
|
|
127
116
|
|
|
128
117
|
### Bim组件
|
|
129
118
|
- `SCTJBimViewer` - Bim 查看器
|
|
@@ -186,6 +175,7 @@ const treeData = [
|
|
|
186
175
|
:request="fetchTableData"
|
|
187
176
|
:request-params="queryParams"
|
|
188
177
|
row-key="id"
|
|
178
|
+
height='100%'
|
|
189
179
|
:show-select="true"
|
|
190
180
|
:show-index="true"
|
|
191
181
|
@selection-change="handleSelectionChange"
|
|
@@ -221,7 +211,7 @@ const handleSelectionChange = (selection) => {
|
|
|
221
211
|
</script>
|
|
222
212
|
```
|
|
223
213
|
|
|
224
|
-
### SCTJSearch
|
|
214
|
+
### SCTJSearch 搜索容器
|
|
225
215
|
|
|
226
216
|
```vue
|
|
227
217
|
<template>
|
|
@@ -275,146 +265,6 @@ const handleDateChange = (val) => {
|
|
|
275
265
|
</script>
|
|
276
266
|
```
|
|
277
267
|
|
|
278
|
-
### SCTJH5hkPlayer 海康播放器
|
|
279
|
-
|
|
280
|
-
> ⚠️ **前置准备**:使用此组件前,需要拷贝静态资源:
|
|
281
|
-
> 1. 从 `node_modules/sctj-components/public/hkPlayerPlugin/` 目录(及其所有文件)拷贝到宿主项目的 `public/` 根目录
|
|
282
|
-
> 2. 在宿主 `index.html` 中添加:`<script src="/hkPlayerPlugin/h5player.min.js" type="application/javascript"></script>`
|
|
283
|
-
|
|
284
|
-
```vue
|
|
285
|
-
<template>
|
|
286
|
-
<SCTJH5hkPlayer
|
|
287
|
-
:device-serial="deviceSerial"
|
|
288
|
-
:channel-no="channelNo"
|
|
289
|
-
:device-name="deviceName"
|
|
290
|
-
:channel-name="channelName"
|
|
291
|
-
:get-live-address="getLiveAddress"
|
|
292
|
-
:get-replay-address="getReplayAddress"
|
|
293
|
-
:download-certificate="downloadCertificate"
|
|
294
|
-
/>
|
|
295
|
-
</template>
|
|
296
|
-
|
|
297
|
-
<script setup>
|
|
298
|
-
import { ref } from 'vue'
|
|
299
|
-
import { SCTJH5hkPlayer } from 'sctj-components'
|
|
300
|
-
|
|
301
|
-
const deviceSerial = ref('your-device-serial')
|
|
302
|
-
const channelNo = ref('1')
|
|
303
|
-
const deviceName = ref('摄像头名称')
|
|
304
|
-
const channelName = ref('通道名称')
|
|
305
|
-
|
|
306
|
-
// 获取实时播放地址的函数,需要返回 Promise<{ code: number, data: { url: string }, msg?: string }>
|
|
307
|
-
const getLiveAddress = async (params) => {
|
|
308
|
-
const response = await fetch('/api/camera/live', {
|
|
309
|
-
method: 'POST',
|
|
310
|
-
body: JSON.stringify(params)
|
|
311
|
-
})
|
|
312
|
-
return await response.json()
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// 获取回放地址的函数,需要返回 Promise<{ code: number, data: { url: string }, msg?: string }>
|
|
316
|
-
const getReplayAddress = async (params) => {
|
|
317
|
-
const response = await fetch('/api/camera/replay', {
|
|
318
|
-
method: 'POST',
|
|
319
|
-
body: JSON.stringify(params)
|
|
320
|
-
})
|
|
321
|
-
return await response.json()
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// 下载证书的函数,需要返回 Promise
|
|
325
|
-
const downloadCertificate = async (deviceSerial) => {
|
|
326
|
-
const response = await fetch(`/api/camera/certificate/${deviceSerial}`, {
|
|
327
|
-
method: 'GET'
|
|
328
|
-
})
|
|
329
|
-
return await response.blob()
|
|
330
|
-
}
|
|
331
|
-
</script>
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### SCTJHelmetPlayer 头盔播放器
|
|
335
|
-
|
|
336
|
-
```vue
|
|
337
|
-
<template>
|
|
338
|
-
<SCTJHelmetPlayer
|
|
339
|
-
:device-id="deviceId"
|
|
340
|
-
:call-api="callApi"
|
|
341
|
-
:handle-streaming-api="handleStreamingApi"
|
|
342
|
-
:query-admin-sip-info-api="queryAdminSipInfoApi"
|
|
343
|
-
/>
|
|
344
|
-
</template>
|
|
345
|
-
|
|
346
|
-
<script setup>
|
|
347
|
-
import { ref } from 'vue'
|
|
348
|
-
import { SCTJHelmetPlayer } from 'sctj-components'
|
|
349
|
-
|
|
350
|
-
const deviceId = ref('your-device-id')
|
|
351
|
-
|
|
352
|
-
// 发起通话的 API 函数,需要返回 Promise<{ status: boolean, sip_id?: string, msg?: string }>
|
|
353
|
-
// 参数: { deviceId: string, v_type: number }
|
|
354
|
-
const callApi = async (params) => {
|
|
355
|
-
const response = await fetch('/api/helmet/call', {
|
|
356
|
-
method: 'POST',
|
|
357
|
-
body: JSON.stringify(params)
|
|
358
|
-
})
|
|
359
|
-
return await response.json()
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// 处理流媒体的 API 函数,需要返回 Promise<any>
|
|
363
|
-
// 参数: { deviceId: string, isPush: number } (isPush: 1-开启, 0-停止)
|
|
364
|
-
const handleStreamingApi = async (params) => {
|
|
365
|
-
const response = await fetch('/api/helmet/streaming', {
|
|
366
|
-
method: 'POST',
|
|
367
|
-
body: JSON.stringify(params)
|
|
368
|
-
})
|
|
369
|
-
return await response.json()
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// 获取管理员 SIP 信息的 API 函数,需要返回 Promise<{ status: boolean, admin_info: { sip_info: any }, msg?: string }>
|
|
373
|
-
const queryAdminSipInfoApi = async () => {
|
|
374
|
-
const response = await fetch('/api/helmet/sip-info')
|
|
375
|
-
return await response.json()
|
|
376
|
-
}
|
|
377
|
-
</script>
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
### SCTJYsyPlayer 萤石云播放器
|
|
381
|
-
|
|
382
|
-
> ⚠️ **前置准备**:使用此组件前,需要安装依赖:
|
|
383
|
-
> ```bash
|
|
384
|
-
> npm install ezuikit-js@^8.1.0
|
|
385
|
-
> ```
|
|
386
|
-
|
|
387
|
-
```vue
|
|
388
|
-
<template>
|
|
389
|
-
<SCTJYsyPlayer
|
|
390
|
-
:device-serial="deviceSerial"
|
|
391
|
-
:channel-no="channelNo"
|
|
392
|
-
:play-type="playType"
|
|
393
|
-
:start-time="startTime"
|
|
394
|
-
:end-time="endTime"
|
|
395
|
-
:get-ys-token="getYsToken"
|
|
396
|
-
/>
|
|
397
|
-
</template>
|
|
398
|
-
|
|
399
|
-
<script setup>
|
|
400
|
-
import { ref } from 'vue'
|
|
401
|
-
import { SCTJYsyPlayer } from 'sctj-components'
|
|
402
|
-
|
|
403
|
-
const deviceSerial = ref('your-device-serial')
|
|
404
|
-
const channelNo = ref(1)
|
|
405
|
-
const playType = ref(0) // 0-直播, 1-回放
|
|
406
|
-
const startTime = ref('2023-01-01 12:00:00')
|
|
407
|
-
const endTime = ref('2023-01-01 13:00:00')
|
|
408
|
-
|
|
409
|
-
// 获取 Token 的函数,需要返回 Promise<{ code: number, data: { accessToken: string, expireTime: number }, msg?: string }>
|
|
410
|
-
const getYsToken = async () => {
|
|
411
|
-
const response = await fetch('/api/threeController/getYsToken', {
|
|
412
|
-
method: 'GET'
|
|
413
|
-
})
|
|
414
|
-
return await response.json()
|
|
415
|
-
}
|
|
416
|
-
</script>
|
|
417
|
-
```
|
|
418
268
|
|
|
419
269
|
### SCTJFileUpload 文件上传
|
|
420
270
|
|
|
@@ -453,7 +303,12 @@ const customUpload = async (options) => {
|
|
|
453
303
|
method: 'POST',
|
|
454
304
|
body: formData
|
|
455
305
|
})
|
|
456
|
-
|
|
306
|
+
options.onSuccess({
|
|
307
|
+
code:response.code,
|
|
308
|
+
fileName:response.name,
|
|
309
|
+
url:response.url,
|
|
310
|
+
msg:response.msg
|
|
311
|
+
});
|
|
457
312
|
}
|
|
458
313
|
|
|
459
314
|
const handleUploadSuccess = (response) => {
|
|
@@ -536,65 +391,19 @@ const handleIconSelected = (iconName) => {
|
|
|
536
391
|
</script>
|
|
537
392
|
```
|
|
538
393
|
|
|
539
|
-
###
|
|
394
|
+
### SCTJIcon SVG 图标
|
|
540
395
|
|
|
541
396
|
```vue
|
|
542
397
|
<template>
|
|
543
|
-
<
|
|
398
|
+
<SCTJIcon icon-class="user" :color="'#409EFF'" />
|
|
544
399
|
</template>
|
|
545
400
|
|
|
546
401
|
<script setup>
|
|
547
|
-
import {
|
|
402
|
+
import { SCTJIcon } from 'sctj-components'
|
|
548
403
|
</script>
|
|
549
404
|
```
|
|
550
405
|
|
|
551
|
-
### SCTJTableContainer 表格容器
|
|
552
|
-
|
|
553
|
-
```vue
|
|
554
|
-
<template>
|
|
555
|
-
<SCTJTableContainer>
|
|
556
|
-
<SCTJTableTopActionContainer
|
|
557
|
-
v-model:show-search="showSearch"
|
|
558
|
-
:show-refresh="true"
|
|
559
|
-
@refresh="handleRefresh"
|
|
560
|
-
>
|
|
561
|
-
<template #left>
|
|
562
|
-
<el-button type="primary" @click="handleAdd">新增</el-button>
|
|
563
|
-
</template>
|
|
564
|
-
</SCTJTableTopActionContainer>
|
|
565
|
-
|
|
566
|
-
<SCTJSearch v-model:visible="showSearch">
|
|
567
|
-
<!-- 搜索表单内容 -->
|
|
568
|
-
</SCTJSearch>
|
|
569
|
-
|
|
570
|
-
<SCTJTable :request="fetchData" />
|
|
571
|
-
</SCTJTableContainer>
|
|
572
|
-
</template>
|
|
573
|
-
|
|
574
|
-
<script setup>
|
|
575
|
-
import { ref } from 'vue'
|
|
576
|
-
import {
|
|
577
|
-
SCTJTableContainer,
|
|
578
|
-
SCTJTableTopActionContainer,
|
|
579
|
-
SCTJSearch,
|
|
580
|
-
SCTJTable
|
|
581
|
-
} from 'sctj-components'
|
|
582
|
-
|
|
583
|
-
const showSearch = ref(true)
|
|
584
406
|
|
|
585
|
-
const handleRefresh = () => {
|
|
586
|
-
// 刷新表格数据
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
const handleAdd = () => {
|
|
590
|
-
// 新增逻辑
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
const fetchData = async (params) => {
|
|
594
|
-
// 获取表格数据
|
|
595
|
-
}
|
|
596
|
-
</script>
|
|
597
|
-
```
|
|
598
407
|
|
|
599
408
|
### SCTJRightToolbar 右侧工具栏
|
|
600
409
|
|
|
@@ -699,7 +508,7 @@ const seriesConfig = ref([
|
|
|
699
508
|
{
|
|
700
509
|
name: '销售额',
|
|
701
510
|
type: 'bar',
|
|
702
|
-
|
|
511
|
+
prop: 'value'
|
|
703
512
|
}
|
|
704
513
|
])
|
|
705
514
|
</script>
|
|
@@ -793,6 +602,10 @@ const handleContextMenuClick = (key) => {
|
|
|
793
602
|
|
|
794
603
|
### SCTJDwgViewer DWG 查看器
|
|
795
604
|
|
|
605
|
+
> ⚠️ **前置准备**:使用此组件前,需要拷贝静态资源:
|
|
606
|
+
> 1. 从 `node_modules/sctj-components/public/BimfaceSDKLoader@latest-release.js` 文件拷贝到宿主项目的 `public/` 根目录
|
|
607
|
+
> 2. 在宿主 `index.html` 中添加:`<script src="/BimfaceSDKLoader@latest-release.js" type="application/javascript" charset="utf-8"></script>`
|
|
608
|
+
|
|
796
609
|
```vue
|
|
797
610
|
<template>
|
|
798
611
|
<SCTJDwgViewer
|
|
@@ -843,27 +656,36 @@ const iframeUrl = ref('https://example.com')
|
|
|
843
656
|
|
|
844
657
|
```vue
|
|
845
658
|
<template>
|
|
846
|
-
<el-button @click="
|
|
659
|
+
<el-button @click="handleImport">导入数据</el-button>
|
|
847
660
|
<SCTJImportDialog
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
:show-check-box="true"
|
|
854
|
-
@success="handleImportSuccess"
|
|
855
|
-
/>
|
|
661
|
+
:headers="{ Authorization: 'Bearer ' + getToken() }"
|
|
662
|
+
@loadSucccess="refreshTable"
|
|
663
|
+
v-bind="importConfig"
|
|
664
|
+
ref="importDialogRef"
|
|
665
|
+
/>
|
|
856
666
|
</template>
|
|
857
667
|
|
|
858
668
|
<script setup>
|
|
669
|
+
import {getToken} from "@/utils/auth";
|
|
859
670
|
import { ref } from 'vue'
|
|
860
671
|
import { SCTJImportDialog } from 'sctj-components'
|
|
861
672
|
|
|
862
|
-
const
|
|
673
|
+
const importConfig = reactive({
|
|
674
|
+
templateTitle: '作业设备工作区域模板',
|
|
675
|
+
templateUrl: `${import.meta.env.VITE_APP_BASE_API}/business/deviceWorkArea/importTemplate`,
|
|
676
|
+
uploadUrl: `${import.meta.env.VITE_APP_BASE_API}/business/deviceWorkArea/importData`,
|
|
677
|
+
showCheckBox: false,
|
|
678
|
+
title: "作业设备工作区域信息"
|
|
679
|
+
})
|
|
680
|
+
const refreshTable=()=>{
|
|
681
|
+
//导入成功后要做什么...
|
|
682
|
+
}
|
|
863
683
|
|
|
864
|
-
const
|
|
865
|
-
|
|
866
|
-
|
|
684
|
+
const importDialogRef = ref(null)
|
|
685
|
+
|
|
686
|
+
// 导入
|
|
687
|
+
const handleImport = () => {
|
|
688
|
+
importDialogRef.value?.init()
|
|
867
689
|
}
|
|
868
690
|
</script>
|
|
869
691
|
```
|
|
@@ -872,77 +694,117 @@ const handleImportSuccess = (response) => {
|
|
|
872
694
|
|
|
873
695
|
```vue
|
|
874
696
|
<template>
|
|
875
|
-
<el-button @click="
|
|
697
|
+
<el-button @click="open">选择数据</el-button>
|
|
876
698
|
<SCTJDialogTable
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
699
|
+
v-model:select="addCarForm.vehicleManageList"
|
|
700
|
+
v-modal:value="addCarForm.vehicleManageListIds"
|
|
701
|
+
v-modal:names="addCarForm.vehicleManageListNames"
|
|
702
|
+
@change="selectChange"
|
|
703
|
+
:tableColumns="columns"
|
|
704
|
+
ref="addDialogTableRef"
|
|
705
|
+
:request="getList"
|
|
706
|
+
:selectOptions="{
|
|
707
|
+
show: true,//开启选择模式
|
|
708
|
+
multiple: true,// 是否复选
|
|
709
|
+
valueKey: 'id',// 要提取对象的值prop
|
|
710
|
+
nameKey:'licensePlate',// 要提取对象的中文prop
|
|
711
|
+
reserveSelection: true,// 是否翻页记忆
|
|
712
|
+
}"
|
|
713
|
+
/>
|
|
890
714
|
</template>
|
|
891
715
|
|
|
892
716
|
<script setup>
|
|
893
717
|
import { ref } from 'vue'
|
|
718
|
+
import {getList} from "@/api/baseModule";
|
|
894
719
|
import { SCTJDialogTable } from 'sctj-components'
|
|
895
720
|
|
|
896
|
-
const
|
|
721
|
+
const addDialogTableRef = ref(null)
|
|
897
722
|
|
|
898
|
-
const
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
const queryColumns = ref([
|
|
905
|
-
{
|
|
906
|
-
prop: 'name',
|
|
907
|
-
label: '姓名',
|
|
908
|
-
query: {
|
|
909
|
-
type: 'input',
|
|
910
|
-
queryKey: 'name',
|
|
911
|
-
placeholder: '请输入姓名'
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
])
|
|
723
|
+
const addCarForm = reactive({
|
|
724
|
+
projectId: '',
|
|
725
|
+
vehicleManageList: [],
|
|
726
|
+
vehicleManageListIds:'',
|
|
727
|
+
vehicleManageListNames:''
|
|
728
|
+
})
|
|
915
729
|
|
|
916
|
-
const
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
730
|
+
const columns = ref([
|
|
731
|
+
{
|
|
732
|
+
label: '车牌号',
|
|
733
|
+
prop: 'licensePlate',
|
|
734
|
+
minWidth: 170,
|
|
735
|
+
query: {
|
|
736
|
+
type: 'input',
|
|
737
|
+
placeholder: '请输入车牌号'
|
|
738
|
+
}
|
|
739
|
+
},
|
|
740
|
+
{
|
|
741
|
+
label: '设备类型',
|
|
742
|
+
prop: 'vehicleType',
|
|
743
|
+
minWidth: 80,
|
|
744
|
+
dict: dz_work_device_type.value,// 字典数据源
|
|
745
|
+
query: {
|
|
746
|
+
type: 'select',//查询组件
|
|
747
|
+
placeholder: '请选择设备类型',
|
|
748
|
+
queryKey:"vehicleType",//查询字段
|
|
749
|
+
data: dz_work_device_type.value//下拉选择数据源
|
|
750
|
+
}
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
label: '所属项目',
|
|
754
|
+
prop: 'projectName',
|
|
755
|
+
minWidth: 170,
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
label: '所属工区',
|
|
759
|
+
prop: 'areaName',
|
|
760
|
+
minWidth: 170,
|
|
761
|
+
},
|
|
762
|
+
{
|
|
763
|
+
label: '入场时间',
|
|
764
|
+
prop: 'entryTime',
|
|
765
|
+
minWidth: 170,
|
|
766
|
+
}
|
|
767
|
+
])
|
|
768
|
+
// 打开选择弹窗
|
|
769
|
+
const open = async (row) => {
|
|
770
|
+
addDialogTableRef.value?.open({
|
|
771
|
+
title: '选择数据',
|
|
772
|
+
open: true,
|
|
773
|
+
}, {projectId: row.projectId})
|
|
922
774
|
}
|
|
923
775
|
|
|
924
|
-
|
|
776
|
+
|
|
777
|
+
const selectChange = (selectedRows) => {
|
|
925
778
|
console.log('选中的行:', selectedRows)
|
|
926
|
-
dialogVisible.value = false
|
|
927
779
|
}
|
|
928
780
|
</script>
|
|
929
781
|
```
|
|
930
782
|
|
|
931
783
|
### SCTJMapViewer 地图查看器
|
|
932
784
|
|
|
785
|
+
> ⚠️ **前置准备**
|
|
786
|
+
> 1. npm install @amap/amap-jsapi-loader@^1.0.0;
|
|
787
|
+
> 2. 在 `main.js` 文件中添加window._AMapSecurityConfig = {securityJsCode: 替换为你的Web端密钥};
|
|
788
|
+
|
|
789
|
+
|
|
933
790
|
```vue
|
|
934
791
|
<template>
|
|
935
792
|
<SCTJMapViewer
|
|
936
|
-
:
|
|
937
|
-
:
|
|
938
|
-
:
|
|
939
|
-
|
|
940
|
-
|
|
793
|
+
:amapKey="amapKey"
|
|
794
|
+
:center="center"
|
|
795
|
+
:auto-fit-view="false"
|
|
796
|
+
changeMapType
|
|
797
|
+
ref="mapViewerRef"
|
|
798
|
+
:staticMarkers="staticMarkers"
|
|
799
|
+
:dynamicMarkers="dynamicMarkers"
|
|
941
800
|
:polylines="polylines"
|
|
942
|
-
:polygons="polygons"
|
|
801
|
+
:polygons="polygons"
|
|
802
|
+
:circles="circles"
|
|
943
803
|
:legend-config="legendConfig"
|
|
944
|
-
|
|
945
|
-
|
|
804
|
+
view-mode="3D"
|
|
805
|
+
mapStyle="amap://styles/darkblue"
|
|
806
|
+
@loaded="maploaded"
|
|
807
|
+
@overlay-click="handleOverlayClick"
|
|
946
808
|
/>
|
|
947
809
|
</template>
|
|
948
810
|
|
|
@@ -950,105 +812,238 @@ const handleConfirm = (selectedRows) => {
|
|
|
950
812
|
import { ref } from 'vue'
|
|
951
813
|
import { SCTJMapViewer } from 'sctj-components'
|
|
952
814
|
|
|
815
|
+
const center=ref("104.122744,30.668903")
|
|
816
|
+
const amapKey='你的web端key'
|
|
817
|
+
|
|
953
818
|
const staticMarkers = ref([
|
|
954
819
|
{
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
icon: '
|
|
820
|
+
id:'1',
|
|
821
|
+
position: [116.397428, 39.90923],//或者"116.397428, 39.90923"
|
|
822
|
+
icon: getAssetURL(`cockpit/'invasionDevice.png'`),
|
|
823
|
+
label: `入侵检测仪`,//显示的名称
|
|
824
|
+
blink: true,// 是否闪烁
|
|
825
|
+
textLabelDefaultStyle: {//label样式
|
|
826
|
+
color: '#FF0000'
|
|
827
|
+
},
|
|
828
|
+
type: 'invasionDevice',//业务类型,联动legendConfig使用,点击显示图例显示隐藏
|
|
958
829
|
}
|
|
959
830
|
])
|
|
960
831
|
|
|
961
832
|
const dynamicMarkers = ref([
|
|
962
833
|
{
|
|
963
834
|
id: '1',
|
|
964
|
-
position: [116.407428, 39.91923],
|
|
965
|
-
|
|
966
|
-
icon:
|
|
835
|
+
position: [116.407428, 39.91923],//或者"116.397428, 39.90923"
|
|
836
|
+
label: `川AXXXX(在线)`,
|
|
837
|
+
icon: getAssetURL(`cockpit/vehicle.png`),
|
|
838
|
+
blink: false,
|
|
839
|
+
textLabelDefaultStyle: {
|
|
840
|
+
color: '#00FF00'
|
|
841
|
+
},
|
|
842
|
+
type: 'workDevice',
|
|
967
843
|
}
|
|
968
844
|
])
|
|
969
845
|
|
|
970
846
|
const polylines = ref([
|
|
971
847
|
{
|
|
972
|
-
path: [
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
848
|
+
path: ["104.12034,30.66797","104.125375,30.669477"],
|
|
849
|
+
dirImg: getAssetURL(`cockpit/yyxTielu.png`),
|
|
850
|
+
strokeOpacity: 0.5,
|
|
851
|
+
strokeColor: "#fff",// 完全不透明
|
|
852
|
+
strokeWeight: 6,
|
|
853
|
+
outlineColor: '#fff',
|
|
854
|
+
borderWeight: 2,
|
|
855
|
+
lineJoin: 'miter',
|
|
856
|
+
lineCap: 'butt',
|
|
857
|
+
type: 'yyx'
|
|
978
858
|
}
|
|
979
859
|
])
|
|
980
860
|
|
|
981
861
|
const polygons = ref([
|
|
982
862
|
{
|
|
983
|
-
path: [
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
863
|
+
path: ["104.12034,30.66797","104.125375,30.669477"],
|
|
864
|
+
strokeColor: '#409EFF',
|
|
865
|
+
strokeOpacity: 1,
|
|
866
|
+
fillColor:'#409EFF',
|
|
867
|
+
strokeWeight: 2,
|
|
868
|
+
fillOpacity: 0.05,
|
|
869
|
+
strokeStyle: 'dashed',
|
|
870
|
+
strokeDasharray: [20, 5],
|
|
871
|
+
label: '一工区',
|
|
872
|
+
labelStyle: {
|
|
873
|
+
'background-color': 'transparent',
|
|
874
|
+
'text-align': 'center',
|
|
875
|
+
'font-size': '40px',
|
|
876
|
+
'font-weight': 'bold',
|
|
877
|
+
'border': 'none',
|
|
878
|
+
'font-family': 'YEBTH',
|
|
879
|
+
'color':'#409EFF',
|
|
880
|
+
'opacity': 0.8,
|
|
881
|
+
},
|
|
882
|
+
type: 'workArea',
|
|
883
|
+
}
|
|
884
|
+
])
|
|
885
|
+
|
|
886
|
+
const circles=ref([
|
|
887
|
+
{
|
|
888
|
+
center: "104.12473,30.668512",//中心点
|
|
889
|
+
radius: "30",//圆形半径
|
|
890
|
+
strokeColor:'#409EFF',
|
|
891
|
+
strokeOpacity: 1,
|
|
892
|
+
fillColor:'#409EFF',
|
|
893
|
+
strokeWeight: 2,
|
|
894
|
+
fillOpacity: 0.05,
|
|
895
|
+
strokeStyle: 'dashed',
|
|
896
|
+
strokeDasharray: [20, 5],
|
|
897
|
+
label: '人员区域', // 工区名称
|
|
898
|
+
labelStyle: {
|
|
899
|
+
'background-color': 'transparent',
|
|
900
|
+
'text-align': 'center',
|
|
901
|
+
'font-size': '40px',
|
|
902
|
+
'font-weight': 'bold',
|
|
903
|
+
'border': 'none',
|
|
904
|
+
'font-family': 'YEBTH',
|
|
905
|
+
'color': '#409EFF',
|
|
906
|
+
'opacity': 0.8,
|
|
907
|
+
},
|
|
908
|
+
type: 'peopleArea',
|
|
991
909
|
}
|
|
992
910
|
])
|
|
993
911
|
|
|
994
912
|
const legendConfig = ref([
|
|
995
|
-
{
|
|
996
|
-
|
|
913
|
+
{
|
|
914
|
+
label: '入侵检测仪',
|
|
915
|
+
value: 'invasionDevice'
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
label: '作业设备',
|
|
919
|
+
value: 'workDevice'
|
|
920
|
+
},
|
|
921
|
+
{
|
|
922
|
+
label: '工区',
|
|
923
|
+
value: 'workArea'
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
label: '营业线',
|
|
927
|
+
value: 'yyx'
|
|
928
|
+
},
|
|
929
|
+
{
|
|
930
|
+
label: '人员区域',
|
|
931
|
+
value: 'peopleArea',
|
|
932
|
+
defaultVisible: false
|
|
933
|
+
}
|
|
997
934
|
])
|
|
998
935
|
|
|
999
|
-
const
|
|
1000
|
-
|
|
936
|
+
const maploaded = () => {
|
|
937
|
+
// 地图加载成后的回调
|
|
938
|
+
}
|
|
939
|
+
// 地图覆盖物点击事件
|
|
940
|
+
const handleOverlayClick = (Overlay) => {
|
|
941
|
+
console.log('点击了覆盖物:', Overlay)
|
|
1001
942
|
}
|
|
1002
943
|
</script>
|
|
1003
944
|
```
|
|
1004
945
|
|
|
1005
946
|
### SCTJMapDrawingDialog 地图绘制对话框
|
|
1006
947
|
|
|
948
|
+
> ⚠️ **前置准备**
|
|
949
|
+
> 1. npm install @amap/amap-jsapi-loader@^1.0.0;
|
|
950
|
+
> 2. 在 `main.js` 文件中添加window._AMapSecurityConfig = {securityJsCode: 替换为你的Web端密钥};
|
|
951
|
+
|
|
1007
952
|
```vue
|
|
1008
953
|
<template>
|
|
1009
|
-
<el-button @click="dialogVisible = true">绘制地图</el-button>
|
|
1010
954
|
<SCTJMapDrawingDialog
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
955
|
+
width="80vw"
|
|
956
|
+
:map-zoom="18"
|
|
957
|
+
center="104.12473,30.668512"
|
|
958
|
+
v-model:markers="form.markers"
|
|
959
|
+
v-model:polygons="form.polygons"
|
|
960
|
+
v-model:circles="form.circles"
|
|
961
|
+
v-model:polylines="form.polylines"
|
|
962
|
+
v-model:bezierCurve="form.bezierCurves"
|
|
963
|
+
:multiple="['point', 'polyline', 'polygon', 'circle', 'bezierCurve']" // multiple接受布尔值或者数组
|
|
964
|
+
:allowedTypes="['point', 'polyline', 'polygon', 'circle', 'bezierCurve']"
|
|
965
|
+
:amapKey="amapKey">
|
|
966
|
+
<!-- trigger 有默认插槽,也可以不传入按钮 -->
|
|
967
|
+
<template #trigger={openDialog}>
|
|
968
|
+
<el-button @click="openDialog">地图绘制</el-button>
|
|
969
|
+
</template>
|
|
970
|
+
</SCTJMapDrawingDialog>
|
|
1015
971
|
</template>
|
|
1016
972
|
|
|
1017
973
|
<script setup>
|
|
1018
974
|
import { ref } from 'vue'
|
|
1019
975
|
import { SCTJMapDrawingDialog } from 'sctj-components'
|
|
976
|
+
const form = reactive({
|
|
977
|
+
markers: [],
|
|
978
|
+
polygons: [],
|
|
979
|
+
circles:[],
|
|
980
|
+
polylines:[],
|
|
981
|
+
bezierCurves:[]
|
|
982
|
+
})
|
|
1020
983
|
|
|
1021
|
-
const dialogVisible = ref(false)
|
|
1022
|
-
|
|
1023
|
-
const handleConfirm = (drawingData) => {
|
|
1024
|
-
console.log('绘制的数据:', drawingData)
|
|
1025
|
-
dialogVisible.value = false
|
|
1026
|
-
}
|
|
1027
984
|
</script>
|
|
1028
985
|
```
|
|
1029
986
|
|
|
1030
987
|
### SCTJBusinessMapDrawingDialog 业务地图绘制对话框
|
|
1031
988
|
|
|
989
|
+
> ⚠️ **前置准备**
|
|
990
|
+
> 1. npm install @amap/amap-jsapi-loader@^1.0.0;
|
|
991
|
+
> 2. 在 `main.js` 文件中添加window._AMapSecurityConfig = {securityJsCode: 替换为你的Web端密钥};
|
|
992
|
+
|
|
1032
993
|
```vue
|
|
1033
994
|
<template>
|
|
1034
|
-
<el-button @click="dialogVisible = true">业务绘制</el-button>
|
|
1035
995
|
<SCTJBusinessMapDrawingDialog
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
996
|
+
width="80vw"
|
|
997
|
+
center="104.12473,30.668512"
|
|
998
|
+
v-model:markers="form.markers"
|
|
999
|
+
v-model:polygons="form.polygons"
|
|
1000
|
+
v-model:circles="form.circles"
|
|
1001
|
+
v-model:polylines="form.polylines"
|
|
1002
|
+
:businessConfig="businessConfig"
|
|
1003
|
+
:amapKey="amapKey">
|
|
1004
|
+
<!-- trigger 有默认插槽,也可以不传入按钮 -->
|
|
1005
|
+
<template #trigger="{openDialog}">
|
|
1006
|
+
<el-button type="primary" @click="openDialog" size="small">点击绘制</el-button>
|
|
1007
|
+
</template>
|
|
1008
|
+
</SCTJBusinessMapDrawingDialog>
|
|
1040
1009
|
</template>
|
|
1041
1010
|
|
|
1042
1011
|
<script setup>
|
|
1043
1012
|
import { ref } from 'vue'
|
|
1044
1013
|
import { SCTJBusinessMapDrawingDialog } from 'sctj-components'
|
|
1045
1014
|
|
|
1046
|
-
const
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1015
|
+
const businessConfig=[
|
|
1016
|
+
{
|
|
1017
|
+
key: 'lngLat',
|
|
1018
|
+
label: '项目中心点',
|
|
1019
|
+
multiple: false,
|
|
1020
|
+
drawTypes: ['point']
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
key: 'yyxLngLat',
|
|
1024
|
+
label: '项目营业线',
|
|
1025
|
+
multiple: true,
|
|
1026
|
+
drawTypes: ['polyline']
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
key: 'projectWorkArea',
|
|
1030
|
+
label: '项目工区',
|
|
1031
|
+
multiple: true,
|
|
1032
|
+
drawTypes: ['polygon', 'circle']
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
key: 'workDeviceArea',
|
|
1036
|
+
label: '作业设备限制区域',
|
|
1037
|
+
multiple: true,
|
|
1038
|
+
drawTypes: ['polygon', 'circle']
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
key: 'workPersonnelArea',
|
|
1042
|
+
label: '作业人员区域',
|
|
1043
|
+
multiple: true,
|
|
1044
|
+
drawTypes: ['polygon', 'circle']
|
|
1045
|
+
}
|
|
1046
|
+
]
|
|
1052
1047
|
</script>
|
|
1053
1048
|
```
|
|
1054
1049
|
|
|
@@ -1058,9 +1053,6 @@ const handleConfirm = (drawingData) => {
|
|
|
1058
1053
|
|
|
1059
1054
|
部分组件需要通过 props 传入业务 API 函数:
|
|
1060
1055
|
|
|
1061
|
-
- **SCTJH5hkPlayer**:需要传入 `getLiveAddress`、`getReplayAddress`、`downloadCertificate` 函数
|
|
1062
|
-
- **SCTJHelmetPlayer**:需要传入 `callApi`、`handleStreamingApi`、`queryAdminSipInfoApi` 函数
|
|
1063
|
-
- **SCTJYsyPlayer**:需要传入 `getYsToken` 函数
|
|
1064
1056
|
- **SCTJFileUpload、SCTJImageUpload、SCTJImagePreview**:可选传入 `baseUrl` prop 处理相对路径
|
|
1065
1057
|
|
|
1066
1058
|
### 2. 样式
|