From ab826d12b52265bc4f25044d43a042df2104f972 Mon Sep 17 00:00:00 2001 From: kyy <3283105747@qq.com> Date: 星期一, 14 七月 2025 21:34:10 +0800 Subject: [PATCH] 最新代码 --- pages/QC/RKJ/List.vue | 1240 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 856 insertions(+), 384 deletions(-) diff --git a/pages/QC/RKJ/List.vue b/pages/QC/RKJ/List.vue index 49286de..68a56bb 100644 --- a/pages/QC/RKJ/List.vue +++ b/pages/QC/RKJ/List.vue @@ -1,416 +1,888 @@ <template> - <view> - <!-- 鍒锋柊椤甸潰鍚庣殑椤堕儴鎻愮ず妗� --> - <view class="tips" :class="{ 'tips-ani': tipShow }">鍒锋柊鎴愬姛</view> + <view class="container"> + <!-- 鍥哄畾椤堕儴鎼滅储鏍� --> + <view class="fixed-search-container"> + <!-- 鐢熶骇杞﹂棿涓嬫媺妗嗗拰鎼滅储妗嗗苟鍒� --> + <view class="top-bar-container"> + <!-- 鐢熶骇杞﹂棿涓嬫媺妗� --> + <view class="workshop-selector-wrapper"> + <view class="form-group-row"> + <text class="form-label inline-label font-bold">鐢熶骇杞﹂棿</text> + <view class="workshop-selector flex-1"> + <picker mode="selector" :range="workshopList" @change="handleWorkshopChange" + v-model="workshopIndex"> + <view class="picker"> + {{ workshopIndex >= 0 ? workshopList[workshopIndex] : '璇烽�夋嫨杞﹂棿' }} + </view> + </picker> + </view> + </view> + </view> - <view class="newsTab"> - <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" style-type="button" - active-color="#87cefa"></uni-segmented-control> - <view class="content"> - <view v-show="current===0"> - <!-- 鍩轰簬 uni-list 鐨勯〉闈㈠竷灞� --> - <uni-list> - <!-- to 灞炴�ф惡甯﹀弬鏁拌烦杞鎯呴〉闈紝褰撳墠鍙负鍙傝�� --> - <uni-list-item style="margin-top: 10px;background-color:#EFEFF4;border-radius: 5px;" - class="list-item" direction="column" v-for="item in data" :key="item.id" - :to="'Add?id='+item.id+'&releaseNo='+item.releaseNo"> - <!-- 閫氳繃header鎻掓Ы瀹氫箟鍒楄〃鐨勬爣棰� --> - <template v-slot:header> - <view class="form-group uni-title" style="margin-bottom: 0;"> - <label class="form-label">妫�楠屽崟鍙�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.releaseNo"/> - </view> - </template> - <!-- 閫氳繃body鎻掓Ы瀹氫箟鍒楄〃鍐呭鏄剧ず --> - <template v-slot:body> - <view style="margin-top: 0;"> - <view class="uni-content"> - <view class="uni-note"> - <view class="form-group"> - <label class="form-label lab">閫佹鎵规鍙�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.billNo"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">鍒涘缓鏃堕棿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.createDate"/> - </view> - </view> - <view class="uni-note"> - <view class="form-group"> - <label class="form-label lab">鍒涘缓浜�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.createBy"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">浜х嚎:</label> - <input class="form-input" disabled="true" type="text" v-model="item.lineNo"/> - </view> - </view> + <!-- 鎼滅储妗� --> + <view class="search-bar-wrapper"> + <view class="search-bar-box"> + <picker mode="selector" :range="searchOptions" v-model="selectedOption" + @change="onPickerChange"> + <view class="picker">{{ searchOptions[selectedOption] }}</view> + </picker> + <input class="search-text" type="text" v-model="searchValue" @keypress.enter="searchData" + placeholder="璇疯緭鍏ユ悳绱㈠��" style="height: 40px;" /> + <button class="search-btn" @click="searchData">鎼滅储</button> + </view> + </view> + </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">鐗╂枡缂栫爜:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemNo"/> - </view> - </view> + <!-- 鍥哄畾鍒嗘鎺т欢 --> + <view class="fixed-newsTab"> + <uni-segmented-control :current="current" :values="items" @clickItem="switchTab" style-type="button" + active-color="#165DFF"></uni-segmented-control> + </view> + </view> -<!-- <view class="uni-title-sub uni-ellipsis-2">--> -<!-- <view class="form-group">--> -<!-- <label class="form-label">棰滆壊:</label>--> -<!-- <input class="form-input" disabled="true" type="text" v-model="item.colorName"/>--> -<!-- </view>--> -<!-- </view>--> + <!-- 鍐呭鍖哄煙 --> + <view class="content-wrapper"> + <view class="content"> + <!-- 鍒楄〃鍐呭 - 缁熶竴娓叉煋閫昏緫 --> + <view v-if="data.length > 0" class="result-list"> + <uni-list> + <uni-list-item style="margin-top: 10px; border-radius: 8px;" class="list-item" + direction="column" v-for="item in data" :key="item.id" :to="getNavigateUrl(item)"> + <template v-slot:header> + <view class="header-row"> + <!-- 妫�楠屽崟鍙� - 鑷�傚簲鏄剧ず --> + <view class="form-item header-item item-flex-2"> + <label class="form-label font-bold">妫�楠屽崟鍙�</label> + <span class="value-text billNo-bg">{{ item.releaseNo || '鏆傛棤鏁版嵁' }}</span> + </view> + <!-- 杞﹂棿 - 鑷�傚簲鏄剧ず --> + <view class="form-item header-item item-flex-1"> + <label class="form-label font-bold">杞﹂棿</label> + <span class="value-text">{{ item.itemCj || '鏆傛棤鏁版嵁' }}</span> + </view> + <!-- 瀹℃牳鏍囪瘑 - 鑷�傚簲鏄剧ず --> + <view class="form-item header-item item-flex-1"> + <label class="form-label font-bold">瀹℃牳鏍囪瘑</label> + <span class="value-text audit-status"> + <checkbox value="FSUBMIT" disabled="true" :checked="item.fsubmit === 1" + class="audit-checkbox" /> + </span> + </view> + </view> + </template> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">浜у搧鍚嶇О:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemName"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">浜у搧鍨嬪彿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemModel"/> - </view> - </view> - <!-- - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">浜у搧鍨嬪彿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.boardModel"/> - </view> - </view> - --> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">閫佹鏁伴噺:</label> - <input class="form-input" disabled="true" type="text" v-model="item.quantity"/> - </view> - </view> + <template v-slot:body> + <view style="margin-top: 0; padding: 0 15px;"> + <view class="uni-content"> + <!-- 鐩存帴浣跨敤鍐呰仈妯℃澘 --> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label lab font-bold">鍒涘缓鏃堕棿:</label> + <input class="form-input" disabled="true" type="text" + :value="item.createDate" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label lab font-bold">宸ュ崟鍗曞彿:</label> + <input class="form-input" disabled="true" type="text" + :value="item.billNo" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label lab font-bold">浜х嚎:</label> + <input class="form-input" disabled="true" type="text" + :value="item.lineNo" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label lab font-bold">鐗╂枡缂栫爜:</label> + <input class="form-input" disabled="true" type="text" + :value="item.itemNo" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label font-bold">浜у搧鍚嶇О:</label> + <input class="form-input" disabled="true" type="text" + :value="item.itemName" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label font-bold">瑙勬牸鍨嬪彿:</label> + <input class="form-input" disabled="true" type="text" + :value="item.itemModel" /> + </view> + </view> + <view class="uni-title-sub uni-ellipsis-2 font-bold"> + <view class="form-group"> + <label class="form-label font-bold">宸ュ崟鏁伴噺:</label> + <input class="form-input" disabled="true" type="text" + :value="item.quantity" /> + </view> + </view> + <view class="uni-note" style="color: #4B5563;"> + <view class="form-group"> + <label class="form-label lab font-bold">鍒涘缓浜�:</label> + <input class="form-input" disabled="true" type="text" + :value="item.createBy" /> + </view> + </view> + <view class="uni-note" style="color: #4B5563;"> + <view class="form-group"> + <label class="form-label lab font-bold">妫�楠屼汉:</label> + <input class="form-input" disabled="true" type="text" + :value="item.fcheckBy || item.createBy" /> + </view> + </view> + <view class="uni-note" style="color: #4B5563;"> + <view class="form-group"> + <label class="form-label lab font-bold">妫�娴嬬粨鏋�:</label> + <input class="form-input" disabled="true" type="text" + :value="item.fcheckResu" /> + </view> + </view> + </view> + </view> + </template> + </uni-list-item> + </uni-list> + </view> - <view class="uni-note" style="color: red"> - <view class="form-group"> - <label class="form-label lab">妫�楠屼汉:</label> - <input class="form-input" disabled="true" type="text" v-model="item.fcheckBy"/> - </view> - </view> - <view class="uni-note" style="color: red"> - <view class="form-group"> - <label class="form-label lab">妫�娴嬬粨鏋�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.fcheckResu"/> - </view> - </view> - </view> - </view> - </template> - </uni-list-item> - </uni-list> - <!-- 閫氳繃 loadMore 缁勪欢瀹炵幇涓婃媺鍔犺浇鏁堟灉锛屽闇�鑷畾涔夋樉绀哄唴瀹癸紝鍙弬鑰冿細https://ext.dcloud.net.cn/plugin?id=29 --> - <!-- <uni-load-more v-if="loading || options.status === 'noMore' " :status="options.status" /> --> + <!-- 鏃犳暟鎹彁绀� --> + <view v-else class="no-data-tip">鏆傛棤鐩稿叧鏁版嵁</view> - <!-- <view class="fab" @click="handleFabClick"> - <text class="fab-icon">+</text> - </view> --> - <view class="plus-button" @click="handleFabClick"> - + - </view> - </view> - <view v-show="current===1"> - <uni-list> - <!-- to 灞炴�ф惡甯﹀弬鏁拌烦杞鎯呴〉闈紝褰撳墠鍙负鍙傝�� --> - <uni-list-item style="margin-top: 10px;background-color:#EFEFF4;border-radius:5px;" - class="list-item" direction="column" v-for="item in data" :key="item.id" - :to="'Add?id='+item.id+'&releaseNo='+item.releaseNo"> - <!-- 閫氳繃header鎻掓Ы瀹氫箟鍒楄〃鐨勬爣棰� --> - <template v-slot:header> - <view class="form-group uni-title" style="margin-bottom: 0;"> - <label class="form-label">妫�楠屽崟鍙�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.releaseNo"/> - </view> - </template> - <!-- 閫氳繃body鎻掓Ы瀹氫箟鍒楄〃鍐呭鏄剧ず --> - <template v-slot:body> - <view style="margin-top: 0;"> - <view class="uni-content"> - <view class="uni-note"> - <view class="form-group"> - <label class="form-label lab">閫佹鎵规鍙�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.billNo"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">鍒涘缓鏃堕棿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.createDate"/> - </view> - </view> - <view class="uni-note"> - <view class="form-group"> - <label class="form-label lab">鍒涘缓浜�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.createBy"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">浜х嚎:</label> - <input class="form-input" disabled="true" type="text" v-model="item.lineNo"/> - </view> - </view> + <!-- 娣诲姞鎸夐挳 --> + <view class="plus-button" @click="handleFabClick">+</view> + </view> + </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label lab">鐗╂枡缂栫爜:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemNo"/> - </view> - </view> - -<!-- <view class="uni-title-sub uni-ellipsis-2">--> -<!-- <view class="form-group">--> -<!-- <label class="form-label">棰滆壊:</label>--> -<!-- <input class="form-input" disabled="true" type="text" v-model="item.colorName"/>--> -<!-- </view>--> -<!-- </view>--> - - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">浜у搧鍚嶇О:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemName"/> - </view> - </view> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">浜у搧鍨嬪彿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.itemModel"/> - </view> - </view> - - <!-- <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">瑙勬牸鍨嬪彿:</label> - <input class="form-input" disabled="true" type="text" v-model="item.boardModel"/> - </view> - </view> - --> - <view class="uni-title-sub uni-ellipsis-2"> - <view class="form-group"> - <label class="form-label">閫佹鏁伴噺:</label> - <input class="form-input" disabled="true" type="text" v-model="item.quantity"/> - </view> - </view> - <view class="uni-note" style="color: red"> - <view class="form-group"> - <label class="form-label lab">妫�楠屼汉:</label> - <input class="form-input" disabled="true" type="text" v-model="item.fcheckBy"/> - </view> - </view> - <view class="uni-note" style="color: red"> - <view class="form-group"> - <label class="form-label lab">妫�娴嬬粨鏋�:</label> - <input class="form-input" disabled="true" type="text" v-model="item.fcheckResu"/> - </view> - </view> - </view> - </view> - </template> - </uni-list-item> - </uni-list> - </view> - </view> - </view> - - - </view> + <!-- 鍒锋柊鎻愮ず寮圭獥 --> + <view class="toast-mask" v-if="toastVisible"> + <view class="toast-container"> + <view class="toast-icon"> + <image src="https://picsum.photos/id/237/40/40" mode="aspectFit"></image> + </view> + <view class="toast-message"> + <text class="toast-title font-bold">鍒锋柊鎴愬姛</text> + <text class="toast-content">鏁版嵁宸叉洿鏂板埌鏈�鏂扮姸鎬�</text> + </view> + </view> + </view> + </view> </template> <script> -export default { - components: {}, - data() { - return { - items: ['鏈彁浜�', '宸叉彁浜�'], - current: 0, - data: [], - tipShow: false // 鏄惁鏄剧ず椤堕儴鎻愮ず妗� - }; - }, - onLoad() { - //椤甸潰鍔犺浇鏃惰皟鐢ㄧ殑浜嬩欢 - this.init(); - }, - methods: { - init() { + export default { + components: {}, // 绉婚櫎缁勪欢瀵煎叆 + data() { + return { + items: ['鏈彁浜�', '宸叉彁浜�'], + current: 0, + data: [], + pageIndex: 1, + limit: 20, + totalPage: 0, + totalCount: 0, + noData: false, + isLoading: false, + searchOptions: ['宸ュ崟鍗曞彿', '浜у搧缂栫爜', '浜у搧鍚嶇О', '瑙勬牸', '閫佹浜�', '妫�楠屽崟鍙�'], + selectedOption: 0, + searchValue: '', + workshopList: [], + workshopIndex: -1, + fixedSearchHeight: 0, + toastVisible: false, + toastTimer: null, + loadingTimer: null + }; + }, + onLoad() { + this.initData(); + this.loadWorkshops(); + this.$nextTick(() => { + uni.createSelectorQuery().select('.fixed-search-container').boundingClientRect(rect => { + if (rect) { + this.fixedSearchHeight = rect.height; + console.log('鍥哄畾鎼滅储鍖哄煙楂樺害:', this.fixedSearchHeight); + } + }).exec(); + }); + }, + methods: { + // 鍒濆鍖栨暟鎹� + initData() { + this.data = []; + this.pageIndex = 1; + this.noData = false; + this.loadData(); + }, - let result = "鏈畬鎴�"; - if (this.current === 1) { - result = "宸插畬鎴�"; - } + // 鍔犺浇杞﹂棿鏁版嵁 + loadWorkshops() { + this.$post({ + url: "/SJ/getWorkshop" + }) + .then(res => { + console.log('杞﹂棿鍒楄〃鍝嶅簲:', res); + this.workshopList = res.data?.tbBillList?.map(item => item.departmentname) || []; + console.log('杞﹂棿鍒楄〃:', this.workshopList); + }) + .catch(err => { + console.error("鑾峰彇杞﹂棿鍒楄〃澶辫触:", err); + uni.showToast({ + title: "鑾峰彇杞﹂棿鍒楄〃澶辫触", + icon: 'none' + }); + }); + }, - //椤甸潰鍔犺浇鏃惰皟鐢ㄧ殑浜嬩欢 - this.$post({ - url: "/RKJ/getPage", - data: { - pageIndex: 1, - limit: 20, - createUser: this.$loginInfo.account, - result: result - } - }).then(res => { - this.data = res.data.tbBillList; - }) - }, - handleFabClick() { - uni.navigateTo({ - url: 'Add?id' - }); - }, - onClickItem(index) { - if (this.current !== index.currentIndex) { - this.current = index.currentIndex; - this.init(); - } - }, - }, - /** - * 涓嬫媺鍒锋柊鍥炶皟鍑芥暟 - */ - onPullDownRefresh() { - //閲嶆柊鎵ц涓�閬嶆煡璇� - this.init(); - this.tipShow = true; - //鍏抽棴鍔ㄧ敾 - uni.stopPullDownRefresh(); + // 澶勭悊杞﹂棿閫夋嫨 + handleWorkshopChange(e) { + this.workshopIndex = e.detail.value; + console.log('閫夋嫨鐨勮溅闂寸储寮�:', this.workshopIndex); - setTimeout(function () { - this.tipShow = false; - }, 3000); - }, - /** - * 涓婃媺鍔犺浇鍥炶皟鍑芥暟 - */ - onReachBottom() { - this.init(); - }, - onShow() { - //姣忔杩涘叆椤甸潰閮戒細鎵ц鐨勬柟娉� - this.init(); - } -}; + const workshop = this.workshopList[this.workshopIndex]; + if (workshop) { + uni.showToast({ + title: `閫夋嫨鐨勮溅闂�: ${workshop}`, + icon: 'none', + duration: 2000 + }); + this.initData(); // 閲嶆柊鍔犺浇鏁版嵁 + } + }, + + // 鎼滅储閫夐」鍙樻洿 + onPickerChange(e) { + this.selectedOption = e.detail.value; + }, + + // 鎵ц鎼滅储 + searchData() { + this.pageIndex = 1; + this.loadData(); + }, + + // 鍔犺浇鏁版嵁 + loadData() { + if (this.isLoading) return; + this.isLoading = true; + + const userName = this.$loginInfo?.account || ''; + const result = this.current === 1 ? "宸插畬鎴�" : "鏈畬鎴�"; + const searchValue = this.searchValue.trim(); + + // 纭畾璇锋眰URL + const url = searchValue ? '/RKJ/getSearchPage' : '/RKJ/getPage'; + + // 鏋勯�犺姹傚弬鏁� + const requestData = { + pageIndex: this.pageIndex, + limit: this.limit, + createUser: userName, + result: result + }; + + // 鏍规嵁鎼滅储閫夐」娣诲姞鎼滅储鏉′欢 + switch (this.selectedOption) { + case 0: + requestData.ItemCode = searchValue; + break; // 宸ュ崟鍙� + case 1: + requestData.ItemNo = searchValue; + break; // 浜у搧缂栫爜 + case 2: + requestData.ItemName = searchValue; + break; // 浜у搧鍚嶇О + case 3: + requestData.ItemModel = searchValue; + break; // 瑙勬牸 + case 4: + requestData.SongJ = searchValue; + break; // 閫佹浜� + case 5: + requestData.SongNo = searchValue; + break; // 妫�楠屽崟鍙� + } + + // 娣诲姞杞﹂棿绛涢�夋潯浠� + if (this.workshopIndex >= 0 && this.workshopList.length > 0) { + requestData.itemCj = this.workshopList[this.workshopIndex]; + } + + console.log('鍙戦�佽姹傚弬鏁�:', requestData); + + // 鍙戦�佽姹� + this.$post({ + url, + data: requestData + }) + .then(res => { + console.log('璇锋眰鎴愬姛鍝嶅簲:', res); + if (res.data && res.data.tbBillList) { + if (this.pageIndex === 1) { + this.data = res.data.tbBillList; + } else { + this.data = [...this.data, ...res.data.tbBillList]; + } + this.totalCount = res.data.totalCount; + this.totalPage = Math.ceil(this.totalCount / this.limit); + this.noData = this.pageIndex >= this.totalPage; + } else { + this.noData = true; + } + }) + .catch(err => { + console.error('璇锋眰澶辫触:', err); + uni.showToast({ + title: "鏁版嵁鍔犺浇澶辫触", + icon: 'none' + }); + }) + .finally(() => { + this.isLoading = false; + }); + }, + + // 澶勭悊娣诲姞鎸夐挳鐐瑰嚮 + handleFabClick() { + uni.navigateTo({ + url: '/pages/RKJ/Add' + }); + }, + + // 鍒囨崲鏍囩椤� + switchTab(index) { + if (this.current !== index.currentIndex) { + this.current = index.currentIndex; + this.initData(); // 鍒囨崲鏍囩鍚庨噸鏂板姞杞芥暟鎹� + } + }, + + // 鑾峰彇瀵艰埅URL + getNavigateUrl(item) { + if (this.current === 0) { + return `Add?id=${item.id}&releaseNo=${item.releaseNo}`; + } else { + return `Add?id=${item.id}&billNo=${item.billNo}`; + } + }, + + // 鏄剧ず鍒锋柊鎻愮ず寮圭獥 + showToast() { + this.toastVisible = true; + + // 娓呴櫎涔嬪墠鐨勫畾鏃跺櫒 + if (this.toastTimer) { + clearTimeout(this.toastTimer); + } + + // 璁剧疆瀹氭椂鍣ㄨ嚜鍔ㄥ叧闂脊绐� + this.toastTimer = setTimeout(() => { + this.toastVisible = false; + }, 1300); + } + }, + + // 涓嬫媺鍒锋柊 + onPullDownRefresh() { + this.pageIndex = 1; + this.loadData(); + + // 鏄剧ず寮圭獥鎻愮ず + this.showToast(); + + uni.stopPullDownRefresh(); + }, + + // 涓婃媺鍔犺浇 + onReachBottom() { + if (this.noData || this.isLoading) return; + this.pageIndex++; + this.loadData(); + }, + + // 椤甸潰鍗歌浇鏃舵竻闄ゅ畾鏃跺櫒 + onUnload() { + if (this.toastTimer) { + clearTimeout(this.toastTimer); + } + if (this.loadingTimer) { + clearTimeout(this.loadingTimer); + } + } + }; </script> - <style lang="scss"> -@import '@/common/uni-ui.scss'; + /* 棰滆壊鍙橀噺瀹氫箟 */ + $primary: #165DFF; + $primary-light: #E8F3FF; + $success: #36D399; + $warning: #FBBD23; + $error: #F87272; + $bg-light: #F9FAFB; + $bg-card: #FFFFFF; + $border: #E5E7EB; + $text-primary: #1F2937; + $text-secondary: #4B5563; + $text-muted: #9CA3AF; + $shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + $shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + $shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); -.uni-note { - margin-top: 0; -} + /* 鏂板寰摑鑹茶皟 */ + $blue-50: #F0F7FF; + $blue-100: #E0EEFF; -/* Set the input backgrounds to be gray */ -.form-input { - background-color: #f2f2f2; /* Or any other shade of gray you prefer */ -} + /* 鏂板瀛椾綋鍔犵矖绫� */ + .font-bold { + font-weight: 600; + } -/* Ensure automatic adaptation based on page size */ -.form-group { - display: flex; - align-items: center; -} + /* 鍒楄〃椤规牱寮� - 娣诲姞寰摑鑹茶儗鏅� */ + .list-item { + margin: 10px 15px; + border-radius: 8px; + overflow: hidden; + background-color: $blue-50; + /* 娣诲姞寰摑鑹茶儗鏅� */ + box-shadow: $shadow-sm; + transition: all 0.2s; + cursor: pointer; -.form-label { - margin-bottom: 0; - border-bottom: 1px solid #FFFFFF; - padding: 5px; - font-size: 12px; - width: 80px; - /* Adjust the font size as per your requirement */ -} + &:hover { + transform: translateY(-2px); + box-shadow: $shadow-md; + background-color: $blue-100; + /* 鎮仠鏃跺姞娣辫摑鑹茶皟 */ + } + } -.form-input { - flex: 1; - margin-bottom: 0; - border-bottom: 1px solid #c7c7c7; - padding: 5px; - font-size: 12px; - background-color: #FFFFFF; - /* Adjust the font size as per your requirement */ -} + /* 鍒楄〃澶撮儴鏍峰紡 - 涓庡垪琛ㄩ」鑳屾櫙鍗忚皟 */ + .header-row { + display: flex; + flex-wrap: nowrap; + /* 淇濇寔鍗曡鏄剧ず锛屼笉鎹㈣ */ + gap: 10px; + padding: 15px; + background-color: $blue-100; + /* 澶撮儴浣跨敤绋嶆繁鐨勮摑鑹茶皟 */ + border-radius: 8px 8px 0 0; + margin-bottom: 10px; -.plus-button { - position: fixed; - bottom: 20px; - right: 20px; - width: 60px; - height: 60px; - border-radius: 50%; - background-color: #007bff; - color: #ffffff; - text-align: center; - line-height: 59px; - font-size: 24px; - cursor: pointer; - z-index: 1000; - margin-bottom: 35px; -} + /* 纭繚瀛愬厓绱犳湁鏈�灏忓搴︼紝闃叉鍐呭婧㈠嚭 */ + .header-item { + min-width: 120px; + /* 缂╁皬鏈�灏忓搴︼紝纭繚鍦ㄥ皬灞忓箷涓婁篃鑳戒竴琛屾樉绀� */ + flex-grow: 1; + } -page { - display: flex; - flex-direction: column; - box-sizing: border-box; - background-color: #efeff4; - min-height: 100%; - height: auto; -} + /* 骞虫澘鍜屾闈㈣鍥� */ + @media (min-width: 768px) { + .item-flex-1 { + flex: 1; + /* 绗竴涓拰绗笁涓厓绱犲悇鍗�1浠界┖闂� */ + } -.tips { - color: #67c23a; - font-size: 14px; - line-height: 40px; - text-align: center; - background-color: #f0f9eb; - height: 0; - opacity: 0; - transform: translateY(-100%); - transition: all 0.3s; -} + .item-flex-2 { + flex: 2; + /* 绗簩涓厓绱犲崰2浠界┖闂� */ + } + } -.tips-ani { - transform: translateY(0); - height: 40px; - opacity: 1; -} + /* 绉诲姩瑙嗗浘 - 浠嶇劧淇濇寔鍦ㄤ竴琛� */ + @media (max-width: 767px) { + .item-flex-1 { + flex: 1; + /* 绗竴涓拰绗笁涓厓绱犲悇鍗�1浠界┖闂� */ + } -.content { - width: 100%; -} + .item-flex-2 { + flex: 2; + /* 绗簩涓厓绱犲崰2浠界┖闂� */ + } -.list-picture { - width: 100%; - height: 145px; -} + /* 杩涗竴姝ョ缉灏忔爣绛惧拰鍊肩殑瀛椾綋澶у皬 */ + .form-label { + font-size: 12px; + min-width: 50px; + } -.thumb-image { - width: 100%; - height: 100%; -} + .value-text { + font-size: 12px; + } + } + } -.ellipsis { - display: flex; - overflow: hidden; -} + /* 琛ㄥ崟椤圭洰鏍峰紡 - 涓庢暣浣撹儗鏅崗璋� */ + .form-item { + display: flex; + align-items: center; + gap: 5px; + /* 鍑忓皬闂磋窛锛岃妭鐪佺┖闂� */ + background-color: rgba(255, 255, 255, 0.8); + /* 鍗婇�忔槑鐧借壊鑳屾櫙 */ + border-radius: 6px; + padding: 0 8px; + /* 鍑忓皬鍐呰竟璺濓紝鑺傜渷绌洪棿 */ + height: 40px; + /* 鍑忓皬楂樺害锛岃妭鐪佺┖闂� */ + border: 1px solid $border; + box-sizing: border-box; + box-shadow: $shadow-sm; + transition: all 0.2s; -.uni-ellipsis-1 { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} + &:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); + } -.uni-ellipsis-2 { - overflow: hidden; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; -} + /* 鏍囩鍜屽�肩殑甯冨眬浼樺寲 */ + .form-label { + min-width: 60px; + /* 鏍囩鏈�灏忓搴� */ + white-space: nowrap; + font-size: 13px; + /* 鍑忓皬瀛椾綋澶у皬 */ + } + + .value-text { + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-size: 13px; + /* 鍑忓皬瀛椾綋澶у皬 */ + } + } + + /* 鏁翠綋瀹瑰櫒 */ + .container { + padding: 0; + background-color: #F3F4F6; + } + + /* 鍥哄畾椤堕儴鎼滅储瀹瑰櫒 */ + .fixed-search-container { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 100; + background-color: $bg-card; + box-shadow: $shadow-md; + } + + /* 椤堕儴鎼滅储鏍忓鍣� */ + .top-bar-container { + display: flex; + flex-wrap: wrap; + gap: 15px; + padding: 20px; + background-color: $bg-card; + } + + /* 鐢熶骇杞﹂棿涓嬫媺妗嗗鍣� */ + .workshop-selector-wrapper { + flex: 1; + min-width: 200px; + } + + /* 琛屽唴甯冨眬鐨勮〃鍗曠粍 */ + .form-group-row { + display: flex; + align-items: center; + } + + /* 琛屽唴鏍囩 - 鍩虹鏍峰紡 */ + .form-label { + color: $text-primary; + font-weight: 500; + margin: 0; + white-space: nowrap; + } + + /* 涓嬫媺妗嗗鍣� - 鍗犳弧鍓╀綑绌洪棿 */ + .flex-1 { + flex: 1; + } + + /* 鎼滅储妗嗗鍣� */ + .search-bar-wrapper { + flex: 2; + min-width: 200px; + } + + .search-bar-box { + display: flex; + width: 100%; + height: 44px; + border: 1px solid $border; + border-radius: 8px; + overflow: hidden; + background-color: $bg-light; + transition: all 0.2s; + + &:hover { + border-color: $primary; + } + } + + .picker { + width: 120px; + height: 44px; + line-height: 44px; + text-align: center; + font-size: 14px; + color: $text-secondary; + border-right: 1px solid $border; + background-color: $bg-light; + cursor: pointer; + } + + .search-text { + flex: 1; + height: 44px; + line-height: 44px; + padding: 0 15px; + font-size: 14px; + border: none; + outline: none; + background-color: $bg-light; + color: $text-primary; + + &::placeholder { + color: $text-muted; + } + } + + .search-btn { + background-color: $primary; + color: white; + font-size: 14px; + width: 80px; + height: 44px; + line-height: 44px; + border-radius: 0; + padding: 0; + margin: 0; + border: none; + transition: all 0.2s; + cursor: pointer; + + &:hover { + background-color: #0E52EA; + box-shadow: 0 2px 4px rgba(22, 93, 255, 0.3); + } + + &:active { + transform: scale(0.98); + } + } + + /* 鍒嗘鎺т欢 */ + .fixed-newsTab { + background-color: $bg-card; + padding: 10px 0; + border-bottom: 1px solid $border; + } + + /* 鍐呭鍖哄煙 - 澧炲姞椤堕儴杈硅窛锛岄伩鍏嶈鍥哄畾鍏冪礌閬尅 */ + .content-wrapper { + padding-top: calc(var(--window-top) + 120px); + } + + /* 鍊兼枃鏈牱寮� */ + .value-text { + flex: 1; + text-align: left; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: $text-primary; + font-size: 14px; + } + + /* 妫�楠屽崟鍙风壒娈婅儗鏅牱寮� */ + .billNo-bg { + background: linear-gradient(135deg, $primary-light 0%, #D1E8FF 100%); + color: $primary; + border-radius: 6px; + padding: 0 8px; + /* 鍑忓皬鍐呰竟璺� */ + font-weight: 500; + border: 1px solid #B5D8FF; + box-shadow: 0 1px 2px rgba(22, 93, 255, 0.1); + font-size: 13px; + /* 鍑忓皬瀛椾綋澶у皬 */ + } + + /* 瀹℃牳鐘舵�佹牱寮� */ + .audit-status { + display: flex; + align-items: center; + gap: 5px; + /* 鍑忓皬闂磋窛 */ + } + + .audit-checkbox { + transform: scale(0.85); + /* 缂╁皬澶嶉�夋 */ + accent-color: $success; + cursor: pointer; + } + + .audit-text { + color: $text-secondary; + font-size: 13px; + /* 鍑忓皬瀛椾綋澶у皬 */ + } + + .audit-text:checked+.audit-text { + color: $success; + font-weight: 500; + } + + /* 鍔犲彿鎸夐挳 */ + .plus-button { + position: fixed; + bottom: 25px; + right: 25px; + width: 64px; + height: 64px; + border-radius: 50%; + background-color: $primary; + color: white; + text-align: center; + line-height: 62px; + font-size: 28px; + cursor: pointer; + z-index: 1000; + box-shadow: 0 4px 12px rgba(22, 93, 255, 0.3); + transition: all 0.2s; + + &:hover { + transform: scale(1.05); + box-shadow: 0 6px 16px rgba(22, 93, 255, 0.4); + } + + &:active { + transform: scale(0.95); + } + } + + /* 杈撳叆妗嗘牱寮� */ + .form-input { + background-color: rgba(255, 255, 255, 0.8); + /* 鍗婇�忔槑鐧借壊鑳屾櫙 */ + border: 1px solid $border; + border-radius: 6px; + padding: 0 12px; + height: 36px; + line-height: 36px; + color: $text-primary; + font-size: 14px; + transition: all 0.2s; + + &:focus { + border-color: $primary; + outline: none; + } + } + + /* 鏍囩鏍峰紡 */ + .lab { + width: 80px; + color: $text-secondary; + } + + /* 缁熶竴鍦嗚 */ + * { + border-radius: 6px; + } + + /* 骞虫粦婊氬姩 */ + html { + scroll-behavior: smooth; + } + + /* 寮圭獥鎻愮ず鏍峰紡 */ + .toast-mask { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.3); + z-index: 2000; + display: flex; + justify-content: center; + align-items: center; + animation: fadeIn 0.3s ease-in-out; + } + + .toast-container { + width: 280px; + background-color: $bg-card; + border-radius: 12px; + box-shadow: $shadow-lg; + padding: 24px; + text-align: center; + animation: zoomIn 0.3s ease-out; + } + + .toast-icon { + width: 64px; + height: 64px; + margin: 0 auto 16px; + border-radius: 50%; + background-color: $success; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 4px 12px rgba(54, 211, 153, 0.3); + } + + .toast-icon image { + width: 32px; + height: 32px; + border-radius: 50%; + } + + .toast-title { + font-size: 18px; + color: $text-primary; + margin-bottom: 8px; + } + + .toast-content { + font-size: 14px; + color: $text-secondary; + } + + /* 鍔ㄧ敾鏁堟灉 */ + @keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } + } + + @keyframes zoomIn { + from { + transform: scale(0.8); + opacity: 0; + } + + to { + transform: scale(1); + opacity: 1; + } + } </style> \ No newline at end of file -- Gitblit v1.9.3