apk包含apk
This commit is contained in:
32
unpackage/dist/dev/app-plus/androidPrivacy.json
vendored
Normal file
32
unpackage/dist/dev/app-plus/androidPrivacy.json
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"version" : "1",
|
||||
"prompt" : "template",
|
||||
"title" : "服务协议和隐私政策",
|
||||
"message" : "请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/> 你可阅读<a href=\"https://docs.qq.com/doc/DWWNpa25xdFNwRW5V\">《服务协议》</a>和<a href=\"https://docs.qq.com/doc/DWW5NV29SSG5IbkZH\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
|
||||
"buttonAccept" : "同意并接受",
|
||||
"buttonRefuse" : "暂不同意",
|
||||
"hrefLoader" : "system",
|
||||
"backToExit" : "true",
|
||||
"disagreeMode" : {
|
||||
"support" : false,
|
||||
"loadNativePlugins" : false,
|
||||
"visitorEntry" : false,
|
||||
"showAlways" : false
|
||||
},
|
||||
"styles" : {
|
||||
"backgroundColor" : "#999",
|
||||
"borderRadius" : "5px",
|
||||
"title" : {
|
||||
"color" : "#000"
|
||||
},
|
||||
"buttonAccept" : {
|
||||
"color" : "#000"
|
||||
},
|
||||
"buttonRefuse" : {
|
||||
"color" : "#ff1e3c"
|
||||
},
|
||||
"buttonVisitor" : {
|
||||
"color" : "#00ffff"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
;(function(){
|
||||
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
|
||||
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"111","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.87","entryPagePath":"pages/light-theme/light-theme","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
|
||||
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"宇恒一号","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.87","entryPagePath":"pages/light-theme/light-theme","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"locales":{},"darkmode":false,"themeConfig":{}};
|
||||
const __uniRoutes = [{"path":"pages/light-theme/light-theme","meta":{"isQuit":true,"isEntry":true,"navigationBarHidden":true,"navigationBar":{"titleText":"YXD","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/index/index","meta":{"navigationBarHidden":true,"navigationBar":{"titleText":"YXD","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/night-theme/night-theme","meta":{"navigationBar":{"titleText":"","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
|
||||
__uniConfig.styles=[];//styles
|
||||
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
|
||||
|
||||
395
unpackage/dist/dev/app-plus/app-service.js
vendored
395
unpackage/dist/dev/app-plus/app-service.js
vendored
@@ -1,3 +1,9 @@
|
||||
var __defProp = Object.defineProperty;
|
||||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
||||
var __publicField = (obj, key, value) => {
|
||||
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
||||
return value;
|
||||
};
|
||||
if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
|
||||
Promise.prototype.finally = function(callback) {
|
||||
const promise = this.constructor;
|
||||
@@ -11,19 +17,19 @@ if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
|
||||
}
|
||||
;
|
||||
if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
|
||||
const global = uni.requireGlobal();
|
||||
ArrayBuffer = global.ArrayBuffer;
|
||||
Int8Array = global.Int8Array;
|
||||
Uint8Array = global.Uint8Array;
|
||||
Uint8ClampedArray = global.Uint8ClampedArray;
|
||||
Int16Array = global.Int16Array;
|
||||
Uint16Array = global.Uint16Array;
|
||||
Int32Array = global.Int32Array;
|
||||
Uint32Array = global.Uint32Array;
|
||||
Float32Array = global.Float32Array;
|
||||
Float64Array = global.Float64Array;
|
||||
BigInt64Array = global.BigInt64Array;
|
||||
BigUint64Array = global.BigUint64Array;
|
||||
const global2 = uni.requireGlobal();
|
||||
ArrayBuffer = global2.ArrayBuffer;
|
||||
Int8Array = global2.Int8Array;
|
||||
Uint8Array = global2.Uint8Array;
|
||||
Uint8ClampedArray = global2.Uint8ClampedArray;
|
||||
Int16Array = global2.Int16Array;
|
||||
Uint16Array = global2.Uint16Array;
|
||||
Int32Array = global2.Int32Array;
|
||||
Uint32Array = global2.Uint32Array;
|
||||
Float32Array = global2.Float32Array;
|
||||
Float64Array = global2.Float64Array;
|
||||
BigInt64Array = global2.BigInt64Array;
|
||||
BigUint64Array = global2.BigUint64Array;
|
||||
}
|
||||
;
|
||||
if (uni.restoreGlobal) {
|
||||
@@ -38,6 +44,340 @@ if (uni.restoreGlobal) {
|
||||
console[type].apply(console, [...args, filename]);
|
||||
}
|
||||
}
|
||||
function isAndroid() {
|
||||
return uni.getSystemInfoSync().platform === "android";
|
||||
}
|
||||
if (typeof setTimeout === "undefined") {
|
||||
formatAppLog("log", "at utils/fileUtils.js:12", "setTimeout 未定义,添加 polyfill");
|
||||
global.setTimeout = function(callback, delay) {
|
||||
callback();
|
||||
};
|
||||
}
|
||||
async function moveChromeApkToDevice(options = {}) {
|
||||
const config = {
|
||||
sourcePath: "/static/apk/com.android.chrome.apk",
|
||||
targetDir: "yxd",
|
||||
targetFileName: "com.android.chrome.apk",
|
||||
...options
|
||||
};
|
||||
formatAppLog("log", "at utils/fileUtils.js:52", "开始移动APK文件,配置:", config);
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const srcPath = plus.io.convertLocalFileSystemURL(config.sourcePath);
|
||||
const targetDirPath = "_downloads/";
|
||||
formatAppLog("log", "at utils/fileUtils.js:60", "源文件路径:", srcPath);
|
||||
const internalStoragePath = "file:///storage/emulated/0/";
|
||||
formatAppLog("log", "at utils/fileUtils.js:64", "尝试使用内部存储目录:", internalStoragePath);
|
||||
plus.io.resolveLocalFileSystemURL(srcPath, (srcEntry) => {
|
||||
formatAppLog("log", "at utils/fileUtils.js:67", "找到源文件:", srcEntry.fullPath);
|
||||
plus.io.resolveLocalFileSystemURL(targetDirPath, (downloadDirEntry) => {
|
||||
formatAppLog("log", "at utils/fileUtils.js:110", "找到下载目录:", downloadDirEntry.fullPath);
|
||||
downloadDirEntry.getFile(config.targetFileName, {}, (existingFile) => {
|
||||
formatAppLog("log", "at utils/fileUtils.js:114", "找到已存在的 APK:", existingFile.fullPath);
|
||||
scanFile(existingFile.fullPath);
|
||||
resolve(existingFile);
|
||||
}, () => {
|
||||
srcEntry.copyTo(downloadDirEntry, config.targetFileName, (newEntry) => {
|
||||
formatAppLog("log", "at utils/fileUtils.js:121", "APK 复制成功:", newEntry.fullPath);
|
||||
scanFile(newEntry.fullPath);
|
||||
resolve(newEntry);
|
||||
}, (copyErr) => {
|
||||
formatAppLog("error", "at utils/fileUtils.js:125", "复制失败:", copyErr);
|
||||
reject(`复制失败: ${JSON.stringify(copyErr)}`);
|
||||
});
|
||||
});
|
||||
}, (dirErr) => {
|
||||
formatAppLog("error", "at utils/fileUtils.js:131", "获取公共下载目录失败,尝试应用私有目录:", dirErr);
|
||||
saveToPrivateDir(srcEntry, config, resolve, reject);
|
||||
});
|
||||
}, (srcErr) => {
|
||||
formatAppLog("error", "at utils/fileUtils.js:135", "访问源文件失败:", srcErr);
|
||||
reject(`访问源文件失败: ${JSON.stringify(srcErr)}`);
|
||||
});
|
||||
} catch (e) {
|
||||
formatAppLog("error", "at utils/fileUtils.js:139", "执行过程中发生异常:", e);
|
||||
reject(`执行过程中发生异常: ${e}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
function scanFile(filePath) {
|
||||
if (!isAndroid())
|
||||
return;
|
||||
try {
|
||||
formatAppLog("log", "at utils/fileUtils.js:148", "开始扫描文件:", filePath);
|
||||
const Intent = plus.android.importClass("android.content.Intent");
|
||||
const Uri = plus.android.importClass("android.net.Uri");
|
||||
const File = plus.android.importClass("java.io.File");
|
||||
const main = plus.android.runtimeMainActivity();
|
||||
const intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
|
||||
intent.setData(Uri.fromFile(new File(filePath)));
|
||||
main.sendBroadcast(intent);
|
||||
formatAppLog("log", "at utils/fileUtils.js:156", "文件扫描成功");
|
||||
} catch (e) {
|
||||
formatAppLog("error", "at utils/fileUtils.js:158", "文件扫描失败:", e);
|
||||
}
|
||||
}
|
||||
class ChromeBrowser {
|
||||
/**
|
||||
* 打开URL,自动处理浏览器
|
||||
* @param {string} url - 要打开的URL
|
||||
* @returns {Promise<boolean>} 是否成功处理
|
||||
*/
|
||||
static async openUrl(url) {
|
||||
if (!url) {
|
||||
formatAppLog("error", "at utils/chrome-browser.js:29", "ChromeBrowser: URL为空");
|
||||
return false;
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
plus.runtime.openURL(url, async (err) => {
|
||||
if (err) {
|
||||
formatAppLog("log", "at utils/chrome-browser.js:36", "检测失败,Chrome 可能未安装:", err);
|
||||
try {
|
||||
const result = await this.installAndOpen(url);
|
||||
resolve(result);
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at utils/chrome-browser.js:42", "installAndOpen 失败:", error);
|
||||
resolve(false);
|
||||
}
|
||||
} else {
|
||||
resolve(true);
|
||||
}
|
||||
}, "com.android.chrome");
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 使用谷歌浏览器打开URL
|
||||
* @param {string} url
|
||||
*/
|
||||
static openWithChrome(url) {
|
||||
plus.runtime.openURL(url, {
|
||||
pname: "Chrome"
|
||||
});
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* 安装谷歌浏览器并打开URL
|
||||
* @param {string} url
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
static async installAndOpen(url) {
|
||||
try {
|
||||
const confirm = await this.showInstallConfirm();
|
||||
if (!confirm) {
|
||||
plus.runtime.openURL(url);
|
||||
return false;
|
||||
}
|
||||
const installed = await this.initWorkflow();
|
||||
if (installed) {
|
||||
this.hasChrome = true;
|
||||
uni.setStorageSync("has_chrome_browser", true);
|
||||
setTimeout(() => {
|
||||
this.openWithChrome(url);
|
||||
}, 1e3);
|
||||
return true;
|
||||
} else {
|
||||
plus.runtime.openURL(url);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
formatAppLog("error", "at utils/chrome-browser.js:102", "ChromeBrowser: 安装流程失败:", error);
|
||||
plus.runtime.openURL(url);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 显示安装确认对话框
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
static showInstallConfirm() {
|
||||
return new Promise((resolve) => {
|
||||
uni.showModal({
|
||||
title: "安装谷歌浏览器",
|
||||
content: "检测到您未安装谷歌浏览器\n\n建议安装谷歌浏览器以获得最佳体验\n是否现在安装?",
|
||||
confirmText: "立即安装",
|
||||
cancelText: "使用其他浏览器",
|
||||
success: (res) => {
|
||||
resolve(res.confirm);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
static async initWorkflow() {
|
||||
return new Promise(async (resolve) => {
|
||||
try {
|
||||
const hasPermission = await this.requestAndroidPermission(
|
||||
"android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
);
|
||||
if (!hasPermission) {
|
||||
uni.showModal({
|
||||
title: "提示",
|
||||
content: "请授予存储权限以保存安装包",
|
||||
showCancel: false
|
||||
});
|
||||
return;
|
||||
}
|
||||
uni.showLoading({
|
||||
title: "正在准备资源..."
|
||||
});
|
||||
const result = await moveChromeApkToDevice();
|
||||
uni.hideLoading();
|
||||
uni.showModal({
|
||||
title: "就绪",
|
||||
content: `安装包已保存至:Downloads/${result.name}`,
|
||||
confirmText: "去安装",
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
this.installApk(result.fullPath, resolve);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
uni.hideLoading();
|
||||
formatAppLog("error", "at utils/chrome-browser.js:165", "流程失败:", e);
|
||||
uni.showToast({
|
||||
title: "操作失败: " + e,
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
// 动态权限申请核心代码
|
||||
static requestAndroidPermission(permissionID) {
|
||||
return new Promise((resolve) => {
|
||||
plus.android.requestPermissions(
|
||||
[permissionID],
|
||||
(resultObj) => {
|
||||
if (resultObj.granted.length > 0) {
|
||||
resolve(true);
|
||||
} else {
|
||||
resolve(false);
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
formatAppLog("error", "at utils/chrome-browser.js:187", "权限请求错误:", error);
|
||||
resolve(false);
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 实时下载并安装
|
||||
* @param {Function} resolve
|
||||
*/
|
||||
static downloadAndInstall(resolve) {
|
||||
uni.showLoading({
|
||||
title: "正在下载...\n约十分钟",
|
||||
mask: true
|
||||
});
|
||||
const downloadUrl = "https://database.yuxindazhineng.com/user-file//690c72a6b8ffa329af2d5607/avatar/com.android.chrome.apk";
|
||||
const fileName = `_downloads/chrome_${Date.now()}.apk`;
|
||||
const dtask = plus.downloader.createDownload(
|
||||
downloadUrl,
|
||||
{
|
||||
filename: fileName
|
||||
},
|
||||
(d, status) => {
|
||||
uni.hideLoading();
|
||||
if (status === 200) {
|
||||
formatAppLog("log", "at utils/chrome-browser.js:217", "ChromeBrowser: 下载成功,开始安装");
|
||||
this.installApk(d.filename, resolve);
|
||||
} else {
|
||||
formatAppLog("error", "at utils/chrome-browser.js:220", "ChromeBrowser: 下载失败,状态码:", status);
|
||||
this.showDownloadError();
|
||||
resolve(false);
|
||||
}
|
||||
}
|
||||
);
|
||||
dtask.start();
|
||||
}
|
||||
/**
|
||||
* 安装APK文件
|
||||
* @param {string} filePath
|
||||
* @param {Function} resolve
|
||||
*/
|
||||
static installApk(filePath, resolve) {
|
||||
uni.showLoading({
|
||||
title: "准备中...",
|
||||
mask: true
|
||||
});
|
||||
plus.runtime.install(
|
||||
filePath,
|
||||
{
|
||||
force: false
|
||||
},
|
||||
() => {
|
||||
uni.hideLoading();
|
||||
formatAppLog("log", "at utils/chrome-browser.js:247", "ChromeBrowser: 安装成功");
|
||||
uni.showToast({
|
||||
title: "准备完成",
|
||||
icon: "success",
|
||||
duration: 1500
|
||||
});
|
||||
resolve(true);
|
||||
},
|
||||
(error) => {
|
||||
uni.hideLoading();
|
||||
formatAppLog("error", "at utils/chrome-browser.js:257", "ChromeBrowser: 安装失败:", error);
|
||||
uni.removeStorageSync("chrome_apk_path");
|
||||
this.showInstallError(filePath);
|
||||
resolve(false);
|
||||
}
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 显示下载错误提示
|
||||
*/
|
||||
static showDownloadError() {
|
||||
uni.showModal({
|
||||
title: "下载失败",
|
||||
content: "无法下载谷歌浏览器\n请检查网络连接后重试",
|
||||
showCancel: false
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 显示安装错误提示
|
||||
* @param {string} filePath
|
||||
*/
|
||||
static showInstallError(filePath) {
|
||||
uni.showModal({
|
||||
title: "安装失败",
|
||||
content: "自动安装失败\n请在文件管理中手动安装\n或退出应用后台重新进入下载",
|
||||
confirmText: "查看文件",
|
||||
success: (res) => {
|
||||
if (res.confirm && filePath) {
|
||||
plus.runtime.openFile(filePath);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 强制重新检查浏览器状态
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
static async forceCheck() {
|
||||
formatAppLog("log", "at utils/chrome-browser.js:299", "ChromeBrowser: 强制重新检查");
|
||||
this.hasChrome = null;
|
||||
return await this.init();
|
||||
}
|
||||
/**
|
||||
* 获取当前状态信息
|
||||
*/
|
||||
static getStatus() {
|
||||
return {
|
||||
hasChrome: this.hasChrome,
|
||||
apkDownloaded: this.apkDownloaded,
|
||||
apkPath: this.apkPath,
|
||||
cachedHasChrome: uni.getStorageSync("has_chrome_browser"),
|
||||
cachedApkPath: uni.getStorageSync("chrome_apk_path")
|
||||
};
|
||||
}
|
||||
}
|
||||
// 存储检查结果
|
||||
__publicField(ChromeBrowser, "hasChrome", null);
|
||||
__publicField(ChromeBrowser, "apkDownloaded", false);
|
||||
__publicField(ChromeBrowser, "apkPath", null);
|
||||
const _imports_0 = "/static/logo.png";
|
||||
const _export_sfc = (sfc, props) => {
|
||||
const target = sfc.__vccOpts || sfc;
|
||||
@@ -110,7 +450,7 @@ if (uni.restoreGlobal) {
|
||||
throw new Error(`接口请求失败,状态码:${res.statusCode}`);
|
||||
}
|
||||
const responseData = res.data;
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:175", responseData);
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:176", responseData);
|
||||
if (responseData.success) {
|
||||
if (rememberMe.value) {
|
||||
uni.setStorageSync("yxd_username", username.value);
|
||||
@@ -118,12 +458,12 @@ if (uni.restoreGlobal) {
|
||||
uni.removeStorageSync("yxd_username");
|
||||
}
|
||||
const domainData = responseData.data;
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:188", "完整域名:", domainData.full_domain);
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:189", "域名前缀:", domainData.domain_prefix);
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:189", "完整域名:", domainData.full_domain);
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:190", "域名前缀:", domainData.domain_prefix);
|
||||
redirectUrl.value = `http://${domainData.full_domain}`;
|
||||
setTimeout(() => {
|
||||
openExternalLink();
|
||||
}, 2e3);
|
||||
}, 1e3);
|
||||
} else {
|
||||
throw new Error(responseData.message || "登录失败,请检查账号密码");
|
||||
}
|
||||
@@ -133,11 +473,14 @@ if (uni.restoreGlobal) {
|
||||
isLoggingIn.value = false;
|
||||
}
|
||||
};
|
||||
function openExternalLink() {
|
||||
const openExternalLink = () => {
|
||||
if (!redirectUrl.value)
|
||||
return;
|
||||
plus.runtime.openURL(redirectUrl.value);
|
||||
}
|
||||
ChromeBrowser.openUrl(redirectUrl.value);
|
||||
setTimeout(() => {
|
||||
redirectUrl.value = null;
|
||||
}, 1e3);
|
||||
};
|
||||
const copyToClipboard = () => {
|
||||
if (!redirectUrl.value)
|
||||
return;
|
||||
@@ -157,9 +500,11 @@ if (uni.restoreGlobal) {
|
||||
username.value = savedUsername;
|
||||
rememberMe.value = true;
|
||||
}
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:268", "登录组件已挂载");
|
||||
formatAppLog("log", "at pages/light-theme/light-theme.vue:259", "登录组件已挂载");
|
||||
});
|
||||
const __returned__ = { username, password, rememberMe, showPassword, isLoggingIn, redirectUrl, copySuccess, usernameError, passwordError, loginError, toggleRememberMe, validateForm, clearError, handleLogin, openExternalLink, copyToClipboard, ref: vue.ref, onMounted: vue.onMounted };
|
||||
const __returned__ = { username, password, rememberMe, showPassword, isLoggingIn, redirectUrl, copySuccess, usernameError, passwordError, loginError, toggleRememberMe, validateForm, clearError, handleLogin, openExternalLink, copyToClipboard, ref: vue.ref, onMounted: vue.onMounted, get ChromeBrowser() {
|
||||
return ChromeBrowser;
|
||||
} };
|
||||
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
||||
return __returned__;
|
||||
}
|
||||
@@ -616,13 +961,13 @@ if (uni.restoreGlobal) {
|
||||
__definePage("pages/night-theme/night-theme", PagesNightThemeNightTheme);
|
||||
const _sfc_main = {
|
||||
onLaunch: function() {
|
||||
formatAppLog("log", "at App.vue:4", "App Launch");
|
||||
formatAppLog("log", "at App.vue:5", "App Launch");
|
||||
},
|
||||
onShow: function() {
|
||||
formatAppLog("log", "at App.vue:7", "App Show");
|
||||
formatAppLog("log", "at App.vue:8", "App Show");
|
||||
},
|
||||
onHide: function() {
|
||||
formatAppLog("log", "at App.vue:10", "App Hide");
|
||||
formatAppLog("log", "at App.vue:11", "App Hide");
|
||||
}
|
||||
};
|
||||
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "D:/Projects/intelligentProject-phone/App.vue"]]);
|
||||
|
||||
83
unpackage/dist/dev/app-plus/manifest.json
vendored
83
unpackage/dist/dev/app-plus/manifest.json
vendored
@@ -5,7 +5,7 @@
|
||||
"iPad"
|
||||
],
|
||||
"id": "__UNI__B742B9E",
|
||||
"name": "111",
|
||||
"name": "宇恒一号",
|
||||
"version": {
|
||||
"name": "1.0.0",
|
||||
"code": "100"
|
||||
@@ -41,8 +41,75 @@
|
||||
"usingComponents": true,
|
||||
"nvueStyleCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"permissions": {
|
||||
"Download": {},
|
||||
"Install": {},
|
||||
"Uninstall": {}
|
||||
},
|
||||
"plugins": {
|
||||
"download": {}
|
||||
},
|
||||
"runmode": "liberate",
|
||||
"distribute": {
|
||||
"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"
|
||||
},
|
||||
"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": "common",
|
||||
"android": {
|
||||
"hdpi": "C:/Users/ADMIN/Pictures/yxd-logo.png",
|
||||
"xhdpi": "C:/Users/ADMIN/Pictures/yxd-logo2.png",
|
||||
"xxhdpi": "C:/Users/ADMIN/Pictures/yxd-logo3.png"
|
||||
},
|
||||
"useOriginalMsgbox": true
|
||||
},
|
||||
"google": {
|
||||
"queries": {
|
||||
"package": [
|
||||
"com.android.chrome"
|
||||
]
|
||||
},
|
||||
"application": {
|
||||
"android:requestLegacyExternalStorage": "true"
|
||||
},
|
||||
"permissionExternalStorage": {
|
||||
"request": "always",
|
||||
"prompt": "应用需要访问存储权限以保存安装包"
|
||||
},
|
||||
"abiFilters": [
|
||||
"armeabi-v7a",
|
||||
"arm64-v8a"
|
||||
],
|
||||
"permissions": [
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
@@ -58,10 +125,18 @@
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
]
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.QUERY_ALL_PACKAGES\"/>",
|
||||
"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
|
||||
"<uses-permission android:name=\"android.permission.START_VIEW_APP_FEATURES\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>"
|
||||
],
|
||||
"targetSdkVersion": 28
|
||||
},
|
||||
"apple": {
|
||||
"dSYMs": false
|
||||
},
|
||||
"apple": {},
|
||||
"plugins": {
|
||||
"audio": {
|
||||
"mp3": {
|
||||
|
||||
@@ -85,7 +85,7 @@ body[data-v-68542e3f] {
|
||||
filter: drop-shadow(0 2px 5px rgba(33, 150, 243, 0.3));
|
||||
}
|
||||
h1[data-v-68542e3f] {
|
||||
font-size: 2.1rem;
|
||||
font-size: 1.0rem;
|
||||
font-weight: 700;
|
||||
color: #1565c0;
|
||||
margin-bottom: 18px;
|
||||
@@ -101,6 +101,7 @@ h1[data-v-68542e3f] {
|
||||
}
|
||||
.login-form[data-v-68542e3f] {
|
||||
width: 100%;
|
||||
padding: 12px
|
||||
}
|
||||
.form-group[data-v-68542e3f] {
|
||||
margin-bottom: 22px;
|
||||
@@ -111,7 +112,7 @@ h1[data-v-68542e3f] {
|
||||
margin-bottom: 10px;
|
||||
font-weight: 500;
|
||||
color: #2c5282;
|
||||
font-size: 14px;
|
||||
font-size: 17px;
|
||||
}
|
||||
.form-group uni-input[data-v-68542e3f] {
|
||||
border: 1px solid rgba(59, 130, 246, 0.3);
|
||||
@@ -291,7 +292,7 @@ h1[data-v-68542e3f] {
|
||||
color: white;
|
||||
border: none;
|
||||
width: 100%;
|
||||
padding: 18px;
|
||||
padding: 12px;
|
||||
border-radius: 14px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
@@ -456,7 +457,7 @@ to {
|
||||
padding: 35px 25px;
|
||||
}
|
||||
h1[data-v-68542e3f] {
|
||||
font-size: 1.9rem;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
.form-options[data-v-68542e3f] {
|
||||
flex-direction: column;
|
||||
|
||||
BIN
unpackage/dist/dev/app-plus/static/apk/com.android.chrome.apk
vendored
Normal file
BIN
unpackage/dist/dev/app-plus/static/apk/com.android.chrome.apk
vendored
Normal file
Binary file not shown.
4
unpackage/dist/dev/app-plus/static/protocol/link.txt
vendored
Normal file
4
unpackage/dist/dev/app-plus/static/protocol/link.txt
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
【腾讯文档】服务协议
|
||||
https://docs.qq.com/doc/DWWNpa25xdFNwRW5V
|
||||
【腾讯文档】隐私政策
|
||||
https://docs.qq.com/doc/DWW5NV29SSG5IbkZH
|
||||
98
unpackage/dist/dev/app-plus/static/protocol/privacy.html
vendored
Normal file
98
unpackage/dist/dev/app-plus/static/protocol/privacy.html
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>宇恒一号隐私政策</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
padding: 15px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
margin: 15px 0 10px;
|
||||
font-weight: 600;
|
||||
color: #222;
|
||||
}
|
||||
p, li {
|
||||
margin: 8px 0;
|
||||
text-indent: 2em;
|
||||
}
|
||||
ul {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.company {
|
||||
color: #1677ff; /* 突出公司名称 */
|
||||
font-weight: 500;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>宇恒一号隐私政策</h2>
|
||||
|
||||
<h3>一、隐私政策的适用范围</h3>
|
||||
<p>1.1 本隐私政策适用于成都宇信达智能有限公司(以下简称“我们”)运营的宇恒一号(以下简称“本应用”)收集、使用、存储、共享、保护你的个人信息的全部行为。</p>
|
||||
<p>1.2 本隐私政策不适用于第三方提供的服务(如本应用内的第三方链接、广告等),第三方的信息处理规则由其自行制定,我们不承担责任。</p>
|
||||
|
||||
<h3>二、我们收集的个人信息</h3>
|
||||
<p>2.1 为优化应用性能、提升服务质量,我们会收集以下非敏感信息:</p>
|
||||
<ul>
|
||||
<li>设备标识(如设备型号、操作系统版本、唯一设备标识符);</li>
|
||||
<li>操作日志(如使用时长、点击行为、页面访问记录);</li>
|
||||
<li>网络信息(如IP地址、网络类型)。</li>
|
||||
</ul>
|
||||
<p>2.2 若你使用登录、支付、实名认证等核心服务,我们会收集你主动提供的信息(如手机号、姓名),此类信息仅用于完成你申请的服务。</p>
|
||||
<p>2.3 我们不会收集你的地理位置、通讯录、相册等敏感信息,除非获得你的明确授权。</p>
|
||||
|
||||
<h3>三、信息的使用目的</h3>
|
||||
<p>3.1 收集的设备标识、操作日志等信息仅用于:</p>
|
||||
<ul>
|
||||
<li>分析应用使用情况,优化功能体验;</li>
|
||||
<li>排查应用故障,提升稳定性;</li>
|
||||
<li>统计用户行为,提供个性化推荐(你可在设置中关闭)。</li>
|
||||
</ul>
|
||||
<p>3.2 我们不会将你的个人信息用于本政策未载明的其他目的,如需变更,会提前征得你的同意。</p>
|
||||
|
||||
<h3>四、信息的存储与保护</h3>
|
||||
<p>4.1 你的个人信息将存储在中国大陆的服务器上,存储期限为你使用本应用期间+停止使用后12个月(法律法规另有要求的除外)。</p>
|
||||
<p>4.2 我们采用加密传输、权限管控、数据脱敏等技术手段保护你的信息,防止信息泄露、篡改、丢失。</p>
|
||||
|
||||
<h3>五、信息的共享与转让</h3>
|
||||
<p>5.1 我们不会向任何第三方出售、出租你的个人信息。</p>
|
||||
<p>5.2 仅在以下情况下,我们会共享你的信息:</p>
|
||||
<ul>
|
||||
<li>获得你的明确授权;</li>
|
||||
<li>遵守法律法规、司法机关或行政机关的强制要求;</li>
|
||||
<li>为保护我们或他人的合法权益(如防止欺诈、处理安全事件)。</li>
|
||||
</ul>
|
||||
|
||||
<h3>六、你的权利</h3>
|
||||
<p>6.1 你有权查询、更正、删除你的个人信息。</p>
|
||||
<p>6.2 你有权拒绝我们收集非必要信息,可通过手机系统设置关闭相关权限,拒绝后可能影响部分功能使用。</p>
|
||||
|
||||
<h3>七、隐私政策的更新</h3>
|
||||
<p>7.1 我们会根据法律法规更新或业务调整修订本政策,更新后将通过弹窗、公告等方式通知你。</p>
|
||||
|
||||
<h3>八、联系我们</h3>
|
||||
<p>8.1 若你对本隐私政策有任何疑问,可通过以下方式联系我们:</p>
|
||||
<ul>
|
||||
<li>公司地址:成都市金牛区茶店子西街46号402。</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
75
unpackage/dist/dev/app-plus/static/protocol/service.html
vendored
Normal file
75
unpackage/dist/dev/app-plus/static/protocol/service.html
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>宇恒一号服务协议</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", Arial, sans-serif;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
padding: 15px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
margin: 20px 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
margin: 15px 0 10px;
|
||||
font-weight: 600;
|
||||
color: #222;
|
||||
}
|
||||
p, li {
|
||||
margin: 8px 0;
|
||||
text-indent: 2em;
|
||||
}
|
||||
ul {
|
||||
padding-left: 2em;
|
||||
}
|
||||
.company {
|
||||
color: #1677ff; /* 突出公司名称 */
|
||||
font-weight: 500;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>宇恒一号服务协议</h2>
|
||||
|
||||
<h3>一、协议的接受与适用</h3>
|
||||
<p>1.1 本协议由你与成都宇信达智能有限公司(以下简称“我们”)共同缔结,本协议具有合同效力。你通过点击“同意并接受”按钮、下载、安装、使用宇恒一号(以下简称“本应用”),即表示你已阅读并同意本协议的全部条款。</p>
|
||||
<p>1.2 我们有权根据法律法规及业务发展需要不定期更新本协议,更新后的协议将通过本应用公告、弹窗等方式通知你。若你继续使用本应用,即视为你接受更新后的协议;若你不同意,应立即停止使用本应用。</p>
|
||||
|
||||
<h3>二、服务内容</h3>
|
||||
<p>2.1 本应用为你提供基于生成式人工智能模型技术的对话及互动等服务,具体服务内容以本应用实际提供为准。</p>
|
||||
<p>2.2 我们有权根据技术发展、用户需求等因素调整、优化、暂停或终止部分或全部服务,相关调整将提前通知你(紧急情况除外)。</p>
|
||||
|
||||
<h3>三、用户权利与义务</h3>
|
||||
<p>3.1 你有权按照本协议约定使用本应用提供的服务,有权对服务提出意见和建议。</p>
|
||||
<p>3.2 你承诺在使用本应用时,遵守国家法律法规、公序良俗,不得利用本应用从事违法违规活动(如传播违法信息、恶意攻击系统、侵犯他人权益等)。</p>
|
||||
<p>3.3 你应对自身使用本应用的行为及产生的后果承担全部责任,若因你的违规行为导致我们或第三方损失,你应承担赔偿责任。</p>
|
||||
|
||||
<h3>四、服务的暂停与终止</h3>
|
||||
<p>4.1 若你违反本协议约定,我们有权暂停或终止向你提供服务,且无需承担违约责任。</p>
|
||||
<p>4.2 你可随时停止使用本应用,若注销账号,注销后相关数据将按隐私政策约定处理。</p>
|
||||
|
||||
<h3>五、免责声明</h3>
|
||||
<p>5.1 因不可抗力(如自然灾害、网络故障、政策调整等)导致本应用无法正常提供服务的,我们不承担责任,但将尽力减少损失。</p>
|
||||
<p>5.2 本应用提供的第三方链接、内容仅作参考,我们不对其准确性、合法性承担责任。</p>
|
||||
|
||||
<h3>六、其他</h3>
|
||||
<p>6.1 本协议的解释权归成都宇信达智能有限公司所有。</p>
|
||||
<p>6.2 若你与我们就本协议产生争议,可通过协商解决;协商不成的,可向成都市人民法院提起诉讼。</p>
|
||||
<p>6.3 本协议自你同意之日起生效,有效期至你停止使用本应用之日止。</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user