feat(work-order): 新增一次性补资料链接
This commit is contained in:
@@ -9,17 +9,27 @@ import type { UploadedFile } from '@/types/worker-platform'
|
||||
import { cameraCaptureInputProps, resolveCameraEntryEnabled } from '@/utils/camera-capture'
|
||||
import { useIsMobile } from '@/utils/use-is-mobile'
|
||||
|
||||
type ImageUploadScope = 'admin' | 'worker' | 'collect'
|
||||
|
||||
type ImageUploadUploader = (
|
||||
file: File,
|
||||
scene: string,
|
||||
scope: ImageUploadScope,
|
||||
) => Promise<UploadedFile>
|
||||
|
||||
type ImageUploadProps = {
|
||||
value?: UploadedFile[]
|
||||
onChange?: (files: UploadedFile[]) => void
|
||||
scene: string
|
||||
scope: 'admin' | 'worker' | 'collect'
|
||||
scope: ImageUploadScope
|
||||
maxCount?: number
|
||||
showPasteHint?: boolean
|
||||
/** 开启后,页面任意位置粘贴剪贴板截图都会上传到本组件(多实例时以最近点击/挂载的为准) */
|
||||
captureGlobalPaste?: boolean
|
||||
/** 是否显示移动端「拍照」入口;不传时按「打手端 + 移动端」自动判断 */
|
||||
allowCamera?: boolean
|
||||
/** 自定义上传函数;公开一次性链接用它把文件传到 token 校验过的上传接口。 */
|
||||
uploader?: ImageUploadUploader
|
||||
}
|
||||
|
||||
type GlobalPasteTarget = {
|
||||
@@ -67,6 +77,7 @@ export default function ImageUpload({
|
||||
showPasteHint = false,
|
||||
captureGlobalPaste = false,
|
||||
allowCamera,
|
||||
uploader,
|
||||
}: ImageUploadProps) {
|
||||
const { message } = App.useApp()
|
||||
const isMobile = useIsMobile()
|
||||
@@ -75,6 +86,7 @@ export default function ImageUpload({
|
||||
const targetIdRef = useRef(0)
|
||||
const valueRef = useRef(value)
|
||||
valueRef.current = value
|
||||
const uploadFileFn = uploader || uploadFile
|
||||
|
||||
const cameraEnabled = resolveCameraEntryEnabled({ isMobile, scope, allowCamera })
|
||||
const cameraInputProps = cameraCaptureInputProps('image')
|
||||
@@ -96,7 +108,7 @@ export default function ImageUpload({
|
||||
const next = [...valueRef.current]
|
||||
for (const file of images.slice(0, remaining)) {
|
||||
try {
|
||||
const uploaded = await uploadFile(file, scene, scope)
|
||||
const uploaded = await uploadFileFn(file, scene, scope)
|
||||
next.push(uploaded)
|
||||
} catch (error) {
|
||||
message.error(resolveUploadErrorMessage(error, source))
|
||||
@@ -199,7 +211,7 @@ export default function ImageUpload({
|
||||
options: Parameters<NonNullable<UploadProps['customRequest']>>[0],
|
||||
) {
|
||||
try {
|
||||
const uploaded = await uploadFile(options.file as File, scene, scope)
|
||||
const uploaded = await uploadFileFn(options.file as File, scene, scope)
|
||||
// 多文件选择会并发执行 customRequest,必须以 ref 中的最新列表累加,避免后完成的上传覆盖前面的图片。
|
||||
const next = [...valueRef.current, uploaded].slice(0, maxCount)
|
||||
valueRef.current = next
|
||||
|
||||
Reference in New Issue
Block a user