From 72b993b2afcc6f5303948c435087a91589333dac Mon Sep 17 00:00:00 2001
From: Tevin <tingquanren@163.com>
Date: Mon, 03 Mar 2025 15:46:48 +0800
Subject: [PATCH] 知识库文档,新增数据库控制文档,项目介绍调整

---
 _knowledges/201-请求层基类Fetcher.md |   33 +++++++
 _knowledges/202-数据控制层基类Pilot.md |  109 +++++++++++++++++++++++++++
 _knowledges/101-项目介绍.md         |   78 -------------------
 3 files changed, 142 insertions(+), 78 deletions(-)

diff --git "a/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md" "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md"
index 4476b55..c7771c8 100644
--- "a/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md"
+++ "b/_knowledges/101-\351\241\271\347\233\256\344\273\213\347\273\215.md"
@@ -110,81 +110,7 @@
 });
 ```
 
-##### 数据控制层的 Vue 属性
-
-数据控制器中的 Vue 属性,需要使用 $ 开头
-
-```js
-// 数据控制器
-export class PIndex extends Pilot {
-    $data() {
-        return {
-            a: 1,
-        };
-    }
-    $computed = {
-        a2() {},
-    };
-}
-```
-
-会转换成
-
-```js
-// 标准 Vue
-const Component = Vue.extend({
-    data() {
-        return {
-            a: 1,
-        };
-    },
-    computed: {
-        a2() {},
-    },
-});
-```
-
-##### 数据控制层的 Vue 方法
-
-数据控制器中的 Vue 方法,不用写 methods 中,直接写最外层
-
-```js
-// 数据控制器
-export class PIndex extends Pilot {
-    onOpenSelector() {}
-}
-```
-
-会转换成
-
-```js
-// 标准 Vue
-const Component = Vue.extend({
-    methods: {
-        onOpenSelector() {},
-    },
-});
-```
-
-注意:数据控制器中不能使用 $name、$components、$methods 这三项,因为实际合并时会覆盖
-
-#### 实际合并
-
-数据控制层和界面层实际的合并,写在界面层上
-
-```js
-// 引入界面层对应数据控制器
-import {
-    PPageName
-} from '@pilots/pilotGroup/PPageName';
-
-export default {
-    name: 'PageName',
-    components: {},
-    // 示例化数据控制器,由实例生成 Vue 选项,再展开合并到界面 Vue 对象上
-    ...new PPageName().createOptions(),
-};
-```
+更多细节,请参照《数据控制层基类Pilot》
 
 ## 新页面示例
 
@@ -319,7 +245,7 @@
 }
 ```
 
-说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理成功
+说明:请求异常由请求层的基类自动处理,数据控制层跳过错误的逻辑,只处理请求成功的后续业务
 
 #### 空白请求层示例
 
diff --git "a/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md" "b/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md"
index ac75184..310f85c 100644
--- "a/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md"
+++ "b/_knowledges/201-\350\257\267\346\261\202\345\261\202\345\237\272\347\261\273Fetcher.md"
@@ -1,6 +1,6 @@
 # 请求层基类 Fetcher.js
 
-类 Fetcher 是一个用于处理 HTTP 请求的工具类,包含了多种方法来简化和统一请求的处理,请求层的每个请求集,都必须继承此类
+类 Fetcher 是一个用于处理 HTTP 请求的基类,包含了多种方法来简化和统一请求的处理,请求层的每个请求集,都必须继承此类
 
 ## 引用方法
 
@@ -89,7 +89,7 @@
 ```js
 class FCommon extends Fetcher {
 
-    // 请求示例:获取用户基本信息(在数据控制层中调用)
+    // 请求方法使用示例:获取用户基本信息(提供给数据控制层中调)
     getUserInfo(id) {
         const url = this.spellURL('getUserInfo', 'user/user_info');
         const send = {
@@ -154,3 +154,32 @@
 | 5000  | 通用请求失败,弹窗提示 msg |
 | 9001  | 登录已过期,返回登录页 |
 | 9002  | 已登录但没有操作权限,弹窗提示 msg |
+
+## 请求调用
+
+请求层的每一个请求集,都会实例化自身作为全局单例(数据控制层无需再示例化)
+
+例如,请求集 FCommon 会实例化自身为 $fetchCommon
+
+```js
+import {
+    $fetchCommon
+} from '@fetchers/FCommon';
+
+export class PPageName extends Pilot {
+
+    // 在数据控制层中,发请求示例
+    onLoadUserInfo() {
+        Taro.showLoading();
+        $fetchCommon.getUserInfo(this.userId)
+            .then(res => {
+                Taro.hideLoading();
+                if (!res) {
+                    return;
+                }
+                this.userInfo = res || {};
+            });
+    }
+
+}
+```
diff --git "a/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md" "b/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md"
new file mode 100644
index 0000000..ecb0df1
--- /dev/null
+++ "b/_knowledges/202-\346\225\260\346\215\256\346\216\247\345\210\266\345\261\202\345\237\272\347\261\273Pilot.md"
@@ -0,0 +1,109 @@
+# 数据控制层基类Pilot
+
+类 Pilot 是数据控制层的基类,用于将一个 Vue 对象的部分功能拆分出来独立申明后再合并回去,每个数据控制器都需要基础此类
+
+## 引用方法
+
+```js
+import {
+    Pilot
+} from '@components/bases/Pilot';
+```
+
+## 主要方法
+
+```js
+/**
+ * 创建页面选项
+ * @param {Object} dataAdd - 需要添加到 vue data 中的额外数据
+ * @returns {Object} 页面选项对象
+ */
+createOptions(dataAdd) {}
+
+/**
+ * 转换静态图片引用
+ * @static
+ * @param {Object} assets - 静态图片对象
+ * @returns {Object} 转换后的静态图片对象
+ */
+static transAssets(assets = {}) {}
+```
+
+## 创建页面合并对象
+
+`createOptions` 是类 Pilot 的核心方法,此方法将独立申明的信息合并回原 Vue 对象
+
+### 主要工作
+
+* 扫描当前类,以 \$ 开头的属性或方法,去掉 \$ 符后,直接作为 Vue 的属性或方法准备合并
+* 扫描当前类,非以 \$ 开头的方法,作为 Vue 对象申明中 methods 的子级方法准备合并
+* 生成合并对象,用以进行合并
+
+```js
+// 数据控制器中,用 $ 开头的视为 Vue 属性或方法
+export class PIndex extends Pilot {
+    $data() {
+        return {
+            a: 1,
+        };
+    }
+    $computed = {
+        a2() {},
+    };
+    $mounted() {}
+}
+
+// 合并后的实际效果
+const Component = Vue.extend({
+    data() {
+        return {
+            a: 1,
+        };
+    },
+    computed: {
+        a2() {},
+    },
+    mounted() {},
+});
+```
+
+```js
+// 数据控制器中,非 $ 开头的,转到 methods 中
+export class PIndex extends Pilot {
+    onOpenSelector() {}
+}
+
+// 合并后的实际效果
+const Component = Vue.extend({
+    methods: {
+        onOpenSelector() {},
+    },
+});
+```
+
+注意:不能在数据控制器中定义 $name、$components、$methods 这三项,因为实际合并时会覆盖
+
+### 实际合并
+
+数据控制层和界面层实际的合并,其实是写在界面层上  
+由界面层实例化数据控制层,并使用其基类的 createOptions 方法生成选项,再合并进原 Vue 对象
+
+```js
+// 引入界面层对应数据控制器
+import {
+    PPageName
+} from '@pilots/pilotGroup/PPageName';
+
+export default {
+    name: 'PageName',
+    components: {},
+    // 示例化数据控制器,由实例生成 Vue 选项,再展开合并到界面 Vue 对象上
+    ...new PPageName().createOptions(),
+};
+```
+
+### 页面能力扩展:跨页面通讯
+
+给实际 Vue 实例增加了
+
+### 页面能扩展:跨端通讯

--
Gitblit v1.9.1