diff --git a/aiApp/.gitignore b/aiApp/.gitignore
new file mode 100644
index 00000000..efe77355
--- /dev/null
+++ b/aiApp/.gitignore
@@ -0,0 +1 @@
+unpackage
\ No newline at end of file
diff --git a/aiApp/App.vue b/aiApp/App.vue
new file mode 100644
index 00000000..f3393a5b
--- /dev/null
+++ b/aiApp/App.vue
@@ -0,0 +1,7 @@
+
+
+
diff --git a/aiApp/index.html b/aiApp/index.html
new file mode 100644
index 00000000..b5d330d1
--- /dev/null
+++ b/aiApp/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aiApp/main.js b/aiApp/main.js
new file mode 100644
index 00000000..c1caf360
--- /dev/null
+++ b/aiApp/main.js
@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/aiApp/manifest.json b/aiApp/manifest.json
new file mode 100644
index 00000000..b8ab3182
--- /dev/null
+++ b/aiApp/manifest.json
@@ -0,0 +1,106 @@
+{
+ "name" : "存客宝",
+ "appid" : "__UNI__2B34F1A",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "dSYMs" : false
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {},
+ "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"
+ }
+ }
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "3"
+}
diff --git a/aiApp/pages.json b/aiApp/pages.json
new file mode 100644
index 00000000..570407ef
--- /dev/null
+++ b/aiApp/pages.json
@@ -0,0 +1,24 @@
+{
+ "pages": [
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/index/test",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "uniIdRouter": {}
+}
diff --git a/aiApp/pages/index/index.vue b/aiApp/pages/index/index.vue
new file mode 100644
index 00000000..50698c36
--- /dev/null
+++ b/aiApp/pages/index/index.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/aiApp/pages/index/test.vue b/aiApp/pages/index/test.vue
new file mode 100644
index 00000000..538d3a3c
--- /dev/null
+++ b/aiApp/pages/index/test.vue
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+
+
+
+ 消息控制:
+
+
+
+
+
+
+
+
+ 接收到的消息:
+
+
+ {{msg}}
+
+
+
+
+
+
+
+
+
+
diff --git a/aiApp/static/logo.png b/aiApp/static/logo.png
new file mode 100644
index 00000000..b5771e20
Binary files /dev/null and b/aiApp/static/logo.png differ
diff --git a/aiApp/test.html b/aiApp/test.html
new file mode 100644
index 00000000..9da1b56f
--- /dev/null
+++ b/aiApp/test.html
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ My PWA with Custom Icons
+
+
+
+
+
+
Custom PWA Icons
+
Your app will now have proper icons when added to home screen
+
+
+

+
+
+
Make sure to use all required icon sizes for best results across devices
+
+
+
+
+
+
\ No newline at end of file
diff --git a/aiApp/uni.promisify.adaptor.js b/aiApp/uni.promisify.adaptor.js
new file mode 100644
index 00000000..5fec4f33
--- /dev/null
+++ b/aiApp/uni.promisify.adaptor.js
@@ -0,0 +1,13 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => {
+ if (!res) return resolve(res)
+ return res[0] ? reject(res[0]) : resolve(res[1])
+ });
+ });
+ },
+});
\ No newline at end of file
diff --git a/aiApp/uni.scss b/aiApp/uni.scss
new file mode 100644
index 00000000..b9249e9d
--- /dev/null
+++ b/aiApp/uni.scss
@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
diff --git a/aiApp/utils/common.js b/aiApp/utils/common.js
new file mode 100644
index 00000000..f50cc5c5
--- /dev/null
+++ b/aiApp/utils/common.js
@@ -0,0 +1,36 @@
+/**
+ * 异步获取设备顶部安全区域高度
+ * @returns {Promise} 顶部安全区域高度
+ */
+export function getTopSafeAreaHeightAsync() {
+ return new Promise((resolve, reject) => {
+ uni.getSystemInfo({
+ success: (res) => {
+ try {
+ const safeAreaInsets = res.safeAreaInsets;
+
+ if (safeAreaInsets && safeAreaInsets.top !== undefined) {
+ resolve(safeAreaInsets.top);
+ return;
+ }
+
+ if (res.safeArea) {
+ const safeArea = res.safeArea;
+ const statusBarHeight = res.statusBarHeight || 0;
+ const topSafeHeight = safeArea.top - statusBarHeight;
+ resolve(Math.max(0, topSafeHeight));
+ return;
+ }
+
+ resolve(`${res.statusBarHeight*2 || 0}px`);
+
+ } catch (error) {
+ reject(error);
+ }
+ },
+ fail: (error) => {
+ reject(error);
+ }
+ });
+ });
+ }
\ No newline at end of file
diff --git a/aiApp/vite.config.js b/aiApp/vite.config.js
new file mode 100644
index 00000000..3910715c
--- /dev/null
+++ b/aiApp/vite.config.js
@@ -0,0 +1,29 @@
+import { defineConfig } from 'vite'
+import uni from '@dcloudio/vite-plugin-uni'
+import { resolve } from 'path'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [uni()],
+ resolve: {
+ alias: {
+ // 根目录别名
+ '@': resolve(__dirname, '/'),
+ '@root': resolve(__dirname, '/'),
+
+ // 页面和组件别名
+ '@pages': resolve(__dirname, 'pages'),
+ '@components': resolve(__dirname, 'components'),
+
+ // 工具和配置别名
+ '@utils': resolve(__dirname, 'utils'),
+ }
+ },
+ css: {
+ preprocessorOptions: {
+ scss: {
+ additionalData: `@import "@/uni.scss";`
+ }
+ }
+ }
+})
\ No newline at end of file