vue2+thinkphp5表单提交

admin3年前vue403
<style>
            #app, #app * {transition:  all .5s;}
            #app li{width: 32%; margin-right: 2%; margin-bottom: 20px;}
            #app li:nth-child(3n) {margin-right: 0;}
            .w100 {width: 100% !important; margin-right: 0 !important;}
            .flex {display: -webkit-flex; display: flex; flex-wrap: wrap;}
            .flexJb {display: -webkit-flex; display: flex; flex-wrap: wrap; justify-content: space-between;}
            #app li .input{width: 100%; height: 45px; border: 1px solid #ccc; padding: 0 5px;}
            #app li .textarea{width: 100%; height: 145px; border: 1px solid #ccc; padding: 0 5px;}
            #app li .select{width: 100%; height: 45px; border: 1px solid #ccc; padding: 0 5px; background: #fff;}
            #app li .input:focus{border: 1px solid #0c4da2; box-shadow: none;}
            #app li dl, #app li dt, #app li dd {width: 100%;}
            #app li dl dt{font-size: 18px; line-height: 180%; margin-bottom: 15px;}
            #app li dd input{width: 17% !important; margin-right: 1.25%; margin-bottom: 20px;}
            #app li dd input:nth-child(5n) {margin-right: 0;}
            #app li .inputs{flex-wrap: nowrap; width: 100%; align-items: center;}
            #app li .inputs p{width: 100px;}
            #app .button{width: 80px; height: 45px; background: #4369ab; border: 0; border-radius: 5px; font-size: 16px; color: #fff; margin-right: 20px;}
            @media (max-width: 1300px) {
                #app li{width: 100%; margin-right: 0;}
                #app li:nth-child(3n) {margin-right: 0}
                #app li dd input{width: 48% !important;}
                #app li dd input:nth-child(5n){margin-right: 1.25% !important;}
            }
        </style>
<div class="n_jltd c" id="app">
                    <div class="n_jltd01">
                        <div class="n_jltd02">简历投递</div>
                        <div class="n_jltd03 jld">
                            <form method="POST" {$field.formhidden} action="{$field.action}" onsubmit="return checkForm();" autocomplete="off">
                                <ul class="flex">
                                    <li class="flex" v-for="(item, k) in form" :class="item.type == 'arr' || item.type == 'textarea'?'w100':''">
                                        <input class="input" type="text" :name="item.name" :placeholder="item.title" :maxlength="item.maxlength" v-if="!item.type" v-model="item.value">
                                        <input class="input" type="number" :name="item.name" :placeholder="item.title" :maxlength="item.maxlength" v-if="item.type == 'number'" v-model="item.value">
                                        <div class="flexJb inputs" v-if="item.type == 'date'">
                                            <p>{{item.title}}</p><input class="input" type="date" :name="item.name" :placeholder="item.title" :maxlength="item.maxlength" v-model="item.value">
                                        </div>
                                        <select :name="item.name" class="select" v-if="item.type == 'select'" v-model="item.value">
                                            <option v-for="item2 in item.options" :value="item2.value" :slected="item.value">{{item2.title}}</option>
                                        </select>
                                        
                                        <dl v-if="item.type == 'arr'">
                                            <dt>
                                                {{item.title}}
                                            </dt>
                                            <dd class="flex" v-for="(item2, k2) in item.elements">
                                                <input class="input" type="text" v-for="(item3, k3) in item2" :name="item.name" :placeholder="item3.title" v-model="item3.value">
                                                <button type="button" class="button" @click="delThisRow(k, k2)" style="margin-left: 20px">删除</button>
                                            </dd>
                                            <button type="button" class="button" @click="addRow(k)" style="margin-top: 20px;">新增</button>
                                        </dl>
                                        <dl v-if="item.type == 'textarea'">
                                            <dt>{{item.title}}</dt>
                                            <dd class="flex w100">
                                                <textarea class="textarea" type="date" :name="item.name" :placeholder="item.title" :maxlength="item.maxlength" v-if="item.type == 'textarea'" v-model="item.value"></textarea>
                                            </dd>
                                        </dl>
                                    </li>
                                </ul>
                                <input type="button" class="tjiao" value=" 提交 " @click="submit">
                                &nbsp;
                                <input class="qxiao" type="reset" name="reset" value=" 重置 ">
                            </form>

                        </div>
                    </div>
                </div>


                <script>
                    new Vue({
                        el: '#app',
                        data: {
                            isLoading: 1,
                            form: [
                                {name: 'title', title: '申请职位', maxlength: 50, value: '', required: 1},
                                {name: 'mobile', title: '手机号', type: 'number', maxlength: 11, value: '', required: 1, valid: /^1\d{10}$/},
                                {name: 'cname', title: '中文名', maxlength: 10, value: '', required: 1},
                                {name: 'ename', title: '英文名', maxlength: 10, value: '', required: 1},
                                {name: 'sex', title: '性别', type: 'select', value: '', 'options': [{title: '请选择性别', value: ''}, {title: '男', value: '男'}, {title: '女', value: '女'} ], value: '', required: 1},
                                {name: 'birthname', title: '出生日期', type: 'date', value: '', maxlength: 10, required: 1},
                                {name: 'age', title: '年龄', type: 'number', value: '', maxlength: 3, required: 1},
                                {name: 'race', title: '民族', value: '', maxlength: 20, required: 1},
                                {name: 'ms', title: '婚姻状况', value: '', maxlength: 1, required: 1},
                                {name: 'height', title: '身高(cm)', type: 'number', value: '', maxlength: 10, required: 1},
                                {name: 'weight', title: '体重(kg)', type: 'number', value: '', maxlength: 10, required: 1},
                                {name: 'leye', title: '视力(左)', type: 'number', value: '', maxlength: 5, required: 1},
                                {name: 'reye', title: '视力(右)', type: 'number', value: '', maxlength: 5, required: 1},
                                {name: 'colorblind', title: '是否色盲', type: 'select', 'options': [{title: '请选择是否色盲', value: ''}, {title: '否', value: '否'}, {title: '是', value: '是'} ], value: '', maxlength: 1, required: 1},
                                {name: 'city', title: '出生城市', maxlength: 50, value: '', maxlength: 50, required: 1},
                                {name: 'passport_no', title: '护照号码', maxlength: 50, value: '', maxlength: 30, required: 0},
                                {name: 'issue', title: '签发日期', type: 'date', maxlength: 50, value: '', maxlength: 10, required: 0},
                                {name: 'de', title: '有效期至', type: 'date', maxlength: 50, value: '', maxlength: 10, required: 0},
                                {name: 'idcard', title: '身份证号码', maxlength: 50, value: '', required: 1},
                                {name: 'edus', title: '教育经历', type: 'arr', elements: [], template: [{title: '毕业学校', value: ''}, {title: '开始时间', value: ''}, {title: '截止时间', value: ''}, {title: '专业', value: ''}, {title: '学历', value: ''}], required: 0},
                                {name: 'works', title: '工作经历', type: 'arr', elements: [], template: [{title: '工作单位', value: ''}, {title: '开始时间', value: ''}, {title: '截止时间', value: ''}, {title: '行业', value: ''}, {title: '职位', value: ''}, {title: '工作职责', value: '', type: 'textarea'}], required: 0},
                                {name: 'skills', title: '技能', type: 'textarea', maxlength: 150, value: '', required: 0},
                                {name: 'self', title: '自我评价', type: 'textarea', maxlength: 150, value: '', required: 0}
                            ]
                            
                        },
                        mounted() {

                        },
                        methods: {
                            reset() {
                                this.form = [
                                {name: 'title', title: '申请职位', maxlength: 50, value: '', required: 1},
                                {name: 'mobile', title: '手机号', type: 'number', maxlength: 11, value: '', required: 1, valid: /^1\d{10}$/},
                                {name: 'cname', title: '中文名', maxlength: 10, value: '', required: 1},
                                {name: 'ename', title: '英文名', maxlength: 10, value: '', required: 1},
                                {name: 'sex', title: '性别', type: 'select', value: '', 'options': [{title: '请选择性别', value: ''}, {title: '男', value: '男'}, {title: '女', value: '女'} ], value: '', required: 1},
                                {name: 'birthname', title: '出生日期', type: 'date', value: '', maxlength: 10, required: 1},
                                {name: 'age', title: '年龄', type: 'number', value: '', maxlength: 3, required: 1},
                                {name: 'race', title: '民族', value: '', maxlength: 20, required: 1},
                                {name: 'ms', title: '婚姻状况', value: '', maxlength: 1, required: 1},
                                {name: 'height', title: '身高(cm)', type: 'number', value: '', maxlength: 10, required: 1},
                                {name: 'weight', title: '体重(kg)', type: 'number', value: '', maxlength: 10, required: 1},
                                {name: 'leye', title: '视力(左)', type: 'number', value: '', maxlength: 5, required: 1},
                                {name: 'reye', title: '视力(右)', type: 'number', value: '', maxlength: 5, required: 1},
                                {name: 'colorblind', title: '是否色盲', type: 'select', 'options': [{title: '请选择是否色盲', value: ''}, {title: '否', value: '否'}, {title: '是', value: '是'} ], value: '', maxlength: 1, required: 1},
                                {name: 'city', title: '出生城市', maxlength: 50, value: '', maxlength: 50, required: 1},
                                {name: 'passport_no', title: '护照号码', maxlength: 50, value: '', maxlength: 30, required: 0},
                                {name: 'issue', title: '签发日期', type: 'date', maxlength: 50, value: '', maxlength: 10, required: 0},
                                {name: 'de', title: '有效期至', type: 'date', maxlength: 50, value: '', maxlength: 10, required: 0},
                                {name: 'idcard', title: '身份证号码', maxlength: 50, value: '', required: 1},
                                {name: 'edus', title: '教育经历', type: 'arr', elements: [], template: [{title: '毕业学校', value: ''}, {title: '开始时间', value: ''}, {title: '截止时间', value: ''}, {title: '专业', value: ''}, {title: '学历', value: ''}], required: 0},
                                {name: 'works', title: '工作经历', type: 'arr', elements: [], template: [{title: '工作单位', value: ''}, {title: '开始时间', value: ''}, {title: '截止时间', value: ''}, {title: '行业', value: ''}, {title: '职位', value: ''}, {title: '工作职责', value: '', type: 'textarea'}], required: 0},
                                {name: 'skills', title: '技能', type: 'textarea', maxlength: 150, value: '', required: 0},
                                {name: 'self', title: '自我评价', type: 'textarea', maxlength: 150, value: '', required: 0}
                            ];
                            },
                            addRow(k) {
                                var template = JSON.parse(JSON.stringify(this.form[k].template));
                                this.form[k].elements.push(template);
                            },
                            delThisRow(k, k2) {
                                var t = this;
                                var elements = [];
                                t.form[k]['elements'].forEach(function (item, i) {
                                    if(k2 != i) {
                                        elements.push(t.form[k]['elements'][i]);
                                    }
                                });
                                t.$set(t.form[k], 'elements', elements);
                            },
                            submit: function () {
                                var t = this;
                                var isError = 0;
                                t.form.forEach(function (item, k) {
                                    if(item.required == 1) {
                                        if(isError == 0) {
                                            if(item.value == '') {
                                                isError = 1;
                                                document.querySelector('input[name='+item.name+']').focus();
                                                layer.msg('请输入'+item.title);
                                                return false;
                                            }
                                            if(item.valid != undefined) {
                                                if(!item.valid.test(item.value)) {
                                                isError = 1;
                                                document.querySelector('input[name='+item.name+']').focus();
                                                layer.msg('请输入正确的'+item.title);
                                                return false;
                                                }
                                            }
                                        }  
                                    }
                                })
                                if(isError == 0) {
                                    $.ajax({
                                        url: "{:url('api/Ajax/resume_post')}",
                                        type: 'post',
                                        dataType: 'JSON',
                                        data: {_ajax: 1, data: t.form},
                                        success: function(res){
                                            if(res.code == 0) {
                                                layer.msg(res.msg);
                                                return;
                                            }else {
                                                t.reset();
                                                layer.msg('您的简历已成功提交');
                                            }
                                        }
                                    });
                                }
                            }
                        }
                    })
                </script>
/**
     * 提交简历
     * @return [type] [description]
     */
    public function resume_post()
    {
        if (IS_AJAX) {
            $post = input('post.');
            $datas = $post['data'];
            if(empty($datas)) $this->error('请填写完整的简历信息');
            if(empty($datas[0]['value'])) {
                $this->error('请填写'.$datas[0]['title']);
            }
            foreach($datas as $k => $v) {
                if($k != 0) {
                    if($v['required'] == 1 && empty($v['value'])) {
                        $this->error('请填写'.$v['title']);
                    }
                    switch($v['type']) {
                        case 'arr':
                            $data2[$v['name']] = !empty($v['elements'])?serialize($v['elements']):'';
                            break;
                        default:
                            $data2[$v['name']] = $v['value'];
                            break;
                    }
                }
            }
            $add_time = time();
            $click = 0;
            $data['typeid'] = 18;
            $data['title'] = $datas[0]['value'];
            $data['channel'] = 118;
            $data['add_time'] = time();
            $data['update_time'] = time();
            $id = M('archives')->insertGetId($data);
            if($id) {
                $data2['aid'] = $id;
                $data2['add_time'] = time();
                $data2['update_time'] = time();
                @M('jianli_content')->insert($data2);
                $this->clear_cache();
                $this->success('');
            }else {
                $this->error('提交失败,请重试');
            }
        }
        abort(404);
    }


相关文章

vue自定义组件实现v-model(含vue3)

https://www.cnblogs.com/cl1998/p/15953250.html...

vue获取当前日历和星期

currentTime: function () {         var d = new Date(), str = '';&nb...

Vue使用watch监听数组或对象

1、普通的watch12345678910data() {    return {      &nb...

vue滚动加载列表

new Vue({    el: '#app',    data: {  &n...

在VUE中使用swiper

npm i swiper<template>   <swiper     :slides-per-...

$nextTick()的理解

简单理解Vue中的nextTick 简单理解Vue中的nextTick$nextTick()的理解 $nextTick()的理解 错误示例1:test.html<!DOCTYPE html>...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。