当前位置:   article > 正文

uniapp项目开发基础配置_开发uniapp的环境配置

开发uniapp的环境配置

1.env.js

  1. // 统一管理所有地址
  2. const devUrl = 'http://192.17.000.000:000';
  3. const proUrl = 'http://192.17.000.000:000';
  4. const prefix1 = '/api/XXX';
  5. const prefix2 = '/api/XXXX';
  6. const config = {
  7. // 开发环境配置
  8. development: {
  9. rootUrl: devUrl,
  10. imgUrl: devUrl + '/images/',
  11. gateway1: prefix1,
  12. gateway2: prefix2,
  13. },
  14. // 生产环境配置
  15. production: {
  16. rootUrl: proUrl,
  17. imgUrl: proUrl + '/images/',
  18. gateway1: prefix1,
  19. gateway2: prefix2,
  20. }
  21. }
  22. export default config[process.env.NODE_ENV];

2.interceptor.js

  1. import config from '@/env.js';
  2. const install = (Vue, vm) => {
  3. // 这个配置是一次配置,全局通用的,具体参数见 https://www.uviewui.com/js/http.html
  4. Vue.prototype.$u.http.setConfig({
  5. baseUrl: config.rootUrl, // 请求的本域名
  6. header: {
  7. Host: config.rootUrl?.slice(8)
  8. },
  9. showLoading: true, // 是否显示请求中的loading
  10. loadingText: '正在加载...', // 请求loading中的文字提示
  11. loadingTime: 800, // 在此时间内,请求还没回来的话,就显示加载中动画,单位ms
  12. originalData: true // 是否在拦截器中返回服务端的原始数据
  13. });
  14. // 请求拦截部分,如配置,每次请求前都会执行
  15. Vue.prototype.$u.http.interceptor.request = (config) => {
  16. const token = vm.vuex_token;
  17. if (token) {
  18. config.header = {
  19. 'Authorization': token && `Bearer ${token}`
  20. }
  21. }
  22. // 不缓存get请求
  23. if (config.method === 'get') {
  24. config.header['Cache-Control'] = 'no-cache'
  25. }
  26. return config;
  27. }
  28. // 响应拦截,如配置,每次请求结束都会执行本方法
  29. Vue.prototype.$u.http.interceptor.response = (res) => {
  30. if (res.statusCode == 200) {
  31. let result = res.data;
  32. if (!result.success) {
  33. vm.$u.toast(result.msg);
  34. if (result.status === '402') {
  35. setTimeout(() => {
  36. vm.$u.route({
  37. url: '/pages/account/firstPage',
  38. type: 'reLaunch'
  39. })
  40. }, 1000)
  41. }
  42. }
  43. return result;
  44. } else if (res.statusCode == 401) {
  45. vm.$u.route({
  46. url: '/pages/account/firstPage',
  47. type: 'reLaunch'
  48. })
  49. } else if (res.statusCode == 422) {
  50. vm.$u.toast(res.error)
  51. } else if (res.statusCode == 500) {
  52. vm.$u.toast(res.data?.msg)
  53. } else {
  54. vm.$u.route({
  55. url: '/pages/account/error',
  56. type: 'reLaunch'
  57. })
  58. }
  59. }
  60. }
  61. export default {
  62. install
  63. }

http.js

  1. import * as user from './modules/user.js';
  2. const install = (Vue, vm) => {
  3. Vue.prototype.$api = {
  4. // test get api
  5. getSearch: (params = {}) => vm.$u.get('/http/search', params),
  6. // test get loading
  7. getReqLoading: (params = {}) => vm.$u.get('/http/reqloading', params),
  8. // modules import
  9. user,
  10. };
  11. }
  12. export default {
  13. install
  14. }

user.js

  1. import Vue from 'vue';
  2. let vm = new Vue();
  3. // test get api
  4. export function getUserInfo(params) {
  5. return vm.$u.get('/Info', params)
  6. }
  7. // test post api
  8. export function GetNoticeList(params) {
  9. return vm.$u.post(`/List`, params)
  10. }

commons/tools.js (常用公共方法

  1. import config from '@/env.js'
  2. import {
  3. GetDataItemDetail
  4. } from '../apis/modules/user.js'
  5. const install = (Vue, vm) => {
  6. Vue.prototype.$t = {
  7. bg(name) {
  8. return {
  9. background: `url(${config.rootUrl}/GetImg/${name}) no-repeat`,
  10. backgroundSize: '100% 100%'
  11. }
  12. },
  13. // 背景图片 静态资源
  14. bgAssets(name) {
  15. return {
  16. background: `url(${config.imgUrl}${name}) no-repeat`,
  17. backgroundSize: '100% 100%'
  18. }
  19. },
  20. // 服务器地址拼接图片缩略图
  21. imgs(name) {
  22. return `${config.rootUrl}/images/GetImg/${name}_s?timestamp=${new Date().getTime()}`
  23. },
  24. img(name) {
  25. return `${config.rootUrl}/images/GetImg/${name}?timestamp=${new Date().getTime()}`
  26. },
  27. /**
  28. * 千位分割
  29. * @param { number }
  30. */
  31. formatPrice(amount) {
  32. if (amount) {
  33. amount = (+amount).toFixed(2);
  34. var re = /\d{1,3}(?=(\d{3})+$)/g;
  35. var n1 = amount.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
  36. return s1.replace(re, "$&,") + s2;
  37. });
  38. return n1;
  39. } else {
  40. return 0;
  41. }
  42. },
  43. uploadImg() {
  44. return `${config.rootUrl}/images/UploadImg`
  45. },
  46. uploadVedio() {
  47. return `${config.rootUrl}/video/UploadVideo`
  48. },
  49. //数据字典
  50. DataItem(ItemCode) {
  51. let arr = []
  52. return GetDataItemDetail({
  53. ItemCode
  54. }).then(res => {
  55. arr = res.response.map((item) => {
  56. return {
  57. label: item.ItemName,
  58. value: item.ItemValue
  59. }
  60. })
  61. return arr
  62. })
  63. },
  64. showLabel(type, list) {
  65. if (type !== '') {
  66. let tag = list.find(item =>
  67. item.value == type
  68. )
  69. return tag ? tag.label : ''
  70. }
  71. },
  72. }
  73. }
  74. export default {
  75. install
  76. }

store/index.js

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. let lifeData = {};
  5. try {
  6. // 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
  7. lifeData = uni.getStorageSync('lifeData');
  8. } catch (e) {
  9. console.log(e)
  10. }
  11. // 需要永久存储,且下次APP启动需要取出的,在state中的变量名
  12. let saveStateKeys = ['vuex_token','vuex_phone', 'vuex_userId',
  13. 'vuex_userName',
  14. ];
  15. // 保存变量到本地存储中
  16. const saveLifeData = function(key, value) {
  17. // 判断变量名是否在需要存储的数组中
  18. if (saveStateKeys.indexOf(key) != -1) {
  19. // 获取本地存储的lifeData对象,将变量添加到对象中
  20. let tmp = uni.getStorageSync('lifeData');
  21. // 第一次打开APP,不存在lifeData变量,故放一个{}空对象
  22. tmp = tmp ? tmp : {};
  23. tmp[key] = value;
  24. // 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
  25. uni.setStorageSync('lifeData', tmp);
  26. }
  27. }
  28. const {
  29. vuex_token,
  30. vuex_phone,
  31. vuex_userId,
  32. vuex_userName,
  33. } = lifeData;
  34. const store = new Vuex.Store({
  35. // 下面这些值仅为示例,使用过程中请删除
  36. state: {
  37. // 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
  38. // 加上vuex_前缀,是防止变量名冲突,也让人一目了然
  39. vuex_token,
  40. vuex_phone, // 用户手机号
  41. vuex_userId, // 用户id
  42. vuex_userName,
  43. },
  44. mutations: {
  45. $uStore(state, payload) {
  46. // 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
  47. let nameArr = payload.name.split('.');
  48. let saveKey = '';
  49. let len = nameArr.length;
  50. if (nameArr.length >= 2) {
  51. let obj = state[nameArr[0]];
  52. for (let i = 1; i < len - 1; i++) {
  53. obj = obj[nameArr[i]];
  54. }
  55. obj[nameArr[len - 1]] = payload.value;
  56. saveKey = nameArr[0];
  57. } else {
  58. // 单层级变量,在state就是一个普通变量的情况
  59. state[payload.name] = payload.value;
  60. saveKey = payload.name;
  61. }
  62. // 保存变量到本地,见顶部函数定义
  63. saveLifeData(saveKey, state[saveKey])
  64. }
  65. }
  66. })
  67. export default store

 store/mixin.js

  1. // $u.mixin.js
  2. import {
  3. mapState
  4. } from 'vuex'
  5. import store from "@/store"
  6. // 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
  7. let $uStoreKey = [];
  8. try {
  9. $uStoreKey = store.state ? Object.keys(store.state) : [];
  10. } catch (e) {
  11. }
  12. module.exports = {
  13. created() {
  14. // 将vuex方法挂在到$u中
  15. // 使用方法为:如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
  16. // 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
  17. this.$u.vuex = (name, value) => {
  18. this.$store.commit('$uStore', {
  19. name,
  20. value
  21. })
  22. }
  23. },
  24. computed: {
  25. // 将vuex的state中的所有变量,解构到全局混入的mixin中
  26. ...mapState($uStoreKey)
  27. }
  28. }

main.js

  1. import Vue from 'vue'
  2. import App from './App'
  3. import store from '@/store'
  4. Vue.config.productionTip = false
  5. App.mpType = 'app'
  6. // 引入全局uView
  7. import uView from 'uview-ui'
  8. Vue.use(uView);
  9. // 全局引入vuex
  10. let vuexStore = require("@/store/$u.mixin.js");
  11. Vue.mixin(vuexStore)
  12. const app = new Vue({
  13. ...App,
  14. store
  15. })
  16. // http拦截器,将此部分放在new Vue()和app.$mount()之间,才能App.vue中正常使用
  17. import httpInterceptor from '@/apis/interceptor.js'
  18. Vue.use(httpInterceptor, app)
  19. // http接口API集中管理引入部分
  20. import httpApi from '@/apis/http.js'
  21. Vue.use(httpApi, app)
  22. import tools from '@/commons/tools.js';
  23. Vue.use(tools, app)
  24. app.$mount();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/774242
推荐阅读
相关标签
  

闽ICP备14008679号