You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

671 lines
14 KiB

2 weeks ago
<template>
<view class="page">
<div class="back"></div>
<view class="wrap">
<view class="titleImg">
<view class="user">
6 days ago
<uni-icons type="person-filled" size="28" color="#fff"></uni-icons>
<view class="username">
<p class="p1">{{loginName}}{{deptName}} {{lxdh?'—'+lxdh:''}}</p>
2 weeks ago
</view>
6 days ago
</view>
<view class="user" v-if="psdz">
<uni-icons type="location-filled" size="28" color="#fff"></uni-icons>
2 weeks ago
<view class="username">
6 days ago
<p class="p1">{{psdz}}</p>
2 weeks ago
</view>
</view>
</view>
6 days ago
<view class="adrcon">
<view class="topcon">
<view class="tleft">常用地址</view>
<view class="tright" @click="gotoadd">
<uni-icons type="plusempty" size="14" color="#FFF"></uni-icons>
</view>
</view>
<view class="skcon" v-if="myaddresslist.length==0">
暂无常用地址请添加~~
</view>
<view class="scroll" v-else>
<view class="scell">
<view v-for="(item, index) in myaddresslist" :key="index" class="sitem">
<view class="lcon">
<view class="sname">
<text>{{item.userName}}({{item.userCode}})</text>
<text>{{ item.departCode?retType(item.departCode,1):''}}</text>
</view>
<view class="sinfo">
{{item.workshop+item.location+item.address}}
</view>
</view>
<view class="opecon">
<uni-icons type="trash-filled" size="25" color="#999999" @click="delDo(item.id)"></uni-icons>
</view>
</view>
<uni-load-more v-if="loadStatus!=='noMore'" iconType="circle" :status="loadStatus" />
</view>
</view>
2 weeks ago
</view>
</view>
6 days ago
<u-toast ref="uToast" />
<!-- 添加 -->
<!-- 弹框 -->
<uni-popup ref="share" type="share">
<view class="allcon">
<view class="xcon">
<view class="xcell cur" @click="saveClick()"></view>
<view class="rclose" @tap="_cancel"></view>
</view>
<view class="hcon">
<view class="htitle">
<u-search class="searchinput" v-model="searchKey" @change="searchchange" @custom="searchcustom" placeholder="请输入地址查询"
shape="square" bg-color="#EFF4F9" :clearabled="true" :show-action="showAction" input-align="left" @clear="clear"></u-search>
</view>
</view>
<view class="selcon">
<radio-group class="checklist-group" @change="chagne">
<view class="sitem" v-for="(item,index) in clistnow" :key="index">
<view class="conright">
<view class="adress">
{{index+1}}
</view>
<view class="sname">
{{retType(item.departCode,1)}}
</view>
<view class="adress">
{{item.workshop}}
</view>
<view class="adress">
{{item.location}}
</view>
<view class="adress">
{{item.address}}
</view>
</view>
<view class="selbtn">
<radio :value="item.id" :checked="item.isChecked" />
</view>
</view>
</radio-group>
<view class="lineb"></view>
</view>
</view>
</uni-popup>
2 weeks ago
</view>
</template>
6 days ago
<script>
export default {
2 weeks ago
data() {
return {
loginName:"",
deptName:"",
6 days ago
lxdh:"",
psdz:"",
depts:[],
loadStatus:'more',
myaddresslist:[],
address:[],
clistnow:[],
clistall:[],
searchKey:"",
showAction:false,
seladr:null
2 weeks ago
}
},
onLoad() {
6 days ago
var user= JSON.parse(uni.getStorageSync("user"));
var yhms=user.yhms?user.yhms:"";
this.loginName=yhms;
var bmmc= uni.getStorageSync("bmmc");
this.deptName=bmmc?bmmc:"";
this.lxdh=user.lxdh?user.lxdh:"";
this.psdz=user.psdz?user.psdz:"";
this.$forceUpdate();
this.getTypes();
2 weeks ago
},
onShow() {
if (!uni.getStorageSync("token")) {
uni.showToast({
title: '登录已失效!请您重新登录!',
duration: 2000,
icon: "none"
});
setTimeout(function() {
uni.redirectTo({
url: '/pages/login/index'
});
}, 2000);
}
6 days ago
try{
this.getList();
}
catch(e){
this.myaddresslist=[];
console.log(e);
2 weeks ago
}
},
methods: {
handleImageError(e,index){
console.log(e,index);
this.icon= require("@/static/images/icon.png");
this.$forceUpdate();
},
6 days ago
async delDo(id){
var _this=this;
try{
uni.showModal({
title: '提示',
content: '确定要删除此常用地址吗?',
cancelText: '取消',
confirmText: '确定',
success: ress => {
if (ress.confirm) {
_this.delDoDo(id);
}
}
});
}
catch{
uni.showToast({
title: '收件地址删除失败!',
icon: 'error',
duration: 2000
});
}
2 weeks ago
},
6 days ago
async delDoDo(id) {
2 weeks ago
uni.showLoading({
6 days ago
title: '数据删除中...'
2 weeks ago
});
6 days ago
const {data: res} = await uni.$http.get('/userAddr/removeById', {id:id});
if(res&&res.success){
uni.showToast({
title: '此地址已删除!',
icon: 'success',
duration: 2000
});
this.myaddresslist=[];
this.loadStatus="more";
this.getList();
}
else{
uni.showToast({
title: '此地址删除失败!请重试',
icon: 'error',
duration: 2000
})
}
2 weeks ago
},
6 days ago
gotoadd(){
this.clistall=[];
this.$forceUpdate();
this.address.forEach(cell=>{
var ifadd=0;
this.myaddresslist.forEach(item=>{
if(item.id==cell.id){
ifadd=1
2 weeks ago
}
6 days ago
});
if(ifadd==0){
this.clistall.push(cell);
this.$forceUpdate();
2 weeks ago
}
});
6 days ago
this._show();
2 weeks ago
},
6 days ago
async getList() {
const {data: res} = await uni.$http.get('/userAddr/myAddr');
if(res.data&&res.data.length>0){
this.myaddresslist=res.data;
2 weeks ago
this.$forceUpdate();
6 days ago
this.loadStatus="noMore";
}
else{
this.myaddresslist=[];
this.$forceUpdate();
this.loadStatus="noMore";
// 测试数据
// this.myaddresslist=[{address : "八区2",
// departCode : "02",
// id : "91CABDDF00314651BDBC47B389F3981D",
// location : "八区2",
// workshop :"二工场",
// userName:"管系集配",
// userCode:"tuopan"}]
2 weeks ago
}
},
6 days ago
getTypes() {
//获取数据字典
this.depts=[];
var commondata = uni.getStorageSync("commondata");
if(commondata){
var data = JSON.parse(commondata);
if(data){
this.depts=data.depts;
this.$forceUpdate();
// 地址
if(data.address&&data.address.length>0){
var user = JSON.parse(uni.getStorageSync("user"));
var bmbm = user.bmbm?user.bmbm:''; // '02'; //
var workshop = user.workshop?user.workshop:'';
data.address.forEach(cell=>{
if(bmbm==cell.departCode){
if(workshop){
if(workshop==cell.workshop){
this.address.push(cell);
this.$forceUpdate();
}
}
else{
this.address.push(cell);
this.$forceUpdate();
}
}
2 weeks ago
});
}
6 days ago
console.log("address",this.address);
2 weeks ago
}
}
6 days ago
else{
this.depts=[];
this.address=[];
}
2 weeks ago
},
6 days ago
retType(type,str) {
var rets = '';
if(str==1){
// 部门
this.depts.forEach((cell,idx)=>{
if(type==cell.departCode){
rets=cell.departName;
return;
}
});
}
if(!rets){
rets=type
}
return rets;
2 weeks ago
},
6 days ago
// 添加地址
saveClick(){
if(this.seladr){
this.addDo();
}
else{
uni.showModal({
title: '提示',
content: '请选择需要添加的地址!',
cancelText: '取消',
confirmText: '确定',
success: ress => {
}
});
}
2 weeks ago
},
6 days ago
async addDo() {
uni.showLoading({
title: '数据提交中...'
});
const {data: res} = await uni.$http.post('/userAddr/save', {
departCode:this.seladr.departCode,
workshop:this.seladr.workshop,
location:this.seladr.location,
address:this.seladr.address,
2 weeks ago
});
6 days ago
if(res&&res.success){
this._hide();
uni.showToast({
title: '此地址已添加!',
icon: 'success',
duration: 2000
});
this.myaddresslist=[];
this.loadStatus="more";
this.getList();
}
else{
uni.showModal({
title: '提示',
content: res.message?res.message:'此地址添加失败!请重试!',
cancelText: '取消',
confirmText: '确定',
success: ress => {
}
});
}
2 weeks ago
},
6 days ago
searchchange(value) {
// 搜索框内容变化时会触发此事件value值为输入框的内容
if(value){
this.showAction=true;
this.$forceUpdate();
}
},
searchcustom(value) {
if (this.searchKey) {
this.clistall.forEach((v, i) => {
this.clistall[i].isChecked = false;
});
this.clistnow = this.clistall.filter((p) => {
//filter过滤的意思这个是过滤函数将每一项符合结果的值返回到personList
return ( p.address.indexOf(this.searchKey) !== -1 );
});
this.$forceUpdate();
}
},
clear() {
this.showAction=false;
this.clistnow=[];
this.clistall.forEach((v, i) => {
this.clistall[i].isChecked = false;
this.clistnow.push(this.clistall[i]);
2 weeks ago
});
6 days ago
},
_initTree(){
this.clistnow=[];
this.clistall.forEach((v, i) => {
this.clistall[i].isChecked = false;
this.clistnow.push(this.clistall[i]);
});
this.$forceUpdate();
},
chagne(e){
var rt= null;
if(e.detail.value){
this.seladr=null;
this.$forceUpdate();
this.clistnow.forEach(cell=>{
if(cell.id==e.detail.value){
this.seladr=cell;
this.$forceUpdate();
}
});
}
},
_show() {
this._initTree();
this.$refs.share.open();
this.$forceUpdate();
},
_hide() {
this.$refs.share.close();
},
_cancel() {
this._hide();
},
2 weeks ago
}
}
</script>
<style lang="scss">
.titleImg {
6 days ago
padding:30rpx;
2 weeks ago
color: #fff;
width: 100%;
background-size: 100%;
position: relative;
background-image: url(@/static/images/mebackimg.jpg);
.user {
position: relative;
display: flex;
flex-direction: row;
.username {
6 days ago
line-height: 60rpx;
margin-left: 10rpx;
2 weeks ago
.p1 {
6 days ago
font-size: 32rpx;
2 weeks ago
}
.p2 {
font-size: 22rpx;
opacity: 0.7;
margin-top: 10rpx;
}
}
}
6 days ago
2 weeks ago
}
6 days ago
.adrcon{
display: flex;
flex-direction: column;
background: #F5F5F5;
padding: 20rpx;
margin: 0;
}
.topcon{
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 10rpx;
.tleft{
font-weight: 400;
font-size: 28rpx;
color: #23262F;
}
.tright{
width: 160rpx;
height: 50rpx;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
background: #3690ff;
border-radius: 8rpx 8rpx 8rpx 8rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
2 weeks ago
}
}
6 days ago
.skcon{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #23262F;
width: 100%;
padding: 20rpx;
border-top: 1rpx dotted #f0f0f0;
2 weeks ago
}
6 days ago
.submitcon{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 150rpx;
}
.btn{
margin: 30rpx auto;
font-size: 32rpx;
font-family: PingFang SC-Medium, PingFang SC;
font-weight: 500;
color: #FCFCFD;
width: 560rpx;
height: 76rpx;
line-height: 76rpx;
background: #3690ff;
box-shadow: 0rpx 12rpx 64rpx 2rpx rgba(54,144,255,0.4);
border-radius: 10rpx;
opacity: 1;
&::after{
border:none;
}
}
.scroll{
width: 100%;
2 weeks ago
position: relative;
6 days ago
display: block;
margin-bottom: 30rpx;
2 weeks ago
margin-top: 20rpx;
}
6 days ago
.scell{
display: flex;
background-color: #F5F5F5;
padding: 0 10rpx;
flex-direction: column;
.sitem {
position: relative;
display: flex;
flex-direction: row;
align-items: center;
background-color: #FFFFFF;
margin-bottom: 20rpx;
border-radius: 16rpx;
.lcon{
display: flex;
flex: 1;
flex-direction: column;
}
.opecon{
position: absolute;
right: 20rpx;
bottom: 20rpx;
}
.sname{
font-size: 30rpx;
font-weight: 600;
color: rgb(29, 29, 29);
padding: 24rpx;
justify-content:space-between;
align-items: center;
display: flex;
.tip{
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
width: 80rpx;
height: 48rpx;
text-align: center;
line-height: 50rpx;
background: #3690ff;
border-radius: 24rpx;
margin-left: 10rpx;
}
}
.sinfo{
padding: 0 24rpx 24rpx;
font-size: 26rpx;
color:rgb(116, 116, 116);
line-height: 40rpx;
}
}
2 weeks ago
}
6 days ago
::v-deep.uni-radio-input-checked::before{
display: none!important;
}
.allcon{
height: calc((0.8*100vh));
min-height: 300rpx;
overflow: hidden;
background-color: #FFFFFF;
2 weeks ago
}
6 days ago
.xcon{
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
padding: 20rpx 20rpx 0 20rpx;
.xcell{
border: 1rpx solid #ddd;
color: #949494;
margin-right: 20rpx;
padding: 10rpx 20rpx;
border-radius: 10rpx;
}
.xcell.cur{
color: #fff;
background-color: #007aff;
border: 1rpx solid #007aff;
}
}
.hcon{
display: flex;
flex-direction: row;
padding: 20rpx;
.htitle{
flex:1;
justify-content: flex-start;
font-size: 32rpx;
font-weight: 600;
letter-spacing: 5rpx;
padding-right: 20rpx;
}
.rclose{
width: 70rpx;
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 28rpx;
color:#949494;
}
}
.checklist-group{
width: 100%;
}
.selcon{
padding: 20rpx;
position: relative;
display: block;
overflow-y: auto;
height: calc((100vh*0.9 - 280rpx));
.lineb{
height: 50rpx;
}
.sitem {
display: flex;
flex-direction: row;
flex: 1;
background-color: #FFFFFF;
border-bottom: 1rpx solid #eeeeee;
padding: 10rpx 0;
.conright{
flex: 1;
display: flex;
flex-direction: row;
width: 100%;
justify-content:flex-start;
}
.selbtn{
width: 80rpx;
display: flex;
justify-content: center;
align-items: center;
}
.sname{
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 28rpx;
font-weight: 600;
color: rgb(29, 29, 29);
padding: 10rpx 10rpx 10rpx 0;
}
.adress{
display: flex;
justify-content: flex-start;
align-items: center;
padding: 10rpx 10rpx 10rpx 10rpx;
font-size: 26rpx;
color:#949494;
}
}
2 weeks ago
}
6 days ago
2 weeks ago
</style>