【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,一经查实,立即删除!

相关文章

Python实现火柴人的设计与实现

1.引言 火柴人&#xff08;Stick Figure&#xff09;是一种极简风格的图形&#xff0c;通常由简单的线段和圆圈组成&#xff0c;却能生动地表达人物的姿态和动作。火柴人不仅广泛应用于动画、漫画和涂鸦中&#xff0c;还可以作为图形学、人工智能等领域的教学和研究工具。本文…

前端学习---(1)HTML

一个后端狗, 在公司悄摸得学习前端技术 在公司上班时间看视频影响不太好 按照这个来吧: https://gitee.com/chinese-gitee/Web 前端基础要学: HTML, CSS,JS 浏览器 浏览器中最重要的是渲染引擎(浏览器内核),JS引擎(常见的V8引擎) 渲染引擎: 用来解析 HTML与CSS。渲染引擎决定了…

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 * …

第11章 索引(postgresql v17)

V17 Chapter 11. Indexes 索引是增强数据库性能的常用方法。索引允许数据库服务器查找和检索特定的行&#xff0c;比没有索引要快得多。但是索引也会给整个数据库系统增加开销&#xff0c;因此应该合理使用索引。 1、介绍 假设我们有一个类似这样的表: CREATE TABLE test1 …

验证archive_command配置是否正确

要验证 archive_command 配置是否正确&#xff0c;你可以按照以下步骤进行&#xff1a; ‌检查配置文件‌&#xff1a; 确保 postgresql.conf&#xff08;或你的 PostgreSQL 实例使用的任何自定义配置文件&#xff09;中的 archive_command 已经设置为你想要的命令。 ‌重启 …

Python 网络编程:端口检测与IP解析

Python 网络编程&#xff1a;端口检测与IP解析 在现代网络编程中&#xff0c;了解如何检查端口状态以及根据IP地址解析主机名是非常重要的技能。本文将介绍如何使用Python实现这两个功能&#xff0c;并提供相应的示例代码供读者参考。 一、检查端口是否打开 在网络应用中&am…

self.browser = web.WebView.New(self) NotImplementedError

这个错误是 NotImplementedError&#xff0c;通常意味着你正在调用的某个功能在当前环境或库版本中还没有实现或不支持。在这个错误中&#xff0c;问题出在 web.WebView.New(self)&#xff0c;它尝试创建一个 Web 浏览器控件&#xff0c;但未能成功。 在 wxPython 中&#xff…

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

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

一套医药订单管理系统。该系统旨在通过数字化手段,实现医药订单的自动化处理、库存精准管理、供应链高效协同,以及数据驱动的决策支持。

1.产品介绍 产品名称: 智医链医药订单一体化管理系统 主要功能: 智能订单处理 自动化订单接收:系统支持多渠道订单接入(如电商平台、医院采购系统、线下门店等),自动抓取订单信息,减少人工录入错误。智能分配与调度:根据库存情况、配送距离、车辆载重等因素,智能分配…

ios在复制方面的兼容

在 iOS 开发中&#xff0c;特别是在使用 JavaScript 与 WebView 交互时&#xff0c;可能会遇到某些事件处理的限制。iOS 对于非用户动作&#xff08;non-user-initiated actions&#xff09;的事件处理有特定的安全策略&#xff0c;这是为了防止恶意代码或自动化脚本执行可能导…

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

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

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

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

数字化那点事:一文读懂人工智能

人工智能&#xff08;Artificial Intelligence, AI&#xff09;作为当今科技领域的热门话题&#xff0c;正以前所未有的速度改变着我们的生活。从智能家居到自动驾驶&#xff0c;从医疗诊断到金融分析&#xff0c;AI的应用无处不在。本文将通过通俗易懂的语言和丰富的案例&…

springboot 3.2.5集成spring security 只放行get请求,其他请求403

环境配置 jdk 17 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></…

Spring Boot 中的 @RequestMapping 和 Spring 中的 @RequestMapping 有什么区别?

在Spring框架中&#xff0c;RequestMapping注解用于映射Web请求到处理器&#xff08;控制器&#xff09;的方法上。在Spring Boot中&#xff0c;这个注解的使用方式并没有变化&#xff0c;但是Spring Boot作为Spring的扩展&#xff0c;提供了一些额外的便利性&#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引…

Python进阶知识3

Python迭代器与生成器 迭代器 Iterator 1.什么是迭代器 迭代器是访问可迭代对象的工具迭代器是指用 iter(obj) 函数返回的对象(实例)迭代器可以用next(it)函数获取可迭代对象的数据 2.迭代器函数iter和next 函数说明iter(iterable)从可迭代对象中返回一个迭代器,iterable必…