iot-ui-app/pages/tabbar/config.vue

390 lines
8.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="config-box">
<view class="config-list" v-if="configList.length">
<view class="config-item" v-for="(item,index) in configList" :key="item.id" @click="changeConfig(index)">
<!-- <u-icon v-if="configIndex==index" class="icon-checkbox-mark" name="checkbox-mark" color="#ff0000" size="50"></u-icon> -->
<view class="acitve-box" v-if="configIndex==index">
已选择
</view>
<view class="congfig-txt">
{{item.protocol+item.address}}
</view>
<view class="operate-box">
<view class="iconfont icon-bianji1 color-blue" @click.stop="openEdit(index)"></view>
<view class="iconfont icon-shanchu color-red" @click.stop="delConfig(index)"></view>
</view>
</view>
</view>
<u-empty margin-top="200" v-else text="没有域名,请添加" mode="list"></u-empty>
<view class="btn-box">
<button type="primary" @tap="openAdd">添加域名</button>
</view>
<u-modal v-model="show" width="700" title="新增/修改域名" ref="uModal" :show-cancel-button="true" :mask-close-able="true" @confirm="addConfig">
<view class="slot-content">
<view class="form-item">
<view class="form-label">
网络协议:
</view>
<view class="form-value" @click="protocolShow=true">
{{form.protocol?form.protocol:'请选择'}}
<view class="iconfont icon-xiangyou1"></view>
</view>
</view>
<view class="form-item">
<view class="form-label">
域名或ip
</view>
<view class="form-value">
<input type="text" v-model="form.address" placeholder="请输入地址如:192.168.0.1">
</view>
</view>
</view>
</u-modal>
<u-select v-model="protocolShow" :list="protocolList" @confirm="confirmProtocol"></u-select>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
configIndex:0,
configList:[],
form:{
id:'',
protocol:'',
address:'',
},
protocolShow:false,
protocolList:[
{
value: 'http://',
label: 'http://'
},
{
value: 'https://',
label: 'https://'
}
],
show:false,
};
},
onLoad() {
// 小程序只使用https
// #ifdef MP-WEIXIN
this.protocolList = [
{
value: 'https://',
label: 'https://'
}
]
// #endif
this.getConfigList();
},
methods:{
getConfigList(){
uni.getStorage({
key:'configList',
}).then(res => {
// 如果返回数组为两位就是正确
if(res.length==2){
this.configList = res[1].data;
}
return uni.getStorage({
key:'configIndex',
})
}).then(res => {
console.log("configIndex",res)
if(res.length==2){
this.configIndex = res[1].data;
}
})
},
changeConfig(i){
console.log("index",i)
if(i !== this.configIndex){
this.configIndex = i;
uni.setStorage({
key:'configIndex',
data: i,
}).then(res => {
console.log("修改索引")
})
}
},
verification(){
if(!this.form.protocol){
this.$refs.uToast.show({
title: '请先选择协议!',
type: 'error'
})
return false;
}else if(!this.form.address){
this.$refs.uToast.show({
title: '请先输入地址',
type: 'error',
})
return false;
}else if(!this.$u.test.url(this.form.protocol+this.form.address)){
this.$refs.uToast.show({
title: '请确认输入地址正确',
type: 'error',
})
return false;
}else{
return true;
}
},
openAdd(){
if(this.configList.length == 0){
this.form = {
id:'',
protocol:'https://',
address:'cloud.iot-fast.com',
}
}else{
this.form = {
id:'',
protocol:'',
address:'',
}
}
this.show = true;
},
addConfig(){
console.log("添加页面",this.form)
if(this.verification()){
if(this.form.id===''){
// 新增
this.configList.push({
id:this.$u.guid(32),
protocol:this.form.protocol,
address:this.form.address,
})
uni.setStorage({
key:'configList',
data: this.configList,
}).then(res => {
this.$refs.uToast.show({
title: '新增成功',
type: 'success',
})
})
if(this.configList.length==1){
uni.setStorage({
key:'configIndex',
data: 0,
}).then(res => {
console.log("添加第一个域名索引为0")
})
}
this.show = false;
this.getConfigList()
console.log("configList",this.configList)
}else{
// 编辑
this.configList.map(item=>{
if(item.id == this.form.id){
item.protocol=this.form.protocol;
item.address=this.form.address;
}
return item;
})
uni.setStorage({
key:'configList',
data: this.configList,
}).then(res => {
this.$refs.uToast.show({
title: '编辑成功',
type: 'success',
})
})
this.show = false;
this.getConfigList()
}
}else{
this.$refs.uModal.clearLoading();
}
},
confirmProtocol(e){
this.form.protocol = e[0].value;
},
openEdit(index){
this.form = this.configList[index];
this.show = true;
},
delConfig(index){
uni.showModal({
title: '提示',
content: '确认要删除域名吗?',
success: (res)=>{
if (res.confirm) {
console.log('用户点击确定');
this.configList.splice(index, 1);
uni.setStorage({
key:'configList',
data: this.configList,
}).then(res => {
this.$refs.uToast.show({
title: '删除成功',
type: 'success',
})
})
if(this.configIndex<index){
}else{
if(this.configIndex>index){
this.configIndex = this.configIndex - 1;
}else if(this.configIndex==index){
if(this.configList.length==0){
this.configIndex = -1;
}else{
this.configIndex = 0;
}
}
uni.setStorage({
key:'configIndex',
data: this.configIndex,
}).then(res => {
console.log("修改索引")
})
}
this.getConfigList();
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
}
}
</script>
<style>
page{
background: #f5f5f5;
}
</style>
<style lang="scss" scoped>
.color-blue{
color: $mainColor;
}
.color-red{
color: red;
}
.config-box{
.config-list{
.config-item{
background: #fff;
// border-radius: 10rpx;
padding: 30rpx 20rpx;
padding-left: 70rpx;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
border-bottom: 1px solid #f5f5f5;
overflow: hidden;
.acitve-box{
z-index: 888;
position: absolute;
top: -16rpx;
left: -76rpx;
width: 200rpx;
height: 80rpx;
display: flex;
justify-content: center;
align-items: center;
transform: rotate(-40deg) ;
padding-top: 30rpx;
color: #fff;
background: $mainColor;
font-size: 26rpx;
}
.icon-checkbox-mark{
position: absolute;
top:20rpx;
left:10rpx;
}
.operate-box{
display: flex;
align-items: center;
.iconfont{
font-weight: bold;
margin-left: 20rpx;
font-size: 40rpx;
}
}
}
}
}
.slot-content{
padding: 20rpx 30rpx;
.form-item{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 10rpx;
.form-label{
width: 170rpx;
}
.form-value{
flex: 1;
background: #f0f0f0;
border-radius: 8rpx;
height: 70rpx;
display: flex;
align-items: center;
padding-right: 20rpx;
input{
width: 100%;
padding-left: 20rpx;
}
}
&:first-child{
.form-value{
// justify-content: flex-end;
padding-left: 20rpx;
position: relative;
padding-right: 40rpx;
.iconfont{
position: absolute;
right: 6rpx;
top: 19rpx;
font-size: 37rpx;
color: #8a8c90;
}
}
}
}
}
.btn-box{
position: fixed;
width: 100%;
height: 130rpx;
padding: 10rpx;
padding-bottom: 20rpx;
box-sizing: border-box;
bottom: 0;
display: flex;
align-items: center;
justify-content: space-around;
background-color: #fff;
button{
width: 95%;
background-color: $mainColor;
color: #fff;
}
.bg-grey{
background: #e7e7e7;
color: #8a8c90;
}
}
</style>