Add examples

master
git 8 years ago
parent 5ce75ac4e8
commit f25f126bd1

@ -1,6 +1,6 @@
/*! /*!
* Name: vue-upload-component * Name: vue-upload-component
* Version: 2.6.0-beta.2 * Version: 2.6.0-beta.3
* Author: LianYue * Author: LianYue
*/ */
(function (global, factory) { (function (global, factory) {

File diff suppressed because one or more lines are too long

@ -1,6 +1,6 @@
/*! /*!
* Name: vue-upload-component * Name: vue-upload-component
* Version: 2.6.0-beta.2 * Version: 2.6.0-beta.3
* Author: LianYue * Author: LianYue
*/ */
(function (global, factory) { (function (global, factory) {

1039
docs/dist/index.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1241,7 +1241,7 @@ Upload progress
* **Type:** `String` * **Type:** `String`
* **Read only:** `true` * **Read only:** `false`
* **Default:** `0.00` * **Default:** `0.00`

@ -1231,7 +1231,7 @@ MIME类型
* **类型:** `String` * **类型:** `String`
* **只读:** `true` * **只读:** `false`
* **默认值:** `0.00` * **默认值:** `0.00`

@ -20,11 +20,11 @@ export default {
}, },
example: { example: {
full: 'Full', full: 'Full Example',
simple: 'Simple', simple: 'Simple',
avatar: 'Avatar', avatar: 'Upload avatar',
drag: 'Drag', drag: 'Drag and drop',
multiple: 'Multiple', multiple: 'Multiple instances',
vuex: 'Vuex', vuex: 'Vuex',
} }
} }

@ -23,9 +23,9 @@ export default {
example: { example: {
full: '完整例子', full: '完整例子',
simple: '简单例子', simple: '简单例子',
avatar: '头像例子', avatar: '上传头像',
drag: '拖拽例子', drag: '拖拽上传',
multiple: '多实例', multiple: '多实例',
vuex: 'Vuex', vuex: 'Vuex',
} }
} }

@ -1,7 +1,175 @@
<template> <template>
<div class="example-avatar"> <div class="example-avatar">
No content <div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active">
<h3>Drop files to upload</h3>
</div>
<div class="avatar-upload" v-show="!edit">
<div class="text-center p-2">
<label for="avatar">
<img :src="files.length ? files[0].url : 'https://www.gravatar.com/avatar/default?s=200&r=pg&d=mm'" class="rounded-circle" />
<h4 class="pt-2">or<br/>Drop files anywhere to upload</h4>
</label>
</div>
<div class="text-center p-2">
<file-upload
extensions="gif,jpg,jpeg,png,webp"
accept="image/png,image/gif,image/jpeg,image/webp"
name="avatar"
class="btn btn-primary"
post-action="/upload/post"
:drop="!edit"
v-model="files"
@input-filter="inputFilter"
@input-file="inputFile"
ref="upload">
Upload avatar
</file-upload>
</div>
</div>
<div class="avatar-edit" v-show="files.length && edit">
<div class="avatar-edit-image" v-if="files.length">
<img ref="editImage" :src="files[0].url" />
</div>
<div class="text-center p-4">
<button type="button" class="btn btn-secondary" @click.prevent="$refs.upload.clear">Cancel</button>
<button type="submit" class="btn btn-primary" @click.prevent="editSave">Save</button>
</div>
</div>
<div class="pt-5">
Source code: <a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Avatar.vue">https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Avatar.vue</a>
</div>
</div> </div>
</template> </template>
<style> <style>
.example-avatar .avatar-upload .rounded-circle {
width: 200px;
height: 200px;
}
.example-avatar .text-center .btn {
margin: 0 .5rem
}
.example-avatar .avatar-edit-image {
max-width: 100%
}
.example-avatar .drop-active {
top: 0;
bottom: 0;
right: 0;
left: 0;
position: fixed;
z-index: 9999;
opacity: .6;
text-align: center;
background: #000;
}
.example-avatar .drop-active h3 {
margin: -.5em 0 0;
position: absolute;
top: 50%;
left: 0;
right: 0;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
font-size: 40px;
color: #fff;
padding: 0;
}
</style> </style>
<script>
import Cropper from 'cropperjs'
import FileUpload from 'vue-upload-component'
export default {
components: {
FileUpload,
},
data() {
return {
files: [],
edit: false,
cropper: false,
}
},
watch: {
edit(value) {
if (value) {
this.$nextTick(function () {
if (!this.$refs.editImage) {
return
}
let cropper = new Cropper(this.$refs.editImage, {
aspectRatio: 1 / 1,
viewMode: 1,
minContainerHeight: 300,
})
this.cropper = cropper
})
} else {
if (this.cropper) {
this.cropper.destroy()
this.cropper = false
}
}
}
},
methods: {
async editSave() {
this.edit = false
let blob = await new Promise((resolve, reject) => {
this.cropper.getCroppedCanvas().toBlob(function (value) {
resolve(value)
})
})
let file = new File([blob], this.files[0].name, { type: blob.type })
this.$refs.upload.update(this.files[0].id, {
file,
type: file.type,
size: file.size,
active: true,
})
},
alert(message) {
alert(message)
},
inputFile(newFile, oldFile, prevent) {
if (newFile && !oldFile) {
this.$nextTick(function () {
this.edit = true
})
}
if (!newFile && oldFile) {
this.edit = false
}
},
inputFilter(newFile, oldFile, prevent) {
if (newFile && !oldFile) {
if (!/\.(gif|jpg|jpeg|png|webp)$/i.test(newFile.name)) {
this.alert('Your choice is not a picture')
return prevent()
}
}
if (newFile && (!oldFile || newFile.file !== oldFile.file)) {
newFile.url = ''
let URL = window.URL || window.webkitURL
if (URL && URL.createObjectURL) {
newFile.url = URL.createObjectURL(newFile.file)
}
}
}
}
}
</script>

@ -1,7 +1,103 @@
<template> <template>
<div class="example-drag"> <div class="example-drag">
No content <div class="upload">
<ul v-if="files.length">
<li v-for="(file, index) in files" :key="file.id">
<span>{{file.name}}</span> -
<span>{{file.size | formatSize}}</span> -
<span v-if="file.error">{{file.error}}</span>
<span v-else-if="file.success">success</span>
<span v-else-if="file.active">active</span>
<span v-else-if="file.active">active</span>
<span v-else></span>
</li>
</ul>
<ul v-else>
<td colspan="7">
<div class="text-center p-5">
<h4>Drop files anywhere to upload<br/>or</h4>
<label for="file" class="btn btn-lg btn-primary">Select Files</label>
</div>
</td>
</ul>
<div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active">
<h3>Drop files to upload</h3>
</div>
<div class="example-btn">
<file-upload
class="btn btn-primary"
post-action="/upload/post"
:multiple="true"
:drop="true"
:drop-directory="true"
v-model="files"
ref="upload">
<i class="fa fa-plus"></i>
Select files
</file-upload>
<button type="button" class="btn btn-success" v-if="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true">
<i class="fa fa-arrow-up" aria-hidden="true"></i>
Start Upload
</button>
<button type="button" class="btn btn-danger" v-else @click.prevent="$refs.upload.active = false">
<i class="fa fa-stop" aria-hidden="true"></i>
Stop Upload
</button>
</div>
</div>
<div class="pt-5">
Source code: <a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Drag.vue">https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Drag.vue</a>
</div>
</div> </div>
</template> </template>
<style> <style>
.example-drag label.btn {
margin-bottom: 0;
margin-right: 1rem;
}
.example-drag .drop-active {
top: 0;
bottom: 0;
right: 0;
left: 0;
position: fixed;
z-index: 9999;
opacity: .6;
text-align: center;
background: #000;
}
.example-drag .drop-active h3 {
margin: -.5em 0 0;
position: absolute;
top: 50%;
left: 0;
right: 0;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
font-size: 40px;
color: #fff;
padding: 0;
}
</style> </style>
<script>
import FileUpload from 'vue-upload-component'
export default {
components: {
FileUpload,
},
data() {
return {
files: [],
}
}
}
</script>

@ -4,7 +4,7 @@
<i class="fa fa-cog" aria-hidden="true"></i> <i class="fa fa-cog" aria-hidden="true"></i>
Options Options
</button> </button>
<h1 id="document-title" class="document-title">Full Example</h1> <h1 id="example-title" class="example-title">Full Example</h1>
<div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active"> <div v-show="$refs.upload && $refs.upload.dropActive" class="drop-active">
<h3>Drop files to upload</h3> <h3>Drop files to upload</h3>
@ -82,7 +82,8 @@
Drop active: {{$refs.upload ? $refs.upload.dropActive : false}} Drop active: {{$refs.upload ? $refs.upload.dropActive : false}}
</div> </div>
<div class="btn-group"> <div class="btn-group">
<file-upload class="btn btn-primary dropdown-toggle" <file-upload
class="btn btn-primary dropdown-toggle"
:post-action="postAction" :post-action="postAction"
:put-action="putAction" :put-action="putAction"
:extensions="extensions" :extensions="extensions"

@ -1,7 +1,101 @@
<template> <template>
<div class="example-multiple"> <div class="example-multiple">
No content <h1 id="example-title" class="example-title">Multiple instances</h1>
<div class="upload">
<ul>
<li v-for="(file, index) in files1" :key="file.id">
<span>{{file.name}}</span> -
<span>{{file.size | formatSize}}</span> -
<span v-if="file.error">{{file.error}}</span>
<span v-else-if="file.success">success</span>
<span v-else-if="file.active">active</span>
<span v-else-if="file.active">active</span>
<span v-else></span>
</li>
</ul>
<div class="example-btn">
<file-upload
class="btn btn-primary"
input-id="file1"
post-action="/upload/post"
v-model="files1"
ref="upload1">
<i class="fa fa-plus"></i>
Select files
</file-upload>
<label for="file1" class="btn btn-primary">Label Select files</label>
<button type="button" class="btn btn-success" v-if="!$refs.upload1 || !$refs.upload1.active" @click.prevent="$refs.upload1.active = true">
<i class="fa fa-arrow-up" aria-hidden="true"></i>
Start Upload
</button>
<button type="button" class="btn btn-danger" v-else @click.prevent="$refs.upload1.active = false">
<i class="fa fa-stop" aria-hidden="true"></i>
Stop Upload
</button>
</div>
</div>
<div class="upload">
<ul>
<li v-for="(file, index) in files2" :key="file.id">
<span>{{file.name}}</span> -
<span>{{file.size | formatSize}}</span> -
<span v-if="file.error">{{file.error}}</span>
<span v-else-if="file.success">success</span>
<span v-else-if="file.active">active</span>
<span v-else-if="file.active">active</span>
<span v-else></span>
</li>
</ul>
<div class="example-btn">
<file-upload
class="btn btn-primary"
input-id="file2"
post-action="/upload/post"
v-model="files2"
ref="upload2">
<i class="fa fa-plus"></i>
Select files
</file-upload>
<label for="file2" class="btn btn-primary">Label Select files</label>
<button type="button" class="btn btn-success" v-if="!$refs.upload2 || !$refs.upload2.active" @click.prevent="$refs.upload2.active = true">
<i class="fa fa-arrow-up" aria-hidden="true"></i>
Start Upload
</button>
<button type="button" class="btn btn-danger" v-else @click.prevent="$refs.upload2.active = false">
<i class="fa fa-stop" aria-hidden="true"></i>
Stop Upload
</button>
</div>
</div>
<div class="pt-5">
Source code: <a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Multiple.vue">https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Multiple.vue</a>
</div>
</div> </div>
</template> </template>
<style> <style>
.example-multiple label.btn {
margin-bottom: 0;
margin-right: 1rem;
}
.example-multiple .upload {
margin-bottom: 1rem;
}
</style> </style>
<script>
import FileUpload from 'vue-upload-component'
export default {
components: {
FileUpload,
},
data() {
return {
files1: [],
files2: [],
}
},
}
</script>

@ -1,7 +1,103 @@
<template> <template>
<div class="example-simple"> <div class="example-simple">
No content <h1 id="example-title" class="example-title">Simple Example</h1>
<div class="upload">
<ul>
<li v-for="(file, index) in files" :key="file.id">
<span>{{file.name}}</span> -
<span>{{file.size | formatSize}}</span> -
<span v-if="file.error">{{file.error}}</span>
<span v-else-if="file.success">success</span>
<span v-else-if="file.active">active</span>
<span v-else-if="file.active">active</span>
<span v-else></span>
</li>
</ul>
<div class="example-btn">
<file-upload
class="btn btn-primary"
post-action="/upload/post"
extensions="gif,jpg,jpeg,png,webp"
accept="image/png,image/gif,image/jpeg,image/webp"
:multiple="true"
:size="1024 * 1024 * 10"
v-model="files"
@input-filter="inputFilter"
@input-file="inputFile"
ref="upload">
<i class="fa fa-plus"></i>
Select files
</file-upload>
<button type="button" class="btn btn-success" v-if="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true">
<i class="fa fa-arrow-up" aria-hidden="true"></i>
Start Upload
</button>
<button type="button" class="btn btn-danger" v-else @click.prevent="$refs.upload.active = false">
<i class="fa fa-stop" aria-hidden="true"></i>
Stop Upload
</button>
</div>
</div>
<div class="pt-5">
Source code: <a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Simple.vue">https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Simple.vue</a>
</div>
</div> </div>
</template> </template>
<style> <style>
.example-simple label.btn {
margin-bottom: 0;
margin-right: 1rem;
}
</style> </style>
<script>
import FileUpload from 'vue-upload-component'
export default {
components: {
FileUpload,
},
data() {
return {
files: [],
}
},
methods: {
inputFilter(newFile, oldFile, prevent) {
if (newFile && !oldFile) {
// Before adding a file
//
// Filter system files or hide files
//
if (/(\/|^)(Thumbs\.db|desktop\.ini|\..+)$/.test(newFile.name)) {
return prevent()
}
// Filter php html js file
// php html js
if (/\.(php5?|html?|jsx?)$/i.test(newFile.name)) {
return prevent()
}
}
},
inputFile(newFile, oldFile) {
if (newFile && !oldFile) {
// add
console.log('add', newFile)
}
if (newFile && oldFile) {
// update
console.log('update', newFile)
}
if (!newFile && oldFile) {
// remove
console.log('remove', oldFile)
}
}
}
}
</script>

@ -1,7 +1,73 @@
<template> <template>
<div class="example-vuex"> <div class="example-simple">
No content <h1 id="example-title" class="example-title">Simple Example</h1>
<div class="upload">
<ul>
<li v-for="(file, index) in files" :key="file.id">
<span>{{file.name}}</span> -
<span>{{file.size | formatSize}}</span> -
<span v-if="file.error">{{file.error}}</span>
<span v-else-if="file.success">success</span>
<span v-else-if="file.active">active</span>
<span v-else-if="file.active">active</span>
<span v-else></span>
</li>
</ul>
<div class="example-btn">
<file-upload
class="btn btn-primary"
post-action="/upload/post"
extensions="gif,jpg,jpeg,png,webp"
accept="image/png,image/gif,image/jpeg,image/webp"
:multiple="true"
:size="1024 * 1024 * 10"
:value="files"
@input="inputUpdate"
ref="upload">
<i class="fa fa-plus"></i>
Select files
</file-upload>
<button type="button" class="btn btn-success" v-if="!$refs.upload || !$refs.upload.active" @click.prevent="$refs.upload.active = true">
<i class="fa fa-arrow-up" aria-hidden="true"></i>
Start Upload
</button>
<button type="button" class="btn btn-danger" v-else @click.prevent="$refs.upload.active = false">
<i class="fa fa-stop" aria-hidden="true"></i>
Stop Upload
</button>
</div>
</div>
<div class="pt-5">
Source code: <a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Vuex.vue">https://github.com/lian-yue/vue-upload-component/blob/master/docs/views/examples/Vuex.vue</a><br/>
<a href="https://github.com/lian-yue/vue-upload-component/blob/master/docs/store.js">https://github.com/lian-yue/vue-upload-component/blob/master/docs/store.js</a>
</div>
</div> </div>
</template> </template>
<style> <style>
.example-simple label.btn {
margin-bottom: 0;
margin-right: 1rem;
}
</style> </style>
<script>
import { mapState } from 'vuex'
import FileUpload from 'vue-upload-component'
export default {
components: {
FileUpload,
},
computed: {
...mapState([
'files',
])
},
methods: {
inputUpdate(files) {
this.$store.commit('updateFiles', files)
},
}
}
</script>

@ -1,7 +1,7 @@
{ {
"name": "vue-upload-component", "name": "vue-upload-component",
"description": "Vue.js file upload component, Multi-file upload, Upload directory, Drag upload, Drag the directory, Upload multiple files at the same time, html4 (IE 9), `PUT` method, Customize the filter", "description": "Vue.js file upload component, Multi-file upload, Upload directory, Drag upload, Drag the directory, Upload multiple files at the same time, html4 (IE 9), `PUT` method, Customize the filter",
"version": "2.6.0-beta.2", "version": "2.6.0-beta.3",
"author": "LianYue", "author": "LianYue",
"scripts": { "scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server", "dev": "cross-env NODE_ENV=development webpack-dev-server",

@ -178,7 +178,7 @@ module.exports = merge(baseConfig(), {
res.status(403) res.status(403)
res.json({ error: 'failure', success: false }) res.json({ error: 'failure', success: false })
} else { } else {
res.json({ name: 'filename.ext', id: id++, success: true }) res.json({ url: 'https://vuejs.org/images/logo.png?id=' + id, name: 'filename.ext', id: id++, success: true })
} }
}, 200 + parseInt(Math.random() * 4000, 10)) }, 200 + parseInt(Math.random() * 4000, 10))
} }

Loading…
Cancel
Save