123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- <template>
- <el-dialog
- :title="title"
- :visible.sync="modal"
- :close-on-click-modal="false"
- width="960px"
- @close="
- res => {
- $emit('cancel');
- }
- "
- >
- <el-form ref="form" :model="form" label-width="100px">
- <el-form-item label="关联场景" prop="kindergartenId">
- <SceneSelect v-model="form.kindergartenId" :clearable="false" />
- </el-form-item>
- <el-form-item label="关联活动">
- <ActivitySelect
- v-model="form.activityId"
- :kindergartenId="form.kindergartenId"
- :firstLoad="false"
- :disabled="form.kindergartenId === null"
- />
- </el-form-item>
- <el-form-item label="图片" prop="urls" required>
- <el-upload
- action
- :http-request="Upload"
- :before-upload="beforeAvatarUpload"
- :on-preview="handlePreview"
- :before-remove="beforeRemove"
- :on-remove="handleRemove"
- :on-success="handleSuccess"
- :on-exceed="handleExceed"
- drag
- multiple
- :limit="limit"
- :file-list="fileList"
- >
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">
- 将文件拖到此处,或
- <em>点击上传</em>
- </div>
- <div slot="tip" class="el-upload__tip">上传文件大小不能超过 1G</div>
- </el-upload>
- <el-progress v-show="showProgress" :text-inside="true" :stroke-width="15" :percentage="progress"></el-progress>
- </el-form-item>
- </el-form>
- </el-dialog>
- </template>
- <script>
- import { client , getFileNameUUID } from "@/utils/ali-oss"; // 前面的ali-js文件内的两个封装函数
- import { saveItem } from '@/api/photoWarehouse';
- export default {
- name: "Upload",
- props: {
- limit: {
- type: Number,
- default: 30
- }
- },
- data() {
- return {
- title: '批量上传照片',
- modal: true,
- form: {
- kindergartenId: null,
- activityId: '',
- urls: []
- },
- fileList: [], // 文件列
- showProgress: false, // 进度条的显示
- dataObj: {
- region: 'oss-cn-guangzhou',
- accessKeyId: 'LTAI5t8FMLXGzU4pTi9GXWb6',
- accessKeySecret: 'Hz6WOXIVNfpdMphYtf3laHbVoasGlT',
- bucket: 'yxl-kindergarten',
- }, //存签名信息
- progress: 0 //进度条数据
- };
- },
- methods: {
- // 文件超出个数限制时的钩子
- handleExceed(files, fileList) {
- this.$message.warning(`每次只能上传 ${this.limit} 个文件`);
- },
- // 点击文件列表中已上传的文件时的钩子
- handlePreview(file) {},
- // 删除文件之前的钩子
- beforeRemove(file, fileList) {
- return this.$confirm(`确定移除 ${file.name}?`);
- },
- // 文件列表移除文件时的钩子
- handleRemove(file, fileList) {},
- // 文件上传成功时的钩子
- handleSuccess(response, file, fileList) {
- this.fileList = fileList;
- // if (response.name) {
- // this.saveData(response.name);
- // }
- },
- // 文件上传前的校验
- beforeAvatarUpload(file) {
- // if (["video/mp4"].indexOf(file.type) == -1) {
- // this.$message.error("请上传正确的视频格式");
- // return false;
- // }
- // const isLt100M = file.size / 1024 / 1024 > 10 && file.size / 1024 / 1024 < 1024;
- // if (!isLt100M) {
- // this.$message.error("上传视频大小要在10MB~1GB之间哦!");
- // return false;
- // }
- if(!this.form.kindergartenId) {
- this.$error('请先选择幼儿园')
- }
- const isLt30 = file.name.length < 30;
- if (!isLt30) {
- this.$message.error("上传视频文件名称长度必须要小于30个文字哦!");
- return false;
- }
- },
- // http-request属性来覆盖默认的上传行为(即action="url"),自定义上传的实现
- Upload(file) {
- const _that = this;
- async function multipartUpload() {
- let temporary = file.file.name.lastIndexOf(".");
- let fileNameLength = file.file.name.length;
- let fileFormat = file.file.name.substring(
- temporary + 1,
- fileNameLength
- );
- let fileName = getFileNameUUID() + "." + fileFormat;
- client(_that.dataObj).multipartUpload(`tmp/${fileName}`, file.file, {
- progress: function(p) {
- // todo 每个文件一个进度条???如何限定关联的业务参数(幼儿园id、活动id)
- // p进度条的值
- console.log(p);
- _that.showProgress = true;
- _that.progress = Math.floor(p * 100);
- }
- })
- .then(result => {
- //上传成功返回值,可针对项目需求写其他逻辑
- // todo 这里每完成一个文件,会回调一次。这里请求服务端保存业务。照片信息 + 幼儿园 + 活动...
- console.log(result);
- this.saveData(result);
- })
- .catch(err => {
- console.log("err:", err);
- });
- }
- multipartUpload();
- },
- async saveData(obj) {
- const params = {
- kindergartenId: this.form.kindergartenId,
- activityId: this.form.activityId,
- fileRequest: {
- // todo 补充字段
- originalFilename: 'abc',
- size: 100,
- path: obj.name
- }
- }
- const { success, msg } = await saveItem(params);
- if (success) {
- }
- }
- }
- };
- </script>
- <style lang="scss" scoped></style>
|