# رفع الملفات Upload
رفع الملفات. لا تُضمَّن مكتبة عميل HTTP: يتولى prop الخاص بـ request النقل الفعلي (يعيد onProgress ملء شريط التقدم، ونجاح Promise resolve يعني اكتمال الرفع)؛ ويدعم السحب والإفلات، والاختيار المتعدد، وقيود العدد / الحجم / النوع، وإعادة المحاولة عند الفشل.
<template>
<div class="demo-col">
<LhUpload
multiple
:max-count="3"
:max-size="2097152"
accept="image/*"
:request="fakeRequest"
@change="onChange"
@success="onSuccess"
@error="onError"
>
<LhButton type="primary">اختر الملفات (3 كحد أقصى، كل ملف ≤ 2MB)</LhButton>
</LhUpload>
<LhUpload drag :request="fakeRequest">
<div style="padding: 20px 0">
<p class="demo-note" style="font-size: 14px">اسحب الملفات إلى هنا، أو انقر للرفع</p>
<p class="demo-note">دعم السحب والإفلات (وضع drag)</p>
</div>
</LhUpload>
<LhUpload multiple :max-count="5" accept=".png,.jpg" :request="fakeRequest" disabled>
<LhButton disabled>حالة معطّلة (accept بصيغة مصفوفة .png/.jpg)</LhButton>
</LhUpload>
<p class="demo-note">الحالة: {{ status }}</p>
</div>
</template>
<script>
export default {
data: () => ({
status: '(لم يُرفع أي ملف)',
}),
methods: {
fakeRequest(opts) {
const { file, onProgress } = opts
return new Promise((resolve) => {
let percent = 0
const timer = setInterval(() => {
percent += 25
if (percent >= 100) {
clearInterval(timer)
onProgress(100)
resolve({ url: `/assets/${file.name}` })
} else {
onProgress(percent)
}
}, 200)
})
},
onChange(files) {
this.status = `القائمة بها ${files.length} ملفًا`
},
onSuccess(file) {
var _a
this.status = `اكتمل الرفع: ${(_a = file.name) !== null && _a !== void 0 ? _a : ''}`
},
onError(file, reason) {
var _a
this.status = `فشل الرفع: ${(_a = file.name) !== null && _a !== void 0 ? _a : ''} (${String(reason)})`
},
},
}
</script>
# Props
| خاصية | الوصف | النوع | الافتراضي |
|---|---|---|---|
| multiple | اختيار متعدد | boolean | false |
| drag | وضع الرفع بالسحب والإفلات | boolean | false |
| disabled | معطّل | boolean | false |
| accept | أنواع الملفات المقبولة ('.png,.jpg' أو مصفوفة) | string \| string[] | — |
| maxSize | الحد الأقصى لحجم الملف الواحد (بايت) | number | — |
| maxCount | الحد الأقصى لعدد الملفات (0 يعني بلا حد) | number | 0 |
| request | دالة طلب الرفع (لا تُضمَّن مكتبة عميل HTTP) | LhUploadRequest | — |
| sx | خاصية sx المختصرة للتخطيط | — | — |
توقيع LhUploadRequest: (options: { file: File; onProgress: (percent: number) => void }) => Promise<{ url?: string }> —
نجاح Promise resolve يُطلق success، ورفضه (أو طرحه استثناءً) يُطلق error.
# Events
change (files) و success (file) و error (file, reason) و remove (uid)
# Slots
| فتحة | الوصف |
|---|---|
| default | محتوى منطقة التشغيل (يُعرض افتراضيًا تلميح «انقر للرفع / اسحب إلى هنا») |
# إمكانية الوصول
منطقة التشغيل role="button" + tabindex (تدعم فتح حوار الملفات بمفتاحَي الإدخال والمسافة)، وaria-disabled يُبيِّن التعطيل؛
صفوف الملفات أثناء الرفع تحمل role="progressbar" + aria-valuenow، ورسائل فشل التحقق تحمل role="alert".
Copyright © 2024-2026 FengMo WenXue