This commit is contained in:
parent
6b5654c74b
commit
f811c0ee82
|
@ -0,0 +1,73 @@
|
|||
<script>
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import {
|
||||
getUserInfo,
|
||||
} from "@/api/user";
|
||||
|
||||
import {
|
||||
HTTP_REQUEST_URL
|
||||
} from './config/app';
|
||||
import {
|
||||
getconfig,
|
||||
history
|
||||
} from '@/api/public.js'
|
||||
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
onLaunch: function(option) {
|
||||
|
||||
},
|
||||
onShow(option) {
|
||||
uni.sendHostEvent('live', option, (ret) => {
|
||||
//发送消息成功回调
|
||||
console.log('消息成功' + JSON.stringify(option.referrerInfo));
|
||||
});
|
||||
if (option.referrerInfo?.extraData?.uniMP) {
|
||||
uni.clearStorageSync();
|
||||
uni.setStorageSync('uniMP', option.referrerInfo?.extraData?.uniMP);
|
||||
this.$store.commit("LOGIN", {
|
||||
'token': option.referrerInfo?.extraData?.token,
|
||||
'time': 604800
|
||||
});
|
||||
this.GetUserInfo()
|
||||
|
||||
}
|
||||
},
|
||||
onHide: function() {
|
||||
|
||||
},
|
||||
|
||||
methods: {
|
||||
GetUserInfo() {
|
||||
getUserInfo().then(res => {
|
||||
this.$store.commit('SET_USERINFO', res.data);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
/* #ifndef APP-PLUS-NVUE || APP-NVUE */
|
||||
|
||||
@import url("static/iconfont/iconfont.css");
|
||||
|
||||
@import 'static/css/base.css';
|
||||
|
||||
@import 'static/css/style.scss';
|
||||
/*#endif*/
|
||||
</style>
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"prompt": "template"
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import Vue from 'vue'
|
||||
import App from './App'
|
||||
import store from './store'
|
||||
import Cache from './utils/cache'
|
||||
import util from 'utils/util'
|
||||
import {
|
||||
HTTP_REQUEST_URL
|
||||
} from '@/config/app';
|
||||
|
||||
import uView from '@/uni_modules/uview-ui'
|
||||
Vue.use(uView)
|
||||
|
||||
Vue.prototype.$util = util;
|
||||
Vue.prototype.$Cache = Cache;
|
||||
Vue.config.productionTip = false
|
||||
Vue.prototype.$bus = new Vue();
|
||||
// #ifdef H5
|
||||
import {
|
||||
parseQuery
|
||||
} from "./utils";
|
||||
|
||||
import {
|
||||
SPREAD
|
||||
} from './config/cache';
|
||||
// import wx from '@/node_modules/jweixin-module/lib/index'
|
||||
var __s = document.createElement('script');
|
||||
__s.src = HTTP_REQUEST_URL + "/api/script";
|
||||
document.head.appendChild(__s);
|
||||
|
||||
|
||||
|
||||
|
||||
// 注册全局防抖指令
|
||||
Vue.directive('debounce', {
|
||||
inserted: (el, binding) => {
|
||||
let debounceTime = binding.value || 2000
|
||||
let timer
|
||||
el.addEventListener('click', e => {
|
||||
el.style.pointerEvents = 'none';
|
||||
if (!el.disabled) {
|
||||
timer = setTimeout(() => {
|
||||
el.style.pointerEvents = 'auto'
|
||||
}, debounceTime)
|
||||
}
|
||||
}, true)
|
||||
}
|
||||
})
|
||||
|
||||
// if(!!!Auth.isAndroid() && Auth.isWeixin()){
|
||||
// Auth.wechat()
|
||||
// }
|
||||
|
||||
// Auth.isWeixin() && Auth.oAuth();
|
||||
|
||||
// #endif
|
||||
|
||||
let appInfo = uni.getSystemInfo().then(res => {
|
||||
Vue.prototype.$appInfo = res[1];
|
||||
});
|
||||
|
||||
|
||||
App.mpType = 'app'
|
||||
|
||||
|
||||
const app = new Vue({
|
||||
...App,
|
||||
store,
|
||||
Cache
|
||||
})
|
||||
app.$mount();
|
|
@ -0,0 +1,216 @@
|
|||
{
|
||||
"name" : "惠农直播",
|
||||
"appid" : "__UNI__0E46DAD",
|
||||
"description" : "",
|
||||
"versionName" : "1.1.0",
|
||||
"versionCode" : 110,
|
||||
"transformPx" : false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
"titleNView" : true,
|
||||
"usingComponents" : true,
|
||||
"nvueCompiler" : "uni-app",
|
||||
"nvueStyleCompiler" : "uni-app",
|
||||
"compilerVersion" : 3,
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"autoclose" : true,
|
||||
"delay" : 0
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules" : {
|
||||
"VideoPlayer" : {},
|
||||
"iBeacon" : {},
|
||||
"Barcode" : {},
|
||||
"Camera" : {},
|
||||
"Payment" : {},
|
||||
"Share" : {},
|
||||
"OAuth" : {},
|
||||
"UniMP" : {
|
||||
"description" : "uni小程序"
|
||||
},
|
||||
"Push" : {},
|
||||
"LivePusher" : {}
|
||||
},
|
||||
"safearea" : {
|
||||
"bottom" : {
|
||||
"offset" : "none"
|
||||
}
|
||||
},
|
||||
/* 应用发布信息 */
|
||||
"distribute" : {
|
||||
/* android打包配置 */
|
||||
"android" : {
|
||||
"resizeableActivity" : true,
|
||||
"permissions" : [
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.BATTERY_STATS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
|
||||
"<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_CONFIGURATION\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
|
||||
"permissionExternalStorage" : {
|
||||
"request" : "none",
|
||||
"prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
|
||||
},
|
||||
"permissionPhoneState" : {
|
||||
"request" : "none" //拨打电话权限关闭
|
||||
}
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios" : {
|
||||
"privacyDescription" : {
|
||||
"NSPhotoLibraryUsageDescription" : "上传用户头像保存分享海报",
|
||||
"NSPhotoLibraryAddUsageDescription" : "上传用户头像保存分享海报",
|
||||
"NSCameraUsageDescription" : "上传用户头像保存分享海报",
|
||||
"NSLocationWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店",
|
||||
"NSLocationAlwaysUsageDescription" : "根据客户地理位置推荐最近门店",
|
||||
"NSLocationAlwaysAndWhenInUseUsageDescription" : "根据客户地理位置推荐最近门店"
|
||||
},
|
||||
"idfa" : false,
|
||||
"dSYMs" : false
|
||||
},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs" : {
|
||||
"maps" : {
|
||||
"amap" : {
|
||||
"appkey_ios" : "82af93ec51139c712c4118d84ba684ee",
|
||||
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1"
|
||||
}
|
||||
},
|
||||
"payment" : {
|
||||
"weixin" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appid" : "wx9d68c92b550ddd1e",
|
||||
"UniversalLinks" : "https://shop.lihaink.cn/"
|
||||
}
|
||||
},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx9d68c92b550ddd1e",
|
||||
"UniversalLinks" : "https://shop.lihaink.cn/"
|
||||
}
|
||||
},
|
||||
"geolocation" : {
|
||||
"amap" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appkey_ios" : "82af93ec51139c712c4118d84ba684ee",
|
||||
"appkey_android" : "0799f37420c0784f1e6cba230a68bdb1"
|
||||
}
|
||||
},
|
||||
"oauth" : {},
|
||||
"ad" : {},
|
||||
"push" : {}
|
||||
},
|
||||
"icons" : {
|
||||
"android" : {
|
||||
"hdpi" : "",
|
||||
"xhdpi" : "",
|
||||
"xxhdpi" : "",
|
||||
"xxxhdpi" : ""
|
||||
},
|
||||
"ios" : {
|
||||
"appstore" : "",
|
||||
"ipad" : {
|
||||
"app" : "",
|
||||
"app@2x" : "",
|
||||
"notification" : "",
|
||||
"notification@2x" : "",
|
||||
"proapp@2x" : "",
|
||||
"settings" : "",
|
||||
"settings@2x" : "",
|
||||
"spotlight" : "",
|
||||
"spotlight@2x" : ""
|
||||
},
|
||||
"iphone" : {
|
||||
"app@2x" : "",
|
||||
"app@3x" : "",
|
||||
"notification@2x" : "",
|
||||
"notification@3x" : "",
|
||||
"settings@2x" : "",
|
||||
"settings@3x" : "",
|
||||
"spotlight@2x" : "",
|
||||
"spotlight@3x" : ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"splashscreen" : {
|
||||
"useOriginalMsgbox" : true
|
||||
}
|
||||
},
|
||||
"nativePlugins" : {}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp" : {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin" : {
|
||||
"appid" : "wxfb4695444ab8d0d0",
|
||||
"setting" : {
|
||||
"urlCheck" : false,
|
||||
"minified" : true,
|
||||
"postcss" : true,
|
||||
"es6" : true
|
||||
},
|
||||
"permission" : {
|
||||
"scope.userLocation" : {
|
||||
"desc" : "获取您的位置"
|
||||
}
|
||||
},
|
||||
"requiredPrivateInfos" : [ "getLocation", "chooseAddress" ],
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-alipay" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-baidu" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-toutiao" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"h5" : {
|
||||
"devServer" : {
|
||||
"https" : false
|
||||
},
|
||||
"router" : {
|
||||
"mode" : "history",
|
||||
"base" : ""
|
||||
},
|
||||
"domain" : "",
|
||||
"sdkConfigs" : {
|
||||
"maps" : {
|
||||
"qqmap" : {
|
||||
"key" : "SMJBZ-WCHK4-ZPZUA-DSIXI-XDDVQ-XWFX7"
|
||||
}
|
||||
}
|
||||
},
|
||||
"title" : "加载中...",
|
||||
"template" : "template.html"
|
||||
}
|
||||
}
|
||||
//拨打电话权限关闭
|
||||
/* ios打包配置 */
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||
{
|
||||
"path": "pages/room/room_list",
|
||||
"style": {
|
||||
"navigationBarTitleText": "直播列表"
|
||||
// "navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/room/create_room",
|
||||
"style": {
|
||||
"navigationBarTitleText": "创建直播间"
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/live/anchor",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"navigationStyle": "custom"
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/live/spectator",
|
||||
"style": {
|
||||
"navigationBarTitleText": "观众直播间",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},{
|
||||
"path": "pages/live/histroyroom",
|
||||
"style": {
|
||||
"navigationBarTitleText": "历史直播间",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "uni-app",
|
||||
"navigationBarBackgroundColor": "#F8F8F8",
|
||||
"backgroundColor": "#F8F8F8"
|
||||
},
|
||||
"uniIdRouter": {}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"libVersion": "2.32.1",
|
||||
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
|
||||
"projectname": "nk-shop2.0",
|
||||
"setting": {
|
||||
"compileHotReLoad": true,
|
||||
"urlCheck": false
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"rules": [{
|
||||
"action": "allow",
|
||||
"page": "*"
|
||||
}]
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> -->
|
||||
<title>
|
||||
<%= htmlWebpackPlugin.options.title %>
|
||||
</title>
|
||||
<!-- Open Graph data -->
|
||||
<!-- <meta property="og:title" content="Title Here" /> -->
|
||||
<!-- <meta property="og:url" content="http://www.example.com/" /> -->
|
||||
<!-- <meta property="og:image" content="http://example.com/image.jpg" /> -->
|
||||
<!-- <meta property="og:description" content="Description Here" /> -->
|
||||
<script>
|
||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
|
||||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||
if(window.location.protocol == 'https:'){
|
||||
document.write('<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">')
|
||||
}
|
||||
</script>
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>Please enable JavaScript to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,78 @@
|
|||
/**
|
||||
* 这里是uni-app内置的常用样式变量
|
||||
*
|
||||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||
*
|
||||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||
*/
|
||||
@import '@/uni_modules/uview-ui/theme.scss';
|
||||
/* 颜色变量 */
|
||||
$uni-theme-color: #f45846;
|
||||
$uni-theme-bg-color: linear-gradient(180deg, #f98649 0%, #f34e45 100%);
|
||||
|
||||
/* 行为相关颜色 */
|
||||
$uni-color-primary: #007aff;
|
||||
$uni-color-success: #4cd964;
|
||||
$uni-color-warning: #f0ad4e;
|
||||
$uni-color-error: #dd524d;
|
||||
|
||||
$uni-nothing-text: #999; //空白页文字
|
||||
|
||||
$theme-color: #e93323;
|
||||
$theme-color-opacity: rgba(233, 51, 35, 0.6);
|
||||
$bg-star: #f62c2c;
|
||||
$bg-end: #f96e29;
|
||||
|
||||
/* 背景颜色 */
|
||||
$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: 24upx;
|
||||
$uni-font-size-base: 28upx;
|
||||
$uni-font-size-lg: 32upx;
|
||||
|
||||
/* 图片尺寸 */
|
||||
$uni-img-size-sm: 40upx;
|
||||
$uni-img-size-base: 52upx;
|
||||
$uni-img-size-lg: 80upx;
|
||||
|
||||
/* Border Radius */
|
||||
$uni-border-radius-sm: 4upx;
|
||||
$uni-border-radius-base: 6upx;
|
||||
$uni-border-radius-lg: 12upx;
|
||||
$uni-border-radius-circle: 50%;
|
||||
|
||||
/* 水平间距 */
|
||||
$uni-spacing-row-sm: 10px;
|
||||
$uni-spacing-row-base: 20upx;
|
||||
$uni-spacing-row-lg: 30upx;
|
||||
|
||||
/* 垂直间距 */
|
||||
$uni-spacing-col-sm: 8upx;
|
||||
$uni-spacing-col-base: 16upx;
|
||||
$uni-spacing-col-lg: 24upx;
|
||||
|
||||
/* 透明度 */
|
||||
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
|
||||
|
||||
/* 文章场景相关 */
|
||||
$uni-color-title: #2c405a; // 文章标题颜色
|
||||
$uni-font-size-title: 40upx;
|
||||
$uni-color-subtitle: #555555; // 二级标题颜色
|
||||
$uni-font-size-subtitle: 36upx;
|
||||
$uni-color-paragraph: #3f536e; // 文章段落颜色
|
||||
$uni-font-size-paragraph: 30upx;
|
|
@ -0,0 +1,155 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import { EXPIRE } from '../config/app';
|
||||
|
||||
class Cache {
|
||||
|
||||
constructor(handler) {
|
||||
this.cacheSetHandler = uni.setStorageSync;
|
||||
this.cacheGetHandler = uni.getStorageSync;
|
||||
this.cacheClearHandler = uni.removeStorageSync;
|
||||
this.cacheExpire = '_expire_2019_12_17_18_44';
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前时间戳
|
||||
*/
|
||||
time()
|
||||
{
|
||||
return Math.round(new Date() / 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置过期时间缓存
|
||||
* @param {Object} key
|
||||
* @param {Object} expire
|
||||
*/
|
||||
setExpireCahe(key,expire)
|
||||
{
|
||||
expire = expire !== undefined ? expire : EXPIRE;
|
||||
if (expire) {
|
||||
this.cacheSetHandler(key + this.cacheExpire,this.time() + expire)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 缓存是否过期,过期自动删除
|
||||
* @param {Object} key
|
||||
* @param {Object} $bool true = 删除,false = 不删除
|
||||
*/
|
||||
getExpireCahe(key,$bool)
|
||||
{
|
||||
try{
|
||||
let time = this.cacheGetHandler(key + this.cacheExpire);
|
||||
if (time) {
|
||||
let newTime = parseInt(time);
|
||||
if (time && time < this.time() && !Number.isNaN(newTime)) {
|
||||
if ($bool === undefined || $bool === true) {
|
||||
this.cacheClearHandler(key);
|
||||
this.cacheClearHandler(key + this.cacheExpire);
|
||||
}
|
||||
return false;
|
||||
} else
|
||||
return true;
|
||||
} else {
|
||||
return !!this.cacheGetHandler(key);
|
||||
}
|
||||
}catch(e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置缓存
|
||||
* @param {Object} key
|
||||
* @param {Object} data
|
||||
*/
|
||||
set(key,data,expire){
|
||||
if(typeof data === 'object')
|
||||
data = JSON.stringify(data);
|
||||
try{
|
||||
this.setExpireCahe(key,expire);
|
||||
return this.cacheSetHandler(key,data);
|
||||
}catch(e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测缓存是否存在
|
||||
* @param {Object} key
|
||||
*/
|
||||
has(key)
|
||||
{
|
||||
return this.getExpireCahe(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取缓存
|
||||
* @param {Object} key
|
||||
* @param {Object} $default
|
||||
* @param {Object} expire
|
||||
*/
|
||||
get(key,$default,expire){
|
||||
try{
|
||||
let isBe = this.getExpireCahe(key);
|
||||
let data = this.cacheGetHandler(key);
|
||||
if (data && isBe) {
|
||||
if (typeof $default === 'boolean')
|
||||
return JSON.parse(data);
|
||||
else
|
||||
return data;
|
||||
} else {
|
||||
if (typeof $default === 'function') {
|
||||
let value = $default();
|
||||
this.set(key,value,expire);
|
||||
return value;
|
||||
} else {
|
||||
this.set(key,$default,expire);
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
}catch(e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除缓存
|
||||
* @param {Object} key
|
||||
*/
|
||||
clear(key)
|
||||
{
|
||||
try{
|
||||
let cahceValue = this.cacheGetHandler(key + this.cacheExpire);
|
||||
if(cahceValue)
|
||||
this.cacheClearHandler(key + this.cacheExpire);
|
||||
return this.cacheClearHandler(key);
|
||||
}catch(e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除过期缓存
|
||||
*/
|
||||
clearOverdue()
|
||||
{
|
||||
// let cacheList = uni.getStorageInfoSync(),that = this;
|
||||
// if (typeof cacheList.keys === 'object'){
|
||||
// cacheList.keys.forEach(item=>{
|
||||
// that.getExpireCahe(item);
|
||||
// })
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default new Cache;
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,138 @@
|
|||
import {
|
||||
spread
|
||||
} from "@/api/user";
|
||||
import Cache from "@/utils/cache";
|
||||
import Store from '@/store/index';
|
||||
|
||||
|
||||
export function configMap(args, init) {
|
||||
if(Array.isArray(args)) {
|
||||
return args.reduce((i, v)=>{
|
||||
i[v] = () => Store.getters.globalData[v];
|
||||
return i;
|
||||
}, init || {})
|
||||
}else{
|
||||
return Object.keys(args).reduce((i, v)=>{
|
||||
i[v] = () => {
|
||||
const val = Store.getters.globalData[v];
|
||||
return (val === undefined || val === null || val === '') ? args[v] : val;
|
||||
};
|
||||
return i;
|
||||
}, init || {})
|
||||
}
|
||||
}
|
||||
|
||||
export function redirect(url){
|
||||
uni.switchTab({
|
||||
url,
|
||||
fail(){
|
||||
uni.redirectTo({
|
||||
url
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换商户跳转链接, 自动追加商户 id
|
||||
* @param {string} path
|
||||
* @param {int} mer_id
|
||||
* @param {string} name 商户id 参数名, 默认 mer_id
|
||||
*/
|
||||
export function merPath(path, mer_id, name){
|
||||
if(!mer_id) return path;
|
||||
path += ((path.indexOf('?') > -1 ? '&' : '?') + (name || 'mer_id') + '=' + mer_id);
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定用户授权
|
||||
* @param {Object} puid
|
||||
*/
|
||||
export function silenceBindingSpread() {
|
||||
|
||||
//#ifdef H5
|
||||
let puid = Cache.get('spread');
|
||||
//#endif
|
||||
|
||||
//#ifdef MP || APP-PLUS
|
||||
let puid = getApp().globalData.spid;
|
||||
if (!puid) {
|
||||
puid = getApp().globalData.code;
|
||||
}
|
||||
//#endif
|
||||
|
||||
puid = parseInt(puid);
|
||||
if (Number.isNaN(puid)) {
|
||||
puid = 0;
|
||||
}
|
||||
if (puid) {
|
||||
|
||||
//#ifdef H5
|
||||
Cache.clear('spread');
|
||||
//#endif
|
||||
|
||||
//#ifdef MP || APP-PLUS
|
||||
getApp().globalData.spid = 0;
|
||||
getApp().globalData.code = 0;
|
||||
//#endif
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export function isWeixin() {
|
||||
return navigator.userAgent.toLowerCase().indexOf("micromessenger") !== -1;
|
||||
}
|
||||
|
||||
export function parseQuery() {
|
||||
const res = {};
|
||||
|
||||
const query = (location.href.split("?")[1] || "")
|
||||
.trim()
|
||||
.replace(/^(\?|#|&)/, "");
|
||||
|
||||
if (!query) {
|
||||
return res;
|
||||
}
|
||||
// const VUE_APP_WS_URL = process.env.VUE_APP_WS_URL || `ws://${location.hostname}:20003`;
|
||||
// const ishttps = 'https:' == document.location.protocol ? true : false;
|
||||
// const VUE_APP_WS_URL = ishttps ? `wss://mer.crmeb.net?type=user&token=${token}` : `ws://mer.crmeb.net?type=user&token=${token}`;
|
||||
// export { VUE_APP_WS_URL }
|
||||
|
||||
|
||||
query.split("&").forEach(param => {
|
||||
const parts = param.replace(/\+/g, " ").split("=");
|
||||
const key = decodeURIComponent(parts.shift());
|
||||
const val = parts.length > 0 ? decodeURIComponent(parts.join("=")) : null;
|
||||
|
||||
if (res[key] === undefined) {
|
||||
res[key] = val;
|
||||
} else if (Array.isArray(res[key])) {
|
||||
res[key].push(val);
|
||||
} else {
|
||||
res[key] = [res[key], val];
|
||||
}
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
let token = ''
|
||||
try {
|
||||
token = uni.getStorageSync('LOGIN_STATUS_TOKEN')
|
||||
// console.log(token, 'this')
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
// const VUE_APP_WS_URL = process.env.VUE_APP_WS_URL || `ws://${location.hostname}?type=user&token=${token}`;
|
||||
// const VUE_APP_WS_URL = `wss://mer.crmeb.net?type=user&token=${token}`
|
||||
export default parseQuery;
|
|
@ -0,0 +1,76 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import {
|
||||
HTTP_REQUEST_URL_ONE,
|
||||
HEADER,
|
||||
TOKENNAME
|
||||
} from '@/config/app';
|
||||
import store from '../store';
|
||||
|
||||
|
||||
/**
|
||||
* 发送请求
|
||||
*/
|
||||
function baseRequest(url, method, data, {
|
||||
noAuth = false,
|
||||
noVerify = false
|
||||
}) {
|
||||
let Url = HTTP_REQUEST_URL_ONE,
|
||||
header = HEADER;
|
||||
|
||||
|
||||
|
||||
if (store.state.app.token) header[TOKENNAME] = 'Bearer ' + store.state.app.token;
|
||||
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.request({
|
||||
url: Url + '/api/' + url,
|
||||
method: method || 'GET',
|
||||
header: header,
|
||||
data: data || {},
|
||||
success: (res) => {
|
||||
// #ifdef APP-PLUS
|
||||
// console.log('app', Url + '/api/' + url, method);
|
||||
// #endif
|
||||
if (noVerify)
|
||||
reslove(res.data, res);
|
||||
else if (res.data.status == 200)
|
||||
reslove(res.data, res);
|
||||
else if ([410000, 410001, 410002, 40000].indexOf(res.data.status) !== -1) {
|
||||
|
||||
reject(res.data);
|
||||
} else if (res.data.code==0||res.data.code==1) {
|
||||
|
||||
reslove(res.data, res);
|
||||
}else if (res.data.status == 501) {
|
||||
uni.reLaunch({
|
||||
url: '/pages/error/index'
|
||||
})
|
||||
reject(res.data);
|
||||
} else
|
||||
reject(res.data.message || '系统错误');
|
||||
},
|
||||
fail: (message) => {
|
||||
console.log(url, method, data)
|
||||
reject('请求失败',message);
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
const request = {};
|
||||
|
||||
['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
|
||||
request[method] = (api, data, opt) => baseRequest(api, method, data, opt || {})
|
||||
});
|
||||
|
||||
|
||||
|
||||
export default request;
|
|
@ -0,0 +1,70 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import {
|
||||
HTTP_REQUEST_URL,
|
||||
HEADER,
|
||||
TOKENNAME
|
||||
} from '@/config/app';
|
||||
import store from '../store';
|
||||
|
||||
|
||||
/**
|
||||
* 发送请求
|
||||
*/
|
||||
function baseRequest(url, method, data, {
|
||||
noAuth = false,
|
||||
noVerify = false
|
||||
}) {
|
||||
let Url = HTTP_REQUEST_URL,
|
||||
header = HEADER;
|
||||
|
||||
if (store.state.app.token) header[TOKENNAME] = 'Bearer ' + store.state.app.token;
|
||||
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.request({
|
||||
url: Url + '/api/' + url,
|
||||
method: method || 'GET',
|
||||
header: header,
|
||||
data: data || {},
|
||||
success: (res) => {
|
||||
// #ifdef APP-PLUS
|
||||
// console.log('app', Url + '/api/' + url, method);
|
||||
// #endif
|
||||
if (noVerify)
|
||||
reslove(res.data, res);
|
||||
else if (res.data.status == 200)
|
||||
reslove(res.data, res);
|
||||
else if ([410000, 410001, 410002, 40000].indexOf(res.data.status) !== -1) {
|
||||
|
||||
reject(res.data);
|
||||
} else if (res.data.code==0||res.data.code==1) {
|
||||
reslove(res.data, res);
|
||||
}else if (res.data.status == 501) {
|
||||
reject(res.data);
|
||||
} else
|
||||
reject(res.data.message || '系统错误');
|
||||
},
|
||||
fail: (message) => {
|
||||
console.log(url, method, data)
|
||||
reject('请求失败',message);
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
const request = {};
|
||||
|
||||
['options', 'get', 'post', 'put', 'head', 'delete', 'trace', 'connect'].forEach((method) => {
|
||||
request[method] = (api, data, opt) => baseRequest(api, method, data, opt || {})
|
||||
});
|
||||
|
||||
|
||||
|
||||
export default request;
|
|
@ -0,0 +1,192 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import {
|
||||
TOKENNAME,
|
||||
HTTP_REQUEST_URL
|
||||
} from '../config/app.js';
|
||||
|
||||
export default {
|
||||
/*
|
||||
* 合并数组
|
||||
*/
|
||||
SplitArray(list, sp) {
|
||||
if (typeof list != 'object') return [];
|
||||
if (sp === undefined) sp = [];
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
sp.push(list[i]);
|
||||
}
|
||||
return sp;
|
||||
},
|
||||
/**
|
||||
* opt object | string
|
||||
* to_url object | string
|
||||
* 例:
|
||||
* this.Tips('/pages/test/test'); 跳转不提示
|
||||
* this.Tips({title:'提示'},'/pages/test/test'); 提示并跳转
|
||||
* this.Tips({title:'提示'},{tab:1,url:'/pages/index/index'}); 提示并跳转值table上
|
||||
* tab=1 一定时间后跳转至 table上
|
||||
* tab=2 一定时间后跳转至非 table上
|
||||
* tab=3 一定时间后返回上页面
|
||||
* tab=4 关闭所有页面跳转至非table上
|
||||
* tab=5 关闭当前页面跳转至table上
|
||||
*/
|
||||
Tips: function(opt, to_url) {
|
||||
if (typeof opt == 'string') {
|
||||
to_url = opt;
|
||||
opt = {};
|
||||
}
|
||||
let title = opt.title || '',
|
||||
icon = opt.icon || 'none',
|
||||
endtime = opt.endtime || 2000,
|
||||
success = opt.success;
|
||||
if (title) uni.showToast({
|
||||
title: title,
|
||||
icon: icon,
|
||||
duration: endtime,
|
||||
success
|
||||
})
|
||||
if (to_url != undefined) {
|
||||
if (typeof to_url == 'object') {
|
||||
let tab = to_url.tab || 1,
|
||||
url = to_url.url || '';
|
||||
switch (tab) {
|
||||
case 1:
|
||||
//一定时间后跳转至 table
|
||||
setTimeout(function() {
|
||||
uni.switchTab({
|
||||
url: url
|
||||
})
|
||||
}, endtime);
|
||||
break;
|
||||
case 2:
|
||||
//跳转至非table页面
|
||||
setTimeout(function() {
|
||||
uni.navigateTo({
|
||||
url: url,
|
||||
})
|
||||
}, endtime);
|
||||
break;
|
||||
case 3:
|
||||
//返回上页面
|
||||
setTimeout(function() {
|
||||
// #ifndef H5
|
||||
uni.navigateBack({
|
||||
delta: parseInt(url),
|
||||
})
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
history.back();
|
||||
// #endif
|
||||
}, endtime);
|
||||
break;
|
||||
case 4:
|
||||
//关闭当前所有页面跳转至非table页面
|
||||
setTimeout(function() {
|
||||
uni.reLaunch({
|
||||
url: url,
|
||||
})
|
||||
}, endtime);
|
||||
break;
|
||||
case 5:
|
||||
//关闭当前页面跳转至非table页面
|
||||
setTimeout(function() {
|
||||
uni.redirectTo({
|
||||
url: url,
|
||||
})
|
||||
}, endtime);
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (typeof to_url == 'function') {
|
||||
setTimeout(function() {
|
||||
to_url && to_url();
|
||||
}, endtime);
|
||||
} else {
|
||||
//没有提示时跳转不延迟
|
||||
setTimeout(function() {
|
||||
uni.navigateTo({
|
||||
url: to_url,
|
||||
})
|
||||
}, title ? endtime : 0);
|
||||
}
|
||||
}
|
||||
},
|
||||
/*
|
||||
* 单图上传
|
||||
* @param object opt
|
||||
* @param callable successCallback 成功执行方法 data
|
||||
* @param callable errorCallback 失败执行方法
|
||||
*/
|
||||
uploadImageOne: function(opt, successCallback, errorCallback) {
|
||||
let that = this;
|
||||
if (typeof opt === 'string') {
|
||||
let url = opt;
|
||||
opt = {};
|
||||
opt.url = url;
|
||||
}
|
||||
let count = opt.count || 1,
|
||||
sizeType = opt.sizeType || ['compressed'],
|
||||
sourceType = opt.sourceType || ['album', 'camera'],
|
||||
is_load = opt.is_load || true,
|
||||
uploadUrl = opt.url || '',
|
||||
inputName = opt.name || 'field';
|
||||
uni.chooseImage({
|
||||
count: count, //最多可以选择的图片总数
|
||||
sizeType: sizeType, // 可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: sourceType, // 可以指定来源是相册还是相机,默认二者都有
|
||||
success: function(res) {
|
||||
//启动上传等待中...
|
||||
uni.showLoading({
|
||||
title: '图片上传中',
|
||||
});
|
||||
uni.uploadFile({
|
||||
url: HTTP_REQUEST_URL + '/api/' + uploadUrl + '/' + inputName,
|
||||
filePath: res.tempFilePaths[0],
|
||||
name: inputName,
|
||||
formData: {
|
||||
'filename': inputName
|
||||
},
|
||||
header: {
|
||||
// #ifdef MP
|
||||
"Content-Type": "multipart/form-data",
|
||||
// #endif
|
||||
[TOKENNAME]: 'Bearer ' + uni.getStorageSync('APP_token')
|
||||
},
|
||||
success: function(res) {
|
||||
uni.hideLoading();
|
||||
if (res.statusCode == 403) {
|
||||
that.Tips({
|
||||
title: res.data
|
||||
});
|
||||
} else {
|
||||
let data = res.data ? JSON.parse(res.data) : {};
|
||||
if (data.status == 200) {
|
||||
successCallback && successCallback(data)
|
||||
} else {
|
||||
errorCallback && errorCallback(data);
|
||||
that.Tips({
|
||||
title: data.message
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
fail: function(res) {
|
||||
uni.hideLoading();
|
||||
that.Tips({
|
||||
title: '上传图片失败'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
/**
|
||||
* 验证小数点后两位及多个小数
|
||||
* money 金额
|
||||
*/
|
||||
|
||||
export function isMoney(money) {
|
||||
var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
|
||||
if (reg.test(money)) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证手机号码
|
||||
*/
|
||||
export function checkPhone(phone) {
|
||||
var reg = /^1(3|4|5|6|7|8|9)\d{9}$/
|
||||
if (reg.test(phone)) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 验证邮箱
|
||||
*/
|
||||
export function isEmailAvailable(emailInput) {
|
||||
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
|
||||
if (!myreg.test(emailInput)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
module.exports = {
|
||||
productionSourceMap: false, // 生产打包时不输出map文件,增加打包速度
|
||||
configureWebpack: config => {
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
config.optimization.minimizer[0].options.terserOptions.compress.warnings = false
|
||||
config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
|
||||
config.optimization.minimizer[0].options.terserOptions.compress.drop_debugger = true
|
||||
config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log']
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue