【uniapp】使用Promise封装request

目录

1、创建config目录

2、创建settings.js

3、创建目录utils

4、创建request.js

5、创建api目录

6、创建apis.js文件

7、业务系统调用

7.1 业务系统banner

7.2 业务系统荣誉页面(传参)


前言:使用Promise封装request

1、创建config目录

根目录下创建config目录

2、创建settings.js

在config目录下创建settings.js文件

const rootUrl='你的地址/smart/'
// const rootUrl='http://127.0.0.1:8000/smart/'
// 表示导出, 在任意js中可以导入 导入就是这个对象
export const api ={welcome:rootUrl + 'welcome/',banner:rootUrl + 'banner/',collection:rootUrl + 'collection/',  area:rootUrl + 'area/',statistics:rootUrl + 'statistics/',text_record:rootUrl + 'text_record/',userinfo:rootUrl + 'userinfo/',honorexperience:rootUrl + 'honorexperience/', //成绩荣誉character:rootUrl + 'character/',  // 汉字拼音zici:rootUrl +'zici/', // 查询英文defineword:rootUrl +'defineword/', // 有道单词翻译words:rootUrl +'words/'  // 查询英文
}

3、创建目录utils

在项目根目录下创建utils目录

4、创建request.js

在utils目录下创建request.js

import {api	} from '../config/settings.js';// 通用的发送请求函数  
export function sendRequest(config) {  return new Promise((resolve, reject) => {  uni.request({  ...config,  success: (res) => {  if (res.statusCode >= 200 && res.statusCode < 300) {  console.log("1111")resolve(res); // 假设服务器在响应体中返回了数据  } else {  console.log("222")uni.showToast({title:res.data.msg,icon:'none',				})reject(new Error(`HTTP Error: ${res.statusCode}`));  }  },  fail: (err) => {  console.log("3333")reject(err); // 网络错误或其他请求失败的情况  },  });  });  
}  // function sendRequest(config) {  
//   return new Promise((resolve, reject) => {  
//     uni.request({  
//       ...config,  
//       success: (res) => {  
//         if (res.statusCode >= 200 && res.statusCode < 300) {  
//           resolve(res.data); // 假设服务器在响应体中返回了数据  
//         } else {  
//           reject(new Error(`HTTP Error: ${res.statusCode}`));  
//         }  
//       },  
//       fail: (err) => {  
//         reject(err); // 网络错误或其他请求失败的情况  
//       },  
//     });  
//   });  
// }  

5、创建api目录

在根目录创建api目录

6、创建apis.js文件

在api目录下创建apis.js文件

import {api} from '../config/settings';
import {sendRequest} from '../utils/request.js';// 获取横幅数据的函数  
export function apiGetBanner() {  return sendRequest({  url: api.banner,  method: 'GET',  header: {  'Content-Type': 'application/json', // 注意这里使用了标准的大写形式  },  });  
}  // 获取荣誉数据
export function apiFetchHonorData(query){return  sendRequest({url: api.honorexperience,method: 'GET',data: {title: query}      })
};

7、业务系统调用

7.1 业务系统banner

<template><view class="pageBg"><!-- 轮播图 --><view class="banner"><swiper autoplay indicator-dots circular indicator-color="#FFFFFF" interval="3000"><swiper-item v-for="(item,index)  in banner_list" :key="index"><image :src="item.img" mode="aspectFill" /></swiper-item></swiper></view><view class="notice"><uni-notice-bar showIcon scrollable single :text="title"></uni-notice-bar></view><!-- 快捷入口 --><view class="grid-container"><navigator class="grid-item" url="/pages/addEnglish/addEnglish"><image class="grid-icon" src="/static/images/index/menu/xx.png" /><text class="grid-text">添加单词</text></navigator><navigator class="grid-item" url="/pages/addHonor/addHonor"><image class="grid-icon" src="/static/images/index/menu/sq.png" /><text class="grid-text">添加荣誉</text></navigator><navigator class="grid-item" url="/pages/honorWall/honorWall"><image class="grid-icon" src="/static/images/index/menu/rl.png" /><text class="grid-text">成长荣誉</text></navigator><navigator class="grid-item" url="/pages/wordRecognition/wordRecognition"><image class="grid-icon" src="/static/images/index/menu/yy.png" /><text class="grid-text">生字游戏</text></navigator><navigator class="grid-item" url="/pages/freeDictionary/freeDictionary"><image class="grid-icon" src="/static/images/index/menu/jf.png" /><text class="grid-text">新华字典</text></navigator><navigator class="grid-item" open-type="reLaunch" url="/pages/my/my"><image class="grid-icon" src="/static/images/index/menu/xl.png" /><text class="grid-text">个人中心</text></navigator></view><!-- 底部 --><view class="bottom"><navigator class="btv" open-type="reLaunch" url="/pages/reinforcement/reinforcement"><image class="btimg" src="/static/images/index/bottom/cute1.png" mode="scaleToFill" /></navigator><navigator class="btv" open-type="reLaunch" url="/pages/words/words"><image class="btimg" src="/static/images/index/bottom/cute4.png" mode="scaleToFill" /></navigator><navigator class="btv" url="/pages/wordTranslator/wordTranslator"><image class="btimg" src="/static/images/index/bottom/cute2.png" mode="scaleToFill" /></navigator><navigator class="btv" url="/pages/read/read"><image class="btimg" src="/static/images/index/bottom/cute3.png" mode="scaleToFill" /></navigator></view></view>
</template><script setup>
// import {api} from '../../config/settings';
import {ref,onMounted} from 'vue';
import {apiGetBanner} from '@/api/apis.js';
const title = ref('Hello');
const banner_list = ref([]); // 初始化空数组onMounted(async () => {  try {  const res = await apiGetBanner();  banner_list.value = res.data.banner; // 更新bannerList  title.value = res.data.notice.title; // 更新通知  // console.log(res);  } catch (error) {  console.error('Error fetching banner data:', error);  // 可以在这里添加额外的错误处理逻辑,比如重置状态或显示错误消息  // banner_list.value = []; // 例如,重置bannerList为空数组  // title.value = ''; // 例如,重置title为空字符串  }  
});</script><style lang="scss" scoped>// .banner {// 	width: 100%;// 	height: auto;// 	margin-top: 1rpx;// 	margin-bottom: 1;// }.banner image {width: 100%;/* 图片宽度拉伸至容器宽度  */height: 100%;/* 图片高度拉伸至容器宽度  */object-fit: cover;/* 图片将覆盖整个容器区域,可能被裁剪 */}.notice {margin-top: 5rpx;}.grid-container {display: flex;flex-wrap: wrap;justify-content: space-around;margin-top: 20rpx;}.grid-item {display: flex;flex-direction: column;/* 如果想要垂直排列图标和文本,则设置此属性(但通常对于水平居中的情况,这个属性不是必需的) */justify-content: center;/* 垂直居中 */align-items: center;/* 水平居中(但在flex-direction为column时,这个属性控制的是子元素在交叉轴上的对齐,即在这里不起作用) *//* 注意:如果flex-direction是column,那么align-items将不会影响水平对齐 */width: 30%;/* 根据需要调整 */margin-bottom: 5px;padding: 20px;box-sizing: border-box;border: 1px solid #ddd;border-radius: 5px;text-align: center;/* 这个属性对于flex容器本身不是必需的,除非你想要容器内的非flex子元素居中 */}.grid-icon {width: 50px;/* 根据需要调整 */height: 50px;/* 根据需要调整 */margin-bottom: 0;/* 如果不需要图标和文本之间有额外的间距,可以设置为0 */}.grid-text {font-size: 14px;margin-top: 5px;display: flex;/* 如果不需要额外的顶部间距,可以设置为0,但通常这不是必需的,因为align-items: center已经处理了垂直对齐 */}.bottom {display: flex;justify-content: space-evenly;margin-top: 5rpx;flex-wrap: wrap;}.bottom .btv .btimg {width: 345rpx;height: 200rpx;}
</style>

7.2 业务系统荣誉页面(传参)

这里存在检索查询,注意检索查询的传参

<template>
<view class="pageBg"><view class="header"><!-- 搜索框 --><input type="text" v-model="searchQuery" placeholder="搜索荣誉标题" class="search-input" /><!-- 确定按钮 --><button @click="searchHonor" class="search-button"><image src="/static/images/honorWall/ss.png" class="search-icon" /></button><!-- 新增按钮 --><navigator url="/pages/addHonor/addHonor"><button class="add-button"><image src="/static/images/honorWall/add.png" class="add-icon" /></button></navigator></view><!-- 列表展示 --><view v-if="honorList.length > 0" class="honor-list"><view v-for="(item,index) in honorList" :key="item.id"  class="honor-item"><text>{{ index + 1 }}</text>  <text>{{ item.type_display }}</text><text>{{ item.title }}</text><text>{{ formatDate(item.date_earned) }}</text></view></view>  <!-- 无数据时的占位提示 --><view v-else class="no-data"><text>暂无荣誉数据</text></view></view>
</template><script setup>
import { api } from '../../config/settings';
import { ref, onMounted, watch } from 'vue';
import {apiFetchHonorData} from '@/api/apis.js';
import { useRouter } from 'vue-router';// 定义存储荣誉数据的变量
const honorList = ref([]);// 查询条件
const searchQuery = ref('');// 格式化日期的方法
const formatDate = (dateStr) => {const date = new Date(dateStr);return `${date.getFullYear()}-${('0' + (date.getMonth() + 1)).slice(-2)}-${('0' + date.getDate()).slice(-2)}`;
};// 默认查询
const fetchHonorData = async () => {  try {  const res = await apiFetchHonorData(); // 初始加载时不带查询条件  honorList.value = res.data || []; // 确保即使响应中没有 data 字段,honorList 也是一个数组  } catch (error) {  console.error('组件挂载时获取荣誉数据失败:', error);  // 可以选择在这里处理错误,比如显示一个错误消息  }  
}
//挂载时执行默认查询
onMounted(fetchHonorData);  
//  搜索查询 
const searchHonor = async () => {  try {  const res = await apiFetchHonorData(searchQuery.value);  honorList.value = res.data || []; // 更新荣誉列表  } catch (error) {  console.error('搜索荣誉数据时失败:', error);  // 可以选择在这里处理错误,比如显示一个错误消息或重置查询框  }  
};  </script><style lang="scss" scoped>
.header {display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;
}.search-input {flex-grow: 1;padding: 10px;border: 1px solid #ddd;border-radius: 5px;
}.search-button {display: flex;align-items: center;color: white;border: none;border-radius: 5px;padding: 10px;cursor: pointer;
}.search-icon {width: 24px;height: 24px;
}.add-button {display: flex;align-items: center;color: white;border: none;border-radius: 5px;padding: 10px;cursor: pointer;
}.add-icon {width: 24px;height: 24px;
}.honor-list {padding: 10px;
}// .honor-item {
//   display: flex;
//   justify-content: space-between;
//   border-bottom: 1px solid #ddd;
//   padding: 10px 0;
// }
.honor-item {  display: flex;  align-items: center; // 确保所有子元素垂直居中  border-bottom: 1px solid #ddd;  padding: 10px 0;  
}  .honor-item > text:nth-child(1) { // 序号列  width: 40px; // 固定宽度  text-align: center;  
}  .honor-item > text:nth-child(2) { // 类型显示列  width: 60px; // 根据内容调整或固定宽度  text-align: left; // 或根据需求调整  
}  .honor-item > text:nth-child(3) { // 标题列  flex-grow: 1; // 填充剩余空间  min-width: 0; // 允许收缩到内容的最小宽度  white-space: nowrap; // 防止文本换行  overflow: hidden; // 隐藏溢出内容  text-overflow: ellipsis; // 使用省略号表示溢出文本  margin: 0 10px; // 可选:增加左右间距以改善可读性 }  .honor-item > text:nth-child(4) { // 日期列  width: 120px; // 固定宽度  text-align: right; // 根据需求调整  
}.no-data {text-align: center;padding: 20px;color: #999;
}
</style>

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

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

相关文章

UNIX网络编程-传输层

概述 传输层主要包括&#xff1a;TCP、UDP、SCTP&#xff08;流控制传输协议&#xff09;&#xff01; 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议&#xff0c;最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP&#xff1a;或是…

2023年华为杯数学建模竞赛题F论文和代码

强对流降水临近预报建模与优化 对问题一&#xff0c;为了实现基于前一小时&#xff08;10帧&#xff09;的实测雷达观测量&#xff08;ZH、ZDR、KDP&#xff09;&#xff0c;对后续一小时&#xff08;10帧&#xff09;的ZH进行预报&#xff0c;本文首先建立了线性拟合与RMSE双驱…

matlab相位图

% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t&#xff0c;位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100&#xff0c;包含1000个点 y 1e-5 * sin(2 * pi * 0.1 * t) .* exp(-0.01 * t); % 位移y(t) 振荡衰减 theta 1e-6 * cos(2 * pi * …

Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 ❤️TCP&#xff1a; 一、创建项目&#xff0c;命名为Server&#xff0c;继承QWidget 二、添加Qt设计师…

如何进行数学家式的学习思考?

如何进行数学家式的学习思考&#xff1f; 学生阶段的数学学习是非常重要的&#xff0c;对这一点很少有人质疑。一提起数学学习&#xff0c;一些学生、家长甚至一些教师认为&#xff0c;学生的数学学习往往侧重于掌握基本概念、公式和解题技巧&#xff0c;通过做题来巩固知识和提…

【飞腾加固服务器】全国产化解决方案:飞腾FT2000+/64核,赋能关键任务保驾护航

在信息安全和自主可控的时代背景下&#xff0c;国产化设备的需求与日俱增&#xff0c;尤其是在国防、航空航天、能源和其他关键行业。高可靠性和极端环境设计的国产加固服务器&#xff0c;搭载强大的飞腾FT2000/64核处理器&#xff0c;全面满足国产自主可控的严苛要求。 性能强…

【Linux探索学习】第六弹——Linux的工具(一):Ubuntu系统下的软件包管理器

前言&#xff1a; 在Ubuntu系统中&#xff0c;Linux工具为用户提供了强大的命令行操作能力。这些工具不仅使日常任务的自动化成为可能&#xff0c;还大幅提升了生产力。本文将重点介绍一些常用的Linux工具&#xff1a;软件包管理器 注意&#xff1a;本文是所讲解的内容是在Ubun…

【C++基础篇】——逐步了解C++

【C基础篇】——逐步了解C 文章目录 【C基础篇】——逐步了解C前言一、C的第一个程序二、命名空间1.namespace的价值2.namespace的定义3.命名空间的使用 三、C的输入&输出四、缺省参数五、函数重载六、引用1.引用的概念和定义&#xff1a;2.引用的特性3.引用的使用4.const引…

使用LangGraph构建多Agent系统架构!

0 前言 Agent是一个使用大语言模型决定应用程序控制流的系统。随着这些系统的开发&#xff0c;它们随时间推移变得复杂&#xff0c;使管理和扩展更困难。如你可能会遇到&#xff1a; Agent拥有太多的工具可供使用&#xff0c;对接下来应该调用哪个工具做出糟糕决策上下文过于…

51单片机的超声波视力保护仪【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器光照传感器超声波传感器按键、LED、蜂鸣器等模块构成。适用于视力保护仪、坐姿矫正器、超声波防近视等相似项目。 可实现功能: 1、LCD1602显示温度、光照、距离和学习时间 2、超声波传感器采集头部与探…

【计算机网络】HTTP报文详解,HTTPS基于HTTP做了哪些改进?(面试经典题)

HTTP协议基本报文格式 在计算机网络中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是应用层的一种协议&#xff0c;用于客户端&#xff08;通常是浏览器&#xff09;和服务器之间的通信。HTTP报文分为请求报文和响应报文&#xff0c;以下是它们的基本格式。 1. H…

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

PyTorch 介绍

什么是 PyTorch PyTorch 是一个开源的机器学习库&#xff0c;广泛用于计算机视觉和自然语言处理等应用。它由 Facebook 的人工智能研究团队开发&#xff0c;并得到了许多其他机构和个人的贡献。PyTorch 以其易用性、灵活性和动态计算图&#xff08;也称为自动微分系统&#xf…

Nexpose 6.6.273 发布,新增功能概览

Nexpose 6.6.273 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, released Oct 10, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 您的本地…

python学习-怎么在Pycharm写代码

打开Pycharm&#xff0c;点击文件-新建项目 2.选择pure python-点击箭头 展开 3.选择 Existing interpreter 如果 Existing interpreter 下没有相关环境 &#xff08;1&#xff09;点击**…** &#xff08;2&#xff09;选择python的安装路径 4.可修改文件名称-点击创建 …

STM32CUBEIDE的使用【三】RTC

于正点原子潘多拉开发板&#xff0c;使用stm32官方免费软件进行开发 CubeMx 配置 使用CubeMx 配置RTC 勾选RTC 设置日期和时间 配置LCD的引脚用来显示 STM32CUBEIDE 在usbd_cdc_if.c中重定向printf函数用于打印 #include <stdarg.h>void usb_printf(const char *f…

API项目5:申请签名 在线调用接口

开发申请签名 现在用户已经能看到这个接口了&#xff0c;也能看到这个接口文档&#xff0c;接下来就要在线调用 现在我们可以给每个新注册的用户自动分配一个签名和密钥&#xff0c;去修改一下注册流程&#xff1a; backend 项目&#xff0c;找到 UserServiceImpl.java 中的…

Miniconda管理虚拟环境【Python环境配置】

Miniconda管理虚拟环境【Python环境配置】 1. 下载并安装Miniconda2. 管理虚拟环境3. 管理虚拟环境中的包 1. 下载并安装Miniconda 1. 下载 从清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载Miniconda&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda…

go压缩的使用

基础&#xff1a;使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…

使用开源的 Vue 移动端表单设计器创建表单

FcDesigner Vant 版是一款基于 Vue3.0 的移动端低代码可视化表单设计器工具&#xff0c;通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单&#xff0c;提高开发者对表单的开发效率&#xff0c;节省开发者的时间。 源码下载 | 演示地址 | 帮助文档 本项目采用 Vue3.0 和 …