소스 검색

搜索添加

xia 4 년 전
부모
커밋
74d9219fa1
8개의 변경된 파일237개의 추가작업 그리고 84개의 파일을 삭제
  1. 1 1
      src/api/config.js
  2. 17 37
      src/api/fly.js
  3. 25 36
      src/api/utils.js
  4. BIN
      src/assets/imgs/delete.png
  5. 9 2
      src/manifest.json
  6. 11 4
      src/views/Continue/index.ux
  7. 4 4
      src/views/Index/index.ux
  8. 170 0
      src/views/Search/index.ux

+ 1 - 1
src/api/config.js

@@ -7,7 +7,7 @@
  */
 const apiConfig = {
   baseURL: "https://quickapp.leyuee.com/api",
-  //baseURL: "https://quickapptest.leyuee.com/api",
+ // baseURL: "https://quickapptest.leyuee.com/api",
 };
 
 export default apiConfig;

+ 17 - 37
src/api/fly.js

@@ -18,7 +18,8 @@ var appInfo = it.getAppInfo();
 var provider = it.getProvider();
 var appDev, sendOrderId;
 var packages = 'com.beidao.kuaiying.zsy';
-var requestTime = '';
+var requestTime = 0;
+
 
 it.getAppDev((res) => {
   appDev = res;
@@ -33,65 +34,44 @@ fly.config.headers["Content-Type"] =
   "application/x-www-form-urlencoded;charset=utf-8";
 
 const filterNoToken = ["/login", "/refreshToken"];
-let requestList = [];
-
-const isSameRequest = async (url) =>{
-  let lastUrl = requestList[requestList.length-1] || '';
-  if( lastUrl = url && (new Date().getTime()-requestTime)/1000 < 2 ){
-    console.log('间隔真的太短了啦')
-    return false;
-  }else{
-    requestList.push(url);
-    if(requestList.length>8){
-      requestList.shift()
-    }
-    return true;
-  }
-}
 
 fly.interceptors.request.use(async config => {
   // 过滤一些不需要登录的路由
   if (filterNoToken.indexOf(config.url) === -1) {
-    let token = await getToken();
     let regId = (await storage.get({ key: "regId" })).data;
     let push_id = (await storage.get({ key: "push_id" })).data;
+    let token = await getToken();
     if (config.headers) {
       config.headers.Authorization = token;
       config.headers["X-Version"] = appInfo.versionName;
       config.headers["X-Brand"] = qs.stringify(appDev);
       config.headers["X-Package"] = packages;
       config.headers["X-regId"] = regId;
+      config.headers["X-CodeVersion"] = '1.0.0';
       config.headers["X-pushId"] = push_id;
       config.headers["X-Provider"] = provider;
       if (sendOrderId) config.headers["send-order-id"] = sendOrderId;
     }
     else {
       if (sendOrderId) {
-        config.headers = { Authorization: token, 'X-Version': appInfo.versionName, 'X-Brand': qs.stringify(appDev),"X-Package":packages, 'send-order-id': sendOrderId };
+        config.headers = { Authorization: token, 'X-Version': appInfo.versionName, 'X-Brand': qs.stringify(appDev), "X-Package": packages, 'send-order-id': sendOrderId };
       } else {
-        config.headers = { Authorization: token, 'X-Version': appInfo.versionName, 'X-Brand': qs.stringify(appDev),"X-Package":packages };
+        config.headers = { Authorization: token, 'X-Version': appInfo.versionName, 'X-Brand': qs.stringify(appDev), "X-Package": packages };
       }
     }
     if (config.method === "POST") {
-      if(qs.stringify(config.body)){
+      if (qs.stringify(config.body)) {
         config.body = qs.stringify(config.body) + '&package=' + packages;
-      }else{
+      } else {
         config.body = 'package=' + packages
       }
-      console.log(config.body)
-    }else{
-      config.body? config.body.package = packages : config.body = {package: packages}
+    } else {
+      config.body ? config.body.package = packages : config.body = { package: packages }
     }
     return config;
-  } else{
-    if(!isSameRequest(config.url)){
-        return false;
-    }else{
-      requestTime = new Date().getTime();
-      return config;
-    }
-   
-  } 
+  } else {
+    return config;
+  }
 });
 
 fly.interceptors.response.use(
@@ -105,10 +85,10 @@ fly.interceptors.response.use(
       let refresh_token = await getToken();
       console.log("refresh token:", refresh_token);
       return fly(res.config);
-      // return getToken().then(token => {
-      // });
-    }
-    else {
+
+    } else if (res.data.code === 10028) {
+      return false;
+    } else {
       prompt.showToast({
         message: res.data.msg
       })

+ 25 - 36
src/api/utils.js

@@ -10,16 +10,14 @@ import prompt from "@system.prompt";
 
 // 获取token
 let token = null;
+let requestLoginTime = 0;
+
 export const getToken = async () => {
   if (getToken.promise) return getToken.promise;
-
   if (!token) token = (await storage.get({ key: "token" })).data;
-
   // token格式化
   if (token && typeof token === "string") token = JSON.parse(token);
-
   console.log("checkToken", checkToken(token));
-
   if (!token) getToken.promise = login();
   else if (checkToken(token)) return Promise.resolve(token.token);
   else {
@@ -37,9 +35,13 @@ export const getToken = async () => {
   return getToken.promise;
 };
 
+
 // 登录
 export const login = async () => {
-  console.log("begin login");
+  requestLoginTime++;
+  if(requestLoginTime!=1){
+    let loginResponed =  await loginPromise();
+  }
   const signKey = "a!A&AFRWT65Nb3NlklezUiqHyQAA@Z8M";
   const packages = 'com.beidao.kuaiying.zsy';
   let device_info = (await device.getInfo()).data;
@@ -50,41 +52,28 @@ export const login = async () => {
   if (send_order_id) queryString = `androidid=${androidid.userId}&device_info=${JSON.stringify(device_info)}&device_no=${androidid.userId}&package=${packages}&send_order_id=${send_order_id}&timestamp=${timestamp}&key=${signKey}`;
   else queryString = `androidid=${androidid.userId}&device_info=${JSON.stringify(device_info)}&device_no=${androidid.userId}&package=${packages}&timestamp=${timestamp}&key=${signKey}`;
   let data = qs.stringify({
-    androidid:androidid.userId,
+    androidid: androidid.userId,
     device_info: JSON.stringify(device_info),
     device_no: androidid.userId,
     package: packages,
     send_order_id: send_order_id,
     timestamp: timestamp,
     sign: hex_md5(queryString),
-    
   });
-  let isLoginSleep = await loginSleep();
-  if(isLoginSleep){
-    let ret = await fly.post("/login", data);
-    await storage.set({ key: "loginTime", value: new Date().getTime() });
-    console.log("login over");
-    return ret;
-  }
-  
+  let ret = await fly.post("/login", data);
+  requestLoginTime = 0;
+  return ret; 
 };
 
-//我来判断是否要立即登录
-const loginSleep = async () =>{
-  let current = new Date().getTime();
-  let loginTime = (await storage.get({ key: "loginTime" })).data;
-  let sleep = new Promise(function(resolve, reject) {
-    if( loginTime && Math.floor((current - loginTime) / 1000) < 2 ){
-      setTimeout(()=>{
-        resolve(true)
-      },2000)
-    }else{
-        resolve(true)
-    } 
-  }) 
-  return sleep;
+const loginPromise = () =>{
+  return new Promise((resolve,reject)=>{
+    setTimeout(()=>{
+      resolve(true)
+    },800)
+  })
 }
 
+
 // 检测数据结果
 export const checkResult = r => {
   if (!r.data.code) {
@@ -100,10 +89,10 @@ const refreshToken = () => {
     .get("/refreshToken", {
       token: token.token
     }, {
-        headers: {
-          Authorization: token.token
-        }
-      })
+      headers: {
+        Authorization: token.token
+      }
+    })
     .then(r => {
       return r;
     })
@@ -228,13 +217,13 @@ function isExceedDay(theDate, expDay) {
   return theDate < targetTime;
 }
 
-export const getSendOrderId= (fn) =>{
+export const getSendOrderId = (fn) => {
   storage.get({
     key: 'send_order_id',
     success: data => {
-     fn && fn(data);
+      fn && fn(data);
     },
-    fail: (data,code) => {
+    fail: (data, code) => {
       console.log(`handling fail, code = ${code}`)
     }
   })

BIN
src/assets/imgs/delete.png


+ 9 - 2
src/manifest.json

@@ -1,8 +1,8 @@
 {
   "package": "com.beidao.kuaiying.zsy",
   "name": "追书云",
-  "versionName": "1.0.18",
-  "versionCode": "19",
+  "versionName": "1.0.23",
+  "versionCode": "24",
   "minPlatformVersion": "1040",
   "icon": "/assets/imgs/logo.png",
   "features": [
@@ -68,6 +68,9 @@
       "views/Home": {
         "component": "index"
       },
+       "views/Search": {
+        "component": "index"
+      },
       "views/Category": {
         "component": "index"
       },
@@ -146,6 +149,10 @@
         "titleBarText": "用户协议",
         "menu": false
       },
+      "views/Search": {
+        "titleBarText": "搜索",
+        "menu": false
+      },
       "views/Category": {
         "titleBarText": "分类",
         "menu": false

+ 11 - 4
src/views/Continue/index.ux

@@ -19,10 +19,17 @@ export default {
 
 	async getLastCharpt() {
 		let params = (await storage.get({ key: "lastCapter" })).data;
-		router.replace({
-			uri: "/views/Reader",
-			params: JSON.parse(params)
-		})
+		if(params){
+			router.replace({
+				uri: "/views/Reader",
+				params: JSON.parse(params)
+			})
+		 }else{
+			 router.replace({
+				uri: "/views/Index",
+			})
+		 }
+		
 	}
 
 }

+ 4 - 4
src/views/Index/index.ux

@@ -1,10 +1,10 @@
 <import name="home-page" src="../Home/index.ux"></import>
-<import name="category-page" src="../Category/index.ux"></import>
-<import name="shelf-page" src="../Shelf/index.ux"></import>
+<import name="catlf/index.ux"></import>
 <import name="my-page" src="../My/index.ux"></import>
 <import name="sign-page" src="../../components/sign/index.ux"></import>
 <import name="short-page" src="../../components/short/index.ux"></import>
-<template>
+<template>egory-page" src="../Category/index.ux"></import>
+<import name="shelf-page" src="../She
   <stack class="stack-wrap">
     <div class="index-wrap">
       <tabs class="tab-content" onchange="tabbarChange" index="{{current}}">
@@ -66,7 +66,7 @@ export default {
     tabbar: [
       {
         name: "首页",
-        title: "天天好书",
+        title: "追书云",
         icon: "../../assets/imgs/home.png",
         active_icon: "../../assets/imgs/home_choose.png",
         index: 0

+ 170 - 0
src/views/Search/index.ux

@@ -0,0 +1,170 @@
+<import name="x-book" src="../../components/book/book.ux"></import>
+<import name="x-loading" src="../../components/loading/loading.ux"></import>
+<template>
+	<div class="serch-wrap">
+		<div class="search-top">
+			<input type="text" id="search" class="serach-input" value="{{inputValue}}" @change="changeValue" enterkeytype="search" placeholder="请输入书名" @enterkeyclick="searchBook" style="placeholder-color:#D9D9D9"></input>
+		</div>
+		<div class="search-content" if="{{showHistory}}">
+			<div class="top-wrap">
+				<text>搜索历史</text>
+				<image src="../../assets/imgs/delete.png" @click="deleteHistory"></image>
+			</div>
+			<div class="history-list" if="{{historyList.length}}">
+				<text class="history-item" for={{historyList}} @click="serachItem($item)">
+					{{$item}}
+				</text>
+			</div>
+		</div>
+		<div class="search-content" if={{!list.length&&!showHistory}}>
+			<text class="isempty">{{loadingText}}</text>
+		</div>
+		<list class="list-content" @scrollbottom="onReachBottom" if={{list.length&&!showHistory}} id="list">
+			<list-item type="reslut">
+				<text class="reslut-title">为您搜索出以下内容</text>
+			</list-item>
+			<block for="list">
+				<list-item type="books-item" class="books-item__wrap {{$idx === 0 ? 'book-item__wrap--first' : ''}}">
+					<x-book multi="{{true}}" width="{{150}}" book="{{$item}}">
+						<div class="book-info">
+							<text class="name">{{$item.book_name}}</text>
+							<text class="intro">{{$item.book_summary}}</text>
+						</div>
+					</x-book>
+				</list-item>
+			</block>
+		</list>
+	</div>
+</template>
+<script>
+import { getBooksList } from "../../api";
+import { pageLoad } from "../../helper";
+import storage from '@system.storage';
+import prompt from '@system.prompt';
+
+export default {
+	private: {
+		inputValue: null,
+		showHistory: true,
+		meta: {},
+		empty: false,
+		list: [],
+		historyList: [],
+		loadingText: "努力搜索ing...",
+		filter: {
+			key: "",
+			page_size: 100,
+			page: 1,
+			status: 1,
+		},
+	},
+	computed: {
+
+	},
+	async onInit() {
+		let list = (await storage.get({ key: "history" })).data;
+		let sets = JSON.parse(list)
+		if (sets) this.historyList = sets;
+	},
+	searchBook(iptValue) {
+		if (!iptValue.value) {
+			prompt.showToast({ message: "请输入书名" });
+			return false;
+		}
+		this.filter.key = iptValue.value;
+		this.getBooksArray(false);
+		this.$element('search').focus({ focus: false });
+		this.showHistory = false;
+	},
+	serachItem(key) {
+		this.filter.key = key;
+		this.inputValue = key;
+		this.getBooksArray(false);
+		this.showHistory = false;
+	},
+	deleteHistory() {
+		let _self = this;
+		prompt.showDialog({
+			title: '重要提醒',
+			message: '确认要删除历史记录吗~',
+			buttons: [
+				{
+					text: '删除记录',
+					color: '#EF5952'
+				},
+				{
+					text: '我再想想',
+					color: '#999'
+				}
+			],
+			success: function (data) {
+				if (data.index === 0) {
+					storage.delete({
+						key: 'history',
+						success: function (data) {
+							_self.historyList = [];
+							_self.
+							prompt.showToast({ message: "删除成功" });
+						},
+					})
+				}
+
+			},
+			cancel: function () {
+				console.log('取消前往')
+			},
+		})
+	},
+	changeValue(text) {
+		if (!text.value) {
+			this.showHistory = true;
+		}
+	},
+	async getBooksArray(isLoad = true) {
+		this.empty = false;
+		this.loadingText = "加载ing...";
+		this.filter.page = (this.meta.current_page || 0) + 1;
+		if (!isLoad) {
+			this.filter.page = 1;
+			this.meta = {};
+		}
+		let params = this.filter;
+		console.log(params);
+		pageLoad(this.meta, getBooksList, params).then(ret => {
+			let newList = isLoad ? this.list : [];
+			let dataList = ret.list;
+			newList.push(...dataList);
+			this.meta = ret.meta;
+			this.list = newList;
+			if (!this.list.length) this.loadingText = "没有更多内容了", this.empty = true;
+			if (!isLoad) {
+				this.$element('list') && this.$element('list').scrollTo({ index: 0 });
+				if (this.filter.key && !this.historyList.includes(this.filter.key)) {
+					this.historyList.push(this.filter.key);
+					if (this.historyList.length > 10) {
+						this.historyList.shift()
+					}
+					storage.set({
+						key: 'history',
+						value: JSON.stringify(this.historyList),
+						success: function (data) {
+							console.log('handling success')
+						},
+					})
+				}
+			}
+		}).catch(e => {
+			console.log("e", e);
+		})
+	},
+	onReachBottom() {
+		// 请求更多数据
+		this.getBooksArray();
+	},
+}
+</script>
+<style lang="less">
+@import "../../assets/less/serach.less";
+</style>
+
+