From 0e79aca04e346633d1bebd7ba3cd72bce76cc232 Mon Sep 17 00:00:00 2001
From: Ghost <106998207@qq.com>
Date: Wed, 7 Jan 2026 11:00:09 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 5 +
.hbuilderx/launch.json | 16 +
App.vue | 34 +
README.en.md | 36 -
README.md | 39 -
config.js | 7 +
index.html | 20 +
main.js | 42 +
manifest.json | 63 +
mixins/auth-mixin.js | 69 +
package-lock.json | 27 +
package.json | 5 +
pages.json | 181 +++
pages/about/about.vue | 119 ++
pages/channel/add.vue | 801 +++++++++++
pages/channel/list.vue | 319 +++++
pages/channel/login.vue | 336 +++++
pages/channel/project-select.vue | 177 +++
pages/channel/statistics.vue | 2183 ++++++++++++++++++++++++++++++
pages/form/input.vue | 421 ++++++
pages/form/input2.vue | 424 ++++++
pages/form/list.vue | 113 ++
pages/home/home.vue | 22 +
pages/index/index.vue | 912 +++++++++++++
pages/index/site.vue | 167 +++
pages/login/login-page.scss | 126 ++
pages/login/login.vue | 197 +++
pages/poster/index.vue | 134 ++
pages/poster/index2.vue | 193 +++
pages/ucenter/ucenter.vue | 102 ++
project.config.json | 28 +
project.private.config.json | 7 +
static/c1.png | Bin 0 -> 401 bytes
static/c2.png | Bin 0 -> 470 bytes
static/c3.png | Bin 0 -> 511 bytes
static/c4.png | Bin 0 -> 476 bytes
static/c5.png | Bin 0 -> 472 bytes
static/c6.png | Bin 0 -> 545 bytes
static/c7.png | Bin 0 -> 365 bytes
static/c8.png | Bin 0 -> 587 bytes
static/c9.png | Bin 0 -> 565 bytes
static/customicons.css | 20 +
static/customicons.ttf | Bin 0 -> 2416 bytes
static/headers.png | Bin 0 -> 20399 bytes
static/logo.png | Bin 0 -> 4023 bytes
static/tabbar/grid.png | Bin 0 -> 2695 bytes
static/tabbar/grid_active.png | Bin 0 -> 2556 bytes
static/tabbar/list.png | Bin 0 -> 2897 bytes
static/tabbar/list_active.png | Bin 0 -> 3024 bytes
static/tabbar/me.png | Bin 0 -> 3380 bytes
static/tabbar/me_active.png | Bin 0 -> 3461 bytes
static/uni.png | Bin 0 -> 4162 bytes
uni.scss | 4 +
utils/request.js | 50 +
54 files changed, 7324 insertions(+), 75 deletions(-)
create mode 100644 .gitignore
create mode 100644 .hbuilderx/launch.json
create mode 100644 App.vue
delete mode 100644 README.en.md
delete mode 100644 README.md
create mode 100644 config.js
create mode 100644 index.html
create mode 100644 main.js
create mode 100644 manifest.json
create mode 100644 mixins/auth-mixin.js
create mode 100644 package-lock.json
create mode 100644 package.json
create mode 100644 pages.json
create mode 100644 pages/about/about.vue
create mode 100644 pages/channel/add.vue
create mode 100644 pages/channel/list.vue
create mode 100644 pages/channel/login.vue
create mode 100644 pages/channel/project-select.vue
create mode 100644 pages/channel/statistics.vue
create mode 100644 pages/form/input.vue
create mode 100644 pages/form/input2.vue
create mode 100644 pages/form/list.vue
create mode 100644 pages/home/home.vue
create mode 100644 pages/index/index.vue
create mode 100644 pages/index/site.vue
create mode 100644 pages/login/login-page.scss
create mode 100644 pages/login/login.vue
create mode 100644 pages/poster/index.vue
create mode 100644 pages/poster/index2.vue
create mode 100644 pages/ucenter/ucenter.vue
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 static/c1.png
create mode 100644 static/c2.png
create mode 100644 static/c3.png
create mode 100644 static/c4.png
create mode 100644 static/c5.png
create mode 100644 static/c6.png
create mode 100644 static/c7.png
create mode 100644 static/c8.png
create mode 100644 static/c9.png
create mode 100644 static/customicons.css
create mode 100644 static/customicons.ttf
create mode 100644 static/headers.png
create mode 100644 static/logo.png
create mode 100644 static/tabbar/grid.png
create mode 100644 static/tabbar/grid_active.png
create mode 100644 static/tabbar/list.png
create mode 100644 static/tabbar/list_active.png
create mode 100644 static/tabbar/me.png
create mode 100644 static/tabbar/me_active.png
create mode 100644 static/uni.png
create mode 100644 uni.scss
create mode 100644 utils/request.js
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..08aeb98
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.cursorindexingignore
+.specstory/
+node_modules/
+uni_modules/
+unpackage/
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 0000000..81f13f4
--- /dev/null
+++ b/.hbuilderx/launch.json
@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+ // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+ "version": "0.0",
+ "configurations": [{
+ "default" :
+ {
+ "launchtype" : "local"
+ },
+ "mp-weixin" :
+ {
+ "launchtype" : "local"
+ },
+ "type" : "uniCloud"
+ }
+ ]
+}
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..b300a1d
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,34 @@
+
+
+
\ No newline at end of file
diff --git a/README.en.md b/README.en.md
deleted file mode 100644
index 5579db7..0000000
--- a/README.en.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# 存客宝小程序
-
-#### Description
-{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
-
-#### Software Architecture
-Software architecture description
-
-#### Installation
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### Instructions
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### Contribution
-
-1. Fork the repository
-2. Create Feat_xxx branch
-3. Commit your code
-4. Create Pull Request
-
-
-#### Gitee Feature
-
-1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
-2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
-3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
-4. The most valuable open source project [GVP](https://gitee.com/gvp)
-5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
-6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/README.md b/README.md
deleted file mode 100644
index 83753fa..0000000
--- a/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# 存客宝小程序
-
-#### 介绍
-{**以下是 Gitee 平台说明,您可以替换此简介**
-Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
-无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
-
-#### 软件架构
-软件架构说明
-
-
-#### 安装教程
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 使用说明
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 参与贡献
-
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
-
-
-#### 特技
-
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..8fd78ce
--- /dev/null
+++ b/config.js
@@ -0,0 +1,7 @@
+// config.js
+export default {
+ apiUrl: 'https://api.ckb.quwanzhi.com',
+ apiUrl2: 'https://ckbapi.quwanzhi.com',
+ //apiUrl2: 'http://www.yishi.com',
+ // 其他全局配置项
+}
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c3ff205
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..cf1c83a
--- /dev/null
+++ b/main.js
@@ -0,0 +1,42 @@
+// #ifndef VUE3
+import Vue from 'vue'
+import App from './App'
+import config from './config.js'
+
+
+import authMixin from './mixins/auth-mixin';
+Vue.mixin(authMixin);
+
+Vue.config.productionTip = false
+Vue.prototype.$config = config
+
+//兼容旧版
+Vue.prototype.$wxAppId = 'wx789850448e26c91d';
+Vue.prototype.$wxApi = 'https://api.quwanzhi.com';
+Vue.prototype.$settingData = [];
+Vue.prototype.$userInfo = {};
+
+
+import uView from "uview-ui";
+Vue.use(uView);
+
+App.mpType = 'app'
+
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import {
+ createSSRApp
+} from 'vue'
+import App from './App.vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..c97bf68
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,63 @@
+{
+ "name" : "存客宝",
+ "appid" : "__UNI__505D381",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ "app-plus" : {
+ /* 5+App特有相关 */
+ "usingComponents" : true,
+ "nvueCompiler" : "uni-app",
+ "nvueStyleCompiler" : "uni-app",
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "modules" : {},
+ /* 模块配置 */
+ "distribute" : {
+ /* 应用发布信息 */
+ "android" : {
+ /* android打包配置 */
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios" : {},
+ /* ios打包配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* SDK配置 */
+ "quickapp" : {},
+ /* 快应用特有相关 */
+ "mp-weixin" : {
+ /* 小程序特有相关 */
+ "appid" : "wx789850448e26c91d",
+ "setting" : {
+ "urlCheck" : false,
+ "minified" : true,
+ "postcss" : true,
+ "es6" : true
+ },
+ "usingComponents" : true
+ },
+ "vueVersion" : "2"
+}
diff --git a/mixins/auth-mixin.js b/mixins/auth-mixin.js
new file mode 100644
index 0000000..983759e
--- /dev/null
+++ b/mixins/auth-mixin.js
@@ -0,0 +1,69 @@
+export default {
+ methods: {
+ checkLogin() {
+ const pages = getCurrentPages();
+ const currentPage = pages[pages.length - 1];
+ let fullPath = '';
+ let queryString = '';
+
+ // #ifdef H5
+ fullPath = window.location.hash ? window.location.hash.substring(1) : window.location.pathname;
+ queryString = window.location.search;
+ // #endif
+
+ // #ifdef MP
+ fullPath = `/${currentPage.route}`; // 在小程序中使用route
+ // Combine existing options with the scene parameter if it exists
+ const options = {
+ ...currentPage.options
+ };
+
+ queryString = this.objectToQueryString(options);
+
+ if (this.$root.$mp.query.scene) {
+ queryString += "&" + decodeURIComponent(this.$root.$mp.query.scene)
+ }
+
+ // #endif
+
+ const redirectUrl = fullPath + "?" + queryString;
+
+
+ // 如果当前已经在登录页,则不进行跳转
+ if (
+ fullPath.includes('pages/login/login') ||
+ fullPath.includes('pages/index/index') ||
+ fullPath.includes('pages/index/site') ||
+ fullPath.includes('pages/poster/index') ||
+ fullPath.includes('pages/form/input')||
+ fullPath.includes('pages/login/privatememo')||
+ fullPath.includes('pages/login/usermemo') ||
+ fullPath.includes('pages/channel/add')||
+ fullPath.includes('pages/channel/login')||
+ fullPath.includes('pages/channel/statistics')
+ ) {
+ return;
+ }
+ // 未登录则跳转到登录页
+ else if (!this.isLoggedIn()) {
+ uni.redirectTo({
+ url: '/pages/login/login?redirect=' + encodeURIComponent(redirectUrl),
+ });
+ }
+ },
+
+ isLoggedIn() {
+ const token = uni.getStorageSync('token');
+ return !!token;
+ },
+
+ // 将对象转换为查询字符串
+ objectToQueryString(obj) {
+ return Object.keys(obj).map(key => `${key}=${encodeURIComponent(obj[key])}`).join('&');
+ },
+ },
+
+ onLoad() {
+ this.checkLogin();
+ },
+};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..659babf
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,27 @@
+{
+ "name": "ckb_mini",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "uview-ui": "^2.0.36"
+ }
+ },
+ "node_modules/uview-ui": {
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.36.tgz",
+ "integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA==",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ }
+ }
+ },
+ "dependencies": {
+ "uview-ui": {
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.36.tgz",
+ "integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..49fd105
--- /dev/null
+++ b/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "uview-ui": "^2.0.36"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..3ba4580
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,181 @@
+{
+ "pages": [
+ {
+ "path": "pages/index/site",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "enableShareAppMessage": true
+ }
+ },
+ {
+ "path": "pages/poster/index",
+ "style": {
+ "navigationBarTitleText": "",
+ "enableShareAppMessage": true
+ }
+ },
+ {
+ "path": "pages/poster/index2",
+ "style": {
+ "navigationBarTitleText": "",
+ "enableShareAppMessage": true
+ }
+ },
+ {
+ "path": "pages/about/about",
+ "style": {
+ "navigationBarTitleText": "",
+ "enableShareAppMessage": true
+ }
+ }, {
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/home/home",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/ucenter/ucenter",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/form/input",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/form/input2",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/form/list",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/channel/list",
+ "style": {
+ "navigationBarTitleText": "渠道管理",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/channel/add",
+ "style": {
+ "navigationBarTitleText": "新增渠道",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/channel/login",
+ "style": {
+ "navigationBarTitleText": "渠道登录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/channel/project-select",
+ "style": {
+ "navigationBarTitleText": "选择项目",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/channel/statistics",
+ "style": {
+ "navigationBarTitleText": "分销获客统计",
+ "enablePullDownRefresh": true
+ }
+ }
+ ],
+ // "tabBar": {
+ // "color": "#7A7E83",
+ // "selectedColor": "#007AFF",
+ // "borderStyle": "black",
+ // "backgroundColor": "#FFFFFF",
+ // "list": [{
+ // "pagePath": "pages/home/home",
+ // "iconPath": "static/tabbar/list.png",
+ // "selectedIconPath": "static/tabbar/list_active.png",
+ // "text": "主页"
+ // }, {
+ // "pagePath": "pages/ucenter/ucenter",
+ // "iconPath": "static/tabbar/me.png",
+ // "selectedIconPath": "static/tabbar/me_active.png",
+ // "text": "我的"
+ // }]
+ // },
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "uni-app",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8",
+ "app-plus": {
+ "background": "#efeff4"
+ }
+ },
+ "easycom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ },
+ "condition": { //模式配置,仅开发期间生效
+ "current": 1, //当前激活的模式(list 的索引项)
+ "list": [{
+ "name": "首页", //模式名称
+ "path": "pages/index/index", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "webview", //模式名称
+ "path": "pages/index/site", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "旧版海报页", //模式名称
+ "path": "pages/about/about", //启动页面,必选
+ "query": "taskId=491" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "新版海报页", //模式名称
+ "path": "pages/poster/index", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "登录页", //模式名称
+ "path": "pages/login/login", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "我的", //模式名称
+ "path": "pages/ucenter/ucenter", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ },
+ {
+ "name": "表单", //模式名称
+ "path": "pages/form/input", //启动页面,必选
+ "query": "id=505" //启动参数,在页面的onLoad函数里面得到
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/pages/about/about.vue b/pages/about/about.vue
new file mode 100644
index 0000000..9739358
--- /dev/null
+++ b/pages/about/about.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/channel/add.vue b/pages/channel/add.vue
new file mode 100644
index 0000000..5c3ffdd
--- /dev/null
+++ b/pages/channel/add.vue
@@ -0,0 +1,801 @@
+
+
+
+
+
+
+ 正在验证...
+
+
+
+
+
+
+
+
+
+ 验证失败
+ {{ errorMessage }}
+
+
+
+
+
+
+
+
+ 手动创建
+
+
+
+
+
+
+
+
+
+
+
+
+ 渠道名称
+ 必填
+
+
+
+
+
+
+
+
+
+
+ 手机号
+ 必填
+
+
+
+
+
+
+
+
+
+
+ 微信号
+
+
+
+
+
+
+
+
+
+
+ 备注
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/channel/list.vue b/pages/channel/list.vue
new file mode 100644
index 0000000..c1f31d5
--- /dev/null
+++ b/pages/channel/list.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.contactPhone }}
+
+
+
+ {{ item.wechatId }}
+
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/channel/login.vue b/pages/channel/login.vue
new file mode 100644
index 0000000..32f42d8
--- /dev/null
+++ b/pages/channel/login.vue
@@ -0,0 +1,336 @@
+
+
+
+ 渠道登录
+ 登录后进入数据面板
+
+
+
+
+ 账号密码登录
+
+
+
+
+
+
+
+
+
+ 默认初始密码为
+ 123456
+ ,登录后请及时修改。
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/channel/project-select.vue b/pages/channel/project-select.vue
new file mode 100644
index 0000000..80b3037
--- /dev/null
+++ b/pages/channel/project-select.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+ 暂无可选项目
+
+
+
+
+
+ {{ item.name || '未命名项目' }}
+ 编码:{{ item.code || '--' }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/channel/statistics.vue b/pages/channel/statistics.vue
new file mode 100644
index 0000000..625a22f
--- /dev/null
+++ b/pages/channel/statistics.vue
@@ -0,0 +1,2183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ¥
+
+ {{ (statistics.withdrawableAmount || 0).toFixed(2) }}
+
+
+
+
+
+
+
+
+
+
+
+ 总收益
+ ¥{{ (statistics.totalRevenue || 0).toFixed(2) }}
+
+
+ 待审核
+ ¥{{ (statistics.pendingReview || 0).toFixed(2) }}
+
+
+ 已提现
+ ¥{{ (statistics.withdrawn || 0).toFixed(2) }}
+
+
+
+
+
+
+
+
+
+ {{ statistics.totalFriends || 0 }}
+ 今日 {{ statistics.todayFriends || 0 }}
+
+
+
+
+
+
+
+ {{ statistics.totalCustomers || 0 }}
+ 今日 {{ statistics.todayCustomers || 0 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 收益明细
+
+
+ 提现明细
+
+
+
+
+
+
+
+
+
+
+
+
+ 类型
+
+
+ {{ typeOptions[selectedTypeIndex] }}
+
+
+
+
+
+ 时间
+
+
+ {{ selectedDate || '选择日期' }}
+
+
+
+
+
+
+
+
+
+ 状态
+
+
+ {{ statusOptions[selectedStatusIndex] }}
+
+
+
+
+
+ 到账方式
+
+
+ {{ payTypeOptions[selectedPayTypeIndex] }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 共{{ totalRecords }}条记录
+
+
+ {{ Math.min(currentPage * pageSize, totalRecords) }} / {{ totalRecords }}条
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+ 暂无记录
+
+
+
+
+
+
+
+
+ {{ item.sourceType || '-' }}
+
+ {{ item.typeLabel || '' }}
+
+
+
+ {{ item.amount > 0 ? '+' : '' }}¥{{ item.amount.toFixed(2) }}
+
+
+
+
+
+ {{ item.createTime }}
+
+ 收益
+
+
+
+
+
+
+
+
+
+
+
+ 提现到 {{ item.payTypeLabel }}
+ 提现申请
+
+
+
+ ¥{{ Number(item.amount || 0).toFixed(2) }}
+
+
+
+
+
+ {{ item.statusLabel || '状态未知' }}
+
+
+ {{ item.payTypeLabel }}
+
+
+ 审核:{{ item.reviewer }}
+
+
+
+
+
+ 申请时间
+ {{ item.applyTime || '-' }}
+
+
+ 审核时间
+ {{ item.reviewTime || '-' }}
+
+
+
+
+
+
+
+
+
+ 加载中...
+ 加载更多记录...
+
+
+ 没有更多了
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/form/input.vue b/pages/form/input.vue
new file mode 100644
index 0000000..47bbae9
--- /dev/null
+++ b/pages/form/input.vue
@@ -0,0 +1,421 @@
+
+
+
+
+
+
+ 计划名称
+
+ {{taskname}}
+
+
+
+
+
+ 手机号/微信号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/form/input2.vue b/pages/form/input2.vue
new file mode 100644
index 0000000..881d5fc
--- /dev/null
+++ b/pages/form/input2.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+ 计划名称
+
+ {{taskname}}
+
+
+
+
+
+ 手机号/微信号
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/form/list.vue b/pages/form/list.vue
new file mode 100644
index 0000000..31b343a
--- /dev/null
+++ b/pages/form/list.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ {{ item.dNewTime }}
+ {{ item.status }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/home/home.vue b/pages/home/home.vue
new file mode 100644
index 0000000..8183fd0
--- /dev/null
+++ b/pages/home/home.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..8086a30
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,912 @@
+
+
+
+
+
+
+
+ 场景化客户留存 SaaS 工具
+
+ 存客宝
+ 私域流量运营专家
+
+
+ 专注于场景化客户留存的私域流量运营工具,帮助中小企业将多平台公域流量高效转化为私域客户资产,通过数据驱动的精细化运营提升客户粘性和生命周期价值
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 👥
+ 统一管理 (存客)
+ 一站式平台统一存储、管理和追踪来自各渠道的客户数据及关联的微信号状态,告别数据分散管理困难
+
+
+
+ 🎯
+ 智能触达 (获客)
+ 场景化获客配置打通线上线下流量入口,利用AI智能内容库和多平台工作台高效触达转化客户
+
+
+
+ 📊
+ 数据驱动 (宝)
+ 通过数据统计与分析量化运营效果,优化营销策略,实现营销活动的标准化和数据化决策
+
+
+
+
+
+
+
+
+
+
+
+ 实时展示微信号总数、健康度、新增好友数等关键指标,提供运营全局概览和数据可视化分析
+
+
+
+
+ 标准化多渠道获客入口配置,支持抖音、小红书、公众号、海报、付款码等多种获客场景
+
+
+
+
+ 多源内容采集、智能分类标签、AI分析改写,提供内容集中管理和API接口开放能力
+
+
+
+
+ 社交矩阵运营操作中心,支持多渠道内容推送、跨设备同步、智能优化建议和任务调度
+
+
+
+
+ 实时监控设备状态、微信号健康度,支持微信号替换后的数据继承和异常预警机制
+
+
+
+
+
+
+
+
+
+
+ 电商零售
+ 多平台流量整合
+ 某服装品牌通过存客宝整合抖音、小红书、微信公众号等多平台流量,统一管理客户数据,通过场景化获客配置提升转化率30%,客户复购率提升45%。
+
+ 抖音获客
+ 内容分发
+ 客户留存
+
+
+
+
+ 教育培训
+ 智能内容运营
+ 某在线教育机构利用AI内容改写功能,将课程内容智能适配不同平台特点,内容生产效率提升60%,学员互动率提升35%,课程转化率显著提升。
+
+ AI改写
+ 多平台推送
+ 数据分析
+
+
+
+
+
+
+
+
+ 开始您的私域运营之旅
+ 加入数千家企业的选择,用存客宝提升您的客户留存和运营效率
+
+
+
+
+
+
+
+ 1000+
+ 企业用户
+
+
+ 50万+
+ 管理客户
+
+
+ 30%
+ 转化提升
+
+
+ 24/7
+ 技术支持
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 手机号
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 申请已提交
+
+
+
+
+
+
+
diff --git a/pages/index/site.vue b/pages/index/site.vue
new file mode 100644
index 0000000..c2f2024
--- /dev/null
+++ b/pages/index/site.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login/login-page.scss b/pages/login/login-page.scss
new file mode 100644
index 0000000..5de6899
--- /dev/null
+++ b/pages/login/login-page.scss
@@ -0,0 +1,126 @@
+// 隐藏 edge 浏览器的密码查看按钮
+
+/* #ifdef H5 */
+.input-box ::v-deep{
+ .uni-input-input[type="password"] {
+ &::-ms-reveal {
+ display: none;
+ }
+ }
+}
+/* #endif */
+
+.uni-content {
+ padding: 0 60rpx;
+}
+
+.login-logo {
+ display: none;
+}
+
+/* #ifndef APP-NVUE */
+@media screen and (min-width: 690px) {
+ .uni-content {
+ /* #ifndef H5 */
+ padding: 0;
+ max-width: 300px;
+ margin-left: calc(50% - 200px);
+ /* #endif */
+ /* #ifdef H5 */
+ margin: 0 auto;
+ position: relative;
+ top: 100px;
+ padding: 30px 40px 80px 40px;
+ max-width: 450px;
+ max-height: 450px;
+ border-radius: 10px;
+ box-shadow: 0 0 20px #efefef;
+ background-color: #FFF;
+ /* #endif */
+ }
+ /* #ifdef H5 */
+ .login-logo {
+ display: flex;
+ justify-content: center;
+ }
+
+ .login-logo image {
+ width: 60px;
+ height: 60px;
+ }
+
+ .register-back{
+ display: none;
+ }
+
+ uni-button{
+ padding-bottom: 1px;
+ }
+
+ /* #endif */
+}
+
+.uni-content view {
+ box-sizing: border-box;
+}
+/* #endif */
+
+
+
+.title {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ padding: 18px 0;
+ font-weight: 800;
+ flex-direction: column;
+}
+
+.tip {
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ color: #BDBDC0;
+ font-size: 11px;
+ margin: 6px 0;
+}
+
+
+/* #ifndef APP-NVUE */
+// 解决小程序端开启虚拟节点virtualHost引起的 class = input-box丢失的问题 [详情参考](https://uniapp.dcloud.net.cn/matter.html#%E5%90%84%E5%AE%B6%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%AE%9E%E7%8E%B0%E6%9C%BA%E5%88%B6%E4%B8%8D%E5%90%8C-%E5%8F%AF%E8%83%BD%E5%AD%98%E5%9C%A8%E7%9A%84%E5%B9%B3%E5%8F%B0%E5%85%BC%E5%AE%B9%E9%97%AE%E9%A2%98)
+.uni-content ::v-deep .uni-easyinput__content,
+/* #endif */
+
+.input-box {
+ height: 44px;
+ background-color: #F8F8F8 !important;
+ border-radius: 0;
+ font-size: 14px;
+ /* #ifndef APP-NVUE */
+ display: flex;
+ /* #endif */
+ flex: 1;
+}
+
+.link {
+ color: #04498c;
+ cursor: pointer;
+}
+
+.uni-content ::v-deep .uni-forms-item__inner {
+ padding-bottom: 8px;
+}
+
+.uni-btn {
+ text-align: center;
+ height: 40px;
+ line-height: 40px;
+ margin: 15px 0 10px 0;
+ color: #FFF !important;
+ border-radius: 5px;
+ font-size: 16px;
+}
+
+.uni-body.uni_modules-uni-id-pages-pages-login-login-withoutpwd{
+ height: auto !important;
+}
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..bc55125
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+ 账号密码登录
+
+
+
+
+
+
+
+
+
+
+
+
+ 阅读并同意存客宝
+ 隐私政策
+ 和
+ 用户服务协议
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/poster/index.vue b/pages/poster/index.vue
new file mode 100644
index 0000000..65be896
--- /dev/null
+++ b/pages/poster/index.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/poster/index2.vue b/pages/poster/index2.vue
new file mode 100644
index 0000000..b3a94e0
--- /dev/null
+++ b/pages/poster/index2.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/ucenter/ucenter.vue b/pages/ucenter/ucenter.vue
new file mode 100644
index 0000000..aec8ffb
--- /dev/null
+++ b/pages/ucenter/ucenter.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+ {{userInfo.sName}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..0f5f353
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,28 @@
+{
+ "appid": "wx3724765328cccf03",
+ "compileType": "miniprogram",
+ "libVersion": "3.8.10",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "enhance": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ }
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..670c139
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "ckb_mini",
+ "setting": {
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/static/c1.png b/static/c1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d38fdc45f54393919608143278902961ebfc03e
GIT binary patch
literal 401
zcmeAS@N?(olHy`uVBq!ia0vp^DImv+@EMfolJl@2-tdeIgiE72V3$+1a<;nGqB*6-wd0Dfno2^$&
z7L}LYx}4kkKI1~4j2xSM#i^{e>mxFDC0DcwoaERsZFdmo&xZb=|e;
zVChPF@z}uo`_jyFigEMR=cKgdY*81V{;5gJlXF9MvNaZ^cipGtGKCwGwYFdLih#FiI|b%1`}h
zcD?9wzL;(MG`RGl!=KdO=X$Ia3G&T>{3@pZ$E>nWT~vAlEaktaqI1klarbacw7TzPB-Tm@A?1#
z=DKt1Tm@&jBni*W72Dq8$U1XQ@j1)qcYd?AM-~6vdS%zgB|W!|l9z8;VdkK15fZWZ
z0_Xa#{=&Tl?+&}Myixw!c0&2Cz{(%uYaLfyIpx20a+b;i&8Hu}PrN-Tsf8gx{xaWd
zSEda)?3G(j%z6CKKWpOGAAJoS5gg_&aw+l?Pq*dmh)8I56YfnYkc%|gRM+fjvg@w|
z$E(g+E=n8A7O8TmM)@~hDG@eQ_vn5n5wpR0%`A=`87W~$m7>*=T~gqVW%D$JmT%Wy00-NUV`g=
zPWq+lU_K79dVw=Ll(hEL%sa^y|HiF3Bqng#c7b&Xt+%gdOo&
V%D;5ZBtB5oc)I$ztaD0e0stIlwo?EA
literal 0
HcmV?d00001
diff --git a/static/c3.png b/static/c3.png
new file mode 100644
index 0000000000000000000000000000000000000000..216202ad01c5d093a15c247cf791bf66759cf54d
GIT binary patch
literal 511
zcmeAS@N?(olHy`uVBq!ia0vp^DImqEwn3#C`6axcex~Gd{NX4zUH%{jrQQ%<>_`I#L<;VZ}
zZHv8>O^d80dDUJWN}qZ5sw(5+2E$_#$vr=hznV9v_(!hA^s)ehHzYuO_$GPFaj>L^Z^8*-5pGM3JjCnSB#oUXR4yIck*z;L5euG4hrQnMaF=Mr^If6ezqfPO{rmaH
zG`Recv6gZBZ^h$ro*MqgZ`L;0*JWSQ?4MdEEc#Ycl^2Ku*&||7ybYSKxgR(e
zUi8LbW#8LW_O;o`+{cdv9h)e%;+1X1dv+zh{}-wmlY4-{_IaWH_ctMZlX+XXL2>Bm
L>gTe~DWM4f<{`=m
literal 0
HcmV?d00001
diff --git a/static/c4.png b/static/c4.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb8b4770c323cc87544a502c4efcd9792ec6047a
GIT binary patch
literal 476
zcmeAS@N?(olHy`uVBq!ia0vp^DIm!v{Zmph6H*@EOQ`c;Jj35m?s8tsB!ig_bOsad3NWyNKsO#%u4s6f}!WF<$1wue~HTU+T}QZ;Gq4
z+^p*LR=oRR<2>VYrDayznw7JEgn9(s4mmKdKH{5e^24HIn&xXKq`oqWXf4s;nPY6>
zl5RSUO)+g!*Qq{!;a&O8LAO2%J{IadS>Y&oFLd#-`B8Zi;r0eCLdRUCfQpstnaz}|9;&C$edE%qT=zMqcbI`S>(i_Uwsp-Jh?$Zac<}T=h6;^
V(bfHGPg+0`|eiw2lA(
literal 0
HcmV?d00001
diff --git a/static/c5.png b/static/c5.png
new file mode 100644
index 0000000000000000000000000000000000000000..310bfb123ba811240a23883c589557cced22af97
GIT binary patch
literal 472
zcmeAS@N?(olHy`uVBq!ia0vp^DImMU#{OfDLKp{`iu-m;URIy-X0%w>4GPR
z_aE3Db+En7Vpp-?y{8>c_3j;K1E(wImUzhRpIo-4)yng0f9$<4bN?NcJ+$)R>Cmd5
zPnT-Q*3a3qRzbM)VHC^C!+&Q!2$x98T^XQ1{a2U4m97Z?l}kQ1avTGN#