diff --git a/component/public/superpicker.vue b/component/public/superpicker.vue index d6a981f..49e56b5 100644 --- a/component/public/superpicker.vue +++ b/component/public/superpicker.vue @@ -1,7 +1,6 @@ @@ -1022,34 +1051,159 @@ import { queryInvoicingList, getCgdMaterialTreeData, queryNuInfoByNuId, updateKfstatus, queryCgdList, queryCgdInfoList, queryWlInfoByWlId, voidedCgdMain, getCgrLis, getGysList } from './api/lunpan.js' import { onShow, onLoad, onHide, onPageScroll } from "@dcloudio/uni-app" import calendar from '@/component/public/calendar.vue' - import superpicker from '@/component/public/superpicker.vue' + // import superpicker from '@/component/public/superpicker.vue' const typechange = ref(0); const serverUrl = ref(""); const opengaijia = ref(false); const openjianhuo = ref(false); const opendata = ref(false); + + // 模糊查询 + + // 过滤后的结果,页面上渲染用这个 + const filteredCgrList = ref([]); + + const closefilteredCgrList = () => { + filteredCgrList.value = []; + cgrvalue.value = plzinfo.cgBy; + } + const clickfilteredCgrList = (item : any) => { + filteredCgrList.value = []; + plzinfo.cgBy = item.cgBy + cgrvalue.value = plzinfo.cgBy; + search() + } + + // --- 模糊匹配 --- + function fuzzyMatch(text : unknown, q : string) { + const s = String(text ?? '').toLowerCase() + const ql = String(q ?? '').toLowerCase().trim() + if (!ql) return true + if (s.includes(ql)) return true + + // subsequence 模糊字符序列 + let i = 0 + for (let j = 0; j < s.length && i < ql.length; j++) { + if (s[j] === ql[i]) i++ + } + return i === ql.length + } + + // --- 0.3 秒防抖专用变量 --- + let debounceTimer : number | null = null + + /** + * changeArray - 防抖搜索(0.3 秒后无再次输入才执行) + */ + function changeArray(res : any) { + if (!res.detail.value) { + plzinfo.cgBy = ""; + filteredCgrList.value = []; + search() + return + } + + const keyword = String( + typeof res === 'string' ? res : res?.detail?.value ?? '' + ).trim() + + // 清除上一次的定时器 + if (debounceTimer) clearTimeout(debounceTimer) + + // 重新等待 300ms + debounceTimer = setTimeout(() => { + if (!keyword) { + filteredCgrList.value = cgrlist.value.slice() + return + } + + filteredCgrList.value = cgrlist.value.filter(item => + fuzzyMatch(item?.cgBy, keyword) + ) + + filteredCgrList.value = [...filteredCgrList.value, ...filteredCgrList.value, ...filteredCgrList.value, ...filteredCgrList.value, ...filteredCgrList.value] + if (!filteredCgrList.value.length) { + filteredCgrList.value.push({ cgBy: `暂无数据` }) + } + + }, 300) + } + // 过滤后的结果,页面上渲染用这个 + const filteredCgrListsecond = ref([]); + const secondindex = ref(-1) - const gysclick = (res:any) => { - console.log("///",res); - opengys.value=false; + const closefilteredCgrListsecond = () => { + filteredCgrListsecond.value = []; + gysvalue.value = ""; + plzinfo.suppliers = ""; + search() + } + const clickfilteredCgrListsecond = (item : any,index:number) => { + filteredCgrListsecond.value = []; + plzinfo.suppliers = item.suppliers; + gysvalue.value = item.suppliersName; + secondindex.value = index; + search() + } + + // --- 模糊匹配 --- + // function fuzzyMatch(text : unknown, q : string) { + // const s = String(text ?? '').toLowerCase() + // const ql = String(q ?? '').toLowerCase().trim() + // if (!ql) return true + // if (s.includes(ql)) return true + + // // subsequence 模糊字符序列 + // let i = 0 + // for (let j = 0; j < s.length && i < ql.length; j++) { + // if (s[j] === ql[i]) i++ + // } + // return i === ql.length + // } + + // // --- 0.3 秒防抖专用变量 --- + // let debounceTimer : number | null = null + + /** + * changeArray - 防抖搜索(0.3 秒后无再次输入才执行) + */ + function changeArraysecond(res : any) { + if (!res.detail.value) { + plzinfo.suppliers = ""; + filteredCgrListsecond.value = []; + secondindex.value = -1; + gysvalue.value = ""; + search() + return + } + + const keyword = String( + typeof res === 'string' ? res : res?.detail?.value ?? '' + ).trim() + + // 清除上一次的定时器 + if (debounceTimer) clearTimeout(debounceTimer) + + // 重新等待 300ms + debounceTimer = setTimeout(() => { + if (!keyword) { + filteredCgrListsecond.value = gyslist.value.slice() + return + } + + filteredCgrListsecond.value = gyslist.value.filter(item => + fuzzyMatch(item?.suppliersName, keyword) + ) + + // filteredCgrListsecond.value = [...filteredCgrListsecond.value, ...filteredCgrListsecond.value, ...filteredCgrListsecond.value, ...filteredCgrList.value, ...filteredCgrList.value] + if (!filteredCgrListsecond.value.length) { + filteredCgrListsecond.value.push({ suppliersName: `暂无数据` }) + } + + }, 300) } - const openjianhuoclick = () => { - openjianhuo.value = true; - donghuaopo.value = false; - setTimeout(() => { - donghuaopo.value = true; - }, 100) - } - - const opengaijiaclick = () => { - opengaijia.value = true; - donghuaopo.value = false; - setTimeout(() => { - donghuaopo.value = true; - }, 100) - } onLoad(() => { firstgetqueryCgdList(); serverUrl.value = uni.getStorageSync('serverUrl') + '/sys/common/static/'; @@ -1057,6 +1211,8 @@ }) const opencgr = ref(false); const opengys = ref(false); + const cgrvalue = ref(""); + const gysvalue = ref(""); const cgrlist = ref([]); const gyslist = ref([]); @@ -1064,10 +1220,11 @@ const getSelectList = () => { getCgrLis().then((res : any) => { cgrlist.value = res.result; + console.log("采购人", res) }) getGysList().then((res : any) => { gyslist.value = res.result; - console.log("isright",res) + console.log("供应商", res) }) } @@ -1210,7 +1367,17 @@ cgdId: "", isWaring: 0 } - const tagsArray = [`待入库`,`挂账中`, `已入库`, `已销账`, ] + // 销毁日历 + const xiaohui = ref(true); + const chongzhi = () => { + xiaohui.value = false; + setTimeout(()=>{ + xiaohui.value = true; + },300) + Object.assign(plzinfo, mobanplzinfo); + search() + } + const tagsArray = [`待入库`, `挂账中`, `已入库`, `已销账`,] const clickmiddle = (index : number) => { middletarget.value = index; showvalue.value = InvoicingList.value[index]; @@ -1224,7 +1391,7 @@ // InvoicingList.value.push(...res.result.records); // } - console.log(res.result.records) + // console.log(res.result.records) InvoicingList.value.push(...res.result.records); clickmiddle(0); @@ -1515,7 +1682,7 @@ position: relative; .more-gray { - color: #BFBFBF; + color: #cacaca; font-size: 30rpx; width: 200rpx; display: flex; @@ -2039,6 +2206,7 @@ display: none; } } + .right-bottom { width: 100%; height: 600rpx; @@ -2686,4 +2854,33 @@ background-color: #fff; z-index: 999; } + + .input-next { + position: fixed; + bottom: 660rpx; + left: 40rpx; + width: 610rpx; + // height: 300rpx; + border-radius: 30rpx; + z-index: 999; + background-color: #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + padding: 40rpx 30rpx; + + .next-father { + color: #999; + margin: 10rpx; + font-size: 28rpx; + } + } + + .nomessage { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 200rpx; + font-size: 34rpx; + color: #999; + } \ No newline at end of file