前端 - 使用uniapp+vue搭建前端项目(app端)

news2024/11/18 20:36:38

文章目录

  • 前提概要
  • 项目搭建
    • 1、打开HBuilder工具,选择文件->新建->项目
    • 2、下载依赖,需要先手动创建package.json文件,在自定义文件的最外层
    • 3、创建文件夹
    • 4、创建忽略文件 .gitignore
    • 5、创建vue.config.js文件 ,解决跨域问题(方便后面调用后端接口)
    • 6、使用uview
    • 7、配套axios发送请求(这里就能请求后端接口了)

前提概要

此次搭建的项目是在移动端使用,一款轻量级的app软件,操作简单,在公司也可以用哦,快快学起来吧~

代码编写工具:HBuilder

代码编写语言:uniapp+Vue2

代码使用的组件库:uView+uni-app

项目搭建

1、打开HBuilder工具,选择文件->新建->项目

在这里插入图片描述

2、下载依赖,需要先手动创建package.json文件,在自定义文件的最外层

在这里插入图片描述
手动编写代码,让后续有地方添加依赖( 注意:添加的依赖是需要再终端用命令下载的,手动在package文件中编写无效 )

{
    "dependencies": {
    }
}

打开终端 ctrl+` 下载下方中的依赖(按需添加即可)

例如:  npm i axios@1.6.5  --save
axios:1.6.5  -- 用于发送请求
crypto-js:4.2.0 -- 加密解密
echarts:3.8.4 -- 图表
qs:6.11.2 -- 字符串和对象之间的转换(序列化和反序列化)
uni-ui: 1.0.0 -- 允许使用uiapp组件
uview-ui:最新 -- 允许使用uview组件
vue-router:4.3.0 -- 路由
node-sass:7.0.1
sass-loader8.0.2  --这两者需要考虑版本对应问题,用于将scss转换为css文件的

3、创建文件夹

1、utils 存放工具如加密解密文件等
2、components 存放组件
3、static 存放静态文件
4、api 发送请求的文件

4、创建忽略文件 .gitignore

在使用git管理代码时将不需要提交的忽略

.idea/
*.log
*.bak
.user.ini
.vscode/
.history
.idea
.DS_Store
.hbuilderx
node_modules/
unpackage/

5、创建vue.config.js文件 ,解决跨域问题(方便后面调用后端接口)

module.exports = {
    devServer: {
        port: 8080,
        proxy: {
            "/": {
                target: "https://xxx.xxx.com",  //这里放后端的域名
                //也可以调用自己本地或者他人本地的代码 例如http://10.74.52.66:8080/xx  
                ws: true,
                changeOrigin: true,
                pathRewrite: {
                    "^/": "/"
                }
            },
        },
    },
}; 

6、使用uview

下载依赖后,还需要再官网下载zip地址
在这里插入图片描述
需要使用到的uview-ui文件夹在uni-modules文件夹里面,需要挪出来放在最外层(dcloud插件库)

将uview全局注册到main.js

import App from './App'
import uView from "uview-ui";
Vue.use(uView);

在app.vue中使用css样式

app.vue
<style lang="scss">
	@import 'uview-ui/index.scss';
</style>

在根目录下创建uni.scss文件

/**
 * 这里是uni-app内置的常用样式变量
 *
 * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
 * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
 *
 */

/**
 * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
 *
 * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
 */

/* 颜色变量 */
@import 'uview-ui/theme.scss';
/* 行为相关颜色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;

/* 文字基本颜色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
$uni-text-color-placeholder: #808080;
$uni-text-color-disable:#c0c0c0;

/* 背景颜色 */
$uni-bg-color:#ffffff;
$uni-bg-color-grey:#f8f8f8;
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色

/* 边框颜色 */
$uni-border-color:#c8c7cc;

/* 尺寸变量 */

/* 文字尺寸 */
$uni-font-size-sm:12px;
$uni-font-size-base:14px;
$uni-font-size-lg:16px;

/* 图片尺寸 */
$uni-img-size-sm:20px;
$uni-img-size-base:26px;
$uni-img-size-lg:40px;

/* Border Radius */
$uni-border-radius-sm: 2px;
$uni-border-radius-base: 3px;
$uni-border-radius-lg: 6px;
$uni-border-radius-circle: 50%;

/* 水平间距 */
$uni-spacing-row-sm: 5px;
$uni-spacing-row-base: 10px;
$uni-spacing-row-lg: 15px;

/* 垂直间距 */
$uni-spacing-col-sm: 4px;
$uni-spacing-col-base: 8px;
$uni-spacing-col-lg: 12px;

/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度

/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
$uni-font-size-title:20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:26px;
$uni-color-paragraph: #3F536E; // 文章段落颜色
$uni-font-size-paragraph:15px;

在pages.json中编写(跟pages同级)

 "easycom": {
        "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
    },
    

7、配套axios发送请求(这里就能请求后端接口了)

在api下创建http.js

import axios from 'axios'
const service = axios.create({
    baseURL: '',
    headers: {
        'Content-Type': 'application/json'
    },
    timeout: 10000,
});
// 请求拦截
service.interceptors.request.use(
    async (config) => {
            config.url = '/xxx' + config.url // 设置公共url
            const staffId = await getStaffId();
            if (staffId) {
                config.headers.UserId = staffId;  // 在headers中添加指定参数,传递给后端
            }
            uni.showLoading({
                title: '加载中'        // 发送请求时显示加载
            });
            return config;
        },
        (error) => {
            Promise.reject(error);
        }
);
// 返回拦截
service.interceptors.response.use((response) => {
    const res = response.data;
    uni.hideLoading();   // 
    return res;
}, () => {});

async function getStaffId() {
    //请求时需要判断是否有id字段
    return new Promise((resolve) => {                      
        const staffId = localStorage.getItem('id');
        if (staffId) {
            resolve(staffId);
        } else {
            // 如果staffId不存在,则等待100毫秒后再次尝试获取
            setTimeout(() => {
                const staffId = localStorage.getItem('id');
                resolve(staffId);
            }, 100);
        }
    });
}

export default service;

在api文件下新建index.js

/**
 * request.js
 * 通过promise对axios做二次封装,针对用户端参数,做灵活配置
 */
import instance from './http.js'
import {
    encrypt
} from '../utils/encryp.js'

function request(url, params, options, method) {
    return new Promise((resolve, reject) => {
        let data = {}
        // 参数加密  有些参数传递给后端需要加密处理,有些不需要
        for (var item in params) {
            if (item != 'pageNo') {
                params[item] = encrypt(params[item]); 
            }
        }
        if (method == 'get') data = {
            params
        }
        // post请求使用data字段
        if (method == 'post') data = {
            data: params
        }
        instance({
                url,
                method,
                ...data
            })
            .then((res) => {
                if (res.status == 200) {
                    resolve(res);
                } else {
                    // 通过配置可关闭错误提示
                    reject(res);
                }
            })
            .catch((error) => {})
            .finally(() => {})
    })
}
// 封装GET请求
function get(url, params, options) {
    return request(url, params, options, 'get')
}
// 封装POST请求
function post(url, params, options) {
    return request(url, params, options, 'post')
}
export default {
    get,
    post
}

在main,js中注册

import request from './api/index.js'
Vue.prototype.$http = request;

调用(这里只需要写公共路径后的路径就可以,因为发送请求时会自动带上api/http里面的头部url)

this.$http.post(
    '/myStage/myTask/xxx', 
    {
        taskId:val.taskId,
        taskProgressId:val.taskProgressId,
        fileUrl:val.resourceFiles[0].fileUrl
    })
    .then(res => {
    console.log(res);
})

到这里一个简单的项目已经搭建完成了,后续需要什么东西需要自己再往里面加,如果对你有帮助的话,点个赞吧~

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

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

相关文章

【IC每日一题:IC常用模块--RR/handshake/gray2bin】

IC每日一题&#xff1a;IC常用模块--RR/handshake/gray2bin 1 RR仲裁器2 异步握手信号处理3 格雷码和二进制相互转换 1 RR仲裁器 应用&#xff1a;在多个FIFO请求pop时存在仲裁策略&#xff0c;还有比如多master申请总线控制权的仲裁等这些应用场合&#xff1b;假如当前是最高…

2024 - 超火的多模态深度学习公共数据纯生信5+思路分享

超火的多模态深度学习公共数据纯生信5思路分享 多模态深度学习具有处理和整合多种类型信息的优势&#xff0c;特别是在预测患者预后方面能够结合不同类型的生物医学数据&#xff0c;如临床数据、基因表达数据、蛋白质组学数据、成像数据等&#xff0c;进而提高预后预测的准确性…

抽象java入门1.5.3.1——类的进阶

前言&#xff1a;在研究神技代码Hello word的时候&#xff0c;发现了一个重大公式bug&#xff0c;在代码溯源中&#xff0c;我发现了一个奇怪的东西&#xff0c;就是OUT不是类中类&#xff08;不是常规类的写法&#xff09; 内容总结&#xff1a; 代码运行的顺序复习 正片开始…

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具&#xff0c;它可以将Kubernetes元数据&#xff08;对象&#xff09;保存为本地压缩包&#xff0c;在恢复时可将这些元数据恢复到目标集群中&#xff08;已存在的资源不会被覆盖&#xff09;。它不依赖远程存储&#xff0c…

HelloMeme 上手即用教程

HelloMeme是一个集成空间编织注意力的扩散模型&#xff0c;用于生成高保真图像和视频。它提供了一个代码库&#xff0c;包含实验代码和预训练模型&#xff0c;支持PyTorch和FFmpeg。用户可以通过简单的命令行操作来生成图像和视频。 本文将详细介绍&#xff0c;如何在GPU算力租…

Chrome 浏览器开启打印模式

打开开发者工具ctrl shift p输入print 找到 Emulate CSS print media type

3步实现贪吃蛇

方法很简单&#xff0c;打开页面&#xff0c;复制&#xff0c;粘贴 一.整体思维架构 我们根据游戏的开始&#xff0c;运行&#xff0c;结束&#xff0c;将整个游戏划分成三个部分。在每个部分下面又划分出多个功能&#xff0c;接下来我们就根据模块一一实现功能。 二.Gamesta…

使用 Go 实现将任何网页转化为 PDF

在许多应用场景中&#xff0c;可能需要将网页内容转化为 PDF 格式&#xff0c;比如保存网页内容、生成报告、或者创建网站截图。使用 Go 编程语言&#xff0c;结合一些现有的库&#xff0c;可以非常方便地实现这一功能。本文将带你一步一步地介绍如何使用 Go 语言将任何网页转换…

.NET 9.0 中 System.Text.Json 的全面使用指南

以下是一些 System.Text.Json 在 .NET 9.0 中的使用方式&#xff0c;包括序列化、反序列化、配置选项等&#xff0c;并附上输出结果。 基本序列化和反序列化 using System; using System.Text.Json; public class Program {public class Person{public string Name { get; se…

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为&#xff1a;geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下&#xff1a; {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错

首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO&#xff1a;SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…

算法日记 26-27day 贪心算法

接下来的题目有些地方比较相似。需要注意多个条件。 题目&#xff1a;分发糖果 135. 分发糖果 - 力扣&#xff08;LeetCode&#xff09; n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每…

编写一个生成凯撒密码的程序

plain list(input("请输入需要加密的明文&#xff08;只支持英文字母&#xff09;&#xff1a;"))key int(input("请输入移动的位数&#xff1a;"))base_A ord(A)base_a ord(a)cipher []for each in plain:if each :cipher.append( )else:if each.i…

PyCharm2024.2.4安装

一、官网下载 1.从下面的链接点进去 PyCharm: The Python IDE for data science and web development by JetBrains 2.进入官网后&#xff0c;下载pycharm安装包 3.点击下载能适配你系统的安装包 4.安装包下载完成 二、安装 1.下载完成后&#xff0c;打开点击右键&#xff…

【MySQL】MySQL数据库入门:构建你的数据基石

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;MySQL初阶探索&#xff1a;构建数据库基础 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;数据库基础&#x1f400;什么是数据库&#x1f40f;主流数据库&#x1f986;MySQL数据库的基本…

基于Python 和 pyecharts 制作招聘数据可视化分析大屏

在本教程中&#xff0c;我们将展示如何使用 Python 和 pyecharts 库&#xff0c;通过对招聘数据的分析&#xff0c;制作一个交互式的招聘数据分析大屏。此大屏将通过不同类型的图表&#xff08;如柱状图、饼图、词云图等&#xff09;展示招聘行业、职位要求、薪资分布等信息。 …

OMV7 树莓派 tf卡安装

​ 升级7之后&#xff0c;问题多多&#xff0c;不是docker不行了&#xff0c;就是代理不好使 今天又重装了一遍&#xff0c;用官方的链接&#xff0c;重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置&#xff0…

idea 弹窗 delete remote branch origin/develop-deploy

想删除远程分支&#xff0c;就选delete&#xff0c;仅想删除本地分支&#xff0c;选cancel&#xff1b; 在 IntelliJ IDEA 中遇到弹窗提示删除远程分支 origin/develop-deploy&#xff0c;这通常是在 Git 操作过程中出现的情况&#xff0c;可能是在执行如 git branch -d 或其他…

GitCode光引计划有奖征文大赛

一、活动介绍 GitCode平台汇聚了众多杰出的G-Star项目&#xff0c;它们犹如璀璨星辰&#xff0c;用各自的故事和成就&#xff0c;为后来者照亮前行的道路。我们诚邀广大开发者、项目维护者及爱好者&#xff0c;共同撰写并分享项目在GitCode平台上托管的体验&#xff0c;挖掘平…

qt移植到讯为rk3568,包含一些错误总结

qt移植到arm报错动态库找不到 error while loading shared libraries: libAlterManager.so.1: cannot open shared object file: No such file or directory 通过设置环境变量 LD_LIBRARY_PATH就行了。 LD_LIBRARY_PATH是一个用于指定动态链接器在运行时搜索共享库的路径的环…