一次性上传多张图片

2021-05-06  本文已影响0人  糖醋里脊120625

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>问题反馈</title>
        <link rel="stylesheet" href="css/style.css">
        <link rel="stylesheet" type="text/css" href="css/common.css" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
    </head>
    <body>
        <div class="vueBox" v-cloak id="app">
            <div class="page-box">
                <div class="suggest-title">
                    <span class="text-star">*</span>
                    <span>问题类型</span>
                </div>
                <input @click="showProblemName" class="input-box" :value="problem_name" readonly="" type="text" placeholder="请选择问题类型">
                <div class="suggest-title">
                    <span class="text-star">*</span>
                    <span>问题描述</span>
                </div>
                <div class="area-box">
                    <textarea class="textarea-box" placeholder="请输入您的问题或建议" v-model="comment" :maxlength="maxlen"></textarea>
                    <div class="amount-box">
                        <p class="amount-txt" v-text="lens"></p>
                        <p class="amount-txt">/</p>
                        <p class="amount-txt" v-text="maxlen"></p>
                    </div>
                </div>
                <div class="suggest-title suggest-upload">
                    <p>
                        <span>上传图片</span>
                        <span class="text-tip" v-text="'('+imgList.length+'/3)'"></span>
                    </p>
                </div>
                <ul class="upload_warp_imgs">
                    <li v-for="(item,index) of imgList">
                        <img class="upload_img" :src="item.file.src" alt="">
                        <img :src="ico_del" class="upload_img_del" @click="fileDel(index)">
                    </li>
                    <li class="upload_warp_btn" v-show="imgList.length<3">
                        <img class="ico-plus" :src="ico_plus">
                        <input id="file" @change="fileChange($event)" type="file" accept="image/*" class="upload_file" />
                    </li>
                </ul>
                <div class="suggest-title">
                    <span class="text-star">*</span>
                    <span>联系方式</span>
                </div>
                <input class="input-box" maxlength="11" type="text" placeholder="请输入手机号" v-model="mobile">
                <div class="btn-box">
                    <div :class="[is_can?'btn-submit':'btn-submit-opacity']" @click="submitMsg">确认提交</div>
                </div>
            </div>


            <mt-popup v-model="problemVisible" position="bottom">
                <ul class="mint-popup-head">
                    <li @click="selectProblem(0)">取消</li>
                    <li @click="selectProblem(1)">确认</li>
                </ul>
                <mt-picker :slots="problem_list" @change="problemChange" value-key="name"> </mt-picker>
            </mt-popup>
        </div>
    </body>
    <!-- 引入组件库 -->
    <script src="js/vue.js"></script>
    <script src="js/axios.min.js"></script>
    <script src="js/index.js"></script>
    <script src="js/resize.js"></script>
    <script type="text/javascript">
        var vm = new Vue({
            el: '#app',
            data: {
                // 选择类型
                problem_name: '',
                problemVisible: false,
                problem_list: [{
                    flex: 1,
                    values: [{
                        "id": 11,
                        "name": "类型一"
                    }, {
                        "id": 21,
                        "name": "类型二"
                    }, {
                        "id": 21,
                        "name": "类型三"
                    }, {
                        "id": 41,
                        "name": "类型四"
                    }, {
                        "id": 51,
                        "name": "类型五"
                    }],
                    textAlign: 'center'
                }],
                ico_plus: 'images/ico-plus.png',
                ico_del: 'images/ico-del.png',
                sid: '123',
                comment: '',
                maxlen: 200,
                mobile: '',
                imgList: [],
                is_submit: false
            },
            computed: {
                lens: function() {
                    var lens = 0; // 中文算2个字
                    for (i = 0; i < this.comment.length; i++) {
                        if ((this.comment.charCodeAt(i) >= 0) && (this.comment.charCodeAt(i) <= 255))
                            lens = lens + 1;
                        else
                            lens = lens + 2;
                    }
                    return lens;
                },
                is_can: function() { //控制提交按钮
                    return (this.comment && this.mobile && this.mobile.length >= 11)
                }
            },
            created: function() {
                if (localStorage.getItem('mobile')) {
                    this.mobile = localStorage.getItem('mobile')
                }
            },
            methods: {
                // 类型弹窗
                showProblemName: function() {
                    this.problemVisible = true;
                    if (!this.problem_temp) {
                        this.problem_temp = this.problem_list[0].values[0].name;
                    }
                },
                problemChange: function(picker, values) {
                    if (picker.getSlotValue(0)) {
                        this.problem_temp = picker.getSlotValue(0).name
                    }
                },
                selectProblem: function(bool) {
                    // bool 判断 触发的是取消还是确认按钮
                    this.problem_name = bool ? this.problem_temp : this.problem_name;
                    this.problemVisible = false
                },
                // 图片上传
                fileChange: function(el) {
                    if (!el.target.files[0].size) return;
                    this.fileList(el.target.files);
                    el.target.value = '';
                },
                fileList: function(files) {
                    for (var i = 0; i < files.length; i++) {
                        this.fileAdd(files[i]);
                    }
                },
                fileAdd: function(file) {
                    var that = this;
                    var reader = new FileReader();
                    reader.readAsDataURL(file);
                    reader.onload = function() {
                        file.src = reader.result;
                        that.imgList.push({
                            file: file
                        });
                    }
                },
                fileDel: function(index) {
                    this.imgList.splice(index, 1);
                },
                //提交数据
                submitMsg: function() {
                    if (this.instance) {
                        this.instance.close()
                    }
                    if (!this.problem_name) {
                        this.instance = this.$toast({
                            message: '请选择问题类型!',
                            duration: 1000
                        });
                        return
                    }
                    if (!this.comment) {
                        this.instance = this.$toast({
                            message: '请输入您的问题或建议!',
                            duration: 1000
                        });
                        return
                    }
                    if (this.mobile.length < 11) {
                        this.instance = this.$toast({
                            message: '请输入正确的手机号码',
                            duration: 1000
                        });
                        return
                    }
                    if (this.is_submit) {
                        return false
                    }
                    this.is_submit = true;
                    localStorage.setItem('mobile', this.mobile);
                    // 整合数据
                    var formData = new FormData();
                    formData.append("platform", this.platform);
                    formData.append("sid", this.sid);
                    formData.append("mobile", this.mobile);
                    formData.append("comment", this.comment);
                    for (var i = 0; i < this.imgList.length; i++) {
                        formData.append("imgs", this.imgList[i].file);
                    }
                    // 测试打印数据
                    console.log('mobile', formData.get('mobile'));
                    console.log('comment', formData.get('comment'));
                    console.log('imgs', formData.getAll('imgs'));

                    var url = '';
                    var that = this;
                    // 模拟提交
                    axios.post(url, formData)
                        .then(function(resp) {
                            if (resp.error_code == 0) {
                                setTimeout(function() {
                                    that.is_submit = false;
                                }, 1200)
                            } else {
                                that.is_submit = true;
                            }
                        })
                        .catch(function(er) {
                            that.is_submit = false;
                        })
                }
            }
        });
    </script>
</html>



上一篇下一篇

猜你喜欢

热点阅读