微信小程序实现电子书搜索与下载

news2024/11/27 10:34:09

1、背景

自己已经做了一版电子书下载网站(走蛟电子书),但用户使用手机更方便些,为改善用户体验,准备做一款微信小程序实现电子书搜索与下载的功能。

2、技术栈

由于功能较为单一,因此前端使用原生的微信小程序前端便可满足;后端采用C#语言编写,数据库采用MySQL。

开发此程序需要安装:

1)微信开发者工具:微信开发者工具(稳定版 Stable Build)下载地址与更新日志 | 微信开放文档

2)VS:

Download Visual Studio Tools - Install Free for Windows, Mac, Linux

3)MySQL:MySQL :: MySQL Downloads

4)数据库可视化工具Navicat(强烈推荐): Navicat | 支持 MySQL、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理

3、前端源程序

 index/index.js

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    keyword: '', // 搜索关键字
    fileId:'',
    fileUrl:'',
    fileName:'',
    fileContent : '<a href="{{fileUrl}}">{{fileName}}</a>',
    list:[],
    allData:[],
    showLoadMore: false, // 是否显示加载更多按钮
    currentPage: 1, // 当前页数
    pageSize: 10, // 每页数据数量
  },

  // 输入框输入事件处理函数
  handleInput: function(e) {
    this.setData({
      keyword: e.detail.value
    });
  },

  // 搜索按钮点击事件处理函数
  handleSearch: function() {
    // 获取搜索关键字
    this.setData({
      list:[]
    });
    const keyword = this.data.keyword;
    this.getData(keyword, this.data.fileId);
  },
  getData:function(keyword, fileId){
    console.log(keyword);
    var that = this;
    var tempList = [];
    setTimeout(()=>{
      wx.request({
        url: '接口地址',
        method: 'POST',
        data: {"clickFileID":fileId,"searchName":keyword,"ip":"192.168.100.1"},
        header: {
          'content-type': 'application/json'
        },
        success(res) {
          console.log(res.data);
          if(res.data.status == 1 && res.data.data.length > 0){
            for(var i = 0; i < res.data.totalNum;i++){
              tempList[i] = res.data.data[i];
            }
          }else{
            that.setData({
              list: [{"file_name":"再试试1"}]
            });
            clearTimeout();
          }
          if(tempList.length > 0){
            that.setData({
              allData:tempList
            });
            that.loadData();
            console.log(1,tempList.length);
            clearTimeout();
          }
        },
        fail(res) {
          console.log(res.errMsg);
          that.setData({
            list: [{"file_name":"再试试2"}]
          });
          wx.showModal({
            title: '失败',
            content: '2: ' + res.errMsg
          });
        }
      });
    },500);
  },
  loadData:function(){
    if(this.data.allData.length > 0){
      const { list, currentPage, pageSize } = this.data;
      const startIndex = (currentPage - 1) * pageSize;
      const endIndex = startIndex + pageSize;
      const updatedList = list.concat(this.data.allData.slice(startIndex, endIndex));
      this.setData({
        list: updatedList,
  showLoadMore: this.data.allData.length >= pageSize,
      });
    }else{
      this.setData({
        list: [{"file_name":"无数据3"}]
      });
    }
  },
  loadMore: function() {
    // 加载更多按钮点击事件
    const { currentPage } = this.data;
    this.setData({
      currentPage: currentPage + 1,
    });
    this.loadData();
  },
  download:function(e){
    var fileId = e.currentTarget.id; 
    var keyword = e.currentTarget.dataset.content;
    console.log(fileId, keyword);
    var that = this;
    wx.request({
      url: ''接口地址'',
      method: 'POST',
      data: {"clickFileID": fileId, "searchName": keyword, "ip": "168.192.100.2"},
      header: {
        'content-type': 'application/json'
      },
      success(res) {
        console.log(res.data);
        that.setData({
          fileName:res.data.data[0].file_name,
          fileUrl:res.data.data[0].file_url
        });
        that.showModal(that.data.fileUrl, that.data.fileName);
      },
      fail(res) {
        wx.showModal({
          title: '失败',
          content: '4: ' + res.errMsg
        });
      }
    });
  },
  showModal: function(fileUrl, fileName) {
    wx.showModal({
      title: '下载链接',
      content: fileName+"\n复制链接后在浏览器中打开",
      confirmText: '复制链接', // 设置确认按钮文字
      showCancel: false,
      success(res){
        if(res.confirm){
          wx.setClipboardData({
            data: fileUrl, // 设置要复制的链接内容
            success: function(res) {
              wx.showToast({
                title: '链接已复制',
                icon: 'success',
                duration: 2000
              });
            }
          });
        }
      }
    })
  }
});

index/index.json

{
  "usingComponents": {}
}

 index/index.wxml

<view class="mainview">
  <view class="mainfont" style="margin-top: 10rpx;">电子书查询</view>
  <view style="margin-top: 50rpx;">
    <view class="row">
      <view class="col">
        <input class="search-input" placeholder="请输入搜索内容" id="searchInfo" bindinput="handleInput" />
      </view>
      <view class="col2">
        <image class="minimage" src="../../image/sousuo.png" bindtap="handleSearch"></image>
      </view>
    </view>
  </view>
  <view>
  <view wx:for="{{list}}" wx:key="index" class="item">
  <text id ="{{item.file_id}}" data-content="{{item.file_name}}" bindtap="download">{{item.file_name}}</text>
  </view>
  <view class="load-more" wx:if="{{showLoadMore}}" bindtap="loadMore">
    加载更多
  </view>
  </view>
</view>

index/index.wxss

.mainview {
  margin: 10px;
}
.mainfont{
  font-weight:900;/*取值范围是100~900*/
}
.container{
  padding: 1px;
}
.search-input{
  font-weight:500;
}
.row {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  margin-bottom: 10px;
}
.col {
  padding: 5px;
  width: 90%;
}
.col2 {
  padding: 5px;
  width: 10%;
}
.minimage{
  width: 20px;
  height: 20px; 
}
.item{
  display: block;
  padding: 5px;
  background-color: #ffcece;
  margin-bottom: 5px;
  
}

4、后端源程序

待完善

5、效果图

6、尝鲜

目前小程序还未上线,请移步走蛟电子书使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS基础语法

CSS基础语法知识 文章目录 CSS基础语法1. CSS的引入方式1.1 内部样式1.2 外部样式1.3 内联样式 2. CSS标签选择器2.1 标签选择器2.2 类选择器2.3 id选择器2.4 复合选择器 3. CSS常见属性3.1 字体相关3.2 文本相关3.3 颜色的写法3.4 背景相关3.5 边框相关3.6 元素的显示模式3.7 …

【链表应用】| 一元多项式的操作

目录 一. &#x1f981; 要求:二. 代码实现&#xff08;Java & c&#xff09;1. Java实现2.C语言实现 三. &#x1f981; 总结 一. &#x1f981; 要求: 设有两个一元多项式: p(x)p0p1xp2x2pnxn q(x)q0q1xq2x2qmxm 多项式项的系数为实数&#xff0c;指数为整数&#xff0c…

11个免费的数据可视化工具推荐

数据可视化之所以流行&#xff0c;不仅是因为它简化了我们查看复杂数据的方式&#xff0c;更是因为数据可视化可以加快我们获取数据信息的速度。 本文专门为您列出了11个免费的数据可视化工具&#xff0c;帮助您快速掌握数据可视化技能。 1.即时设计 即时设计是可云端编辑的…

物通博联工业物联网解决方案,助力工厂实现设备远程运维

各类设备制造工厂随着经营规模与业务的扩张&#xff0c;设备可以销往全国各地甚至是全球&#xff0c;是工厂实力的体现。当设备越来越多、分布越来越广&#xff0c;设备管理的工作量和成本直线上升&#xff0c;可能面对维护不及时的情况&#xff0c;影响到客户经济效益和对工厂…

spark源码 spark on yarn环境的创建

1.入口类 sparkSubmit 的main方法 提交application submitnew SparkSubmit submit.doSubmit(args) -> super.doSubmit(args): parseArguments(args) &#xff1a;参数解析 方法 中 new sparkSubmitArguments(args) 点进去该类(主要解析参数)&#xff0c;然后找到parse&am…

C/C++ 内存管理 new delete operator new与operator delete函数 内存泄漏

C/C 内存分布 在C/C 当中有 &#xff1a; 局部数据静态数据和全局数据常量数据动态申请数据 上述不同的数据存储的位置也不同&#xff0c;&#xff1a; 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。2. 内存映射段是高效的I/O映射方式&…

Java运算符详解

目录 &#x1f511;前言 &#x1f3bd;算式运算符 ⚙赋值运算符 &#x1f34a;关系运算符 &#x1f37a;逻辑运算符 &#x1f352;位运算符 &#x1f339;移位运算符 &#x1f343;条件运算符 &#x1f349;运算符优先级 &#x1f511;前言 任何一个程序都离不开计算问题&…

IOC/DI配置管理第三方bean(Druid/C3P0)

文章目录 1 案例:数据源对象管理1.1 环境准备1.2 思路分析1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第三方bean步骤3:运行程序 2 加载properties文件2.1…

详解MySQL的并发控制

目录 1.概述 2.事务 2.1.什么是事务 2.2.事务的隔离级别 2.2.1.三种数据一致性问题 2.2.2.四种隔离级别 2.3.如何设置隔离级别 3.锁 3.1.锁与事务的关系 3.2.分类 3.3.表锁 3.3.1.概述 3.3.2.读锁 3.3.3.写锁 3.3.4.保护机制 3.4.行锁 3.4.1.概述 3.4.2.什么…

Redis Java API操作

1、普通maven工程方式 Redis不仅可以通过命令行进行操作&#xff0c;也可以通过JavaAPI操作&#xff0c;通过使用Java API来对Redis数据库中的各种数据类型操作 导入POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

【Linux Network】传输层协议——UDP

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 UDP详解&#x1f337; 传输层 在TCP/IP协议中可以把网络简单的划分为四个部分&#…

大数据如何助力营销(3)产品定位

在市场竞争日益激烈的环境下&#xff0c;产品定位是企业成功的关键因素之一。产品定位是指根据目标市场和目标消费者的需求、偏好和期望&#xff0c;确定产品的特性、功能、形象和价值&#xff0c;并与竞争对手的产品进行差异化的过程。产品定位不仅影响产品的设计、开发、生产…

全面讲解涂鸦PaaS2.0开发平台!物联网干货预警

之前我们有介绍过涂鸦 IoT PaaS&#xff08;点击查看往期介绍&#xff09;&#xff0c;面向开发生态&#xff0c;它集成了云开发、App 开发、硬件开发三大核心支撑能力&#xff0c;能够全方位助力开发者打造极具竞争力的个性化 IoT 解决方案&#xff0c;极大地降低 IoT 开发门槛…

Appium APP自动化环境搭建

1.下载安装 F:\android-sdk-windows F:\Appium-windows-1.21.0 F:\nodejs 2.创建一个bat文件&#xff0c;命名为appium.bat&#xff0c;并在其中写入如下内容&#xff1a; node Appium安装目录\resources\app\node_modules\appium\build\lib\main.js %* 注意&#xff1a;请…

从0到1开始,一步步搭建Web自动化测试框架

测试框架的设计有两种思路&#xff0c;一种是自底向上&#xff0c;从脚本逐步演变完善成框架&#xff0c;这种适合新手了解框架的演变过程。另一种则是自顶向下&#xff0c;直接设计框架结构和选取各种问题的解决方案&#xff0c;这种适合有较多框架事件经验的人。本章和下一张…

【zabbix】批量监控端口,自动发现规则

快速搞定端口批量监控 一、脚本及配置 1、&#xff08;文件名&#xff1a;check_port.py&#xff09;&#xff08;python2.7版本&#xff09; 存在路径&#xff1a;/etc/zabbix/zabbix_agentd.d/check_port.py 这个脚本有一部分内容是我从百度上找的&#xff0c;有一部分自己…

【C++】红黑树的实现

文章目录 &#x1f4d5; 概念特性 &#x1f4d5; 红黑树具体实现节点定义结构框架插入 &#x1f4d5; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

Python基础(四)

目录 一、程序的组织结构 1、前言 二、顺序结构 1、介绍 三、对象的布尔值 1、介绍 2、规定 四、分支结构 1、单分支if结构 1、语法语义 2、语法结构 3、案例 2、双分支if...else结构 1、语法语义 2、语法结构 3、案例 3、多分支if...elif...else结构 1、语…

Java语言---栈与队列

目录 一.栈 1.1栈的概念 1.2.栈的实现 1.2.1数组实现 栈 栈的创建 栈的基本方法实现 1.2.2链表实现 栈 栈的创建 栈的基本方法实现 二.队列 2.1队列的概念 2.2队列的实现 2.3代码实现 2.3.1队列代码的构建 2.3.2 队列 基础方法实现 总结 &#x1f63d;个人主页…

深入理解2D卷积和3D卷积

文章目录 卷积核的维度2D卷积单通道多通道代码example2d卷积操作后变化 3D卷积单通道多通道代码 在项目中用到了conv3但是对其背后的原理还有一些模糊的地方&#xff0c;conv2d与多通道的conv2d的区别在哪里&#xff1f;conv3d的思想理论是什么&#xff1f;对此进行探究和记录……