hls_crm/components/selectProductConfig/index.vue

311 lines
6.5 KiB
Vue

<template>
<view>
<uni-popup ref="popup" type="bottom" background-color="#fff">
<view class="popup_title">产品配件</view>
<view class="searbox">
<image :src="BASE_IMG_URL+'search.png'" class="searchimg" mode=""></image>
<input type="text" placeholder="按照备件编号/名称搜索" @input="queryList" class="selfinput">
</view>
<scroll-view scroll-y class="scrollbox" lower-threshold="30">
<view class="pop_list">
<view class="pop_li" v-for="(item,index) in list" :key="index">
<view class="pop_li_top">
<view class="pop_title">{{item.name}}</view>
<view class="pop_num">{{item.num}}</view>
</view>
<view class="pop_info" @tap.stop="changeSelect(index)">
<view class="pop_radio">
<radio color='#008EFF' :checked="item.select" ></radio>
</view>
<image :src="item.img ? item.img : BASE_IMG_URL+'img/index-4.png'" class="infoimg" mode=""></image>
<view class="pop_info_cen">
<view class="pop_bottom" @tap.stop.prevent>
数量
<view class="conright">
<uni-number-box :min="1" v-model="item.number" @change="(e)=>{changeNumber(e,index)}"></uni-number-box>
</view>
</view>
</view>
</view>
</view>
<u-empty v-if="list.length == 0" text="暂无更多"></u-empty>
</view>
</scroll-view>
<view class="popup_bottom">
<view class="pp_left_box">
<view class="pp_left">
<radio color="#008EFF" :checked="isAll" @click="selectAll"></radio>全选
</view>
<view class="selectnum">已选{{selectArr.length}}项</view>
</view>
<view class="pp_right">
<view class="right_btn remove" @click="closePopup">取消</view>
<view class="right_btn sure" @click="sureSelectData">确定</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import { netProductConfig } from '@/api/index.js'
import { BASE_IMG_URL } from '@/util/api.js'
export default{
props:{
showConfig:{
type:Boolean,
default:false
}
},
data(){
return{
BASE_IMG_URL:BASE_IMG_URL,
name:'',
product_id:'',
list:[],
isAll:false,
selectArr:[]
}
},
methods:{
queryList(e) {
this.name = e.detail.value
this.init(this.product_id)
},
init(id) {
this.$refs.popup.open()
this.product_id = id
this.list = []
this.getConfigList()
},
getConfigList() {
let params = {
product_id:this.product_id,
name:this.name
}
netProductConfig(params).then(res=>{
let arr = res.data
arr.forEach(ele=>{
ele.part_id = ele.id
ele.number = 1
ele.select = false
})
this.list = arr
})
},
changeNumber(e,index) {
let obj = this.list[index]
if(e > 1){
obj.select = true
}
obj.number = e
this.$set(this.list,index,obj)
this.handleSelect()
},
//选择
changeSelect(index) {
let obj = this.list[index]
obj.select = !obj.select
this.$set(this.list,index,obj)
this.handleSelect()
},
//全选
selectAll() {
this.isAll = !this.isAll
let arr = this.list
if(this.isAll){
arr.forEach(ele=>{
ele.select = true
})
}else{
arr.forEach(ele=>{
ele.select = false
})
}
this.list = arr
this.handleSelect()
},
closePopup() {
this.$refs.popup.close()
},
handleSelect() {
let arr = this.list
let newdata = []
arr.forEach(ele=>{
if(ele.select){
newdata.push(ele.id)
}
})
this.selectArr = newdata
},
//确定
sureSelectData() {
let arr = this.list
let newarr = []
arr.forEach(ele=>{
if(ele.select){
newarr.push(ele)
}
})
this.closePopup()
this.$emit('selectList',newarr)
}
}
}
</script>
<style lang="scss" scoped>
view{
box-sizing: border-box;
}
.popup_title{
text-align: center;
font-size:34rpx;
color:#333333;
padding:24rpx;
}
.searbox{
width:650rpx;
height:68rpx;
border-radius: 34rpx;
margin:0 auto;
border:1rpx solid $uni-text-color;
display: flex;
justify-content: flex-start;
align-items: center;
padding:0 15rpx;
.searchimg{
width:48rpx;
height:48rpx;
margin-right:15rpx;
}
.selfinput{
width:450rpx;
font-size:26rpx;
color:$uni-text-color;
}
}
.scrollbox{
width:100%;
height:700rpx;
.pop_list{
padding:24rpx;
.pop_li{
background:#fff;
box-shadow: 1rpx 1rpx 8rpx 2rpx rgba(0,0,0,0.1);
border-radius: 24rpx;
margin-bottom:24rpx;
.pop_li_top{
padding:28rpx;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom:1rpx solid #f5f5f5;
.pop_title{
font-size:34rpx;
color:#333333;
}
.pop_num{
font-size:30rpx;
color:#666666;
}
}
.pop_info{
display: flex;
justify-content: flex-start;
align-items: center;
padding:24rpx 30rpx;
.pop_radio{
margin-right:32rpx;
radio{
transform: scale(0.7);
}
}
.infoimg{
width:140rpx;
height:140rpx;
border-radius: 20rpx;
margin-right:90rpx;
}
.pop_info_cen{
.pop_info_text{
font-size:28rpx;
color:#666666;
margin-bottom:15rpx;
}
.pop_bottom{
display: flex;
justify-content: flex-start;
align-items: center;
font-size:28rpx;
color:#666666;
.conright{
margin-left:10rpx;
.stepbtn{
width:38rpx;
height:38rpx;
border:1rpx solid $uni-text-color;
}
}
}
}
}
}
}
}
.popup_bottom{
width:100%;
padding:0 24rpx;
height:100rpx;
border-top:1rpx solid #f5f5f5;
display: flex;
justify-content: space-between;
align-items: center;
.pp_left_box{
display: flex;
justify-content: flex-start;
align-items: center;
.pp_left{
display: flex;
justify-content: flex-start;
align-items: center;
font-size:26rpx;
color:3333;
radio{
transform: scale(0.7);
}
}
.selectnum{
font-size:30rpx;
color:#FE9440;
margin-left:24rpx;
}
}
.pp_right{
display: flex;
justify-content: flex-end;
align-items: center;
.right_btn{
width:165rpx;
height:60rpx;
font-size:30rpx;
text-align: center;
border-radius: 30rpx;
}
.remove{
border:1rpx solid $uni-text-color;
color:$uni-text-color;
line-height: 58rpx;
margin-right:24rpx;
}
.sure{
background:$uni-text-color;
color:#fff;
line-height: 58rpx;
}
}
}
</style>