parent
cee9ac73f5
commit
ad5580e307
3 changed files with 359 additions and 2 deletions
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,355 @@ |
||||
<template> |
||||
<div class="addrView"> |
||||
<div class="weizhuce d-flex" v-if="addrList.length == 0"> |
||||
<p class="c_1B f_30"> 您还未注册地址。</p> |
||||
</div> |
||||
<div class="d-flex btnDiv"> |
||||
<div type="primary" class="dialogButton primary f_12" @click="addAddr">创建新地址</div> |
||||
</div> |
||||
<div class="addrList" v-if="addrList.length != 0"> |
||||
<div class="item" v-for="(item,index) in addrList" :key="index"> |
||||
<p class="default" v-if="item.flag"><span class="f_12">默认地址</span></p> |
||||
<div class="d-flex"> |
||||
<div><span>{{item.name}}</span><span v-if="item.sex == 1">女士</span><span v-if="item.sex == 2">先生</span></div> |
||||
<div class="btnDiv"> |
||||
<span class="btn" @click="handleEdit(item)">编辑</span> |
||||
<a-popconfirm |
||||
title="确定删除吗?" |
||||
ok-text="Yes" |
||||
cancel-text="No" |
||||
@confirm="confirm1(item.id)" |
||||
@cancel="cancel" |
||||
><span class="btn">删除</span></a-popconfirm> |
||||
<a-popconfirm |
||||
title="确定将其设置为默认地址吗?" |
||||
ok-text="Yes" |
||||
cancel-text="No" |
||||
@confirm="confirm2(item.id)" |
||||
@cancel="cancel" |
||||
v-if="!item.flag" |
||||
><span class="btn">将其设置为默认地址</span></a-popconfirm> |
||||
<!-- <span class="btn" v-if="!item.flag" @click="handleDefault(item.id)">将其设置为默认地址</span>--> |
||||
</div> |
||||
</div> |
||||
<p> |
||||
{{item.detailed}} |
||||
</p> |
||||
<p><j-area-linkage disabled type="cascader" v-model="item.addr" placeholder="请选择省市区"/></p> |
||||
</div> |
||||
</div> |
||||
<a-modal |
||||
title="地址操作" |
||||
:visible="visible" |
||||
:width="800" |
||||
> |
||||
<template slot="footer"> |
||||
<a-button key="back" @click="handleCancel"> |
||||
取消 |
||||
</a-button> |
||||
<a-button key="submit" type="primary" @click="handleOk"> |
||||
确定 |
||||
</a-button> |
||||
</template> |
||||
|
||||
<template> |
||||
<a-form-model |
||||
ref="ruleForm" |
||||
:model="form" |
||||
:rules="rules" |
||||
:label-col="labelCol" :wrapper-col="wrapperCol" |
||||
class="modelForm" |
||||
> |
||||
<a-form-model-item label="称呼" > |
||||
<a-select v-model="form.sex" placeholder="请选择称呼"> |
||||
<a-select-option value="1"> |
||||
女士 |
||||
</a-select-option> |
||||
<a-select-option value="2"> |
||||
先生 |
||||
</a-select-option> |
||||
</a-select> |
||||
</a-form-model-item> |
||||
<a-form-model-item |
||||
label="姓名" |
||||
prop="name" |
||||
> |
||||
<a-input placeholder="请输入姓名" v-model="form.name" /> |
||||
</a-form-model-item> |
||||
<a-form-model-item |
||||
label="选择地址" |
||||
prop="addr" |
||||
> |
||||
<j-area-linkage type="cascader" v-model="form.addr" placeholder="请选择省市区"/> |
||||
</a-form-model-item> |
||||
<a-form-model-item |
||||
label="手机号码" |
||||
prop="phone" |
||||
> |
||||
<a-input placeholder="请输入手机号码" v-model="form.phone"> |
||||
<template slot="addonBefore"> |
||||
<span>+86 中国大陆地区</span> |
||||
</template> |
||||
</a-input> |
||||
</a-form-model-item> |
||||
<a-form-model-item label="详细地址" prop="detailed"> |
||||
<a-input v-model="form.detailed" type="textarea" /> |
||||
</a-form-model-item> |
||||
<a-form-model-item> |
||||
<a-checkbox @change="onChange" :checked="form.flag"> |
||||
设置为默认地址 |
||||
</a-checkbox> |
||||
</a-form-model-item> |
||||
</a-form-model> |
||||
</template> |
||||
</a-modal> |
||||
</div> |
||||
</template> |
||||
<script> |
||||
export default { |
||||
name: "addrView", |
||||
components: { }, |
||||
data() { |
||||
return { |
||||
visible: false, |
||||
flag:'',//当前操作是添加还是编辑,若为add是添加,为edit是编辑 |
||||
copyItem:{},//备份当行数据 |
||||
labelCol: { span: 4 }, |
||||
wrapperCol: { span: 20 }, |
||||
addrList:[ |
||||
{ |
||||
id:1, |
||||
name:'吴一', |
||||
sex:'1', |
||||
phone:'17777777777', |
||||
addr:'210521', |
||||
detailed:'黄淮学院北区', |
||||
flag:true,//是否是默认地址 |
||||
},//地址一 |
||||
{ |
||||
id:2, |
||||
name:'吴二', |
||||
sex:'2', |
||||
phone:'17777777777', |
||||
addr:'210521', |
||||
detailed:'黄淮学院北区', |
||||
flag:false,//是否是默认地址 |
||||
},//地址二 |
||||
{ |
||||
id:3, |
||||
name:'吴三', |
||||
sex:'1', |
||||
phone:'17777777777', |
||||
addr:'210521', |
||||
detailed:'黄淮学院北区', |
||||
flag:false,//是否是默认地址 |
||||
},//地址三 |
||||
],//地址列表 |
||||
addr1:'210521', |
||||
//弹窗数据 |
||||
form: { |
||||
id:'', |
||||
sex: undefined, |
||||
name: '', |
||||
addr: '', |
||||
detailed: '', |
||||
phone: '', |
||||
flag:false//是否默认地址 |
||||
}, |
||||
rules: { |
||||
name: [ |
||||
{ required: true, message: '请输入姓名', trigger: 'blur' }, |
||||
], |
||||
visit: [ |
||||
{ required: true, message: '请选择您的配送方式', trigger: 'change' }, |
||||
], |
||||
addr: [{ required: true, message: '请选择地址', trigger: 'blur' }], |
||||
detailed: [{ required: true, message: '请输入详细地址', trigger: 'blur' }], |
||||
phone: [{ required: true, message: '请输入手机号码', trigger: 'blur' }, |
||||
], |
||||
}, |
||||
}; |
||||
}, |
||||
methods: { |
||||
addAddr(){ |
||||
this.visible = true |
||||
this.flag = 'add' |
||||
}, |
||||
changeDefault(){ |
||||
this.addrList.forEach(obj =>{ |
||||
if(obj.flag){ |
||||
obj.flag = !obj.flag |
||||
} |
||||
}) |
||||
}, |
||||
clearForm(){ |
||||
this.form = { |
||||
id:'', |
||||
sex: undefined, |
||||
name: '', |
||||
addr: '', |
||||
detailed: '', |
||||
phone: '', |
||||
flag:false//是否默认地址 |
||||
} |
||||
}, |
||||
handleOk(e) { |
||||
//判断是添加地址还是修改地址 |
||||
let that = this |
||||
this.$refs.ruleForm.validate(valid => { |
||||
if (valid) {//验证通过 |
||||
if(this.flag == 'add') {//如果是新增地址 |
||||
if(this.form.flag){//修改为默认地址 |
||||
this.changeDefault() |
||||
this.addrList.unshift(this.form) |
||||
}else{//不修改为默认地址 |
||||
this.addrList.push(this.form) |
||||
} |
||||
}else if(this.flag == 'edit'){//如果是修改地址 |
||||
//查找当前索引 |
||||
let itemIndex3 = this.addrList.findIndex(item =>item.id == this.form.id) |
||||
if(this.form.flag){//如果需要修改为默认地址 |
||||
this.changeDefault() |
||||
this.form.flag = true |
||||
this.addrList[itemIndex3] = this.form |
||||
console.log("this.addrList2") |
||||
console.log(this.addrList) |
||||
}else{ |
||||
this.addrList[itemIndex3] = this.form |
||||
} |
||||
} |
||||
//清空表单 |
||||
this.clearForm() |
||||
this.flag = '' |
||||
this.visible = false; |
||||
} else {} |
||||
}); |
||||
}, |
||||
handleCancel() { |
||||
this.visible = false; |
||||
if(this.flag == 'edit'){ |
||||
let itemIndex4 = this.addrList.findIndex(item =>item.id == this.form.id) |
||||
this.addrList[itemIndex4] = this.copyItem |
||||
} |
||||
this.clearForm() |
||||
|
||||
this.flag = '' |
||||
}, |
||||
onChange(e) { |
||||
this.form.flag = e.target.checked |
||||
}, |
||||
handleEdit(item){ |
||||
this.copyItem = JSON.parse(JSON.stringify(item)); |
||||
this.visible = true |
||||
this.flag = 'edit' |
||||
this.form = item |
||||
}, |
||||
confirm1(id) { |
||||
let itemIndex = this.addrList.findIndex(item =>item.id == id) |
||||
this.addrList.splice(itemIndex,1) |
||||
}, |
||||
confirm2(id) { |
||||
this.changeDefault() |
||||
let itemIndex2 = this.addrList.findIndex(item =>item.id == id) |
||||
this.addrList[itemIndex2].flag = true |
||||
}, |
||||
cancel(e) { |
||||
this.$message.warning('已取消'); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="less" scoped> |
||||
@import '../assets/common.css'; |
||||
.modelForm{ |
||||
padding:20px 100px; |
||||
} |
||||
.addrList .j-area-linkage /deep/ .area-select{ |
||||
background-color: #fff; |
||||
border: none; |
||||
span{ |
||||
padding-left: 0; |
||||
font-size: 12px; |
||||
color:#313131; |
||||
cursor:auto; |
||||
font-weight: 500; |
||||
} |
||||
i{ |
||||
display: none; |
||||
} |
||||
} |
||||
.btnDiv{ |
||||
justify-content: center; |
||||
.dialogButton { |
||||
width: 300px; |
||||
height: 42px; |
||||
text-align: center; |
||||
line-height: 42px; |
||||
transition: all 0.2s; |
||||
} |
||||
.primary { |
||||
background: #1b1b1b; |
||||
border: 2px solid #1b1b1b; |
||||
color: #e5dfd9; |
||||
&:hover { |
||||
opacity: 0.8; |
||||
} |
||||
} |
||||
} |
||||
.addrView{ |
||||
width: 1114px; |
||||
margin:0 auto; |
||||
padding-top: 50px; |
||||
.weizhuce{ |
||||
text-align: center; |
||||
flex-direction: column; |
||||
justify-content: center; |
||||
align-items: center; |
||||
p{ |
||||
width: 300px; |
||||
} |
||||
} |
||||
.addrList{ |
||||
width: 800px; |
||||
margin: 0 auto; |
||||
.item{ |
||||
padding-top: 40px; |
||||
border-bottom: 1px solid #DADADA; |
||||
color: #1A1919; |
||||
p{ |
||||
font-size: 12px; |
||||
} |
||||
.default{ |
||||
span{ |
||||
display: inline-block; |
||||
padding: 4px 12px; |
||||
box-sizing: content-box; |
||||
background: #F8F8F8; |
||||
width: 72px; |
||||
height: 21px; |
||||
text-align: center; |
||||
line-height: 21px; |
||||
} |
||||
|
||||
} |
||||
.d-flex{ |
||||
justify-content: space-between; |
||||
font-size: 14px; |
||||
.btnDiv{ |
||||
.btn{ |
||||
cursor: pointer; |
||||
} |
||||
} |
||||
.btn{ |
||||
text-decoration: underline; |
||||
margin-right: 20px; |
||||
} |
||||
div:first-child{ |
||||
margin-bottom: 12px; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
</style> |
||||
|
Loading…
Reference in new issue