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

文章目录

  • 前提概要
  • 项目搭建
    • 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);
})

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络HTTP——针对实习面试

目录 计算机网络HTTP什么是HTTP&#xff1f;HTTP和HTTPS有什么区别&#xff1f;分别说明HTTP/1.0、HTTP/2.0、HTTP/3.0请说明访问网页的全过程请说明HTTP常见的状态码Cookie和Session有什么区别&#xff1f;HTTP请求方式有哪些&#xff1f;请解释GET和POST的区别&#xff1f;HT…

飞创直线电机模组 VS 传统丝杆模组:谁是自动化传动领域的王者?

在现代自动化技术领域&#xff0c;直线电机模组与传统丝杆模组作为两种常见的传动方式&#xff0c;各自有独特的特点和优势。然而&#xff0c;随着科学的不断进步和应用需求的日益提高&#xff0c;两者在精度、速度、寿命及可拓展性方面的差异愈发显著。本文将重点对比飞创直线…

第二十一周学习周报

目录 摘要Abstract1. LSTM原理2. LSTM反向传播的数学推导3. LSTM模型训练实战总结 摘要 本周的学习内容是对LSTM相关内容的复习&#xff0c;LSTM被设计用来解决标准RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。LSTM通过引入门控机制来控制信息的流动&#xff0c;从而…

《鸿蒙生态:开发者的机遇与挑战》

一、引言 在当今科技飞速发展的时代&#xff0c;操作系统作为连接硬件与软件的核心枢纽&#xff0c;其重要性不言而喻。鸿蒙系统的出现&#xff0c;为开发者带来了新的机遇与挑战。本文将从开发者的角度出发&#xff0c;阐述对鸿蒙生态的认知和了解&#xff0c;分析鸿蒙生态的…

Elasticsearch基本概念及使用

Elasticsearch 是一个开源的、分布式的全文搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了快速的搜索能力&#xff0c;支持大规模的数据分析&#xff0c;广泛应用于日志分析、全文搜索、监控系统和商业智能等领域。ES操作指令是基于restAPI构建&#xff0c;也就…

常用命令之LinuxOracleHivePython

1. 用户改密 passwd app_adm chage -l app_adm passwd -x 90 app_adm -> 执行操作后&#xff0c;app_adm用户的密码时间改为90天有效期--查看该euser用户过期信息使用chage命令 --chage的参数包括 ---m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 ---M 密码…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

Visual Studio 2022 安装

下载链接 https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?skuCommunity&channelRelease&versionVS2022&sourceVSLandingPage&cid2030&passivefalse 安装 以c为例&#xff0c;列出需要勾选的项目&#xff0c;有3个&a…

文件 fd

&#x1f3f7;️ 预备工作 ❓ 当我们在系统中创建一个空文件时&#xff0c;这个文件要不要占据磁盘的空间&#xff08;注意是空文件哟&#xff09; 答案&#xff1a;当然是要占据磁盘的空间的&#xff0c;文件不仅只包括内容&#xff0c;还有它的属性呀&#xff0c;就是创建时…

树的直径计算:算法详解与实现

树的直径计算:算法详解与实现 1. 引言2. 算法概述3. 伪代码实现4. C语言实现5. 算法分析6. 结论在图论中,树的直径是一个关键概念,它表示树中任意两点间最长路径的长度。对于给定的树T=(V,E),其中V是顶点集,E是边集,树的直径定义为所有顶点对(u,v)之间最短路径的最大值。…

RHCSA学习超详细知识点2命令篇

输入命令行的语法 终端中执行命令需要遵照一定的语法&#xff0c;输入命令的格式如下&#xff1a; 命令 参数命令 -选项 参数 输入命令时可以包含多个选项&#xff0c;假如一个命令有-a,-b,-c,-d四个选项&#xff0c;可以写作 命令 -a -b -c -d 参数 这里的多个选项可以“提…

3步实现贪吃蛇

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

风电电力系统低碳调度论文阅读第一期

在碳交易市场中&#xff0c;历史法和基准线法是用于分配碳排放配额的两种主要方法。以下是两种方法的公式及其解释&#xff1a; 区别总结 历史法&#xff1a;基于历史排放量&#xff0c;分配具有较强的公平性但可能缺乏激励减排。基准线法&#xff1a;基于行业基准和生产量&am…

Mybatis-Plus 多租户插件属性自动赋值

文章目录 1、Mybatis-Plus 多租户插件1.1、属性介绍1.2、使用多租户插件mavenymlThreadLocalUtil实现 定义,注入租户处理器插件测试domianservice & ServiceImplmapper 测试mapper.xml 方式 1.3、不使用多租户插件 2、实体对象的属性自动赋值使用1. 定义实体类2. 实现 Meta…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

使用Web Animations API实现复杂的网页动画效果

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂…

Matlab多输入单输出之倾斜手写数字识别

本本主要介绍使用matlab构建多输入单输出的网络架构&#xff0c;来实现倾斜的手写数字识别&#xff0c;使用concatenationLayer来拼接特征&#xff0c;实现网络输入多个特征。 1.加载训练数据 加载数据&#xff1a;手写数字的图像、真实数字标签和数字顺时针旋转的角度。 lo…

pytest结合allure做接口自动化

这是一个采用pytest框架&#xff0c;结合allure完成接口自动化测试的项目&#xff0c;最后采用allure生成直观美观的测试报告&#xff0c;由于添加了allure的特性&#xff0c;使得测试报告覆盖的内容更全面和阅读起来更方便。 1. 使用pytest构建测试框架&#xff0c;首先配置好…

【无人机设计与控制】基于MATLAB的四旋翼无人机PID双闭环控制研究

摘要 本文基于MATLAB/Simulink环境&#xff0c;对四旋翼无人机进行了PID双闭环控制设计与仿真研究。通过分析四旋翼无人机的动力学模型与运动学模型&#xff0c;建立了姿态和位置双闭环控制系统&#xff0c;以实现无人机的稳定飞行与精确轨迹跟踪。仿真实验验证了该控制策略的…

强大的正则表达式——Easy

进入题目界面输入难度1后&#xff0c;让我们输入正则表达式&#xff08;regex&#xff09;&#xff1a; 目前不清楚题目要求&#xff0c;先去下载附件查看情况&#xff1a; import re import random# pip install libscrc import libscrcallowed_chars "0123456789()|*&q…