ckgl/pages/customOrder/detail.vue
2025-02-19 17:17:07 +08:00

826 lines
25 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.

<script setup lang="ts">
import { onMounted, ref, watch } from 'vue';
import { formatDate } from '../../utils/date';
import { getAction, postAction, putAction, upLoadAction, uploadAction } from '../../common/http';
import { showConfirmDialog, showToast } from 'vant';
import { onLoad } from '@dcloudio/uni-app';
const craftList = ref([] as any[])
const otherList = ref([] as any[])
const hasTex = ref('' as any)
const nameList = ref([] as any[])
const craftCommentList = ref([] as any[])
onMounted(() => {
//工艺要求获取
getAction('/craftCommentCategory').then((res : any) => {
if (res.code === 200) {
craftCommentList.value = res.data.map((l : any) => ({ text: l.category, id: l.id, children: l.subCategory.map((m : any) => ({ text: m.subCategory, id: m.id })) }))
}
})
//用户信息
uni.getStorage({
key: 'info',
success(res) {
let data = JSON.parse(res.data)
form.value.customOrder.makeUser = data.userName
form.value.customOrder.belongTo = data.userName
},
fail: (err : any) => {
console.log(err);
}
})
//工艺信息
getAction('/fabric/craft/info').then((res : any) => {
if (res.code === 200) {
craftList.value = res.data.map((l : any) => ({ value: l.name, text: l.name }))
}
})
//面料信息
getAction('/fabric/info/all').then((res : any) => {
if (res.code === 200) {
res.data.forEach((l : any) => {
let itemMl = mlList.value.find(m => m.text === l.commodity)
if (itemMl) {
let itemMm = itemMl.children.find(m => m.value === l.momme)
if (itemMm) {
itemMm.children.push({ text: l.width + 'cm', value: l.width })
} else {
itemMl.children.push({
text: l.momme + 'mm',
value: l.momme,
children: [{ text: l.width + 'cm', value: l.width }]
})
}
} else {
mlList.value.push({
text: l.commodity,
value: l.commodity,
children: [{ text: l.momme + 'mm', value: l.momme, children: [{ text: l.width + 'cm', value: l.width }] }]
})
}
})
}
})
//所有用户名
getAction('/v1/user/getNames').then((res : any) => {
if (res.code === 200) {
nameList.value = res.data.map((l : any) => ({ value: l, text: l }))
}
})
})
//新增面料块
const addFabric = () => {
let extraOptions = otherList.value.map((l : any) => ({ name: l.name, value: l.options.find((m : any) => m.default) ? l.options.find((m : any) => m.default).name : '' }))
form.value.orderItems.push({ extraOptions: extraOptions, fabric: [{}], craftComment: {} })
}
const onClickLeft = () => {
window.history.back()
}
const onSubmit = () => {
putAction('/customOrder', form.value).then((res : any) => {
if (res.code === 200) {
showToast('提交成功!')
window.history.back()
}
})
}
onLoad((option : any) => {
form.value = JSON.parse(option.item)
if(form.value.customOrder.status==='已通过'){
fileList.value = [{ url: form.value.customOrder.checkPic }]
}
hasTex.value = form.value.customOrder.hasTex ? '含税' : '不含税'
if(!option.item){
//其他选项
getAction('/extraOption').then((res : any) => {
if (res.code === 200) {
otherList.value = JSON.parse(res.data.payload)
form.value.orderItems[0].extraOptions = otherList.value.map((l : any) => ({ name: l.name, value: l.options.find((m : any) => m.default) ? l.options.find((m : any) => m.default).name : '' }))
}
})
}
})
const form = ref({ customOrder: { makeTime: formatDate(new Date()) }, orderItems: [{ fabric: [{}], craftComment: {} }] } as any)
const showPicker = ref(false)
const typeData = ref()
const popuList = ref([] as any[])
const show = ref(false)
const pickerList = ref([])//面料数据
const pickerContainerList = ref([])
const showPickerList = ref(false)
const searchValue = ref('')//查询的值
const searchIndex = ref(0)//查询到的数组
const mlList = ref([])
const indexData = ref()
const indexData1 = ref()
//选择框事件
const choosePic = (type : any, index : any, indexSecond : any) => {
showPicker.value = true
typeData.value = type
indexData.value = index
indexData1.value = indexSecond
}
//选择框确认
const pickerConfirm = (val : any) => {
if (typeData.value === 'craft') {
form.value.orderItems[indexData.value][typeData.value] = val.selectedValues[0]
} else if (typeData.value === 'hasTex') {
hasTex.value = val.selectedOptions[0].text
form.value.customOrder[typeData.value] = val.selectedOptions[0].value
} else if (typeData.value === 'extraOptions') {
form.value.orderItems[indexData.value][typeData.value][indexData1.value].value = val.selectedValues[0]
} else {
form.value.customOrder[typeData.value] = val.selectedValues[0]
}
showPickerCancel()
}
//取消
const showPickerCancel = () => {
showPicker.value = false
}
//弹窗开启事件
const handleOpen = () => {
if (typeData.value === 'craft') {
popuList.value = craftList.value
} else if (typeData.value === 'hasTex') {
popuList.value = [{ value: 'true', text: '含税' }, { value: 'false', text: '不含税' }]
} else if (typeData.value === 'belongTo') {
popuList.value = nameList.value
} else if (typeData.value === 'extraOptions') {
popuList.value = otherList.value[indexData.value].options.map((l : any) => ({ text: l.name, value: l.name }))
}
}
const chooseDate = (type : any) => {
typeData.value = type
show.value = true
}
//日期选择
const onConfirmDate = (val : any) => {
form.value.customOrder[typeData.value] = formatDate(val)
show.value = false
}
//选择面料
const selectChoose = (index : any, indexSecond : any) => {
indexData.value = index
typeData.value = indexSecond
showPickerList.value = true
}
//面料开启
const mlmcOpen = () => {
pickerList.value = mlList.value
pickerContainerList.value = pickerList.value
searchValue.value = ''
}
//面料关闭
const pickerCancel = () => {
showPickerList.value = false
}
//搜索
const selectedValue = ref()
const getSeachList = () => {
searchIndex.value = 0
let reg = new RegExp(searchValue.value)
let arr = []
pickerList.value.forEach(l => {
if (reg.test(l.text)) {
arr.push(l)
}
})
pickerContainerList.value = arr
}
//向上选择
const upSearch = () => {
if (searchIndex.value === 0 && pickerContainerList.value.length) {
searchIndex.value = pickerContainerList.value.length - 1
selectedValue.value = [pickerContainerList.value[searchIndex.value].text]
} else if (pickerContainerList.value.length) {
searchIndex.value--
selectedValue.value = [pickerContainerList.value[searchIndex.value].text]
} else {
showToast('没有了!')
}
}
//向下选择
const downSearch = () => {
if (pickerContainerList.value.length) {
if (searchIndex.value === pickerContainerList.value.length) {
searchIndex.value = 0
selectedValue.value = [pickerContainerList.value[searchIndex.value].text]
} else {
searchIndex.value++
selectedValue.value = [pickerContainerList.value[searchIndex.value].text]
}
} else {
showToast('没有了!')
}
}
//搜索框输入
const timer = ref()
const searchTo = () => {
if (timer.value) {
clearTimeout(timer.value)
}
timer.value = setTimeout(() => {
getSeachList()
}, 800)
}
const onConfirm = (val : any) => {
if (!form.value.customOrder.hasTex) return showToast('请选择是否含税!')
if (!form.value.orderItems[indexData.value].craft) return showToast('请选择工艺!')
form.value.orderItems[indexData.value].fabric[typeData.value].name = val.selectedValues[2] + '/' + val.selectedValues[0] + val.selectedValues[1]
pickerCancel()
let ml = val.selectedValues[2] + '/' + val.selectedValues[0] + val.selectedValues[1]
let url = '/fabric/info/craftPrice?names=' + ml + '&hasTex=' + form.value.customOrder.hasTex
//面料价格
getAction(url).then((res : any) => {
if (res.code === 200) {
res.data.forEach((l : any) => {
if (l.name === form.value.orderItems[indexData.value].craft) {
form.value.orderItems[indexData.value].price = l.broadHeadingPrice
}
})
}
})
}
const activeIds = ref([] as any[]);
const activeIndex = ref(0);
//选择提交
const subActive = () => {
let textList = []
craftCommentList.value.forEach((l : any) => {
l.children.forEach((m : any) => {
let item = activeIds.value.find((k : any) => k === m.id)
if (item) {
textList.push(m.text)
}
})
})
form.value.orderItems[indexData.value].craftComment = { name: textList.join(','), value: JSON.parse(JSON.stringify(activeIds)) }
showPicker.value = false
activeIds.value = []
}
const culit = (itemSecond : any) => {
itemSecond.qty = (itemSecond.len / 47).toFixed(1)
computing()
}
const computing = () => {
let zms = 0
let zps = 0
let ddje = 0
form.value.orderItems.forEach((l : any) => {
l.fabric.forEach((m : any) => {
zms += m.len * 1
zps += m.qty * 1
})
ddje = zms * l.price
})
form.value.customOrder.totalLen = zms.toFixed(1)
form.value.customOrder.totalQty = zps.toFixed(1)
form.value.customOrder.currency = ddje.toFixed(1)
}
const validator = (val : any) => /^\d+(\.\d)?$|^(\.\d)$/.test(val);
//客户选择
const showPopup = ref(false)
const customerList = ref([] as any[])
const choose = (item : any) => {
showPopup.value = !showPopup.value
form.value.customOrder.customerName = item.name
form.value.customOrder.customerId = item.id
}
const search = () => {
if (timer.value) {
clearTimeout(timer.value)
}
timer.value = setTimeout(() => {
getCustom()
}, 800)
}
const getCustom = () => {
showPopup.value = !showPopup.value
let url = '/getNames?keyword=' + form.value.customOrder.customerName
getAction(url).then((res : any) => {
if (res.code === 200) {
customerList.value = res.data
}
})
}
//取消弹窗
const showDialog = ref(false)
const confirmSecond = () => {
if (!form.value.customOrder.cancelReason) showToast('请填写取消原因!')
let url = "/customerOrder/cancel/" + form.value.customOrder.id
putAction(url, form.value.customOrder.cancelReason, { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }).then((res : any) => {
if (res.code === 200) {
showToast('取消成功!')
window.history.back()
}
})
}
//驳回
const check = () => {
showConfirmDialog({
title: '提示',
message: '是否确认驳回本单?',
}).then(() => {
let url = '/customOrder/reject/' + form.value.customOrder.id
putAction(url).then((res : any) => {
if (res.code === 200) {
showToast('操作成功!')
window.history.back()
}
})
})
.catch(() => {
// on cancel
});
}
//通过
const pass = () => {
if (form.value.customOrder.status === '待排单员审核') {
if (!pic.value) return showToast('请上传排单图!')
showConfirmDialog({
title: '提示',
message: '是否确认通过本单?',
}).then(() => {
let url = '/customOrder/dispatcherCheck/' + form.value.customOrder.id
putAction(url, { pic: pic.value, comment: form.value.customOrder.interComment }).then((res : any) => {
if (res.code === 200) {
showToast('操作成功!')
window.history.back()
}
})
})
.catch(() => {
// on cancel
});
} else if (form.value.customOrder.status === '待主管审核') {
showConfirmDialog({
title: '提示',
message: '是否确认通过本单?',
}).then(() => {
let url = '/customOrder/managerCheck/' + form.value.customOrder.id
putAction(url).then((res : any) => {
if (res.code === 200) {
showToast('操作成功!')
window.history.back()
}
})
})
.catch(() => {
// on cancel
});
} else if (form.value.customOrder.status === '取消审核中') {
showConfirmDialog({
title: '提示',
message: '是否确认通过本单?',
}).then(() => {
let url = '/customOrder/dispatcherCheckCancel/' + form.value.customOrder.id
putAction(url).then((res : any) => {
if (res.code === 200) {
showToast('操作成功!')
window.history.back()
}
})
})
.catch(() => {
// on cancel
});
}
}
const fileList = ref([] as any[])
const pic = ref()
const afterRead = (file : any) => {
file.status = 'uploading';
file.message = '上传中...';
uploadAction('/upload', file.file).then((res : any) => {
if (res.code === 200) {
file.status = 'success';
file.message = '成功!';
pic.value = res.data
}
})
};
</script>
<template>
<view class="flex">
<van-nav-bar :title="form.customOrder.status" left-text="返回" left-arrow @click-left="onClickLeft" />
<view class="content">
<van-form @submit="onSubmit">
<view class="a-f">
<van-button type="danger" @click="showDialog=true"
v-if="!'取消审核中,已取消,被驳回'.includes(form.customOrder.status)">取消</van-button>
<van-button type="primary" style="margin: 0 15rpx;" native-type="submit"
v-if="!'取消审核中,已通过'.includes(form.customOrder.status)">编辑</van-button>
</view>
<van-cell-group inset>
<van-field v-model="form.customOrder.id" name="订单编号" label="订单编号" colon label-width="5em" readonly
class="bor-n" />
<van-field v-model="form.customOrder.customerName" name="客户名称" label="客户名称" colon class="bor"
label-width="5em" :rules="[{ required: true, message: '请填写' }]" @input="search()" />
<transition name="fade">
<ul class="searchPop" v-if="showPopup">
<template v-for="item in customerList">
<li @click="choose(item)">{{ item.name }}—{{ item.id }}</li>
</template>
</ul>
</transition>
<van-field v-model="form.customOrder.makeTime" name="做单日期" label="做单日期" colon label-width="5em"
readonly :rules="[{ required: true, message: '请填写' }]" class="bor-n" />
<van-field v-model="form.customOrder.belongTo" name="订单归属" label="订单归属" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor"
@click="choosePic('belongTo')" />
<van-field v-model="form.customOrder.makeUser" name="做单人员" label="做单人员" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor-n" />
<van-field v-model="form.customOrder.sd" name="谁定" label="谁定" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" />
<van-field v-model="hasTex" name="是否含税" label="是否含税" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" readonly class="bor"
@click="choosePic('hasTex')" />
<view class="a-b">
<van-button type="primary" @click="addFabric">面料添加</van-button>
</view>
<view class="card" v-for="(item,index) in form.orderItems" :key="index">
<view style="text-align: end;">
<van-icon name="cross" @click="form.orderItems.splice(index,1)" />
</view>
<van-field v-model="item.color" name="颜色色号" label="颜色色号" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" />
<van-field v-model="item.craft" name="工艺名称" label="工艺名称" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" readonly class="bor"
@click="choosePic('craft',index)" />
<van-field v-model="item.craftFlow" name="工艺流程" label="工艺流程" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" readonly class="bor"
@click="choosePic('craftFlow',index)" />
<view v-for="(itemSecond,indexSecond) in item.fabric" :key="index">
<view class="a-c">
<van-icon name="add" color="red" size="25" v-if="index===0"
@click="item.fabric.push({})" />
<van-icon name="clear" color="red" size="25" v-if="index!=0"
@click="item.fabric.splice(index,1)" />
<van-field v-model="itemSecond.name" name="面料名称" label="面料名称" colon readonly
label-width="5em" @click="selectChoose(index,indexSecond)" class="bor"
:rules="[{ required: true, message: '请填写' }]" />
</view>
<van-field v-model="itemSecond.len" name="需求米数" label="需求米数" type="number" colon
label-width="6.5em"
:rules="[{ required: true, message: '请填写' },{ validator, message: '保留一位小数' }]"
@blur="culit(itemSecond)" />
<van-field v-model="itemSecond.qty" type="number" name="需求匹数" label="需求匹数" colon
label-width="6.5em"
:rules="[{ required: true, message: '请填写' },{ validator, message: '保留一位小数' }]"
@blur="computing()" />
<van-field v-model="itemSecond.price" name="订单单价" label="订单单价" colon
:rules="[{ required: true, message: '请填写' }]" label-width="6.5em" @blur="computing()" />
</view>
<van-field v-model="item.craftComment.name" name="工艺要求" label="工艺要求" colon
:rules="[{ required: true, message: '请填写' }]" label-width="5em" readonly class="bor"
@click="choosePic('craftComment',index)" />
<van-field v-model="item.width" name="有效门幅" label="有效门幅" colon label-width="5em"
:rules="item.expectWidth?[]:[{ required: true, message: '请填写' },{ validator, message: '保留一位小数' }]" />
<van-field v-model="item.expectWidth" name="全门幅" label="全门幅" colon label-width="5em"
:rules="item.width?[]:[{ required: true, message: '请填写' },{ validator, message: '保留一位小数' }]" />
<p>其他要求</p>
<view v-for="(itemSecond,indexSecond) in item.extraOptions" :key="indexSecond">
<van-field v-model="itemSecond.value" :name="itemSecond.name" :label="itemSecond.name" colon
:rules="item.necessary?[{ required: true, message: '请填写' }]:[]" label-width="5em"
readonly class="bor" @click="choosePic('extraOptions',index,indexSecond)" />
</view>
<p style="text-align: center;margin: 10rpx 0;color: #02a7f0;" @click="addFabric">
复制新增</p>
</view>
<van-field v-model="form.customOrder.totalLen" name="总米数" label="总米数" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor-n" />
<van-field v-model="form.customOrder.totalQty" name="总匹数" label="总匹数" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor-n" />
<van-field v-model="form.customOrder.currency" name="订单总额" label="订单总额" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor-n" />
<van-field v-model="form.customOrder.finishDate" name="交货日期" label="交货日期" colon label-width="5em"
:rules="[{ required: true, message: '请填写' }]" readonly class="bor"
@click="chooseDate('finishDate')" />
<van-field v-model="form.customOrder.customerComment" name="客户备注" label="客户备注" colon
label-width="5em" />
<van-field v-model="form.customOrder.interComment" name="内部备注" label="内部备注" colon
label-width="5em" />
<view v-if="form.customOrder.status==='待排单员审核'">
<van-field name="uploader" label="排单图" label-width="5em" colon class="bor-n">
<template #input>
<van-uploader v-model="fileList" multiple :max-count="1" :after-read="afterRead" />
</template>
</van-field>
</view>
<view v-if="form.customOrder.status==='取消审核中'">
<van-field v-model="form.customOrder.cancelReason" name="取消原因" label="取消原因" colon
label-width="5em" readonly />
<p>是否同意取消该定做单?</p>
</view>
</van-cell-group>
</van-form>
<view class="c-a" v-if="!'已通过,已取消,被驳回'.includes(form.customOrder.status)">
<van-button type="danger" @click="check">驳回</van-button>
<van-button type="primary" @click="pass">通过</van-button>
</view>
</view>
</view>
<van-calendar v-model:show="show" @confirm="onConfirmDate" :min-date="new Date(2010, 0, 1)"
:max-date="new Date(2050, 0, 31)" />
<!--选择框-->
<van-popup v-model:show="showPicker" round position="bottom" @open="handleOpen">
<view v-if="typeData==='craftComment'">
<view class="b-a">
<van-button @click="showPicker=false,activeIds=[]">取消</van-button>
<van-button type="primary" @click="subActive">提交</van-button>
</view>
<van-tree-select v-model:active-id="activeIds" v-model:main-active-index="activeIndex"
:items="craftCommentList" />
</view>
<van-picker show-toolbar :columns="popuList" @confirm="pickerConfirm" @cancel="showPickerCancel" ref="pickerRef"
v-else />
</van-popup>
<!-- 面料选择框-->
<van-popup v-model:show="showPickerList" position="bottom" @open="mlmcOpen">
<view class="select-model">
<van-picker :columns="pickerContainerList" @cancel="pickerCancel" v-model="selectedValue"
@confirm="onConfirm" />
<view>
<view class="top-select">
<view class="confirm-select">
<p>请选择品种</p>
</view>
<view class="search-box">
<view>
<van-search placeholder="请输入品种名字" v-model="searchValue" label="面料搜索:" background="#ffffff"
@input="searchTo()" :clearable="false" />
</view>
<view class="flex-btn">
<button class="search-btn" @click="upSearch()">↑</button>
<button class="search-btn" @click="downSearch()">↓</button>
</view>
</view>
</view>
</view>
</view>
</van-popup>
<van-dialog v-model:show="showDialog">
<view>
<p style="padding: 20rpx;text-align: center;">是否确认取消订单</p>
<van-cell-group inset>
<van-field v-model="form.customOrder.cancelReason" colon name="取消原因" label="取消原因" label-width="5em" />
</van-cell-group>
</view>
<template #footer>
<view class="footer-button">
<van-button plain size="small" native-type="button" style="width: 25vw;" @click="showDialog=false">
取消
</van-button>
<van-button size="small" type="success" native-type="submit" style="width: 25vw;"
@click="confirmSecond">
确认
</van-button>
</view>
</template>
</van-dialog>
</template>
<style lang="scss" scoped>
.flex {
display: flex;
flex-direction: column;
height: 100vh;
width: 100vw;
overflow-y: hidden;
.van-nav-bar {
width: 100%;
}
.content {
flex: 1;
padding: 0 10px;
overflow-y: scroll;
}
}
.card {
border: 1rpx solid #d7d7d7;
border-radius: 5rpx;
padding: 10rpx;
margin-top: 10rpx;
}
.footer-button {
margin: 20px;
display: flex;
justify-content: space-around;
}
::v-deep .van-field {
font-size: 16px;
}
.a-b {
margin: 10rpx;
::v-deep .van-button--normal {
padding: 5px 8px;
height: 30px;
}
}
.a-c {
display: flex;
align-items: center;
::v-deep .van-button--normal {
padding: 8rpx;
height: 50rpx;
width: 7em;
}
}
.a-f {
display: flex;
align-items: center;
justify-content: end;
::v-deep .van-button--normal {
padding: 8rpx;
height: 50rpx;
width: 3.5em;
}
}
.c-a {
display: flex;
align-items: center;
justify-content: space-around;
padding: 15rpx;
::v-deep .van-button--normal {
padding: 8rpx;
height: 60rpx;
width: 7em;
}
}
.bor {
::v-deep .van-field__control {
border: 1px solid #d7d7d7;
}
}
.bor-n {
::v-deep .van-field__control {
border: none;
}
}
.b-a {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 30rpx;
::v-deep .van-button--normal {
padding: 5px 8px;
height: 30px;
}
}
::v-deep .van-field__control {
border-bottom: 1px solid #d7d7d7;
text-align: center;
font-size: 16px;
}
::v-deep .van-field__label {
text-align: end;
}
/*面料选择搜索框*/
.select-model {
position: relative;
}
.confirm-select {
width: 100%;
}
.confirm-select>p {
text-align: center;
}
.confirm-select>button {
border: none;
background-color: #ffffff;
color: #388aed;
margin: 10px 30px 0 0;
}
.top-select {
position: absolute;
top: 30px;
left: 0;
right: 0;
margin: auto;
z-index: 999;
}
::v-deep .select-model .van-picker__toolbar {
height: 66px;
align-items: flex-start;
/*justify-content: flex-end;*/
}
::v-deep .select-model .van-picker__cancel,
.select-model .van-picker__confirm {
height: 30px;
padding: 10px 16px 0;
}
::v-deep .select-model .van-picker__confirm,
.select-model .van-picker__confirm {
height: 30px;
padding: 10px 16px 0;
}
.search-btn {
padding: 1px 8px;
border: none;
background-color: #388aed;
color: #ffffff;
margin-left: 5px;
height: 30px;
line-height: 25px;
}
.search-box {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding-top: 15px;
padding-bottom: 5px;
position: relative;
background-color: #fff;
}
.van-search {
background-color: #f7f7f8;
}
.ml-search-jump {
padding: 3px 10px;
background-color: #388aed;
color: #ffffff;
border: none;
margin-left: 10px;
}
.flex-btn {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.searchPop {
position: absolute;
left: 30vw;
width: 60vw;
background-color: #f7f8fa;
max-height: 16vh;
overflow-y: scroll;
z-index: 9;
}
li {
border-top: 2px solid #fff;
padding: 10px 15px;
}
</style>