future 1 year ago
parent
commit
96daf43961

+ 2 - 0
xs-app/config/config.ts

@@ -45,6 +45,7 @@ export class config {
 		READ_SETTING: "READ_SETTING",
 		READ_HISTORY: "READ_HISTORY",
 		READ_RECORD: "READ_RECORD",
+		SEARCH_RECORD: 'SEARCH_RECORD',
 	}
 	
 	/**
@@ -108,6 +109,7 @@ export class config {
 			get_user_chapter_ids:'/book/get_user_chapter_ids', //购买书籍章节记录
 			user_info:'/user/info', //用户详情
 			reset:'/user/reset', //重置用户
+			book_search:'/book/search', //书搜索
 		},
 		
 		

+ 4 - 0
xs-app/data/data.ts

@@ -113,4 +113,8 @@ export class order_data {
 
 export class order_info_data {
 	status:number; //订单状态 1 支付中 2 已经支付
+}
+
+export class search_item_data {
+	name:string;
 }

+ 5 - 5
xs-app/pages/bookdetails/bookdetails-bookInfo.vue

@@ -80,16 +80,17 @@
 				
 				&__book-name {
 					margin-top: 12rpx;
-					font-size: 20px;
+					font-size: 22px;
 				}
 				&__author-name {
 					margin-top: 18rpx;
-					font-size: 16px;
+					font-size: 17px;
 					color: #894D4D;
 				}
 				&__category-name {
 					margin-top: 18rpx;
 					font-size: 16px;
+					color: #323232;
 				}
 				&__bottom-info{
 					margin-top: 18rpx;
@@ -98,12 +99,13 @@
 					justify-content: space-between;
 					&__read-number {
 						font-size: 16px;
+						color: #323232;
 					}
 					&__score {
 						display: flex;
 						flex-direction: row;
 						justify-content: center;
-						align-items: center;
+						align-items: center;						
 						&__number {
 							font-size: 16px;
 							color: #323232;
@@ -117,7 +119,5 @@
 			}
 		}
 		
-		
-		
 	}
 </style>

+ 1 - 1
xs-app/pages/bookdetails/bookdetails-chapterCatalog.vue

@@ -41,7 +41,7 @@
     import { util } from '../../framework/util';
 	import { tools } from '../../framework/tools';
 	import chapterCatalog from '../../components/read/chapterCatalog.vue'
-import { UserStatus } from '../../stores/userStatusManager';
+    import { UserStatus } from '../../stores/userStatusManager';
 	const props = defineProps({
 		book_data: Object,
 	})

+ 14 - 0
xs-app/pages/search/search-list.vue

@@ -0,0 +1,14 @@
+<template>
+	<view class="list_content">
+		列表
+	</view>
+</template>
+
+<script setup lang="ts">
+</script>
+
+<style lang="scss">
+	.list_content{
+		
+	}
+</style>

+ 12 - 3
xs-app/pages/search/search-nav.vue

@@ -18,16 +18,25 @@
 </template>
 
 <script setup lang="ts">
-    import { ref } from 'vue';
+    import { ref, watch } from 'vue';
 	
-	defineProps({
+	const props = defineProps({
 		height:Number,
+		searchContent:String,
 	})
+	watch(()=>props.searchContent, (new_v,old_v)=>{
+	    console.log('searchContent 观察 新值:',new_v,'旧值:',old_v)
+		if(new_v) {
+			search_content.value = new_v
+		}
+	},{immediate:true})
+	
 	let search_content = ref('')
-	const emits = defineEmits(['clickSearch'])
+	const emits = defineEmits(['clickSearch','onInput'])
 	
 	function onInput() {
 		// console.log('search_content',search_content.value)
+		emits('onInput', search_content.value)
 	}
 	
 	function clickSearch() {

+ 49 - 0
xs-app/pages/search/search-record.vue

@@ -0,0 +1,49 @@
+<template>
+	<view class="record_content">
+		<view class="title">
+			<view class="title__name">历史记录</view>
+			<uni-icons type="trash" size="25" @click="clickDeleteAll"></uni-icons>
+		</view>
+		<view class="item" v-for="(item,index) in data_list" :key="index" @click="clickItem(item)">
+			{{item.name}}
+		</view>
+	</view>
+</template>
+
+<script setup lang="ts">
+import { search_item_data } from '../../data/data';
+	defineProps({
+		data_list: Object,
+	})
+	
+	const emits = defineEmits(['clickDeleteAll','clickItem'])
+		
+	function clickDeleteAll() {
+		emits('clickDeleteAll')
+	}
+	
+	function clickItem(item:search_item_data) {
+		emits('clickItem',item)
+	}
+	
+</script>
+
+<style lang="scss">
+	.record_content{
+		display: flex;
+		flex-direction: column;
+		padding: 40rpx 40rpx;
+		.title {
+			margin-bottom: 30rpx;
+			font-size: 17px;
+			color: #7A7A7A;
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+		}
+		.item{
+			font-size: 17px;
+			margin-bottom: 20rpx;
+		}
+	}
+</style>

+ 65 - 9
xs-app/pages/search/search.vue

@@ -1,26 +1,82 @@
 <template>
 	<view class="content">
-		<search-nav :height='search_nav_height' @clickSearch='searchNavClickSearch' />
-		<view class="" :style="{marginTop:search_nav_height + 'rpx'}">1的发顺丰撒是的发生发顺丰水电费撒的发生</view>
+		<searchNav :height='search_nav_height' :searchContent='search_content' @onInput='searchOnInput' @clickSearch='searchNavClickSearch'></searchNav>
+		<view class="" :style="{marginTop:search_nav_height + 'rpx'}">
+			<record v-if="!is_search" :data_list='data_record_list'
+			@clickDeleteAll='recordClickDeleteAll'
+			@clickItem='recordClickItem'></record>
+			<list v-else></list>
+		</view>
 	</view>
 </template>
 
 <script setup lang="ts">
-	import { onLoad } from '@dcloudio/uni-app';
+	import searchNav from '../search/search-nav.vue'
+	import record from '../search/search-record.vue'
+	import list from '../search/search-list.vue'
+	
     import { ref } from 'vue';
-	import searchNav from '@/pages/search/search-nav.vue'
+    import { http } from '../../framework/http';
+    import { config } from '../../config/config';
+    import { util } from '../../framework/util';
+    import { SearchManager } from '../../stores/searchManager';
+    import { search_item_data } from '../../data/data';
 	
 	let search_nav_height = ref(100)
 	let search_content = ref('')
+	let is_search = ref(false)
+	let data_record_list = ref([])
+	
+	initData()
+	
+	function initData() {
+		data_record_list.value = SearchManager.getList()
+	}
+	
+	function recordClickDeleteAll() {
+		if(data_record_list.value.length<=0) {
+			return
+		}
+		util.showModal('清空历史记录', '', ()=>{
+			data_record_list.value = []
+			SearchManager.resetData(data_record_list.value)
+		})
+	}
 		
-	onLoad((options)=>{
-		// console.log('search-options',options)
-	})
+	function recordClickItem(item:search_item_data) {
+		search_content.value = item.name
+		searchNavClickSearch(item.name)
+	}
 	
+	function searchOnInput(r:string) {
+		if(r.length<=0) {
+			is_search.value = false
+		}
+	}
+		
 	function searchNavClickSearch(r:string) {
 		// console.log('searchNavClickSearch=',r)
-		search_content.value = r
-		console.log('search_content=',search_content.value)
+		if(r.length<=0) {
+			util.showInfoToast('请输入搜索关键字')
+			return
+		}
+		is_search.value = true
+		
+		data_record_list.value = SearchManager.addName(r)
+		searchBook(r)
+	}
+	
+	function searchBook(kw:string) {
+		util.showLoading()
+		let opt = {'kw': kw}
+		http.DynamicRequest(config.url_confg.Dynamic.book_search, opt, (err=null,data=null)=>{
+			util.hideLoading()
+			if(!err&&data) {
+				if(data.code==config.url_confg.StatesCode.SUCCESS){
+					// console.log('data=',data)
+				}
+			}
+		})
 	}
 	
 </script>

+ 1 - 1
xs-app/stores/readHistoryManager.ts

@@ -4,7 +4,7 @@ import { util } from '../framework/util';
 
 export class ReadHistoryManager {
     private static book_list:book_item_data[] = null
-	private static max_count = 4
+	private static max_count = 20
 
    // 获取书列表
 	public static getBookList():book_item_data[] {

+ 92 - 0
xs-app/stores/searchManager.ts

@@ -0,0 +1,92 @@
+import { search_item_data } from '../data/data';
+import { config } from '../config/config';
+import { util } from '../framework/util';
+
+export class SearchManager {
+    private static data_list:search_item_data[] = null
+	private static max_count = 20
+
+   // 获取书列表
+	public static getList():search_item_data[] {
+		if(SearchManager.data_list) {
+			return SearchManager.data_list
+		}
+		SearchManager.data_list = []
+		let string = util.getStorage(config.storage_key.SEARCH_RECORD)
+		if(string) {
+			SearchManager.data_list = JSON.parse(string)
+		}
+		return SearchManager.data_list
+	}
+	
+	// 保存列表
+	private static saveLocalList() {
+		util.setStorage(config.storage_key.SEARCH_RECORD, JSON.stringify(SearchManager.data_list))
+	}
+
+    // 异步检查
+	public static async asyncCheckNameOnSearch(name:string, cb:Function) {
+		let index = -1
+		for (let i = 0; i < SearchManager.getList().length; i++) {
+			let element = SearchManager.getList()[i]
+			if(element.name == name) {
+				index = i
+				break
+			}
+		}
+		cb && cb(index)
+	}
+	
+	// 同步检查
+	public static syncCheckNameOnSearch(name:string):number {
+		let index = -1
+		for (let i = 0; i < SearchManager.getList().length; i++) {
+			let element = SearchManager.getList()[i]
+			if(element.name == name) {
+				index = i
+				break
+			}
+		}
+		return index
+	}
+	
+	// 添加
+	public static addName(name:string):search_item_data[] {
+		let index = SearchManager.syncCheckNameOnSearch(name)
+		if(index>-1) {
+			SearchManager.getList().splice(index,1)
+		} else {
+			if(SearchManager.getList().length >= SearchManager.max_count) {
+				SearchManager.getList().pop()
+			}
+		}
+		let data = new search_item_data()
+		data.name = name
+		SearchManager.getList().unshift(data)
+		
+		SearchManager.saveLocalList()
+		
+		return SearchManager.getList()
+	}
+	
+	// 删除
+    public static deleteName(data_name_list:string[]) {
+		for (let i = 0; i < data_name_list.length; i++) {
+			let element = data_name_list[i]
+			for (let j = 0; j < SearchManager.getList().length; j++) {
+				let j_element = SearchManager.getList()[j]
+				if(element==j_element.name) {
+					SearchManager.getList().splice(j,1)
+				}
+			}
+		}
+		SearchManager.saveLocalList()
+	}
+	
+	// 重置数据
+	public static resetData(data_list:search_item_data[]) {
+		SearchManager.data_list = data_list
+		SearchManager.saveLocalList()
+	}
+
+}