271 lines
7.4 KiB
Vue
271 lines
7.4 KiB
Vue
|
<!-- 物品类型弹窗页面 -->
|
|||
|
<template>
|
|||
|
<view class="goodsSearch">
|
|||
|
<!-- 头部 -->
|
|||
|
<view class="searchBox-title">
|
|||
|
<view class="title">
|
|||
|
物品名称
|
|||
|
<view class="label"></view>
|
|||
|
</view>
|
|||
|
<view class="stopSend" @click="openForbidGoodsDialog">
|
|||
|
禁寄物品
|
|||
|
<view class="gantanhao"></view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- 搜索框 -->
|
|||
|
<view class="seachBox" v-if="!isSelectedGoods">
|
|||
|
<uni-search-bar :cancelButton='isFocus && searchValue?"none":"auto"' :focus="isFocus" placeholder="请输入搜索内容"
|
|||
|
v-model="searchValue" @blur="blur" @focus="focus" @input="input" @cancel="cancel" @clear="clear">
|
|||
|
<template v-slot:searchIcon>
|
|||
|
<view class="search-icon"></view>
|
|||
|
</template>
|
|||
|
</uni-search-bar>
|
|||
|
<view class="search-btn" @click="userDefined" v-if="searchValue && isFocus">确定</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<!-- 最近寄件 -->
|
|||
|
<view class="recent-send-goods" v-if='!isSelectedGoods && recentSendList.data.length && !isInput'>
|
|||
|
<view class="title">最近寄件</view>
|
|||
|
<view class="recent-send-list">
|
|||
|
<view class="recent-send-item" v-for="(item,index) in recentSendList.data" :key='index'
|
|||
|
@click="handleClick(item)">
|
|||
|
{{item.name}}{{item.goodsType?'('+item.goodsType.name+')':''}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!-- 选择的物品 -->
|
|||
|
<view class="selected-goods" v-if="isSelectedGoods">
|
|||
|
<view class="goods" @click.prevent="handleSelectedGoods">
|
|||
|
<image src='../../../static/shanchu-after.png' @click.stop="handleCancelGood"></image>
|
|||
|
{{goods.info.name}}{{goods.info.goodsType?'('+goods.info.goodsType.name+')':""}}
|
|||
|
</view>
|
|||
|
|
|||
|
|
|||
|
</view>
|
|||
|
|
|||
|
<!-- 热门寄件 -->
|
|||
|
<view class="hot-send-goods" v-if='!isSelectedGoods && !isInput && isFocus'>
|
|||
|
<view class="title">热门寄件</view>
|
|||
|
<view class="recent-send-list">
|
|||
|
<view class="recent-send-item" v-for="(item,index) in hotSendList.data" :key='index'
|
|||
|
@click="handleClick(item)">
|
|||
|
{{item.name}}{{item.goodsType?'('+item.goodsType.name+')':''}}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<!-- 模糊查询出的列表 -->
|
|||
|
<view class="search-list" v-if="isInput">
|
|||
|
<view class="seatch-list-item" @click="handleClick(item)" v-for="(item,index) in dimSearchList.data"
|
|||
|
:key="index">
|
|||
|
<view class="label">{{item.name}}</view>
|
|||
|
<view class="classify">{{item.name}}{{item.goodsType?'('+item.goodsType.name+')':''}}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<!-- 禁寄物品弹窗 -->
|
|||
|
<uni-popup ref="popup" type="bottom" :safe-area="false">
|
|||
|
<view class="title">禁止寄递物品目录</view>
|
|||
|
<view class="content">
|
|||
|
1.枪支(含仿制品、主要零部件)弹药。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
2.管制器具。如匕首、三棱刮刀、带有自锁装置的弹簧刀(跳刀)、弩、催泪器等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
3.爆炸物品。如炸药、雷管、导火索、烟花、鞭炮、摔炮、拉炮、砸炮等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
4.压缩和液化气体及其容器。如氢气、甲烷、乙烷、乙炔、打火机、氯气、压缩氧气、氮气等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
5.易燃液体。如汽油、柴油、煤油、桐油、丙酮、乙醚、油漆、生漆、苯、酒精、松香油等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
6.易燃固体、自燃物质、遇水易燃物质。如红磷、硫磺、固体酒精、火柴、活性炭等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
7.氧化剂和过氧化物。如高锰酸盐、高氯酸盐、氧化氢、双氧水等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
8.毒性物质。如砷、砒霜、汞化物、铊化物、氰化物、硒粉、苯酚、汞、剧毒农药等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
9.生化制品、传染性、感染性物质。如病菌、炭疽、寄生虫、排泄物、医疗废弃物、尸骨、动物器官等。
|
|||
|
</view>
|
|||
|
<view class="content">
|
|||
|
10.放射性物质。如铀、钴、镭、钚等。
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="btn" @click="closeForbidGoodsDialog">知道了</view>
|
|||
|
</uni-popup>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script setup>
|
|||
|
import {
|
|||
|
ref,
|
|||
|
reactive,
|
|||
|
onMounted,
|
|||
|
} from 'vue';
|
|||
|
import {
|
|||
|
usualGoodsList,
|
|||
|
goodsList
|
|||
|
} from '@/pages/api/order.js'
|
|||
|
import {
|
|||
|
useStore
|
|||
|
} from 'vuex';
|
|||
|
const store = useStore(); //vuex获取、储存数据
|
|||
|
const users = store.state.user
|
|||
|
const emits = defineEmits(["@getGoodsInfo"]);
|
|||
|
const props = defineProps({
|
|||
|
isShowOther: {
|
|||
|
type: Function,
|
|||
|
required: true
|
|||
|
},
|
|||
|
})
|
|||
|
const goods = reactive({
|
|||
|
info: {}
|
|||
|
})
|
|||
|
const isSelectedGoods = ref(false) //是否选择了物品
|
|||
|
const popup = ref()
|
|||
|
const searchValue = ref('')
|
|||
|
const isFocus = ref(false) //是否搜索框为聚焦状态
|
|||
|
const isInput = ref(false) //是否搜索框为输入状态
|
|||
|
const isUpload = ref(true) //是否输入框加载完毕
|
|||
|
//模糊查询出的列表数据
|
|||
|
const dimSearchList = reactive({
|
|||
|
data: []
|
|||
|
})
|
|||
|
//热门寄件物品
|
|||
|
const hotSendList = reactive({
|
|||
|
data: []
|
|||
|
})
|
|||
|
|
|||
|
const recentSendList = reactive({
|
|||
|
data: [],
|
|||
|
})
|
|||
|
|
|||
|
onMounted(() => {
|
|||
|
getData()
|
|||
|
})
|
|||
|
|
|||
|
const getData = () => {
|
|||
|
usualGoodsList({
|
|||
|
name: ''
|
|||
|
}).then((res) => {
|
|||
|
if (res.data) {
|
|||
|
hotSendList.data = res.data.slice(0, 6)
|
|||
|
}
|
|||
|
}).catch((err) => {
|
|||
|
uni.showToast({
|
|||
|
title: '网络异常',
|
|||
|
duration: 2000,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
})
|
|||
|
isSelectedGoods.value = users.goodsInfo.name
|
|||
|
if (isSelectedGoods.value) goods.info = users.goodsInfo
|
|||
|
|
|||
|
goodsList().then((res) => {
|
|||
|
if (res.data) {
|
|||
|
recentSendList.data = res.data.slice(0, 5)
|
|||
|
}
|
|||
|
}).catch((err) => {
|
|||
|
uni.showToast({
|
|||
|
title: '网络异常',
|
|||
|
duration: 2000,
|
|||
|
icon: 'none'
|
|||
|
});
|
|||
|
})
|
|||
|
}
|
|||
|
const handleSelectedGoods = () => {
|
|||
|
searchValue.value = goods.info.name
|
|||
|
isFocus.value = true
|
|||
|
isInput.value = true
|
|||
|
isSelectedGoods.value = false
|
|||
|
dimSearch(searchValue.value)
|
|||
|
props.isShowOther(true, 'always')
|
|||
|
}
|
|||
|
//模糊查询列表数据
|
|||
|
const dimSearch = (key) => {
|
|||
|
if (!isUpload.value) return
|
|||
|
isUpload.value = false
|
|||
|
usualGoodsList({
|
|||
|
name: key
|
|||
|
}).then((res) => {
|
|||
|
dimSearchList.data = res.data
|
|||
|
isUpload.value = true
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
const input = (e) => {
|
|||
|
isFocus.value = e ? true : false
|
|||
|
isInput.value = Boolean(e)
|
|||
|
if (!isUpload.value) return
|
|||
|
searchValue.value = e
|
|||
|
dimSearch(e)
|
|||
|
props.isShowOther(e ? true : false)
|
|||
|
}
|
|||
|
const cancel = () => {
|
|||
|
isInput.value = false
|
|||
|
props.isShowOther(false)
|
|||
|
}
|
|||
|
const clear = () => {
|
|||
|
props.isShowOther(true)
|
|||
|
}
|
|||
|
const blur = () => {
|
|||
|
console.log('blur')
|
|||
|
}
|
|||
|
const focus = () => {
|
|||
|
isFocus.value = true
|
|||
|
props.isShowOther(true)
|
|||
|
}
|
|||
|
|
|||
|
//用户自定义的物品
|
|||
|
const userDefined = () => {
|
|||
|
goods.info = {
|
|||
|
name: searchValue.value
|
|||
|
}
|
|||
|
isSelectedGoods.value = Boolean(searchValue.value)
|
|||
|
props.isShowOther(false)
|
|||
|
emits('getGoodsInfo', {
|
|||
|
name: searchValue.value
|
|||
|
})
|
|||
|
isFocus.value = false
|
|||
|
}
|
|||
|
//取消物品选择
|
|||
|
const handleCancelGood = () => {
|
|||
|
goods.info = {}
|
|||
|
store.commit('user/setGoodsInfo', {})
|
|||
|
emits('getGoodsInfo', {})
|
|||
|
isSelectedGoods.value = false
|
|||
|
searchValue.value = ''
|
|||
|
isFocus.value = false
|
|||
|
isInput.value = false
|
|||
|
}
|
|||
|
|
|||
|
//点击标签物品
|
|||
|
const handleClick = (item) => {
|
|||
|
searchValue.value = item.value
|
|||
|
isFocus.value = true
|
|||
|
goods.info = item
|
|||
|
isSelectedGoods.value = true
|
|||
|
isInput.value = false
|
|||
|
props.isShowOther(false)
|
|||
|
emits('getGoodsInfo', item)
|
|||
|
}
|
|||
|
|
|||
|
//打开禁寄物品弹窗
|
|||
|
const openForbidGoodsDialog = () => {
|
|||
|
popup.value.open('bottom');
|
|||
|
}
|
|||
|
|
|||
|
//关闭禁寄物品弹窗
|
|||
|
const closeForbidGoodsDialog = () => {
|
|||
|
popup.value.close();
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped src='./goodsSearch.scss'></style>
|