Jelajahi Sumber

Merge branch 'master' of https://github.com/iapt-platform/mint

bhikkhu-kosalla-china 4 tahun lalu
induk
melakukan
af519c6839

+ 1 - 1
app/install/db_insert_bookword_from_csv.php

@@ -64,7 +64,7 @@ if (($fpoutput = fopen(_DIR_CSV_PALI_CANON_WORD_ . "/{$from}_words.csv", "r")) !
 
 // 开始一个事务,关闭自动提交
 $dbh_word_index->beginTransaction();
-$query = "INSERT INTO bookword ('book','wordindex','count') VALUES ( ? , ? , ?  )";
+$query = "INSERT INTO "._TABLE_BOOK_WORD_." ('book','wordindex','count') VALUES ( ? , ? , ?  )";
 $stmt = $dbh_word_index->prepare($query);
 
 foreach ($bookword as $key => $value) {

+ 112 - 53
app/path.php

@@ -1,14 +1,5 @@
 <?php
-define("_DB_ENGIN_", "sqlite");
-
-define("_DB_HOST_", "localhost");
-define("_DB_USERNAME_", "");
-define("_DB_PASSWORD_", "");
-
-define("_DB_NAME_PALICANON_", "palicanon");
-define("_DB_NAME_DICTIONARY_", "dictionary");
-define("_DB_NAME_USERDATA_", "userdata");
-
+# 目录
 define("_DIR_APPDATA_", __DIR__ . "/../tmp/appdata");
 
 define("_DIR_PALICANON_", __DIR__ . "/../tmp/appdata/palicanon");
@@ -24,21 +15,6 @@ define("_DIR_IMAGES_COURSE_", __DIR__ . "/../tmp/images/course");
 define("_DIR_IMAGES_COURSE_A_", "../../tmp/images/course");
 define("_DIR_IMAGES_LESSON_", __DIR__ . "/../tmp/images/lesson");
 
-//pali canon db file 语料库
-define("_FILE_DB_PALICANON_TEMPLET_", __DIR__ . "/../tmp/appdata/palicanon/templet.db3");
-define("_FILE_DB_RESRES_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/res.db3");
-define("_FILE_DB_PALITEXT_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_text.db3");
-define("_FILE_DB_STATISTICS_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/word_statistics.db3");
-define("_FILE_DB_PALI_SENTENCE_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_sent1.db3");
-define("_FILE_DB_PALI_SENTENCE_SIM_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_sim.db3");
-define("_FILE_DB_PALI_TOC_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_toc.db3");
-define("_FILE_DB_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/index.db3");
-define("_FILE_DB_WORD_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/wordindex.db3");
-define("_FILE_DB_PALI_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/paliindex.db3");
-define("_FILE_DB_PAGE_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pagemap.db3");
-define("_FILE_DB_BOOK_WORD_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/bookword.db3");
-define("_FILE_DB_BOLD_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/bold.db3");
-
 //语料库
 
 define("_DIR_CSV_PALI_CANON_WORD_", __DIR__ . "/../paliword/book");
@@ -57,6 +33,63 @@ define("_DIR_DICT_SYSTEM_", __DIR__ . "/../tmp/appdata/dict/system");
 define("_DIR_DICT_3RD_", __DIR__ . "/../tmp/appdata/dict/3rd");
 define("_DIR_DICT_REF_", __DIR__ . "/../tmp/appdata/dict/ref");
 
+
+define("_DIR_FONT_", __DIR__ . "/../font");
+define("_DIR_PALI_HTML_", __DIR__ . "/../palihtml");
+define("_DIR_DICT_TEXT_", __DIR__ . "/../dicttext");
+
+define("_DIR_PALI_TITLE_", __DIR__ . "/../pali_title");
+define("_DIR_APP_", __DIR__ . "/../app");
+define("_DIR_LANGUAGE_", __DIR__ . "/../app/public/lang");
+define("_DIR_BOOK_INDEX_", __DIR__ . "/../app/public/book_index");
+
+/*user data*/
+define("_DIR_USER_BASE_", __DIR__ . "/../tmp/user");
+define("_DIR_USER_DOC_", __DIR__ . "/../tmp/user_doc");
+define("_DIR_USER_IMG_", __DIR__ . "/../tmp/user/media/3");
+define("_DIR_USER_IMG_LINK_", "../../tmp/user/media/3");
+define("_DIR_MYDOCUMENT_", "/my_document");
+
+#数据库
+# 数据库基本参数
+define("_DB_ENGIN_", "sqlite");
+
+define("_DB_HOST_", "localhost");
+define("_DB_PORT_", "5432");
+define("_DB_USERNAME_", "");
+define("_DB_PASSWORD_", "");
+define("_DB_NAME_", "mint");
+
+//语料库数据表 pali canon db file 
+//巴利语料模版表
+define("_FILE_DB_PALICANON_TEMPLET_", __DIR__ . "/../tmp/appdata/palicanon/templet.db3");
+//标题资源表
+define("_FILE_DB_RESRES_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/res.db3");
+//巴利语料段落表
+define("_FILE_DB_PALITEXT_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_text.db3");
+//单词分析表
+define("_FILE_DB_STATISTICS_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/word_statistics.db3");
+//巴利句子表
+define("_FILE_DB_PALI_SENTENCE_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_sent1.db3");
+//相似句
+define("_FILE_DB_PALI_SENTENCE_SIM_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_sim.db3");
+//标题表
+define("_FILE_DB_PALI_TOC_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pali_toc.db3");
+//单词索引=92万词+单词索引
+define("_FILE_DB_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/index.db3");
+//92万词
+define("_FILE_DB_WORD_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/wordindex.db3");
+//单词索引
+define("_FILE_DB_PALI_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/paliindex.db3");
+//页码对应
+define("_FILE_DB_PAGE_INDEX_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/pagemap.db3");
+//以书为单位的单词汇总表
+define("_FILE_DB_BOOK_WORD_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/bookword.db3");
+define("_TABLE_BOOK_WORD_", "bookword");
+//黑体字数据表
+define("_FILE_DB_BOLD_", "sqlite:" . __DIR__ . "/../tmp/appdata/palicanon/bold.db3");
+
+# 字典数据表 全部存入redis
 #巴缅字典
 define("_DICT_DB_PM_", "sqlite:" . __DIR__ . "/../tmp/appdata/dict/3rd/pm.db");
 define("_TABLE_DICT_PM_", "dict");
@@ -84,41 +117,67 @@ define("_TABLE_REF_INDEX_", "dict");
 define("_FILE_DB_PART_", "sqlite:" . __DIR__ . "/../tmp/appdata/dict/system/part.db3");
 define("_TABLE_PART_", "part");
 
-define("_DIR_FONT_", __DIR__ . "/../font");
-define("_DIR_PALI_HTML_", __DIR__ . "/../palihtml");
-define("_DIR_DICT_TEXT_", __DIR__ . "/../dicttext");
 
-define("_DIR_PALI_TITLE_", __DIR__ . "/../pali_title");
-define("_DIR_APP_", __DIR__ . "/../app");
-define("_DIR_LANGUAGE_", __DIR__ . "/../app/public/lang");
-define("_DIR_BOOK_INDEX_", __DIR__ . "/../app/public/book_index");
-
-/*user data*/
-define("_DIR_USER_BASE_", __DIR__ . "/../tmp/user");
-define("_DIR_USER_DOC_", __DIR__ . "/../tmp/user_doc");
-define("_DIR_USER_IMG_", __DIR__ . "/../tmp/user/media/3");
-define("_DIR_USER_IMG_LINK_", "../../tmp/user/media/3");
-define("_DIR_MYDOCUMENT_", "/my_document");
+# 用户数据表
 
+//读写频繁
+# 逐词解析表
 define("_FILE_DB_USER_WBW_", "sqlite:" . __DIR__ . "/../tmp/user/user_wbw.db3");
-define("_FILE_DB_COMMENTS_", "sqlite:" . __DIR__ . "/../tmp/user/comments.db3");
+# 译文
 define("_FILE_DB_SENTENCE_", "sqlite:" . __DIR__ . "/../tmp/user/sentence.db3");
-define("_FILE_DB_TERM_", "sqlite:" . __DIR__ . "/../tmp/user/dhammaterm.db");
-define("_FILE_DB_GROUP_", "sqlite:" . __DIR__ . "/../tmp/user/group.db3");
-define("_FILE_DB_USERINFO_", "sqlite:" . __DIR__ . "/../tmp/user/userinfo.db3");
-define("_FILE_DB_FILEINDEX_", "sqlite:" . __DIR__ . "/../tmp/user/fileindex.db");
+# 译文编辑历史
+define("_FILE_DB_USER_SENTENCE_HISTORAY_", "sqlite:" . __DIR__ . "/../tmp/user/usent_historay.db3");
+# 逐词解析字典
 define("_FILE_DB_WBW_", "sqlite:" . __DIR__ . "/../tmp/user/wbw.db3");
+# 逐词解析字典文件
 define("_FILE_DB_WBW1_",  __DIR__ . "/../tmp/user/wbw.db3");
-define("_FILE_DB_COURSE_", "sqlite:" . __DIR__ . "/../tmp/user/course.db3");
-define("_FILE_DB_MEDIA_", "sqlite:" . __DIR__ . "/../tmp/user/media.db3");
-define("_FILE_DB_MESSAGE_", "sqlite:" . __DIR__ . "/../tmp/user/message.db");
-define("_FILE_DB_USER_STATISTICS_", "sqlite:" . __DIR__ . "/../tmp/user/statistics.db3");
-define("_FILE_DB_CHANNAL_", "sqlite:" . __DIR__ . "/../tmp/user/channal.db3");
-define("_FILE_DB_USER_DICT_", "sqlite:" . __DIR__ . "/../tmp/user/udict.db3");
-define("_FILE_DB_USER_ARTICLE_", "sqlite:" . __DIR__ . "/../tmp/user/article.db3");
-define("_FILE_DB_HOSTSETTING_", "sqlite:" . __DIR__ . "/../tmp/user/hostsetting.db3");
-define("_FILE_DB_USER_SENTENCE_HISTORAY_", "sqlite:" . __DIR__ . "/../tmp/user/usent_historay.db3");
+
+//写入频繁 读取不频繁
+# 用户行为记录
 define("_FILE_DB_USER_ACTIVE_", "sqlite:" . __DIR__ . "/../tmp/user/user_active.db3");
 define("_FILE_DB_USER_ACTIVE_LOG_", "sqlite:" . __DIR__ . "/../tmp/user/user_active_log.db3");
+
+
+//读取频繁 写入不频繁 
+# 文章 文集
+define("_FILE_DB_USER_ARTICLE_", "sqlite:" . __DIR__ . "/../tmp/user/article.db3");
+
+# 术语
+define("_FILE_DB_TERM_", "sqlite:" . __DIR__ . "/../tmp/user/dhammaterm.db");
+# 版本风格 
+define("_FILE_DB_CHANNAL_", "sqlite:" . __DIR__ . "/../tmp/user/channal.db3");
+# 用户账号
+define("_FILE_DB_USERINFO_", "sqlite:" . __DIR__ . "/../tmp/user/userinfo.db3");
+# 协作
 define("_FILE_DB_USER_SHARE_", "sqlite:" . __DIR__ . "/../tmp/user/share.db3");
+
+# 工作组
+define("_FILE_DB_GROUP_", "sqlite:" . __DIR__ . "/../tmp/user/group.db3");
+# 逐词解析文件索引
+define("_FILE_DB_FILEINDEX_", "sqlite:" . __DIR__ . "/../tmp/user/fileindex.db");
+# 课程
+define("_FILE_DB_COURSE_", "sqlite:" . __DIR__ . "/../tmp/user/course.db3");
+# 用户自定义书
 define("_FILE_DB_USER_CUSTOM_BOOK_", "sqlite:" . __DIR__ . "/../tmp/user/custom_book.db3");
+# 逐词译和译文编辑消息
+define("_FILE_DB_MESSAGE_", "sqlite:" . __DIR__ . "/../tmp/user/message.db");
+
+
+
+//很少使用
+# 网站设置
+define("_FILE_DB_HOSTSETTING_", "sqlite:" . __DIR__ . "/../tmp/user/hostsetting.db3");
+
+# 用户图片数据 尚未启用
+define("_FILE_DB_MEDIA_", "sqlite:" . __DIR__ . "/../tmp/user/media.db3");
+
+# 用户字典 尚未启用
+define("_FILE_DB_USER_DICT_", "sqlite:" . __DIR__ . "/../tmp/user/udict.db3");
+
+
+
+# 评论 尚未启用
+define("_FILE_DB_COMMENTS_", "sqlite:" . __DIR__ . "/../tmp/user/comments.db3");
+
+
+define("_FILE_DB_USER_STATISTICS_", "sqlite:" . __DIR__ . "/../tmp/user/statistics.db3");

+ 2 - 2
app/search/dict_find3.php

@@ -141,7 +141,7 @@ switch ($op) {
 
         //查找这些词出现在哪些书中
         PDO_Connect(_FILE_DB_BOOK_WORD_);
-        $query = "SELECT book,sum(count) as co FROM bookword WHERE \"wordindex\" IN $strQueryWordId  GROUP BY book LIMIT 0,217";
+        $query = "SELECT book,sum(count) as co FROM "._TABLE_BOOK_WORD_." WHERE \"wordindex\" IN $strQueryWordId  GROUP BY book LIMIT 0,217";
         $Fetch = PDO_FetchAll($query);
         $iFetch = count($Fetch);
         if ($iFetch > 0) {
@@ -238,7 +238,7 @@ switch ($op) {
                 }
 
                 //查找这些词出现在哪些书中
-                $query = "select book,sum(count) as co from bookword where \"wordindex\" in $wordlist group by book order by co DESC";
+                $query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $wordlist group by book order by co DESC";
                 $Fetch = PDO_FetchAll($query);
                 $iFetch = count($Fetch);
                 if ($iFetch > 0) {

+ 1 - 1
app/search/search.php

@@ -35,7 +35,7 @@ function render_book_list($strWordlist, $booklist = null)
             $aInputBook["{$oneBook}"] = 1;
         }
     }
-    $query = "select book,sum(count) as co from bookword where \"wordindex\" in $strWordlist group by book order by co DESC";
+    $query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strWordlist group by book order by co DESC";
     $Fetch = PDO_FetchAll($query);
     $iFetch = count($Fetch);
     $newBookList = array();

+ 3 - 3
app/search/word_function.php

@@ -16,7 +16,7 @@ function get_new_book_list($strWordlist, $booklist = null)
             $aInputBook["{$oneBook}"] = 1;
         }
     }
-    $query = "select book,sum(count) as co from bookword where \"wordindex\" in $strWordlist group by book order by co DESC";
+    $query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strWordlist group by book order by co DESC";
     $Fetch = PDO_FetchAll($query);
     $iFetch = count($Fetch);
     $newBookList = array();
@@ -69,7 +69,7 @@ function get_book_tag($strWordlist, $booklist = null)
             $aInputBook["{$oneBook}"] = 1;
         }
     }
-    $query = "select book,sum(count) as co from bookword where \"wordindex\" in $strWordlist group by book order by co DESC";
+    $query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strWordlist group by book order by co DESC";
     $Fetch = PDO_FetchAll($query);
     $iFetch = count($Fetch);
     $newBookList = array();
@@ -129,7 +129,7 @@ function render_book_list($strWordlist, $booklist = null)
             $aInputBook["{$oneBook}"] = 1;
         }
     }
-    $query = "select book,sum(count) as co from bookword where \"wordindex\" in $strWordlist group by book order by co DESC";
+    $query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strWordlist group by book order by co DESC";
     $Fetch = PDO_FetchAll($query);
     $iFetch = count($Fetch);
     $newBookList = array();

+ 1 - 1
app/search/word_list.php

@@ -79,7 +79,7 @@ if (isset($booklist)) {
         $aInputBook["{$oneBook}"] = 1;
     }
 }
-$query = "select book, wordindex,count from bookword where \"wordindex\" in $strQueryWordId ";
+$query = "SELECT book, wordindex,count from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strQueryWordId ";
 $Fetch = PDO_FetchAll($query);
 $iFetch = count($Fetch);
 $newBookList = array();

+ 1 - 1
app/search/word_statistics.php

@@ -85,7 +85,7 @@ if (isset($booklist)) {
         $aInputBook["{$oneBook}"] = 1;
     }
 }
-$query = "select book,sum(count) as co from bookword where \"wordindex\" in $strQueryWordId group by book order by co DESC";
+$query = "SELECT book,sum(count) as co from "._TABLE_BOOK_WORD_." where \"wordindex\" in $strQueryWordId group by book order by co DESC";
 $Fetch = PDO_FetchAll($query);
 $iFetch = count($Fetch);
 $newBookList = array();

+ 13 - 5
docker/README.md

@@ -26,17 +26,25 @@
   ./docker/ubuntu/first.sh
   # fot the next time start
   ./docker/ubuntu/next.sh
+  
   # start servers
   > sudo supervisord -c /etc/supervisor/supervisord.conf
-  > netstat -ant | grep 'LISTEN'
-  # connect to redis
-  > redis-cli
-  # connect to postgresql
-  > psql -U postgres -h 127.0.0.1 -p 5432
+
+  # enable rabbitmq Management Plugin 
+  > sudo rabbitmq-plugins enable rabbitmq_management
+
+  # enable redis clusters
+  > ./docker/redis.sh
   ```
 
   ![start](documents/start.png)
 
+  - RabbitMQ: `http://localhost:15672`, user `guest`, password `guest`
+  - Redis cluster ports `6371~6376`
+  - Minio server: `http://localhost:9001` user `admin`, password `12345678`
+  - PostgreSql: `psql -U postgres -h 127.0.0.1 -p 5432`
+  - ElasticSearch: `curl http://127.0.0.1:9200/`
+
 - For VSCode **Run in your local host**
 
 ```bash

TEMPAT SAMPAH
docker/documents/start.png


+ 1 - 1
docker/first.sh

@@ -1,2 +1,2 @@
 #!/bin/sh
-podman run --name palm -it --userns=keep-id --user=$(id -ur):$(id -gr) --network host --events-backend=file -v $PWD:/workspace:z palm
+podman run --name mint -it --userns=keep-id --hostname=palm --user=$(id -ur):$(id -gr) --network host --events-backend=file -v $PWD:/workspace:z palm

+ 1 - 1
docker/next.sh

@@ -1,2 +1,2 @@
 #!/bin/sh
-podman start -i -a --events-backend=file palm
+podman start -i -a --events-backend=file mint

+ 18 - 0
docker/redis.sh

@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# https://redis.io/topics/cluster-tutorial
+set -e
+
+echo "setup redis clusters"
+redis-cli --cluster create \
+    127.0.0.1:6371 \
+    127.0.0.1:6372 \
+    127.0.0.1:6373 \
+    127.0.0.1:6374 \
+    127.0.0.1:6375 \
+    127.0.0.1:6376 \
+    --cluster-replicas 1
+    
+echo "done."
+
+exit 0

+ 47 - 0
documents/dev-doc.md

@@ -0,0 +1,47 @@
+# 巴利圣典教育开放平台 - IAPT Platform
+
+IAPT = International Academy Of Pali Tipitaka - 国际巴利三藏学院
+
+试运行地址:https://www.wikipali.org/
+
+# 平台愿景
+
+让巴利圣典的学习变得更容易,人人都能从巴利圣典中受益。
+
+# 当前功能
+
+- 巴利圣典阅读与翻译
+- 在线课程发布与学习
+- 在线巴利语学习工具
+
+# 重构计划
+
+随着平台功能的完善,以及用户量的增加,当前平台面临以下几个问题
+
+- 性能瓶颈
+  多用户并发操作以及全文检索效率低,难以支撑更多的用户
+- 代码维护
+  当前代码内含有相当量的冗余和临时解决方案,难以扩展和维护
+- 权限管理
+  权限管理模块有瑕疵,多人协作编辑功能有待优化
+
+基于以上几个问题,现启动平台重构计划。
+
+以解决问题为目标,细化任务,逐步实施。
+
+# 关于我们
+
+国际巴利三藏学院致力于让佛陀所揭示的真理可以平等的被所有族群方便的学习与运用。希望在传统和现代、老师与学生、翻译者与读者之间假设桥梁。向他们提供教育平台,享受前沿的教学科技,实现各种信息及资源的有效共享。指导圣典在人类生命系统净化提升的实践与运用。让全世界所有族群都可以享受高品质的圣典教育,最终实现圣典教育全球化。
+
+- 巴利语文献语料库的建立
+- 相关参考文献的电子化
+- 巴利文献的整理翻译及研究
+- 基于项目培养相关人才,实现产学研一体化发展。
+
+# 参与开发
+
+关注此 [任务看板](https://github.com/orgs/iapt-platform/projects/5) 
+
+发现有合适的待领取(To do 状态)任务时,联系 Visuddhinanda(email:visuddhinanda@gmail.com) 加入。
+
+技术细节:暂时请先尝试阅读代码,重构结束后会有补充完整的开发文档。

+ 3 - 3
documents/zh/api/readme.md

@@ -21,15 +21,15 @@ https://github.com/go-redis/redis
 
 ## 目录
 
+-   [用户](user.md)
 -   [版本](channel.md)
--   [课程](course.md)
+-   [术语](term.md)
 -   [字典](dict.md)
+-   [课程](course.md)
 -   [工作组](group.md)
 -   [语料库](palicanon.md)
--   [术语](term.md)
 -   [译文](translation.md)
 -   [文章文集](article.md)
--   [用户](user.md)
 -   [逐词解析](wbw.md)
 -   [全文搜索](search.md)
 -   [其他工具表](others.md)

+ 143 - 157
documents/zh/dashboard/readme.md

@@ -2,15 +2,15 @@
 
 本文档是网站页面的前端设计文档
 
-
 # 开发环境
-- React
-- Umijs
-- Ant Design
-- Type Script
 
+-   React
+-   Umijs
+-   Ant Design
+-   Type Script
 
 # 网站地图
+
 ```mermaid
 graph LR;
 
@@ -45,187 +45,173 @@ dict -->|嵌入| wbw
 reader -->wbw
 term -->|嵌入| wbw
 ```
-- 藏经阁-Libray
-  - [首页](home.md)
-  - [三藏](palicanon.md)  
-  - [课程](course.md)
-  - [字典](dict.md)
-  - [搜索](search.md)
-  - [个人空间](myzone.md)
-- 译经楼-Studio
-  - [首页](stu_home.md) 
-  - [三藏分类](stu_pali.md)
-  - [我的文档(最近打开)](stu_doc.md)
-  - [逐词解析编辑](stu_wbw.md)
-  - [协作文档](stu_coop.md)
-  - [群组管理](stu_group.md)
-  - [版本管理](stu_channel.md)
-  - [课程管理](stu_course.md)
-  - [单词本](stu_dict.md)
-  - [百科词条](stu_term.md)
-  - 统计数据
-- 用户中心- User Center
-  - [注册](sign_up.md)
-  - [登陆](sign_in.md)
-  - 找回密码
-  - 个性化设置
-- 实用工具
-  - 佛历
-  - 圣典编码转换
-- 后台管理
-  - 栏目内容管理
-  - 用户管理
-  - 数据表管理
 
-# 藏经阁-Libray
+-   藏经阁-Libray
+    -   [首页](home.md)
+    -   [三藏](palicanon.md)
+    -   [课程](course.md)
+    -   [字典](dict.md)
+    -   [搜索](search.md)
+    -   [个人空间](myzone.md)
+-   译经楼-Studio
+    -   [首页](stu_home.md)
+    -   [三藏分类](stu_pali.md)
+    -   [我的文档(最近打开)](stu_doc.md)
+    -   [逐词解析编辑](stu_wbw.md)
+    -   [协作文档](stu_coop.md)
+    -   [群组管理](stu_group.md)
+    -   [版本管理](stu_channel.md)
+    -   [课程管理](stu_course.md)
+    -   [单词本](stu_dict.md)
+    -   [百科词条](stu_term.md)
+    -   [文章](stu_article.md)
+    -   [文集](stu_collection.md)
+    -   统计数据
+-   用户中心- User Center
+    -   [注册](sign_up.md)
+    -   [登陆](sign_in.md)
+    -   找回密码
+    -   个性化设置
+-   实用工具
+    -   佛历
+    -   圣典编码转换
+-   后台管理
+    -   栏目内容管理
+    -   用户管理
+    -   数据表管理
+
+# 调用后端 API
 
-## 首页
+```mermaid
+graph LR
+
+subgraph 前端
+	subgraph 藏经阁-Libray
+    	home[首页]
+		palicanon[三藏]
+		course[课程]
+		dict[字典]
+		search[搜索]
+		myzone[个人空间]
+	end
+	subgraph 译经楼-Studio
+		stu_home[首页]
+		stu_pali[三藏分类]
+		stu_doc[我的文档]
+		stu_wbw[逐词解析编辑]
+		stu_coop[协作文档]
+		stu_group[群组管理]
+		stu_channel[版本管理]
+		stu_course[课程管理]
+		stu_dict[单词本]
+		stu_term[百科词条]
+		stu_article[文章]
+		stu_collection[文集]
+		统计数据
+	end
+	subgraph 用户-User
+		sign_up[注册]
+		sign_in[登陆]
+		找回密码
+		个性化设置
+	end
+	subgraph 实用工具
+		佛历
+		圣典编码转换
+	end
+	subgraph 后台管理
+		栏目内容管理
+		用户管理
+		数据表管理
+	end
+end
 
-www.wikipali.org
+subgraph API
+	api_user(用户)
+	api_channel(版本)
+	api_term[术语]
+	api_dict[字典]
+	api_course[课程]
+	api_group[工作组]
+	api_palicanon[语料库]
+	api_translation[译文]
+	api_article[文章文集]
+	api_wbw[逐词解析]
+	api_search[全文搜索]
+	api_history[浏览记录]
+	api_others[其他工具表]
+end
 
-### 已经实现的功能能
+home --> api_course
+home --> api_term
+home --> api_article
 
-- 最新课程列表
-- 最新百科词条列表
+palicanon --> api_palicanon
+palicanon --> api_term
 
-### 需要完善的功能
+course --> api_course
+course --> api_user
 
-#### 最新课程列表
+dict --> api_dict
+dict --> api_user
 
-- 返回数量是写死的。应该在栏目后台里可以设置。
+search --> api_palicanon
 
-### 尚未实现的功能(目前的需求)
+myzone --> api_user
+myzone --> api_course
 
-- **最新课程列表**-报名数字显示和报名功能
+stu_pali --> api_palicanon
 
-- 最新三藏译文列表
+stu_doc --> api_history
 
-- 手机版 css
-  - 写不同的 css 在手机端和 pc 看到不同的页面。
-  - 不一定用 css 切换,可以使用不同的技术实现方式。
+stu_wbw --> api_wbw
+stu_wbw --> api_palicanon
 
-### 未来可能的发展
+stu_group --> api_group
 
-- 实现类似 tweet 的文章推荐功能。根据用户阅读行为推荐不同类型和内容的文章。
-- 文章类型
-  - 逐词解析单词
-  - 词典词条
-  - 百科词条
-  - 句子
-  - 段落
-  - 章节
-- 文章属性标签
-  - 译文
-  - 新手试验田
-  - 雅正(希望大家提修改意见)
-  - 求助
-- 应用场景
-  - 当有学习者不知道某个词的拆分,他在编辑器(studio)中单词的位置选择“求助”按钮。会发布一个带有“求助”标签的“逐词解析”类型的文章。某老师或网友看到求助文章,可以以跟帖的方式回答。
+```
 
+# 藏经阁-Libray
 
-## 三藏分类
+## 首页
 
-www.wikipali.org/palicanon
+www.wikipali.org
 
 ### 已经实现的功能能
 
-- 章节标签过滤
-- 在阅读器中打开章节
+-   最新课程列表
+-   最新百科词条列表
 
 ### 需要完善的功能
 
-### 尚未实现的功能(目前的需求)
-
-### 未来可能的发展
-
-## 课程
-
-### 已经实现的功能能
+#### 最新课程列表
 
-### 需要完善的功能
+-   返回数量是写死的。应该在栏目后台里可以设置。
 
 ### 尚未实现的功能(目前的需求)
 
-### 未来可能的发展
-
-## 百科
-
-### 已经实现的功能能
+-   **最新课程列表**-报名数字显示和报名功能
 
-### 需要完善的功能
+-   最新三藏译文列表
 
-### 尚未实现的功能(目前的需求)
+-   手机版 css
+    -   写不同的 css 在手机端和 pc 看到不同的页面。
+    -   不一定用 css 切换,可以使用不同的技术实现方式。
 
 ### 未来可能的发展
 
-## 字典
-
-## 标题搜索
-
-## 全文搜索
-
-## 黑体字搜索
-
-## 经典阅读器
-
-# 译经楼 Studio
-
-## 欢迎页
-
-## 经文选择
-
-## 最近打开
-
-## 协作
-
-## 课程管理
-
-## 用户字典管理
-
-## 百科字典管理
-
-## 工作组管理
-
-# 用户中心
-
-## 登录
-
-## 注册
-
-## 用户设置
-
-# 网站后台管理
-
-## 栏目管理
-
-### 首页
-
-### 三藏
-
-### 课程
-
-### 百科
-
-### 字典
-
-### 搜索
-
-### 阅读器
-
-### 用户管理
-
-#### 修改权限
-
-#### 禁用账号
-
-### 数据表管理
-
-#### 查看
-
-#### 统计
-
-#### 添加
-
-#### 删除
-
-# 数据表与模块关系
+-   实现类似 tweet 的文章推荐功能。根据用户阅读行为推荐不同类型和内容的文章。
+-   文章类型
+    -   逐词解析单词
+    -   词典词条
+    -   百科词条
+    -   句子
+    -   段落
+    -   章节
+-   文章属性标签
+    -   译文
+    -   新手试验田
+    -   雅正(希望大家提修改意见)
+    -   求助
+-   应用场景
+    -   当有学习者不知道某个词的拆分,他在编辑器(studio)中单词的位置选择“求助”按钮。会发布一个带有“求助”标签的“逐词解析”类型的文章。某老师或网友看到求助文章,可以以跟帖的方式回答。