Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
|
22abef940b | |
|
a4b5d8b52f | |
|
c43c566091 | |
|
203a36085e | |
|
9453a799b7 | |
|
65a6780398 | |
|
7891ea5956 |
|
@ -1,3 +1,4 @@
|
|||
|
||||
/unpackage/dist/build/.automator/h5
|
||||
/unpackage
|
||||
/node_modules
|
9
App.vue
9
App.vue
|
@ -221,12 +221,7 @@ export default {
|
|||
this.$i18n.mergeLocaleMessage(name, enUS);
|
||||
}
|
||||
}
|
||||
if (name == "ru-RU") {
|
||||
if (ruRU) {
|
||||
const localruRU = this.getJS(ruRU, "ruRU");
|
||||
this.$i18n.mergeLocaleMessage(name, ruRU);
|
||||
}
|
||||
}
|
||||
|
||||
if (name == "fr-FR") {
|
||||
if (frFR) {
|
||||
const localruRU = this.getJS(frFR, "frFR");
|
||||
|
@ -238,9 +233,7 @@ export default {
|
|||
let self = this;
|
||||
self.setLocale("en-US", "enUS", "en");
|
||||
self.setLocale("zh-CN", "zhCN", "zh-CN");
|
||||
self.setLocale("ru-RU", "ruRU", "ru-RU");
|
||||
self.setLocale("fr-FR", "frFR", "fr-FR");
|
||||
// self.setLocale('pt-PT', 'ptPT', 'pt-PT');
|
||||
},
|
||||
isFirstEnter() {
|
||||
var firstEnter = uni.getStorageSync("firstEnter"); //同步获取缓存中是否有首次进入字段
|
||||
|
|
|
@ -130,7 +130,7 @@
|
|||
},
|
||||
getData() {
|
||||
let self = this;
|
||||
self._get("/member/api/member/get-member-annuity-time", {}, (res) => {
|
||||
self._get("member/api/member/get-member-annuity-time", {}, (res) => {
|
||||
self.annuityParams = res.data;
|
||||
if (
|
||||
self.annuityParams.expireDateNumber <= 60 &&
|
||||
|
@ -146,7 +146,7 @@
|
|||
},
|
||||
getMemberRenewAmount() {
|
||||
let self = this;
|
||||
self._get("/member/api/member/get-member-renew-amount", {}, (res) => {
|
||||
self._get("member/api/member/get-member-renew-amount", {}, (res) => {
|
||||
this.qnnuityPrice = res.data;
|
||||
this.isPopup = true;
|
||||
});
|
||||
|
|
|
@ -42,14 +42,6 @@
|
|||
></image>
|
||||
</view>
|
||||
<view>
|
||||
<!-- <image
|
||||
crossorigin="anonymous"
|
||||
data-etype="image"
|
||||
:data-enode="treeData.countryUrl2"
|
||||
:src="'data:image/png;base64,' + treeData.countryUrl2Base64"
|
||||
mode="aspectFit"
|
||||
class="poster2"
|
||||
></image> -->
|
||||
<image
|
||||
crossorigin="anonymous"
|
||||
data-etype="image"
|
||||
|
@ -139,7 +131,6 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="flex_btn">
|
||||
<!-- <view @click.stop="downImage('Poster1')" class="goTop_btn" style="backgroundColor:#ee1e26">{{ $t('S_C_45') }}</view> -->
|
||||
<view
|
||||
@click.stop="copyText(treeData)"
|
||||
class="goTop_btn"
|
||||
|
@ -164,8 +155,7 @@
|
|||
v-if="
|
||||
Array.isArray(treeData.children) &&
|
||||
treeData.children.length &&
|
||||
treeData.extend &&
|
||||
!loading
|
||||
treeData.extend
|
||||
"
|
||||
>
|
||||
<view
|
||||
|
@ -175,7 +165,7 @@
|
|||
class="childLevel v-td"
|
||||
>
|
||||
<TreeChart
|
||||
:json="children"
|
||||
:treeData="children"
|
||||
:left="0"
|
||||
:top="0"
|
||||
@click-node="clickNode"
|
||||
|
@ -183,7 +173,6 @@
|
|||
/>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <Eposter width="750" height="1334" :list="list" backgroundColor="rgb(255, 255, 255)" @on-success="onSuccess" ref="Eposter"></Eposter> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
@ -195,59 +184,14 @@ export default {
|
|||
// Eposter
|
||||
},
|
||||
name: "TreeChart",
|
||||
props: ["json", "size"],
|
||||
props: ["treeData", "size"],
|
||||
data() {
|
||||
return {
|
||||
treeData: {},
|
||||
list: [],
|
||||
languages: "",
|
||||
loading: true,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
json: {
|
||||
handler: function (Props) {
|
||||
let extendKey = function (jsonData) {
|
||||
if (Object.prototype.toString.call(jsonData) !== "[object Object]") {
|
||||
jsonData = {};
|
||||
}
|
||||
jsonData.extend =
|
||||
jsonData.extend === void 0 ? true : !!jsonData.extend;
|
||||
if (Array.isArray(jsonData.children)) {
|
||||
jsonData.children.forEach((c) => {
|
||||
extendKey(c);
|
||||
});
|
||||
}
|
||||
return jsonData;
|
||||
};
|
||||
if (Props) {
|
||||
let self = this;
|
||||
// self._post(
|
||||
// 'member/manage/member-structure/get-url-base64',
|
||||
// {
|
||||
// countryUrl2: extendKey(Props).countryUrl2,
|
||||
// settleCountryUrl2: extendKey(Props).settleCountryUrl2,
|
||||
// avatarUrl: extendKey(Props).avatarUrl
|
||||
// },
|
||||
// res => {
|
||||
// extendKey(Props).countryUrl2Base64 = res.countryUrl2Base64;
|
||||
// extendKey(Props).settleCountryUrl2Base64 = res.settleCountryUrl2Base64;
|
||||
// extendKey(Props).avatarUrlBase64 = res.avatarUrlBase64;
|
||||
// this.treeData = extendKey(Props);
|
||||
// self.loading = false;
|
||||
// }
|
||||
// );
|
||||
extendKey(Props).countryUrl2Base64 = extendKey(Props).countryUrl2;
|
||||
extendKey(Props).settleCountryUrl2Base64 =
|
||||
extendKey(Props).settleCountryUrl2;
|
||||
extendKey(Props).avatarUrlBase64 = extendKey(Props).avatarUrl;
|
||||
this.treeData = extendKey(Props);
|
||||
self.loading = false;
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
|
||||
onload() {
|
||||
this.languages = uni.getLocale();
|
||||
},
|
||||
|
@ -291,44 +235,6 @@ export default {
|
|||
},
|
||||
});
|
||||
},
|
||||
//下载图片
|
||||
downImage(elClass) {
|
||||
this.$refs.Eposter.createForElRect(elClass, false);
|
||||
},
|
||||
downloadImg() {
|
||||
let self = this;
|
||||
let element = document.querySelector(".Poster1");
|
||||
uni.showLoading({
|
||||
title: self.$t("w_0413"),
|
||||
});
|
||||
html2canvas(element)
|
||||
.then(function (canvas) {
|
||||
let dataURL = canvas.toDataURL("image/jpeg");
|
||||
let link = document.createElement("a");
|
||||
link.style.display = "none";
|
||||
link.href = dataURL;
|
||||
link.download = "image.jpg";
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
uni.showToast({
|
||||
icon: "none",
|
||||
title: self.$t("fn_056"),
|
||||
duration: 2000,
|
||||
});
|
||||
uni.hideLoading();
|
||||
})
|
||||
.catch(function (error) {
|
||||
uni.hideLoading();
|
||||
uni.showModal({
|
||||
title: self.$t("w_0406"),
|
||||
});
|
||||
});
|
||||
},
|
||||
onSuccess(val) {
|
||||
this.posterImg = val;
|
||||
this.downloadImg(this.posterImg);
|
||||
},
|
||||
toggleExtend: function (treeData) {
|
||||
treeData.extend = !treeData.extend;
|
||||
this.$forceUpdate();
|
||||
|
|
10
config.js
10
config.js
|
@ -1,14 +1,12 @@
|
|||
var app_url = 'http://f.hzs413.com';
|
||||
var app_url = '/prod-api/';
|
||||
var yxyapi = 'https://yxy.hzs413.com';
|
||||
var ossapi = 'https://dny-test.s3.ap-southeast-1.amazonaws.com';
|
||||
var ossurl = '/online/language/';
|
||||
var ossapi = 'https://bd-qd.oss-cn-beijing.aliyuncs.com';
|
||||
var ossurl = '/test_africa/language/';
|
||||
// 如果是本地测试环境
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
//#ifdef H5
|
||||
app_url = '/api';
|
||||
app_url = 'http://192.168.0.86:8080/';
|
||||
yxyapi = '/dev-api';
|
||||
ossapi = '/oss-api';
|
||||
ossurl = '/online/language/';
|
||||
//#endif
|
||||
}
|
||||
// 如果是生产环境,h5环境下直接读取url
|
||||
|
|
|
@ -2,14 +2,12 @@ import enUS from './en-US.json'
|
|||
import zhCN from './zh-CN';
|
||||
// import zhHant from './zh-Hant.json'
|
||||
import frFR from './fr-FR.json'
|
||||
import ruRU from './ru-RU.json'
|
||||
import ptPT from './pt-PT.json'
|
||||
export default {
|
||||
'en-US': enUS,
|
||||
'zh-CN': zhCN,
|
||||
// 'zh-Hant': zhHant,
|
||||
'fr-FR': frFR,
|
||||
'ru-RU': ruRU,
|
||||
'pt-PT':ptPT
|
||||
}
|
||||
|
2863
locale/ru-RU.json
2863
locale/ru-RU.json
File diff suppressed because it is too large
Load Diff
|
@ -1,34 +0,0 @@
|
|||
{
|
||||
"common": {
|
||||
"uni.app.quit": "Нажмите еще раз, чтобы выйти из приложения",
|
||||
"uni.async.error": "Время ожидания подключения к серверу, нажмите на экран, чтобы повторить попытку",
|
||||
"uni.showActionSheet.cancel": "Отменить",
|
||||
"uni.showToast.unpaired": "Обратите внимание, что ShowToast и HideToast должны работать вместе.",
|
||||
"uni.showLoading.unpaired": "Обратите внимание, что showLoading и hideLoading должны быть совместимы.",
|
||||
"uni.showModal.cancel": "Отменить",
|
||||
"uni.showModal.confirm": "Определение",
|
||||
"uni.chooseImage.cancel": "Отменить",
|
||||
"uni.chooseImage.sourceType.album": "Выбрать из альбома",
|
||||
"uni.chooseImage.sourceType.camera": "Съемки",
|
||||
"uni.chooseVideo.cancel": "Отменить",
|
||||
"uni.chooseVideo.sourceType.album": "Выбрать из альбома",
|
||||
"uni.chooseVideo.sourceType.camera": "Съемки",
|
||||
"uni.previewImage.cancel": "Отменить",
|
||||
"uni.previewImage.button.save": "Сохранить изображение",
|
||||
"uni.previewImage.save.success": "Сохранить изображение в альбом",
|
||||
"uni.previewImage.save.fail": "Ошибка сохранения изображения в альбоме",
|
||||
"uni.setClipboardData.success": "Содержание скопировано",
|
||||
"uni.scanCode.title": "Код сканирования",
|
||||
"uni.scanCode.album": "Фотоальбом",
|
||||
"uni.scanCode.fail": "Ошибка идентификации",
|
||||
"uni.scanCode.flash.on": "Подсветка",
|
||||
"uni.scanCode.flash.off": "Приключения закрываются",
|
||||
"uni.startSoterAuthentication.authContent": "Отпечатки пальцев....",
|
||||
"uni.picker.done": "Завершено",
|
||||
"uni.picker.cancel": "Отменить",
|
||||
"uni.video.danmu": "Снаряд",
|
||||
"uni.video.volume": "Громкость",
|
||||
"uni.button.feedback.title": "Обратная связь ",
|
||||
"uni.button.feedback.send": "Отправить"
|
||||
}
|
||||
}
|
36
main.js
36
main.js
|
@ -17,14 +17,9 @@ let i18nConfig = {
|
|||
'en-US': messages['en-US'],
|
||||
'zh-CN': messages['zh-CN'],
|
||||
// 'zh-Hant': messages['zh-Hant'],
|
||||
'ru-RU': messages['ru-RU'],
|
||||
'fr-FR': messages['fr-FR'],
|
||||
'pt-PT': messages['pt-PT'],
|
||||
// 'en': '',
|
||||
// 'zh-CN': '',
|
||||
// 'zh-Hant': '',
|
||||
// 'ru-RU': '',
|
||||
// 'fr-FR': '',
|
||||
|
||||
}
|
||||
}
|
||||
import VueI18n from 'vue-i18n'
|
||||
|
@ -85,9 +80,9 @@ app.$router.afterEach((to, from) => {
|
|||
}
|
||||
const u = navigator.userAgent.toLowerCase()
|
||||
if (u.indexOf("like mac os x") < 0 || u.match(/MicroMessenger/i) != 'micromessenger') return
|
||||
if (to.path !== global.location.pathname) {
|
||||
location.assign(config.h5_addr + to.fullPath);
|
||||
}
|
||||
// if (to.path !== global.location.pathname) {
|
||||
// location.assign(config.h5_addr + to.fullPath);
|
||||
// }
|
||||
})
|
||||
//#endif
|
||||
|
||||
|
@ -114,10 +109,12 @@ Vue.prototype._get = function(path, data, success, fail, complete) {
|
|||
let host = self.websiteUrl();
|
||||
// #ifndef APP-PLUS
|
||||
host = config.app_url
|
||||
console.log(host, '...host')
|
||||
// #endif
|
||||
let callback = function() {
|
||||
|
||||
uni.request({
|
||||
url: host + '/inter-api/' + path,
|
||||
url: host + path,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
header: {
|
||||
|
@ -195,7 +192,7 @@ Vue.prototype._post = function(path, data, success, fail, complete) {
|
|||
Source = '3'
|
||||
// #endif
|
||||
uni.request({
|
||||
url: host + '/inter-api/' + path,
|
||||
url: host + path,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
method: 'POST',
|
||||
|
@ -241,7 +238,7 @@ Vue.prototype._put = function(path, data, success, fail, complete) {
|
|||
host = config.app_url
|
||||
// #endif
|
||||
uni.request({
|
||||
url: host + '/inter-api/' + path + '/' + data,
|
||||
url: host + path + '/' + data,
|
||||
dataType: 'json',
|
||||
method: 'PUT',
|
||||
header: {
|
||||
|
@ -281,7 +278,7 @@ Vue.prototype._putjson = function(path, data, success, fail, complete) {
|
|||
host = config.app_url
|
||||
// #endif
|
||||
uni.request({
|
||||
url: host + '/inter-api/' + path,
|
||||
url: host + path,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
method: 'PUT',
|
||||
|
@ -321,7 +318,7 @@ Vue.prototype._delete = function(path, data, success, fail, complete) {
|
|||
host = config.app_url
|
||||
// #endif
|
||||
uni.request({
|
||||
url: host + '/inter-api/' + path,
|
||||
url: host + path,
|
||||
dataType: 'json',
|
||||
method: 'DELETE',
|
||||
header: {
|
||||
|
@ -603,18 +600,11 @@ Vue.prototype.topBarTop = function() {
|
|||
// #ifdef MP-WEIXIN
|
||||
return uni.getMenuButtonBoundingClientRect().top;
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
const SystemInfo = uni.getSystemInfoSync();
|
||||
return SystemInfo.statusBarHeight;
|
||||
// #endif
|
||||
};
|
||||
Vue.prototype.topBarHeight = function() {
|
||||
// #ifdef MP-WEIXIN
|
||||
return uni.getMenuButtonBoundingClientRect().height;
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
return 0
|
||||
// #endif
|
||||
};
|
||||
Vue.prototype.callPhone = function(n) {
|
||||
if (n == '') {
|
||||
|
@ -705,8 +695,6 @@ Vue.prototype.getLocale = function() {
|
|||
return 'zh-TC'
|
||||
} else if (l == 'fr-FR') {
|
||||
return 'fr-FR'
|
||||
} else if (l == 'ru-RU') {
|
||||
return 'ru-RU'
|
||||
} else if (l == 'pt-PT') {
|
||||
return 'pt-PT'
|
||||
} else {
|
||||
|
@ -721,8 +709,6 @@ Vue.prototype.getLanguage = function() {
|
|||
return 'zh-TC'
|
||||
} else if (l == 'fr-FR') {
|
||||
return 'fr-FR'
|
||||
} else if (l == 'ru-RU') {
|
||||
return 'ru-RU'
|
||||
} else if (l == 'pt-PT') {
|
||||
return 'pt-PT'
|
||||
} else {
|
||||
|
|
269
manifest.json
269
manifest.json
|
@ -1,35 +1,35 @@
|
|||
{
|
||||
"name" : "海之圣",
|
||||
"appid" : "__UNI__A4B56F3",
|
||||
"description" : "海之圣",
|
||||
"versionName" : "1.6.4",
|
||||
"versionCode" : 164,
|
||||
"transformPx" : false,
|
||||
"app-plus" : {
|
||||
"compatible" : {
|
||||
"ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
|
||||
"name": "af-app",
|
||||
"appid": "__UNI__31B4587",
|
||||
"description": "af-app",
|
||||
"versionName": "1.6.4",
|
||||
"versionCode": 164,
|
||||
"transformPx": false,
|
||||
"app-plus": {
|
||||
"compatible": {
|
||||
"ignoreVersion": true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
|
||||
},
|
||||
/* 5+App特有相关 */
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"autoclose" : true,
|
||||
"delay" : 0
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"autoclose": true,
|
||||
"delay": 0
|
||||
},
|
||||
"modules" : {
|
||||
"Share" : {},
|
||||
"VideoPlayer" : {},
|
||||
"Payment" : {},
|
||||
"Geolocation" : {},
|
||||
"Barcode" : {},
|
||||
"Camera" : {}
|
||||
"modules": {
|
||||
"Share": {},
|
||||
"VideoPlayer": {},
|
||||
"Payment": {},
|
||||
"Geolocation": {},
|
||||
"Barcode": {},
|
||||
"Camera": {}
|
||||
},
|
||||
/* 模块配置 */
|
||||
"distribute" : {
|
||||
"distribute": {
|
||||
/* 应用发布信息 */
|
||||
"android" : {
|
||||
"android": {
|
||||
/* android打包配置 */
|
||||
"permissions" : [
|
||||
"permissions": [
|
||||
"<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_NETWORK_STATE\"/>",
|
||||
|
@ -49,146 +49,153 @@
|
|||
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
|
||||
"abiFilters": [
|
||||
"armeabi-v7a",
|
||||
"arm64-v8a",
|
||||
"x86"
|
||||
]
|
||||
},
|
||||
"ios" : {
|
||||
"idfa" : false,
|
||||
"privacyDescription" : {
|
||||
"NSPhotoLibraryUsageDescription" : "评论时需要上传评论图片",
|
||||
"NSCameraUsageDescription" : "评论时需要上传评论图片",
|
||||
"NSLocationWhenInUseUsageDescription" : "需要获取您的地理位置,为您推荐最近门店"
|
||||
"ios": {
|
||||
"idfa": false,
|
||||
"privacyDescription": {
|
||||
"NSPhotoLibraryUsageDescription": "评论时需要上传评论图片",
|
||||
"NSCameraUsageDescription": "评论时需要上传评论图片",
|
||||
"NSLocationWhenInUseUsageDescription": "需要获取您的地理位置,为您推荐最近门店"
|
||||
},
|
||||
"dSYMs" : false
|
||||
"dSYMs": false
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"sdkConfigs" : {
|
||||
"oauth" : {},
|
||||
"ad" : {},
|
||||
"share" : {
|
||||
"weixin" : {
|
||||
"appid" : "wx6996eec3fdcc8482",
|
||||
"UniversalLinks" : "https://hzs.hzs413.com/"
|
||||
"sdkConfigs": {
|
||||
"oauth": {},
|
||||
"ad": {},
|
||||
"share": {
|
||||
"weixin": {
|
||||
"appid": "wx6996eec3fdcc8482",
|
||||
"UniversalLinks": "https://hzs.hzs413.com/"
|
||||
}
|
||||
},
|
||||
"payment" : {
|
||||
"weixin" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appid" : "wx6996eec3fdcc8482",
|
||||
"UniversalLinks" : "https://hzs.hzs413.com/"
|
||||
"payment": {
|
||||
"weixin": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
],
|
||||
"appid": "wx6996eec3fdcc8482",
|
||||
"UniversalLinks": "https://hzs.hzs413.com/"
|
||||
}
|
||||
},
|
||||
"geolocation" : {
|
||||
"amap" : {
|
||||
"__platform__" : [ "ios", "android" ],
|
||||
"appkey_ios" : "6f95a1f244b11c5948c4f76bdef74044",
|
||||
"appkey_android" : "87dd4017ae554f18176812ddc4ae4c13"
|
||||
"geolocation": {
|
||||
"amap": {
|
||||
"__platform__": [
|
||||
"ios",
|
||||
"android"
|
||||
],
|
||||
"appkey_ios": "6f95a1f244b11c5948c4f76bdef74044",
|
||||
"appkey_android": "87dd4017ae554f18176812ddc4ae4c13"
|
||||
}
|
||||
}
|
||||
},
|
||||
"icons" : {
|
||||
"android" : {
|
||||
"hdpi" : "unpackage/res/icons/72x72.png",
|
||||
"xhdpi" : "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi" : "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi" : "unpackage/res/icons/192x192.png"
|
||||
"icons": {
|
||||
"android": {
|
||||
"hdpi": "unpackage/res/icons/72x72.png",
|
||||
"xhdpi": "unpackage/res/icons/96x96.png",
|
||||
"xxhdpi": "unpackage/res/icons/144x144.png",
|
||||
"xxxhdpi": "unpackage/res/icons/192x192.png"
|
||||
},
|
||||
"ios" : {
|
||||
"appstore" : "unpackage/res/icons/1024x1024.png",
|
||||
"ipad" : {
|
||||
"app" : "unpackage/res/icons/76x76.png",
|
||||
"app@2x" : "unpackage/res/icons/152x152.png",
|
||||
"notification" : "unpackage/res/icons/20x20.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x" : "unpackage/res/icons/167x167.png",
|
||||
"settings" : "unpackage/res/icons/29x29.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"spotlight" : "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png"
|
||||
"ios": {
|
||||
"appstore": "unpackage/res/icons/1024x1024.png",
|
||||
"ipad": {
|
||||
"app": "unpackage/res/icons/76x76.png",
|
||||
"app@2x": "unpackage/res/icons/152x152.png",
|
||||
"notification": "unpackage/res/icons/20x20.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"proapp@2x": "unpackage/res/icons/167x167.png",
|
||||
"settings": "unpackage/res/icons/29x29.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"spotlight": "unpackage/res/icons/40x40.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png"
|
||||
},
|
||||
"iphone" : {
|
||||
"app@2x" : "unpackage/res/icons/120x120.png",
|
||||
"app@3x" : "unpackage/res/icons/180x180.png",
|
||||
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||
"notification@3x" : "unpackage/res/icons/60x60.png",
|
||||
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||
"settings@3x" : "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x" : "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x" : "unpackage/res/icons/120x120.png"
|
||||
"iphone": {
|
||||
"app@2x": "unpackage/res/icons/120x120.png",
|
||||
"app@3x": "unpackage/res/icons/180x180.png",
|
||||
"notification@2x": "unpackage/res/icons/40x40.png",
|
||||
"notification@3x": "unpackage/res/icons/60x60.png",
|
||||
"settings@2x": "unpackage/res/icons/58x58.png",
|
||||
"settings@3x": "unpackage/res/icons/87x87.png",
|
||||
"spotlight@2x": "unpackage/res/icons/80x80.png",
|
||||
"spotlight@3x": "unpackage/res/icons/120x120.png"
|
||||
}
|
||||
}
|
||||
},
|
||||
"splashscreen" : {
|
||||
"androidStyle" : "default",
|
||||
"iosStyle" : "storyboard",
|
||||
"android" : {
|
||||
"hdpi" : "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/480.9.png",
|
||||
"xhdpi" : "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/720.9.png",
|
||||
"xxhdpi" : "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/1080.9.png"
|
||||
"splashscreen": {
|
||||
"androidStyle": "default",
|
||||
"iosStyle": "storyboard",
|
||||
"android": {
|
||||
"hdpi": "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/480.9.png",
|
||||
"xhdpi": "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/720.9.png",
|
||||
"xxhdpi": "E:/工作/项目/2023客户/一体化/一体化上传20230717/.9/1080.9.png"
|
||||
},
|
||||
"ios" : {
|
||||
"storyboard" : "E:/工作/项目/2023客户/一体化/一体化上传20230717/CustomStoryboard.zip"
|
||||
"ios": {
|
||||
"storyboard": "E:/工作/项目/2023客户/一体化/一体化上传20230717/CustomStoryboard.zip"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
/* SDK配置 */
|
||||
"quickapp" : {},
|
||||
"quickapp": {},
|
||||
/* 快应用特有相关 */
|
||||
"mp-weixin" : {
|
||||
"mp-weixin": {
|
||||
/* 小程序特有相关 */
|
||||
"appid" : "wx6996eec3fdcc8482",
|
||||
"setting" : {
|
||||
"urlCheck" : false,
|
||||
"es6" : true,
|
||||
"postcss" : true,
|
||||
"minified" : true
|
||||
"appid": "wx6996eec3fdcc8482",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
"postcss": true,
|
||||
"minified": true
|
||||
},
|
||||
"usingComponents" : true,
|
||||
"permission" : {
|
||||
"scope.userLocation" : {
|
||||
"desc" : "你的位置信息将用于小程序位置接口的效果展示"
|
||||
"usingComponents": true,
|
||||
"permission": {
|
||||
"scope.userLocation": {
|
||||
"desc": "你的位置信息将用于小程序位置接口的效果展示"
|
||||
}
|
||||
}
|
||||
},
|
||||
"h5" : {
|
||||
"router" : {
|
||||
"mode" : "hash",
|
||||
"base" : ""
|
||||
"h5": {
|
||||
"router": {
|
||||
"mode": "hash",
|
||||
"base": ""
|
||||
},
|
||||
"devServer" : {
|
||||
"https" : false,
|
||||
"proxy" : {
|
||||
"/api" : {
|
||||
"ws" : false,
|
||||
"target" : "http://f.hzs413.com",
|
||||
"changeOrigin" : true,
|
||||
"secure" : false,
|
||||
"pathRewrite" : {
|
||||
"^/api" : "/"
|
||||
"devServer": {
|
||||
"https": false,
|
||||
"proxy": {
|
||||
"/prod-api": {
|
||||
"ws": false,
|
||||
"target": "http://af-app.beida413.com/",
|
||||
"changeOrigin": true,
|
||||
"secure": false
|
||||
},
|
||||
"/dev-api": {
|
||||
"ws": false,
|
||||
"target": "https://yxy.hzs413.com",
|
||||
"changeOrigin": true,
|
||||
"secure": false,
|
||||
"pathRewrite": {
|
||||
"^/dev-api": "/"
|
||||
}
|
||||
},
|
||||
"/dev-api" : {
|
||||
"ws" : false,
|
||||
"target" : "https://yxy.hzs413.com",
|
||||
"changeOrigin" : true,
|
||||
"secure" : false,
|
||||
"pathRewrite" : {
|
||||
"^/dev-api" : "/"
|
||||
}
|
||||
},
|
||||
"/oss-api" : {
|
||||
"ws" : false,
|
||||
"target" : "https://dny-test.s3.ap-southeast-1.amazonaws.com",
|
||||
"changeOrigin" : true,
|
||||
"secure" : false,
|
||||
"pathRewrite" : {
|
||||
"^/oss-api" : "/"
|
||||
"/oss-api": {
|
||||
"ws": false,
|
||||
"target": "https://dny-test.s3.ap-southeast-1.amazonaws.com",
|
||||
"changeOrigin": true,
|
||||
"secure": false,
|
||||
"pathRewrite": {
|
||||
"^/oss-api": "/"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"title" : "店铺管理系统"
|
||||
"title": "店铺管理系统"
|
||||
},
|
||||
"fallbackLocale" : "en-US",
|
||||
"locale" : "en-US"
|
||||
}
|
||||
"fallbackLocale": "en-US",
|
||||
"locale": "en-US"
|
||||
}
|
|
@ -12,6 +12,52 @@
|
|||
"vue-i18n": "^9.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.28.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
|
||||
"integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.28.2"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.28.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
|
||||
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@intlify/core-base": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz",
|
||||
|
@ -69,11 +115,117 @@
|
|||
"node": ">= 14"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@vue/compiler-core": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
|
||||
"integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.28.0",
|
||||
"@vue/shared": "3.5.18",
|
||||
"entities": "^4.5.0",
|
||||
"estree-walker": "^2.0.2",
|
||||
"source-map-js": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-dom": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
|
||||
"integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-core": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-sfc": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
|
||||
"integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.28.0",
|
||||
"@vue/compiler-core": "3.5.18",
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/compiler-ssr": "3.5.18",
|
||||
"@vue/shared": "3.5.18",
|
||||
"estree-walker": "^2.0.2",
|
||||
"magic-string": "^0.30.17",
|
||||
"postcss": "^8.5.6",
|
||||
"source-map-js": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/compiler-ssr": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
|
||||
"integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/devtools-api": {
|
||||
"version": "6.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
|
||||
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
|
||||
},
|
||||
"node_modules/@vue/reactivity": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz",
|
||||
"integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/runtime-core": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
|
||||
"integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/runtime-dom": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
|
||||
"integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/reactivity": "3.5.18",
|
||||
"@vue/runtime-core": "3.5.18",
|
||||
"@vue/shared": "3.5.18",
|
||||
"csstype": "^3.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/server-renderer": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
|
||||
"integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-ssr": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "3.5.18"
|
||||
}
|
||||
},
|
||||
"node_modules/@vue/shared": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz",
|
||||
"integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/base64-arraybuffer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
|
||||
|
@ -90,6 +242,30 @@
|
|||
"utrie": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/html2canvas": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
|
||||
|
@ -102,6 +278,67 @@
|
|||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.30.17",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
|
||||
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.11",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
||||
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.5.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
|
||||
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/postcss/"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/postcss"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
"source-map-js": "^1.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||
|
@ -110,6 +347,15 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/text-segmentation": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
|
||||
|
@ -126,6 +372,27 @@
|
|||
"base64-arraybuffer": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/vue": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz",
|
||||
"integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/compiler-sfc": "3.5.18",
|
||||
"@vue/runtime-dom": "3.5.18",
|
||||
"@vue/server-renderer": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "*"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/vue-i18n": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz",
|
||||
|
@ -145,6 +412,37 @@
|
|||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
|
||||
"peer": true
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
|
||||
"peer": true
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.28.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz",
|
||||
"integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/types": "^7.28.2"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.28.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
|
||||
"integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.27.1",
|
||||
"@babel/helper-validator-identifier": "^7.27.1"
|
||||
}
|
||||
},
|
||||
"@intlify/core-base": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz",
|
||||
|
@ -187,11 +485,114 @@
|
|||
"@intlify/shared": "9.2.2"
|
||||
}
|
||||
},
|
||||
"@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"peer": true
|
||||
},
|
||||
"@vue/compiler-core": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz",
|
||||
"integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.28.0",
|
||||
"@vue/shared": "3.5.18",
|
||||
"entities": "^4.5.0",
|
||||
"estree-walker": "^2.0.2",
|
||||
"source-map-js": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"@vue/compiler-dom": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz",
|
||||
"integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-core": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"@vue/compiler-sfc": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz",
|
||||
"integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/parser": "^7.28.0",
|
||||
"@vue/compiler-core": "3.5.18",
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/compiler-ssr": "3.5.18",
|
||||
"@vue/shared": "3.5.18",
|
||||
"estree-walker": "^2.0.2",
|
||||
"magic-string": "^0.30.17",
|
||||
"postcss": "^8.5.6",
|
||||
"source-map-js": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"@vue/compiler-ssr": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz",
|
||||
"integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"@vue/devtools-api": {
|
||||
"version": "6.5.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
|
||||
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
|
||||
},
|
||||
"@vue/reactivity": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz",
|
||||
"integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"@vue/runtime-core": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz",
|
||||
"integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/reactivity": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"@vue/runtime-dom": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz",
|
||||
"integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/reactivity": "3.5.18",
|
||||
"@vue/runtime-core": "3.5.18",
|
||||
"@vue/shared": "3.5.18",
|
||||
"csstype": "^3.1.3"
|
||||
}
|
||||
},
|
||||
"@vue/server-renderer": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz",
|
||||
"integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-ssr": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"@vue/shared": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz",
|
||||
"integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==",
|
||||
"peer": true
|
||||
},
|
||||
"base64-arraybuffer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
|
||||
|
@ -205,6 +606,24 @@
|
|||
"utrie": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"csstype": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
||||
"peer": true
|
||||
},
|
||||
"entities": {
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
|
||||
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
|
||||
"peer": true
|
||||
},
|
||||
"estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||
"peer": true
|
||||
},
|
||||
"html2canvas": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
|
||||
|
@ -214,11 +633,49 @@
|
|||
"text-segmentation": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"magic-string": {
|
||||
"version": "0.30.17",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
|
||||
"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.3.11",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
||||
"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
|
||||
"peer": true
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
||||
"peer": true
|
||||
},
|
||||
"postcss": {
|
||||
"version": "8.5.6",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
|
||||
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"nanoid": "^3.3.11",
|
||||
"picocolors": "^1.1.1",
|
||||
"source-map-js": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
},
|
||||
"source-map-js": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
|
||||
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
|
||||
"peer": true
|
||||
},
|
||||
"text-segmentation": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
|
||||
|
@ -235,6 +692,19 @@
|
|||
"base64-arraybuffer": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"vue": {
|
||||
"version": "3.5.18",
|
||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz",
|
||||
"integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@vue/compiler-dom": "3.5.18",
|
||||
"@vue/compiler-sfc": "3.5.18",
|
||||
"@vue/runtime-dom": "3.5.18",
|
||||
"@vue/server-renderer": "3.5.18",
|
||||
"@vue/shared": "3.5.18"
|
||||
}
|
||||
},
|
||||
"vue-i18n": {
|
||||
"version": "9.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz",
|
||||
|
|
|
@ -162,7 +162,7 @@ export default {
|
|||
getDataList() {
|
||||
let self = this;
|
||||
let params = this.queryParams;
|
||||
self._get("/member/api/member-structure/tj-framework", params, (res) => {
|
||||
self._get("member/api/member-structure/tj-framework", params, (res) => {
|
||||
self.treeData = res.data;
|
||||
});
|
||||
},
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
archTreeData: {},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
archDataFormat(archTreeData) {
|
||||
const forkData = JSON.parse(JSON.stringify(archTreeData))
|
||||
const addExtendKey = (forkData) => {
|
||||
if (!forkData) {
|
||||
forkData = {}
|
||||
}
|
||||
forkData.extend = forkData.extend === void 0 ? true : !!forkData.extend
|
||||
if (Array.isArray(forkData.children)) {
|
||||
forkData.children.forEach((c) => {
|
||||
addExtendKey(c)
|
||||
})
|
||||
} else {
|
||||
forkData.countryUrl2Base64 = forkData.countryUrl2
|
||||
forkData.settleCountryUrl2Base64 = forkData.settleCountryUrl2
|
||||
forkData.avatarUrlBase64 = forkData.avatarUrl
|
||||
}
|
||||
return forkData
|
||||
}
|
||||
addExtendKey(forkData)
|
||||
return forkData
|
||||
},
|
||||
},
|
||||
};
|
|
@ -0,0 +1,425 @@
|
|||
// 兼容性处理:requestAnimationFrame polyfill
|
||||
const getRequestAnimationFrame = () => {
|
||||
// 检查全局对象是否存在(uni-app 中可能是 uni 而不是 window)
|
||||
const global = typeof window !== 'undefined' ? window :
|
||||
typeof uni !== 'undefined' ? uni :
|
||||
typeof global !== 'undefined' ? global : {};
|
||||
|
||||
return global.requestAnimationFrame ||
|
||||
global.webkitRequestAnimationFrame ||
|
||||
global.mozRequestAnimationFrame ||
|
||||
global.oRequestAnimationFrame ||
|
||||
global.msRequestAnimationFrame ||
|
||||
function(callback) {
|
||||
return setTimeout(callback, 1000 / 60); // 60 FPS fallback
|
||||
};
|
||||
};
|
||||
|
||||
const getCancelAnimationFrame = () => {
|
||||
const global = typeof window !== 'undefined' ? window :
|
||||
typeof uni !== 'undefined' ? uni :
|
||||
typeof global !== 'undefined' ? global : {};
|
||||
|
||||
return global.cancelAnimationFrame ||
|
||||
global.webkitCancelAnimationFrame ||
|
||||
global.mozCancelAnimationFrame ||
|
||||
global.oCancelAnimationFrame ||
|
||||
global.msCancelAnimationFrame ||
|
||||
function(id) {
|
||||
return clearTimeout(id);
|
||||
};
|
||||
};
|
||||
|
||||
const requestAnimationFrame = getRequestAnimationFrame();
|
||||
const cancelAnimationFrame = getCancelAnimationFrame();
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 触摸缩放相关状态
|
||||
touchStartPosition1: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
touchStartPosition2: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
initialDistance: 0,
|
||||
x: 0, // 元素的x坐标
|
||||
y: 0, // 元素的y坐标
|
||||
scale: 1, // 元素的缩放比例
|
||||
initialX: 0, // 元素的初始x坐标
|
||||
initialY: 0, // 元素的初始y坐标
|
||||
minScale: 0.5, // 最小缩放比例
|
||||
maxScale: 3, // 最大缩放比例
|
||||
isScaling: false, // 是否正在缩放
|
||||
lastTouchTime: 0, // 上次触摸时间
|
||||
|
||||
// 拖拽优化相关
|
||||
isDragging: false, // 是否正在拖拽
|
||||
dragStartTime: 0, // 拖拽开始时间
|
||||
lastMoveTime: 0, // 上次移动时间
|
||||
velocity: { x: 0, y: 0 }, // 移动速度
|
||||
animationId: null, // 动画帧ID
|
||||
pendingUpdate: false, // 是否有待处理的更新
|
||||
|
||||
// 边界控制
|
||||
enableBoundary: false, // 是否启用边界控制
|
||||
boundary: {
|
||||
minX: -500,
|
||||
maxX: 500,
|
||||
minY: -500,
|
||||
maxY: 500,
|
||||
}, // 移动边界
|
||||
|
||||
// 兼容性相关
|
||||
useTimer: false, // 是否使用定时器代替 RAF(兼容性降级)
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 触摸开始事件处理
|
||||
* @param {TouchEvent} event 触摸事件
|
||||
*/
|
||||
handleTouchStart(event) {
|
||||
event.preventDefault();
|
||||
|
||||
// 取消之前的动画
|
||||
if (this.animationId) {
|
||||
this.safeCancelAnimationFrame(this.animationId);
|
||||
this.animationId = null;
|
||||
}
|
||||
|
||||
const currentTime = Date.now();
|
||||
this.lastTouchTime = currentTime;
|
||||
|
||||
if (event.touches.length === 1) {
|
||||
// 单指拖拽初始化
|
||||
this.isScaling = false;
|
||||
this.isDragging = true;
|
||||
this.dragStartTime = currentTime;
|
||||
this.lastMoveTime = currentTime;
|
||||
this.initialX = event.touches[0].clientX;
|
||||
this.initialY = event.touches[0].clientY;
|
||||
this.velocity = { x: 0, y: 0 };
|
||||
this.pendingUpdate = false;
|
||||
} else if (event.touches.length === 2) {
|
||||
// 双指缩放初始化
|
||||
this.isScaling = true;
|
||||
this.isDragging = false;
|
||||
this.touchStartPosition1.x = event.touches[0].clientX;
|
||||
this.touchStartPosition1.y = event.touches[0].clientY;
|
||||
this.touchStartPosition2.x = event.touches[1].clientX;
|
||||
this.touchStartPosition2.y = event.touches[1].clientY;
|
||||
|
||||
// 计算初始两指间距离
|
||||
this.initialDistance = this.getDistance(
|
||||
this.touchStartPosition1,
|
||||
this.touchStartPosition2
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 触摸移动事件处理
|
||||
* @param {TouchEvent} event 触摸事件
|
||||
*/
|
||||
handleTouchMove(event) {
|
||||
event.preventDefault();
|
||||
|
||||
if (event.touches.length === 2 && this.isScaling) {
|
||||
// 双指缩放逻辑
|
||||
const currentDistance = this.getDistance(
|
||||
{ x: event.touches[0].clientX, y: event.touches[0].clientY },
|
||||
{ x: event.touches[1].clientX, y: event.touches[1].clientY }
|
||||
);
|
||||
|
||||
if (this.initialDistance > 0) {
|
||||
// 计算缩放比例变化
|
||||
const scaleChange = currentDistance / this.initialDistance;
|
||||
let newScale = this.scale * scaleChange;
|
||||
|
||||
// 限制缩放范围
|
||||
newScale = Math.max(this.minScale, Math.min(this.maxScale, newScale));
|
||||
this.scale = newScale;
|
||||
|
||||
// 更新初始距离为当前距离,用于下次计算
|
||||
this.initialDistance = currentDistance;
|
||||
}
|
||||
} else if (event.touches.length === 1 && this.isDragging) {
|
||||
// 单指拖拽逻辑优化
|
||||
const currentTime = Date.now();
|
||||
const currentX = event.touches[0].clientX;
|
||||
const currentY = event.touches[0].clientY;
|
||||
|
||||
// 计算移动距离
|
||||
const deltaX = currentX - this.initialX;
|
||||
const deltaY = currentY - this.initialY;
|
||||
|
||||
// 计算移动速度(用于惯性效果)
|
||||
const timeDelta = currentTime - this.lastMoveTime;
|
||||
if (timeDelta > 0) {
|
||||
this.velocity.x = deltaX / timeDelta * 16; // 标准化到16ms(60fps)
|
||||
this.velocity.y = deltaY / timeDelta * 16;
|
||||
}
|
||||
|
||||
// 使用节流机制更新位置
|
||||
this.schedulePositionUpdate(deltaX, deltaY);
|
||||
|
||||
// 更新初始位置和时间
|
||||
this.initialX = currentX;
|
||||
this.initialY = currentY;
|
||||
this.lastMoveTime = currentTime;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 触摸结束事件处理
|
||||
* @param {TouchEvent} event 触摸事件
|
||||
*/
|
||||
handleTouchEnd(event) {
|
||||
if (event.touches.length === 0) {
|
||||
// 所有手指都离开屏幕,重置状态
|
||||
this.isScaling = false;
|
||||
this.initialDistance = 0;
|
||||
|
||||
// 如果是拖拽结束,启动惯性效果
|
||||
if (this.isDragging) {
|
||||
this.isDragging = false;
|
||||
this.startInertiaAnimation();
|
||||
}
|
||||
} else if (event.touches.length === 1 && this.isScaling) {
|
||||
// 从双指变为单指,切换到拖拽模式
|
||||
this.isScaling = false;
|
||||
this.isDragging = true;
|
||||
this.initialX = event.touches[0].clientX;
|
||||
this.initialY = event.touches[0].clientY;
|
||||
this.lastMoveTime = Date.now();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 计算两点间距离的辅助方法
|
||||
* @param {Object} point1 第一个点 {x, y}
|
||||
* @param {Object} point2 第二个点 {x, y}
|
||||
* @return {Number} 两点间距离
|
||||
*/
|
||||
getDistance(point1, point2) {
|
||||
const dx = point1.x - point2.x;
|
||||
const dy = point1.y - point2.y;
|
||||
return Math.sqrt(dx * dx + dy * dy);
|
||||
},
|
||||
|
||||
/**
|
||||
* 重置缩放和位置
|
||||
*/
|
||||
resetTransform() {
|
||||
this.x = 0;
|
||||
this.y = 0;
|
||||
this.scale = 1;
|
||||
this.isScaling = false;
|
||||
this.initialDistance = 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* 安全的 requestAnimationFrame 调用
|
||||
* @param {Function} callback 回调函数
|
||||
* @return {Number} 动画ID
|
||||
*/
|
||||
safeRequestAnimationFrame(callback) {
|
||||
try {
|
||||
if (this.useTimer) {
|
||||
return setTimeout(callback, 16); // 约 60 FPS
|
||||
}
|
||||
return requestAnimationFrame(callback);
|
||||
} catch (error) {
|
||||
console.warn('requestAnimationFrame failed, fallback to setTimeout:', error);
|
||||
this.useTimer = true;
|
||||
return setTimeout(callback, 16);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 安全的 cancelAnimationFrame 调用
|
||||
* @param {Number} id 动画ID
|
||||
*/
|
||||
safeCancelAnimationFrame(id) {
|
||||
try {
|
||||
if (this.useTimer || typeof id === 'number') {
|
||||
clearTimeout(id);
|
||||
} else {
|
||||
cancelAnimationFrame(id);
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('cancelAnimationFrame failed, fallback to clearTimeout:', error);
|
||||
clearTimeout(id);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 节流位置更新机制
|
||||
* @param {Number} deltaX x轴位移
|
||||
* @param {Number} deltaY y轴位移
|
||||
*/
|
||||
schedulePositionUpdate(deltaX, deltaY) {
|
||||
// 计算新位置
|
||||
let newX = this.x + deltaX;
|
||||
let newY = this.y + deltaY;
|
||||
|
||||
// 应用边界限制
|
||||
if (this.enableBoundary) {
|
||||
const pos = this.applyBoundaryConstraints(newX, newY);
|
||||
newX = pos.x;
|
||||
newY = pos.y;
|
||||
}
|
||||
|
||||
// 更新位置
|
||||
this.x = newX;
|
||||
this.y = newY;
|
||||
|
||||
if (!this.pendingUpdate) {
|
||||
this.pendingUpdate = true;
|
||||
this.safeRequestAnimationFrame(() => {
|
||||
this.pendingUpdate = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 启动惯性动画
|
||||
*/
|
||||
startInertiaAnimation() {
|
||||
const minVelocity = 0.1; // 最小速度阈值
|
||||
const friction = 0.95; // 摩擦系数
|
||||
|
||||
// 如果速度太小,直接停止
|
||||
if (Math.abs(this.velocity.x) < minVelocity && Math.abs(this.velocity.y) < minVelocity) {
|
||||
return;
|
||||
}
|
||||
|
||||
const animate = () => {
|
||||
// 应用摩擦力
|
||||
this.velocity.x *= friction;
|
||||
this.velocity.y *= friction;
|
||||
|
||||
// 更新位置
|
||||
let newX = this.x + this.velocity.x;
|
||||
let newY = this.y + this.velocity.y;
|
||||
|
||||
// 应用边界限制
|
||||
if (this.enableBoundary) {
|
||||
const pos = this.applyBoundaryConstraints(newX, newY);
|
||||
newX = pos.x;
|
||||
newY = pos.y;
|
||||
|
||||
// 如果到达边界,减慢对应方向的速度
|
||||
if (newX !== this.x + this.velocity.x) {
|
||||
this.velocity.x *= 0.3;
|
||||
}
|
||||
if (newY !== this.y + this.velocity.y) {
|
||||
this.velocity.y *= 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
this.x = newX;
|
||||
this.y = newY;
|
||||
|
||||
// 检查是否继续动画
|
||||
if (Math.abs(this.velocity.x) > minVelocity || Math.abs(this.velocity.y) > minVelocity) {
|
||||
this.animationId = this.safeRequestAnimationFrame(animate);
|
||||
} else {
|
||||
this.animationId = null;
|
||||
this.velocity = { x: 0, y: 0 };
|
||||
}
|
||||
};
|
||||
|
||||
this.animationId = this.safeRequestAnimationFrame(animate);
|
||||
},
|
||||
|
||||
/**
|
||||
* 应用边界约束
|
||||
* @param {Number} x x坐标
|
||||
* @param {Number} y y坐标
|
||||
* @return {Object} 约束后的坐标 {x, y}
|
||||
*/
|
||||
applyBoundaryConstraints(x, y) {
|
||||
return {
|
||||
x: Math.max(this.boundary.minX, Math.min(this.boundary.maxX, x)),
|
||||
y: Math.max(this.boundary.minY, Math.min(this.boundary.maxY, y)),
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* 设置缩放范围
|
||||
* @param {Number} minScale 最小缩放比例
|
||||
* @param {Number} maxScale 最大缩放比例
|
||||
*/
|
||||
setScaleRange(minScale, maxScale) {
|
||||
this.minScale = minScale || 0.5;
|
||||
this.maxScale = maxScale || 3;
|
||||
},
|
||||
|
||||
/**
|
||||
* 设置移动边界
|
||||
* @param {Object} boundary 边界配置 {minX, maxX, minY, maxY}
|
||||
* @param {Boolean} enable 是否启用边界控制
|
||||
*/
|
||||
setBoundary(boundary, enable = true) {
|
||||
this.boundary = { ...this.boundary, ...boundary };
|
||||
this.enableBoundary = enable;
|
||||
},
|
||||
|
||||
/**
|
||||
* 检测并设置兼容性模式
|
||||
*/
|
||||
detectCompatibility() {
|
||||
try {
|
||||
// 尝试调用 requestAnimationFrame
|
||||
const testId = requestAnimationFrame(() => {});
|
||||
cancelAnimationFrame(testId);
|
||||
this.useTimer = false;
|
||||
} catch (error) {
|
||||
console.warn('requestAnimationFrame not supported, using timer fallback');
|
||||
this.useTimer = true;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 强制使用定时器模式(用于调试或特殊需求)
|
||||
* @param {Boolean} useTimer 是否使用定时器
|
||||
*/
|
||||
setTimerMode(useTimer = true) {
|
||||
this.useTimer = useTimer;
|
||||
if (useTimer) {
|
||||
console.info('TouchScale: 已切换到定时器模式');
|
||||
} else {
|
||||
console.info('TouchScale: 已切换到 requestAnimationFrame 模式');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 清理动画和状态
|
||||
*/
|
||||
cleanupTouchScale() {
|
||||
if (this.animationId) {
|
||||
this.safeCancelAnimationFrame(this.animationId);
|
||||
this.animationId = null;
|
||||
}
|
||||
this.isDragging = false;
|
||||
this.isScaling = false;
|
||||
this.velocity = { x: 0, y: 0 };
|
||||
this.pendingUpdate = false;
|
||||
},
|
||||
},
|
||||
|
||||
// 组件创建时检测兼容性
|
||||
mounted() {
|
||||
this.detectCompatibility();
|
||||
},
|
||||
|
||||
// 组件销毁时清理
|
||||
beforeDestroy() {
|
||||
this.cleanupTouchScale();
|
||||
},
|
||||
};
|
|
@ -45,7 +45,7 @@
|
|||
transform: `scale(${scale})`,
|
||||
}"
|
||||
:size="size"
|
||||
:json="data"
|
||||
:treeData="archTreeData"
|
||||
:class="{ landscape: landscape.length }"
|
||||
@click-node="clickNode"
|
||||
@click-top="clickTop"
|
||||
|
@ -146,11 +146,14 @@
|
|||
import html2canvas from "html2canvas";
|
||||
import TreeChart3 from "@/components/architectures/resettleSO1.vue";
|
||||
import Eposter from "@/components/architectures/Poster.vue";
|
||||
import archDataMixin from "./mixin/archDataMixin";
|
||||
import touchScaleMixin from "./mixin/touchScaleMixin";
|
||||
export default {
|
||||
components: {
|
||||
TreeChart3,
|
||||
Eposter,
|
||||
},
|
||||
mixins: [archDataMixin, touchScaleMixin],
|
||||
data() {
|
||||
return {
|
||||
avaerInfoList: [],
|
||||
|
@ -158,35 +161,21 @@ export default {
|
|||
queryParams: {
|
||||
memberSettlePeriodId: "", //期数
|
||||
memberCode: "", //会员编号
|
||||
level: 3, //代数
|
||||
level: 7, //代数
|
||||
type: 1,
|
||||
},
|
||||
memberSettlePeriodList: [], //期数
|
||||
popShow: false,
|
||||
listShow: false,
|
||||
settleName: "",
|
||||
data: {},
|
||||
archTreeData: {},
|
||||
size: 0.8,
|
||||
landscape: [],
|
||||
popMould: {},
|
||||
isPop: false,
|
||||
touchStartPosition1: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
touchStartPosition2: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
},
|
||||
initialDistance: 0,
|
||||
list: [],
|
||||
startX: 0,
|
||||
startY: 0,
|
||||
x: 0, // 元素的x坐标
|
||||
y: 0, // 元素的y坐标
|
||||
scale: 1, // 元素的缩放比例
|
||||
initialX: 0, // 元素的初始x坐标
|
||||
initialY: 0, // 元素的初始y坐标
|
||||
startY: 0
|
||||
};
|
||||
},
|
||||
onLoad() {
|
||||
|
@ -198,41 +187,8 @@ export default {
|
|||
methods: {
|
||||
onpenPop() {
|
||||
this.popShow = true;
|
||||
console.log(this.popShow);
|
||||
},
|
||||
handleTouchStart(event) {
|
||||
// 记录元素的初始位置
|
||||
this.initialX = event.changedTouches[0].clientX;
|
||||
this.initialY = event.changedTouches[0].clientY;
|
||||
},
|
||||
handleTouchMove(event) {
|
||||
if (event.touches.length === 2) {
|
||||
// 计算拖动的距离
|
||||
const deltaX = event.touches[0].clientX - event.touches[1].clientX;
|
||||
const deltaY = event.touches[0].clientY - event.touches[1].clientY;
|
||||
// 更新元素的位置和缩放比例
|
||||
this.x += deltaX;
|
||||
this.y += deltaY;
|
||||
// 根据滑动距离控制缩放比例
|
||||
this.scale += deltaY / 100;
|
||||
} else {
|
||||
// 计算拖动的距离
|
||||
const deltaX = event.changedTouches[0].clientX - this.initialX;
|
||||
const deltaY = event.changedTouches[0].clientY - this.initialY;
|
||||
// 更新元素的位置和缩放比例
|
||||
this.x += deltaX;
|
||||
this.y += deltaY;
|
||||
}
|
||||
|
||||
// 更新元素的初始位置为最后一次拖动的结束位置
|
||||
this.initialX = event.touches[0].clientX;
|
||||
this.initialY = event.touches[0].clientY;
|
||||
},
|
||||
handleTouchEnd(event) {
|
||||
// 在这里记录第一次拖动的结束位置,以便第二次拖动时使用
|
||||
this.initialX = event.changedTouches[0].clientX;
|
||||
this.initialY = event.changedTouches[0].clientY;
|
||||
},
|
||||
clickNode(e) {},
|
||||
clickTop(e) {
|
||||
let that = this;
|
||||
|
@ -260,10 +216,9 @@ export default {
|
|||
);
|
||||
},
|
||||
getDataList() {
|
||||
let self = this;
|
||||
let params = this.queryParams;
|
||||
self._get("/member/api/member-structure/az-framework-first", params, (res) => {
|
||||
self.data = res.data[0];
|
||||
this._get("/member/api/member-structure/az-framework-first", params, (res) => {
|
||||
this.archTreeData = this.archDataFormat(res.data[0] || {});
|
||||
});
|
||||
},
|
||||
clearAll() {
|
||||
|
|
|
@ -318,7 +318,7 @@ export default {
|
|||
console.log(self.typeIndex);
|
||||
let specialArea = self.typeList[self.typeIndex].specialArea;
|
||||
self._get(
|
||||
"/sale/api/shopping/getShopping",
|
||||
"sale/api/shopping/getShopping",
|
||||
{
|
||||
specialArea: specialArea,
|
||||
},
|
||||
|
@ -339,7 +339,7 @@ export default {
|
|||
getType() {
|
||||
let self = this;
|
||||
self.isInit = false;
|
||||
self._get("/sale/api/shopping/getShopping", {}, (res) => {
|
||||
self._get("sale/api/shopping/getShopping", {}, (res) => {
|
||||
self.typeList = res.data;
|
||||
if (self.typeList && self.typeList.length > 0) {
|
||||
self.listData = self.typeList[0].shoppingCartList;
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
v-for="(item, index) in advertBannerList" :key="index"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="time-box f26">{{$t('fn_313')+': '}}<text class="domation">{{nowDate}}</text></view>
|
||||
<!-- <view class="time-box f26">{{$t('fn_313')+': '}}<text class="domation">{{nowDate}}</text></view> -->
|
||||
<annuity :userInfo="userInfo"></annuity>
|
||||
<view class="nav-list">
|
||||
<view class="nav-item" v-for="(item, index) in recommendSpecialAreaList" :key="index" v-if="
|
||||
|
|
|
@ -222,20 +222,7 @@
|
|||
<view class="p-40-0">
|
||||
<button class="normal-sub-btn" @click="payFunc">{{ $t('w_0248') }}</button>
|
||||
</view>
|
||||
<template v-if="showUp">
|
||||
<view class="pop-bg"></view>
|
||||
<view class="upgrade-pop">
|
||||
<view class="d-e-c" @click="showUp = false"><u-icon name="close" size="32rpx" color="#fff"></u-icon></view>
|
||||
<view class="fb white tc f48">升级成功</view>
|
||||
<image style="width:100%;margin: 0 auto;" src="/static/cashier-up.png" mode="widthFix"></image>
|
||||
<view class="progress-box"><view class="progress-box-item"></view></view>
|
||||
<view class="d-c d-c-c white f28">
|
||||
<view class="mb20">32100/49800</view>
|
||||
<view class="mb20">您的最新等级为:VIP</view>
|
||||
<view class="mb20">您的最新奖衔为:资深经理</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<Popup :show="isPopup" :width="665" :padding="0" @hidePopup="hidePopupFunc">
|
||||
<view class="d-e-c ww100">
|
||||
<view class="p20" @click="hidePopupFunc(true)"><text class="icon iconfont icon-guanbi" style="color: #999;font-size: 28rpx;"></text></view>
|
||||
|
|
|
@ -342,7 +342,7 @@ export default {
|
|||
methods: {
|
||||
getOrderStatus() {
|
||||
let self = this;
|
||||
self._get("/system/pub/enums/order-status-api", {}, (res) => {
|
||||
self._get("system/pub/enums/order-status-api", {}, (res) => {
|
||||
self.orderStatus = res.data;
|
||||
});
|
||||
},
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<text class="domation mr10">*</text>
|
||||
{{ $t("PER_DA_3") }}
|
||||
</view>
|
||||
<view class="flex-1 d-s-c">
|
||||
<view class="flex-1 d-s-c" style="width: 100%; justify-content: flex-end;">
|
||||
<image
|
||||
class="queryimg mr10"
|
||||
mode="heightFix"
|
||||
|
@ -34,7 +34,7 @@
|
|||
: ''
|
||||
"
|
||||
></image>
|
||||
<view class="flex-1">{{
|
||||
<view >{{
|
||||
pkCountry >= 0 && countryList[pkCountry]
|
||||
? countryList[pkCountry].shortName
|
||||
: ""
|
||||
|
@ -48,7 +48,7 @@
|
|||
<text class="domation mr10">*</text>
|
||||
{{ $t("PER_DA_4") }}
|
||||
</view>
|
||||
<view class="flex-1 d-s-c">
|
||||
<view class="flex-1 d-s-c" style="width: 100%; justify-content: flex-end;">
|
||||
<image
|
||||
class="queryimg mr10"
|
||||
mode="heightFix"
|
||||
|
@ -58,7 +58,7 @@
|
|||
: ''
|
||||
"
|
||||
></image>
|
||||
<view class="flex-1">{{
|
||||
<view style="padding-right: 30rpx;">{{
|
||||
pkSettleCountry >= 0 && countryList[pkSettleCountry]
|
||||
? countryList[pkSettleCountry].shortName
|
||||
: ""
|
||||
|
@ -600,7 +600,8 @@ export default {
|
|||
|
||||
.queryimg {
|
||||
height: 60rpx;
|
||||
flex-shrink: 0;
|
||||
width: 60rpx;
|
||||
// flex-shrink: 0;
|
||||
}
|
||||
|
||||
.form-top-nav {
|
||||
|
|
|
@ -305,7 +305,8 @@
|
|||
}
|
||||
.queryimg {
|
||||
height: 60rpx;
|
||||
flex-shrink: 0;
|
||||
width: 60rpx;
|
||||
// flex-shrink: 0;
|
||||
}
|
||||
|
||||
.form-title {
|
||||
|
|
|
@ -674,13 +674,13 @@
|
|||
methods: {
|
||||
getMemberAnnuity() {
|
||||
let self = this;
|
||||
self._get("/member/api/member/get-member-annuity-time", {}, (res) => {
|
||||
self._get("member/api/member/get-member-annuity-time", {}, (res) => {
|
||||
self.resaleIncomeBonus = res.data.resaleIncomeBonus;
|
||||
});
|
||||
},
|
||||
getNextLevelPv() {
|
||||
let self = this;
|
||||
self._get("/member/api/member/next-level-pv", {}, (res) => {
|
||||
self._get("member/api/member/next-level-pv", {}, (res) => {
|
||||
self.nextText = res.data.gradeValue;
|
||||
self.isMaxGrade = res.data.isMaxGrade;
|
||||
});
|
||||
|
@ -2029,7 +2029,8 @@
|
|||
|
||||
.queryimg {
|
||||
height: 40rpx;
|
||||
flex-shrink: 0;
|
||||
width: 40rpx;
|
||||
// flex-shrink: 0;
|
||||
margin: 0 10rpx;
|
||||
}
|
||||
|
||||
|
|
|
@ -317,7 +317,7 @@
|
|||
},
|
||||
getOrderStatus() {
|
||||
let self = this;
|
||||
self._get('/system/pub/enums/order-status-api', {}, res => {
|
||||
self._get('system/pub/enums/order-status-api', {}, res => {
|
||||
self.orderStatus = res.data;
|
||||
})
|
||||
},
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="set-group" style="padding-top: 18rpx;">
|
||||
<!-- <view class="set-group" style="padding-top: 18rpx;">
|
||||
<view class="d-b-c set-group-item "
|
||||
@click="gotoPage('pages/user/set/bind/email?email='+encodeURIComponent(userInfo.email || ''))">
|
||||
<view>{{$t('PER_DA_33')}}</view>
|
||||
|
@ -23,20 +23,9 @@
|
|||
<text class="icon iconfont icon-jiantou"></text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="d-b-c set-group-item" @click="gotoPage('pages/user/set/bind/mobiless')">
|
||||
<view>{{$t('w_0417')}}</view>
|
||||
<view class="d-e-c gray9">
|
||||
<text class="">{{ mobileHidden(userInfo.phone) || $t('w_0418') }}</text>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="d-b-c set-group-item">
|
||||
<view>{{$t('w_0417')}}</view>
|
||||
<view class="d-e-c gray9">
|
||||
<text class="">{{ mobileHidden(userInfo.phone) || $t('w_0418') }}</text>
|
||||
<!-- <text class="icon iconfont icon-jiantou"></text> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
Loading…
Reference in New Issue