vue 添加页面表单添加编辑删除功能

实现功能:

  1. 自然人和法人切换显示各自的内容 
  2. 分别判断自然人和法人点击添加按钮判断是否有值,没有值时提示错误,有值则提交添加成功
  3. 点击编辑编辑当前内容,隐藏添加按钮,显示完成和取消按钮
  4. 点击删除当前
  5. 点击完成按钮更新当前内容
  6. 点击取消当前
/*错误提示*/
.defendant-error {
    display: block;
}
.errors {
    color: red;
    position: absolute;
    font-size: 10px;
    padding-top: 0px;
    margin-top: 0px;
    margin-bottom: 0;
    display: none;
}
<div class="tab-pane" id="tab2">
                            <div class="form-group">
                                <label class="col-md-2 control-label">被告</label>
                                <div class="col-md-3">
                                    <input name="bgName" class=" form-control " placeholder="请输入被告" v-model="defendantInfo.Name"/>
                                    <span class="defendant-error"><span class="errors" id="erName">被告不能为空,请填写</span></span>
                                </div>

                                <label class="col-md-2 control-label">诉讼身份</label>
                                <div class="col-md-3 ">
                                    <select asp-items="@DropdownHelper.GetEnumByParentName("诉讼身份","")" id="bgCaseIdentityId" targetName="CaseIdentityId" class="form-control input-sm mySelect1 " v-model="defendantInfo.CaseIdentityId"></select>
                                    <span class="defendant-error"><span class="errors" id="erCaseIdentityId">诉讼身份不能为空,请填写</span></span>
                                </div>
                            </div>
                            <div class="form-group form-inline">
                                <label class="col-md-2 control-label">自然人/法人</label>
                                <div class="col-md-3">
                                    <div class="radio"><label><input type="radio" name="bgIsLegalPerson" checked :value="true" v-model="defendantInfo.IsLegalPerson"> 自然人</label></div>
                                    <div class="radio"><label><input type="radio" name="bgIsLegalPerson" :value="false" v-model="defendantInfo.IsLegalPerson"> 法人</label></div>
                                </div>
                                

                                <label class="col-md-2 control-label" v-show="defendantInfo.IsLegalPerson">性别</label>
                                <div class="col-md-3" v-show="defendantInfo.IsLegalPerson">
                                    <div class="radio"><label><input type="radio" name="bgGender" :value="1" checked v-model="defendantInfo.Gender"> 男</label></div>
                                    <div class="radio"><label><input type="radio" name="bgGender" :value="0" v-model="defendantInfo.Gender"> 女</label></div>
                                </div>
                            </div>
                            <div class="form-group" v-show="defendantInfo.IsLegalPerson">
                                <label class="col-md-2 control-label">民族</label>
                                <div class="col-md-3">
                                    <select id="bgNationId" targetName="NationId" class="form-control input-sm mySelect1 "
                                            asp-items="@DropdownHelper.GetEnumByParentName("民族","请选择")" v-model="defendantInfo.NationId" ></select>
                                    <span class="defendant-error"><span class="errors" id="erNationId">民族不能为空,请填写</span></span>
                                 </div>

                                <label class="col-md-2 control-label">出生年月日</label>
                                <div class="col-md-3 ">
                                    <input name="bgDob" type="text" targetName="Dob" class=" form-control born" asp-format="{0:yyyy-MM-dd}" placeholder="请选择" autocomplete="off" v-model="defendantInfo.Dob" />
                                    <span class="defendant-error"><span class="errors" id="erDob">出生年月日不能为空,请填写</span></span>
                                </div>
                            </div>
                            <div class="form-group" v-show="defendantInfo.IsLegalPerson">
                                <label class="col-md-2 control-label">身份证号</label>
                                <div class="col-md-3">
                                    <input name="bgIdCard" class="form-control " placeholder="请输入身份证号" v-model="defendantInfo.IdCard"/>
                                    <span class="defendant-error"><span class="errors" id="erIdCard">身份证号不能为空,请填写</span></span>
                                </div>

                                <label class="col-md-2 control-label">居民身份证地址</label>
                                <div class="col-md-3 ">
                                    <input name="bgIdCardAddress" class="form-control " placeholder="请输入居民身份证地址" v-model="defendantInfo.IdCardAddress"/>
                                    <span class="defendant-error"><span class="errors" id="erIdCardAddress">地址不能为空,请填写</span></span>
                                </div>
                            </div>
                            <div class="form-group" v-show="!defendantInfo.IsLegalPerson">
                                <label class="col-md-2 control-label">统一社会信用代码(营业执照)</label>
                                <div class="col-md-3">
                                    <input name="bgUscc" class="form-control " placeholder="请输入统一社会信用代码" v-model="defendantInfo.Uscc"/>
                                    <span class="defendant-error"><span class="errors" id="erUscc">信用代码不能为空,请填写</span></span>
                                </div>

                                <label class="col-md-2 control-label">住所地</label>
                                <div class="col-md-3 ">
                                    <input name="bgLegalPersonAddress" class="form-control " placeholder="请输入住所地" v-model="defendantInfo.LegalPersonAddress" />
                                    
                                    <span class="defendant-error"><span class="errors" id="erLegalPersonAddress">住所地不能为空,请填写</span></span>
                                </div>
                            </div>
                            <div class="form-group" v-show="!defendantInfo.IsLegalPerson">
                                <label class="col-md-2 control-label">法定代表人</label>
                                <div class="col-md-3">
                                    <input name="bgLegalPerson" class="form-control " placeholder="请输入法定代表人" v-model="defendantInfo.LegalPerson"/>
                                    <span class="defendant-error"><span class="errors" id="erLegalPerson">法定代表人不能为空,请填写</span></span>
                                </div>

                                <label class="col-md-2 control-label">最新工商信息情况</label>
                                <div class="col-md-3 ">
                                    <input name="bgBusinessInformation" class="form-control " placeholder="请输入最新工商信息情况" v-model="defendantInfo.BusinessInformation"/>
                                    <span class="defendant-error"><span class="errors" id="erBusinessInformation">工商信息不能为空,请填写</span></span>
                                </div>
                            </div>
                            <div class="form-group add-btn text-center">
                                <button type="button" class="btn btn-sm defendantAdd" v-if="defendantIndex === -1" @@click="defendantAdd">添加</button>
                                <button type="button" class="btn btn-sm" v-if="defendantIndex > -1" @@click="defendantComplete">完成</button>
                                <button type="button" class="btn btn-sm" v-if="defendantIndex > -1" @@click="defendantCancel">取消</button>
                            </div>
                            <div class="form-group">
                                <table class="table table-hover table-bordered table-striped text-center">
                                    <thead>
                                        <tr>
                                            <th style="width:50px">序号</th>
                                            <th>被告</th>
                                            <th>诉讼身份</th>
                                            <th>自然人/法人</th>
                                            <th>性别</th>
                                            <th>民族</th>
                                            <th>出生年月日</th>
                                            <th>身份证号</th>
                                            <th>统一社会信用代码</th>
                                            <th>法定代表人</th>
                                            <th>最新工商信息情况</th>
                                            <th>居民身份证地址/住所地</th>
                                            <th>操作</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <tr v-for='(item,index) in defendantList' :key="index">
                                            <td>{
   
   {index+1}}</td>
                                            <td>{
   
   {item.Name}}</td>
                                            <td>{
   
   {item.CaseIdentity}}</td>
                                            <td>{
   
   {item.IsLegalPerson?"自然人":"法人"}}</td>
                                            <td>{
   
   {item.IsLegalPerson?(item.Gender === 1?"男":"女"):"" }}</td>
                                            <td>{
   
   {item.IsLegalPerson?(item.Nation):""}}</td>
                                            <td>{
   
   {item.IsLegalPerson?(item.Dob):""}}</td>
                                            <td>{
   
   {item.IsLegalPerson?(item.IdCard):""}}</td>
                                            <td>{
   
   {item.Uscc}}</td>
                                            <td>{
   
   {item.LegalPerson}}</td>
                                            <td>{
   
   {item.BusinessInformation}}</td>
                                            <td>{
   
   {(item.LegalPersonAddress === null?"": item.LegalPersonAddress) + (item.IdCardAddress === null?"": item.IdCardAddress) }}</td>
                                            <td>
                                                <button class="btn  btn-primary defendantEditor btn-sm" @@click="defendantEditor(item,$event,index)">编辑</button>
                                                <button class="btn  btn-danger defendantDel btn-sm" @@click="defendantDel(item,index)">删除</button>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                                <div style="display:none" v-for='(item,index) in defendantList' :key="index">
                                    
                                    <input v-bind:name="'Defendants['+index+'].Name'" v-bind:value="item.Name" />
                                    <input v-bind:name="'Defendants['+index+'].CaseIdentityId'" v-bind:value="item.CaseIdentityId" />
                                    <input v-bind:name="'Defendants['+index+'].IsLegalPerson'" v-bind:value="item.IsLegalPerson" />
                                    <input v-bind:name="'Defendants['+index+'].Gender'" v-bind:value="item.Gender" />
                                    <input v-bind:name="'Defendants['+index+'].NationId'" v-bind:value="item.NationId" />
                                    <input v-bind:name="'Defendants['+index+'].Dob'" v-bind:value="item.Dob" />
                                    <input v-bind:name="'Defendants['+index+'].IdCard'" v-bind:value="item.IdCard" />
                                    <input v-bind:name="'Defendants['+index+'].Uscc'" v-bind:value="item.Uscc" />
                                    <input v-bind:name="'Defendants['+index+'].LegalPerson'" v-bind:value="item.LegalPerson" />
                                    <input v-bind:name="'Defendants['+index+'].BusinessInformation'" v-bind:value="item.BusinessInformation" />
                                    <input v-bind:name="'Defendants['+index+'].LegalPersonAddress'" v-bind:value="item.LegalPersonAddress" />
                                    <input v-bind:name="'Defendants['+index+'].IdCardAddress'" v-bind:value="item.IdCardAddress" />
                                </div>
                            </div>
                        </div>
<script>

    $(document).ready(function () {
        
        $(".choosetime").datetimepicker({
            width: "100%",
            autoclose: true,
            format: 'yyyy-mm-dd',
            language: 'zh-CN',
            minView: 2 //日期选择
        });
        $(".born").datetimepicker({
            width: "100%",
            autoclose: true,
            format: 'yyyy-mm-dd',
            language: 'zh-CN',
            minView: 2 //日期选择
        }).on("change", function (e) {

            Vue.set(app.defendantInfo, $(e.currentTarget).attr("targetName"), e.currentTarget.value);
        });
        $(".mySelect").select2({
            placeholder: '请选择', //默认文字提示
            language: "zh-CN",
            width: "100%",
            allowClear: true
        });
        $(".mySelect1").select2({
            placeholder: '请选择', //默认文字提示
            language: "zh-CN",
            width: "100%",
            allowClear: true
        }).on("change",function(e){

            Vue.set(app.defendantInfo, $(e.currentTarget).attr("targetName"), e.currentTarget.value);
        });
        
    
    
    var app = new Vue({
        el: '#app',
        data: function() {
            return {
                defendantIndex: -1,
                defendantInfo: {
                    Name: "", //名字
                    //CaseIdentity: "", //身份
                    CaseIdentityId: null, //身份
                    IsLegalPerson: true, //自然人法人
                    Gender: 1, //性别
                    NationId: null, //民族
                    //Nation: "", //民族
                    Dob: "", //出生
                    IdCard: "", //身份证
                    IdCardAddress: "", //身份地址
                    Uscc: "", //统一代码
                    LegalPersonAddress: "", //住所地
                    LegalPerson: "", //法定代表人
                    BusinessInformation: "" //工商信息
                },
                defendantList: [],
                naturalPerson: [
                    "Name", //名字
                    "CaseIdentityId", //身份
                    "NationId", //民族
                    "Dob", //出生
                    "IdCard", //身份证
                    "IdCardAddress" //身份地址
                ],
                LegalPerson: [
                    "Name", //名字
                    "CaseIdentityId", //身份
                    "Uscc", //统一代码
                    "LegalPersonAddress", //住所地
                    "LegalPerson", //法定代表人
                    "BusinessInformation" //工商信息
                ]
        }
        },
        methods: {
            validPerson: function() {
                let valid = true;
                if (this.defendantInfo.IsLegalPerson) {
                    for (var key in this.naturalPerson) {
                        if (this.defendantInfo[this.naturalPerson[key]] === null || this.defendantInfo[this.naturalPerson[key]] === "") {
                            $("#er" + this.naturalPerson[key]).show();
                            valid = false;
                        } else {
                            $("#er" + this.naturalPerson[key]).hide();
                        }
                    }

                    this.defendantInfo.Uscc = "";
                    this.defendantInfo.LegalPersonAddress = "";
                    this.defendantInfo.LegalPerson = "";
                    this.defendantInfo.BusinessInformation = "";
                } else {
                    for (var key in this.LegalPerson) {
                        if (this.defendantInfo[this.LegalPerson[key]] === null || this.defendantInfo[this.LegalPerson[key]] === "") {
                            $("#er" + this.LegalPerson[key]).show();
                            valid = false;
                        } else {
                            $("#er" + this.LegalPerson[key]).hide();
                        }
                    }
                    this.defendantInfo.NationId = null;
                    this.defendantInfo.Dob = "";
                    this.defendantInfo.IdCard = "";
                    this.defendantInfo.IdCardAddress = "";
                }
                return valid;

            },
            defendantAdd: function(e) {
                e.preventDefault(); 
                if (this.validPerson() === false) return;

                var securityList = {
                    Name: this.defendantInfo.Name,
                    CaseIdentityId: this.defendantInfo.CaseIdentityId,
                    CaseIdentity: $("#bgCaseIdentityId").find("option:selected").text(),
                    IsLegalPerson: this.defendantInfo.IsLegalPerson,
                    Gender: this.defendantInfo.Gender,
                    NationId: this.defendantInfo.NationId,
                    Nation: $("#bgNationId").find("option:selected").text(),
                    Dob: this.defendantInfo.Dob,
                    IdCard: this.defendantInfo.IdCard,
                    IdCardAddress: this.defendantInfo.IdCardAddress,
                    Uscc: this.defendantInfo.Uscc,
                    LegalPersonAddress: this.defendantInfo.LegalPersonAddress,
                    LegalPerson: this.defendantInfo.LegalPerson,
                    BusinessInformation: this.defendantInfo.BusinessInformation
                }
                this.defendantList.push(securityList);
                this.defendantCancel(e);
            },
            defendantEditor(item, $event, index) {
                this.defendantInfo = Object.assign(this.defendantInfo, item);
                //this.defendantInfo = item;
                this.defendantIndex = index;
                this.$nextTick(() => {
                    $(".mySelect1").change();
                });
            },
            defendantDel(item,index) {
               
                this.defendantList.removeItem(item);
                
                if (this.defendantIndex === index) {
                    this.defendantCancel(event);
                }
            },
            defendantComplete(e) {
                e.preventDefault();
                if (this.validPerson() === false) return;

                let editItem = this.defendantList[this.defendantIndex];
                editItem.Name = this.defendantInfo.Name;
                editItem.CaseIdentityId = this.defendantInfo.CaseIdentityId;
                editItem.CaseIdentity = $("#bgCaseIdentityId").find("option:selected").text();
                editItem.IsLegalPerson = this.defendantInfo.IsLegalPerson;
                editItem.Gender = this.defendantInfo.Gender;
                editItem.NationId = this.defendantInfo.NationId;
                editItem.Nation = $("#bgNationId").find("option:selected").text();
                editItem.Dob = this.defendantInfo.Dob;
                editItem.IdCard = this.defendantInfo.IdCard;
                editItem.IdCardAddress = this.defendantInfo.IdCardAddress;
                editItem.Uscc = this.defendantInfo.Uscc;
                editItem.LegalPersonAddress = this.defendantInfo.LegalPersonAddress;
                editItem.LegalPerson = this.defendantInfo.LegalPerson;
                editItem.BusinessInformation = this.defendantInfo.BusinessInformation;

                this.defendantCancel(e);
            },
            defendantCancel(e) {
                e.preventDefault();
                var temp1 = {
                    Name: "",
                    CaseIdentityId: null,
                    IsLegalPerson: true,
                    Gender: 1,
                    NationId: null,
                    Dob: "",
                    IdCard: "",
                    IdCardAddress: "",
                    Uscc: "",
                    LegalPersonAddress: "",
                    LegalPerson: "",
                    BusinessInformation: ""
                }

                this.defendantInfo = temp1;
                this.defendantIndex = -1;
                this.$nextTick(() => {
                    $(".errors").hide();
                    $(".mySelect1").change();
                });
            }
        }
    });
</script>

猜你喜欢

转载自blog.csdn.net/SmartJunTao/article/details/107663256