页面组件

12003

1. 构建页面需要的库

vuetify: UI库
nunjucks:模板引擎库,include来复用代码或引入组件

2. 页面位置

在JianghuJS框架中,HTML 文件存放在/app/view/page文件夹下。

3. 用jianghu-init 创建项目

参考初始化项目

4. 页面构成

一个Page文件通常由以下几部分构成:

  • 父页面:使用extends用来指定父页面, 例如: {% extends 'template/jhTemplateV4.html'%}
  • vueTemplate: 用于呈现页面结构和内容的HTML代码
  • vueScript:用于处理页面的数据和逻辑的JavaScript代码

以helpV4.html为例

  1. {% extends 'template/jhTemplateV4.html'%}
  2. {% block vueTemplate %}
  3. <script type="text/html" id="app-template">
  4. <div>
  5. <v-app mobile-breakpoint="sm">
  6. <jh-menu />
  7. <v-main class="mt-15">
  8. ........
  9. <div class="jh-page-body-container px-8">
  10. <v-card class="rounded-lg jh-page-doc-container pa-4">
  11. <!-- 页面内容 >>>>>>>>>>>>> -->
  12. <div v-if="error.errorCode">
  13. <h2>{{ error.errorCode }} : {{ error.errorReason }}</h2>
  14. <hr/>
  15. <h2>{{ error.errorReasonSupplement }}</h2>
  16. </div>
  17. <div v-else>
  18. <h2>亲,你似乎迷路了?</h2>
  19. </div>
  20. <!-- <<<<<<<<<<<<< 页面内容 -->
  21. </v-card>
  22. </div>
  23. </v-main>
  24. </v-app>
  25. </div>
  26. </script>
  27. <div id="app">
  28. </div>
  29. {% endblock %}
  30. {% block vueScript %}
  31. <script type="module">
  32. new Vue({
  33. el: '#app',
  34. template: '#app-template',
  35. vuetify: new Vuetify(),
  36. data: () => ({
  37. error: {
  38. errorCode: null,
  39. errorReason: null,
  40. errorReasonSupplement: null,
  41. },
  42. ..........
  43. }),
  44. async created() {
  45. const urlObj = new URLSearchParams(location.search);
  46. if (urlObj.get('errorCode')) {
  47. this.error.errorCode = urlObj.get('errorCode');
  48. }
  49. .......
  50. },
  51. methods: {}
  52. })
  53. </script>
  54. {% endblock %}

5. 全局变量

  • appInfo
    • 用法:window.appInfo.appId
  1. module.exports = appInfo => {
  2. assert(appInfo);
  3. const appId = 'jianghujs-1table-crud-file';
  4. const uploadDir = path.join(appInfo.baseDir, 'upload');
  5. const downloadBasePath = `/${appId}/upload`;
  6. return {
  7. appId,
  8. appTitle: '文件管理',
  9. appLogo: `${appId}/public/img/logo.png`,
  10. appType: 'single',
  11. appDirectoryLink: '/',
  12. indexPage: `/${appId}/page/studentFileManagement`,
  13. .......
  14. ].join(','),
  15. },
  16. middleware,
  17. ...middlewareMatch,
  18. };
  19. };
  • userInfo

    • 登录的用户ID和用户名可以通过userInfo取到。

    • 用法:window.userinfo.userId window.userinfo.userName

6. doUiaction施工方案

  • JianghuJS 中的施工方案是把施工方案的原则,用doUiAction页面中定义的js方法实现,即在JianghuJS框架中, html上的所有操作都调用 doUiAction方法。
    详见 前端施工方案 doUiAction

7. 发起resource请求配置说明

7.1 前端页面用jianghuAxios发起Resource请求

jianghuAxios是江湖JS框架进行了简单的axios封装,在使用 jianghuAxios 发起 Resource 请求时,框架提供了部分数据打包参数,还需要配置部分参数:pageId、actionId、actionData、where、sort等。

  • 用例

代码来源: basic项目中的doUiAction.html

  1. // 引入jianghuAxios
  2. {% include 'common/jianghuAxios.html' %}
  3. // 使用jianghuAxios
  4. <script>
  5. async getTableData() {
  6. const result = await window.jianghuAxios({
  7. data: {
  8. appData: {
  9. pageId: 'doUiAction',
  10. actionId: 'selectItemList',
  11. actionData: {},
  12. where: {},
  13. }
  14. }
  15. });
  16. this.tableData = result.data.appData.resultData.rows;
  17. },
  18. </script>

7.2 参数说明

where offset limit参数只有在 sql resource场景有用

协议字段 类型 描述
packageId String 必填✅ 协议包的唯一id; 可以使用时间戳 + 随机数生成; 比如: 1622720431076_3905352
packageType String 必填✅ 协议包类型; 比如:'httpRequest', 'socketForward', 'socketRequest'
appData Object 必填✅ 协议包数据
--appId String 必填✅ 应用ID; 比如: demo_xiaoapp
--pageId String 必填✅ 页面ID; 比如: demoPage
--actionId String 必填✅ 操作ID; 比如: selectStudentList
--authToken String 必填✅ 用户令牌
--userAgent String 选填 客户端浏览器信息; 通过window.navigator.userAgent 获取
--where Object 选填 where条件; 比如: { name: '张三丰', classId: '2021-01级-02班' }
--whereIn Object 选填 where in查询条件; 比如: {name: ['张三丰', '张无忌']}
--whereLike Object 选填 where 模糊查询条件; 比如: { name: '张%' }
--whereOptions Array 选填 where条件 ; 比如: [['name', '=', 'zhangshan'],['level', '>', 3],['name', 'like', '%zhang%']]
--whereOrOptions Array 选填 where or 条件; 比如: [['name', '=', 'zhangshan'],['level', '>', 3],['a', 100]]
--offset Number 选填 查询起始位置; 比如: 0
--limit Number 选填 查询条数,默认查所有; 比如: 10
--orderBy Array 选填 排序; 比如: [{ column: 'age', order: 'desc' }]
--actionData Object 选填 操作数据,比如:要保存或更新的数据... { name: '张三丰', level: '03' }

8. 备注:每个页面都需要记录在_page表, 否则无法访问

参考江湖框架-后端开发-页面(Page)