You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

component.md 16 KiB

4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. # 力软框架移动端 · 移动端组件文档
  2. 组件放在 /components 目录下,目录结构如下:
  3. - **/components/learun-app** :力软框架专用定制组件(依赖于力软 API,离开了框架无法独立运行);
  4. - **/components/learun-mpui** :力软框架基础组件(输入框、表单、列表布局等);
  5. - **/components/其他** :其他第三方组件。
  6. 由于不同平台存在差异,力软对不同平台实现了多套组件、多套样式,并使用条件编译进行切换。
  7. # 组件引入方式
  8. 先将组件放置于 /components 目录下,一般来说组件由一个或多个 .vue 文件,可能会包含一些 .js 文件;
  9. 【方法一】全局注册,在 **/main.js** 中引入并注册:
  10. 先引入组件:
  11. `import myComponent from '@/components/my-component/index.vue'`
  12. 再注册组件:
  13. `Vue.component('my-component', myComponent)`
  14. 使用这种方式,组件名必须是静态字符串,不能用变量,且必须带横杠,不要使用 `'myComponent'` 作为注册的名称,这是 uni-app 强制要求的。
  15. 【方法二】单页面引入,在需要使用组件的页面:
  16. ``` javascript
  17. import myComponent from '@/components/xxx/xxx.vue'
  18. export default {
  19. components: { myComponent }
  20. // …
  21. }
  22. ```
  23. 【方法三,推荐】使用 uni-app 提供的 easycom 引入方式:
  24. [easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom) 可以实现批量引入组件,支持自动查找、正则表达式等方式。
  25. 在 **/pages.json** 中进行相关定义:
  26. ``` json
  27. {
  28. // pages.json 的其他项…
  29. "easycom": {
  30. "custom": {
  31. // 固定路径引入
  32. "l-scroll-list": "@/components/learun-app/scroll-list.vue",
  33. // 正则表达式批量匹配,键名中的括号捕获字符,值中的 $1 占位符表示第一组捕获到的值
  34. "l-(.*)": "@/components/learun-mpui/learun-ui-mp/$1.vue"
  35. }
  36. }
  37. }
  38. ```
  39. 【注意】使用固定路径引入时,uni-app 会自上而下来匹配组件名,如果存在某个组件的名称完全包含另一个组件名称(例如,`l-customform` 和 `l-customform-table`)请将长的组件名放在前面,短的放在后面,避免 uni-app 把两个组件都识别为短的。
  40. 使用这种方式,uni 会自动分析页面中用到的组件,并进行按需引入。开发者也可以在单个页面中直接引用组件,自行引用的组件优先级高于 easycom 引入的组件。
  41. 力软框架使用此方式引入基础组件和扩展组件。
  42. # 力软扩展组件
  43. 这些组件依赖力软 API,专为实现力软框架中的需求而开发,离开框架后无法工作;路径: **/components/learun-app**。
  44. ## `<l-customform>` 渲染表单
  45. 按给定的表单结构、数据值渲染出一张表单;框架中的工作流表单、自定义应用均是使用此组件渲染表单。
  46. 工作流表单:自 /common/customform.js、/pages/nworkflow/workflow.js 中的相关方法生成 scheme、initFormValue、rel 等传入;
  47. 自定义应用:自 /pages/customapp/customapp.js 中的相关方法生成 scheme、initFormValue、rel 等传入。
  48. 参数:
  49. - `scheme`: (Array)表单的结构定义
  50. - `initFormValue`: (Objcet)表单的初始数据值
  51. - `editMode`: (Boolean)表单是否可编辑
  52. - `rel`: (Object)表单字段关系,用于处理级联组织结构选择器、日期区间计算等
  53. 组件实例方法:
  54. - `setFormValue(val)`: 设置表单的数据值
  55. - `getFormValue()`: 获取表单的数据值
  56. - `verifyValue()`: 对表单进行验证,返回一个包含所有错误的数组,数组为空则表示无错误
  57. 说明:
  58. `scheme` 中的每一项必须带有 `__valuePath__` 字段表示绑定到表单值的路径;可以带有 `__sourceData__` 字段表示数据源;可以带有 `__relationPath__` 字段表示从 `rel` 中获取依赖关系的路径,获取依赖关系后便可以实现组织结构选择器的级联、日期区间计算等关联计算。
  59. 因为性能原因,该组件不提供 v-model 双向绑定,设置/获取表单值需要使用 `setFormValue()`/`getFormValue()` 两个组件实例方法来进行。
  60. ## `<l-customform-table>` 渲染表单-子表格
  61. 用于 `<l-customform>`,实现其中的子表格渲染;开发者通常不会使用到该组件。
  62. 参数:
  63. - `value`: (Array)子表格的数据值,可以使用 v-model 双向绑定
  64. - `item`: (Object)子表格的 scheme 项
  65. - `edit`: (Boolen)子表格可否编辑
  66. 事件:
  67. - `input`: 实现 v-model 绑定数据值
  68. 说明:
  69. item 参数为子表格 scheme 项,自身需带有 `__defaultItem__` 字段表示表格项的默认值;带有 `fieldsData` 字段即表示子表格的 scheme;子表格 scheme 的每一项,需要 `__valuePath__` 字段表示绑定到表单值的路径;可以带有 `__sourceData__` 字段表示数据源。
  70. ## `<l-scroll-list>` 滚动列表
  71. 滚动列表,带有下拉刷新、上拉加载更多的功能,适配多端。
  72. 参数:
  73. - `refresherBackground`: (String)下拉刷新时露出区域的背景色,默认为 `'#f3f3f3'`
  74. 插槽:
  75. - `default`: 请将列表内容放在本组件标签中
  76. 事件:
  77. - `pullDown`: 下拉刷新列表(需使用 `stopPullDown()` 停止下拉状态)
  78. - `toBottom`: 滚动列表触底,触发上拉加载
  79. - `scroll(h)`: 滚动列表滚动到某个高度
  80. 组件实例方法:
  81. - `scrollTo(h)`: 让列表滚动到某个高度
  82. - `stopPullDown()`: 停止下拉刷新
  83. 说明:
  84. 用于实现下拉刷新、上拉加载列表。
  85. 在 H5 端,uni-app 模拟的下拉列表存在 bug,滚动速度快且特别容易触发下拉刷新,力软框架做了封装处理,只有列表距离顶部的高度接近 0 时才可下拉刷新。
  86. ## `<l-customlist>` 表单列表容器
  87. 用于容纳表单列表项,适用于自定义应用、自定义表单的列表页。
  88. 参数:
  89. - `showTips`: (Boolean)是否显示表尾 tips 文字,默认是 `false`
  90. - `tips`: (String)表尾 tips 文字,默认为 `'已加载全部项目'`
  91. 插槽:
  92. - `default`: 请将列表通过 `v-for` 循环渲染在其中
  93. ## `<l-customlist-action>` 表单列表-操作区
  94. 表单项的操作区,即包含了「编辑」、「删除」、「查看」三个按钮的区域。「查看」按钮是始终显示的,其它两个按钮按需显示。
  95. 参数:
  96. - `showDelete`: (Boolean)是否显示删除按钮,默认是 `false`
  97. - `showEdit`: (Boolean)是否显示编辑按钮,默认是 `false`
  98. 事件:
  99. - `delete`: 点击了删除按钮
  100. - `edit`: 点击了编辑按钮
  101. - `view`: 点击了查看按钮
  102. ## `<l-customlist-add>` 表单列表-新增按钮
  103. 表单列表页面的新增按钮,固定显示在页面右下角。
  104. 参数:
  105. - `icon`: (String)按钮的图标,默认为加号 `'add'`
  106. 事件:
  107. - `click`: 点击了该按钮
  108. ## `<l-customlist-banner>` 表单列表-表头提示栏
  109. 表单列表的表头提示栏,固定在页面顶部,一般用来提示页码等信息。
  110. 参数:
  111. - `buttonShow`: (Boolean)是否在右侧显示一个按钮,一般用于打开筛选侧边栏,默认为 `true`
  112. - `buttonIcon`: (String)按钮的类型,默认为 `'searchlist'`
  113. 插槽:
  114. - `default`: 请将表头要显示的内容放在本组件标签中
  115. 事件:
  116. - `buttonClick`: 表头右侧的按钮被点击
  117. ## `<l-customlist-sidepage-datefilter>` 表单列表-侧边栏-时间日期筛选器
  118. 放在表单列表页的侧边栏中,用于用户打开侧边栏进行日期筛选时使用。
  119. 参数:
  120. - `value`: (Object)筛选的区间值,可以使用 v-model 双向绑定
  121. - `title`: (String)筛选器的标题,默认为 `'按时间日期筛选:'`
  122. - `ranges`: (Array)筛选器允许选择的时间日期区间,默认为 `['all', 'today', '7d', '1m', '3m', 'custom']`
  123. 事件:
  124. - `input`: 实现 v-model 绑定值
  125. - `change`: 筛选区间值发生修改时触发
  126. 说明:
  127. 区间值是一个数组,允许使用以下子项:`'all'` 表示所有,`'today'` 表示今天,`'7d'` 表示7天内,`'1m'` 表示1个月内,`'3m'` 表示3个月内,`'custom'` 表示允许用户自定。
  128. v-model 绑定的值,如果区间设置为「所有」,或者设置为自定义但是给出了错误的区间,那么该值为 `null`,否则其形如:`{ start: '', end: '' }`。
  129. ## `<l-demo-description>` 组件说明
  130. 用于组件演示,介绍组件的功能和用法,点击后才会展开说明文字。
  131. 参数:
  132. - `expand`: (Boolean)是否默认展开,默认为 `false`
  133. - `tips`: (String)未展开状态的文字提示,默认为 `'显示说明'`
  134. 插槽:
  135. - `default`: 把描述文本放在本组件标签中
  136. ## `<l-layer-picker>` 弹层选择器
  137. 表单项中的弹层选择器组件,点击后跳转到弹层选择器页面,用户选择后返回。
  138. 弹层选择页面位于 `/pages/common/select-layer.vue`。
  139. 参数:
  140. - `value`: (String)选择器选择的值,该值直接显示在组件上
  141. - `source`: (Array)数据源,可以通过数据字典或者数据源来加载
  142. - `layerData`: (Array)弹层绑定到的字段的配置,详细要求见下文说明
  143. - `title`: (String)标题文字
  144. - `required`: (Boolean)是否在最左侧显示红色的星号,默认为 `false`
  145. - `placeholder`: (String)数据值为空时的占位文字,默认为 `'点击以选择'`
  146. - `readonly`: (Boolean)是否只读,默认为 `false`
  147. 事件:
  148. - `input`:用户点选某个弹层项后,会触发此事件,事件参数为用户选择的弹层项的值对象
  149. - `change`:同上述 `input` 事件
  150. 说明:
  151. 参数 `source` 的格式只需要为对象数组即可,无特殊要求;
  152. 参数 `layerData` 的格式,有特殊约定:
  153. ``` javascript
  154. const layerData = [
  155. { name: '对应 source 中的哪个字段', label: '显示的标题文字', value: '绑定到表单中的哪个字段' },
  156. // ...
  157. ]
  158. ```
  159. 弹层选择器会根据 `layerData` 中所有 `name` 属性提取出 `source` 中相应的字段,并显示在弹层选择列表当中;
  160. 字段 `label` 为每个弹层值的标题文字。
  161. ## `<l-organize-picker>` 单位组织选择器
  162. 表单中的组织结构选择器,点击后跳转到组织结构选择页面,用户选择后返回。
  163. 组织结构选择页面位于 `/pages/common/select-organize.vue`。
  164. 参数:
  165. - `value`: (String)表单数据值,表示当前所选的组织结构的 id,可以使用 v-model 双向绑定
  166. - `type`: (String)必填项,选择器的级别,可选 `'company'`/`'department'`/`'user'` 表示公司/部门/人员选择器
  167. - `rootType`: (String)选择器根级的种类,配合 `rootId` 使用,控制选择器的可选范围,没有则无范围限制
  168. - `rootId`: (String)选择器根级元素的 id,配合 `rootType` 使用,用于控制选择器的范围,没有则无范围限制
  169. - `title`: (String)标题文字
  170. - `required`: (Boolean)是否在最左侧显示红色的星号,默认为 `false`
  171. - `placeholder`: (String)数据值为空时的占位文字
  172. - `readonly`: (Boolean)是否只读,默认为 `false`
  173. 事件:
  174. - `input`:实现 v-model 绑定;用户点选某个单位组织项后,会触发此事件,事件参数为用户选择的组织结构对象的 id
  175. - `change`:同上述 `input` 事件
  176. 说明:
  177. `rootType` 表示根级元素的类别, `rootId` 示根级元素的 id,这两个属性来确定根级元素;
  178. `rootType` 默认为当前 `type` 的更上一级,例如 `type='user'` 的情况下则 `rootType='department'`;
  179. 存在一个唯一的全局顶级根元素,它的 `rootType` 为 `'company'`,它的 `rootId` 为 `'0'`,它默认不会显示在树形表中,如果没有设置根级元素,那么默认就是使用这个根级元素。
  180. ## `<l-upload-file>` 文件上传下载
  181. 表单项中的文件上传下载组件,数据需要使用特定的格式,见下文说明。
  182. 注意:上传文件时只能添加图片文件;小程序平台有文件格式限定,有文件大小限制,非图片、文档文件也无法保存到本地。
  183. 不同的格式处理方式不同:
  184. 图片:客户端添加的图片直接显示为 `<image>`,点击可以预览;服务器端的图片直接下载到本地,显示方式同。
  185. 文档:在小程序端点击后会开始下载,下载完成会打开预览(钉钉小程序无法预览);App 端点击会开始下载,下载完成会显示打开方式菜单;H5 直接使用浏览器下载;
  186. 其他文件:小程序端点击后会提示无法下载;App 端和 H5 端同温度。
  187. 参数:
  188. - `value`: (Array)当前文件列表,可使用 v-model 双向绑定,格式为 [{ path: '', size: 100, uid: 'xxx', type: 'png' }],见下文说明
  189. - `number`: (Number)允许添加的文件数量上限,默认为 `9`
  190. - `readonly`: (Boolean)是否只读,默认为 `false`
  191. - `title`: (String)标题文字
  192. - `required`: (Boolean)是否在最左侧显示红色的星号,默认为 `false`
  193. 事件:
  194. - `input`:实现 v-model 绑定,文件列表修改,参数为新的文件列表
  195. - `change`:同上述 `input` 事件
  196. - `add`:添加文件时触发
  197. - `del`:删除文件时触发
  198. 说明:
  199. 组件会根据文件列表中的字段来判断显示方式:
  200. - `type`:表示文件格式,组件根据格式来显示文件,是图片格式则显示为 `<image>` 预览,是文档则显示为文档图标,否则显示为文件图标
  201. - `path`:文件在本地的临时路径,图片文件会直接使用该字段作为 `<image>` 的 `src` 属性
  202. - `uid`:文件的 id,使用该字段作为服务器下载文件的参数
  203. - `size`:文件大小,单位为 Byte,小程序无法打开超过 50MB 的文件,会根据此字段进行判断
  204. 注意:刚添加的文件,没有 `uid` 和 `size` 字段,只有从服务器下载的文件才会有这些字段,因此可以通过这些字段判断哪些文件需要上传。
  205. 文件不会自动上传,开发者通过 `v-model` 绑定的值获取文件临时路径,依次上传这些文件。
  206. ## `<l-organize-tree>` 单位组织-树形表
  207. 单位组织结构的树形表,用于通讯录、组织结构选择器。
  208. 本组件为递归组件,展示自身和子节点。
  209. 参数:
  210. - `root`: (Object)组织结构根节点,默认为 `{ type: 'company', id: '0' }`,系统内置的根节点
  211. - `button`: (Boolean)是否展示选择按钮,默认为 `false`
  212. - `level`: (String)在哪一级节点上展示选择按钮,需要开启 `button`,默认为 `'user'`
  213. 事件:
  214. - `userClick(item)`:点击用户级别节点时触发事件
  215. - `buttonClick(item)`: 点击选择按钮时触发事件,未开启显示按钮则不会触发此事件
  216. 说明:
  217. 用做通讯录时,一般使用 `userClick` 事件;用做组织结构选择器时,一般使用 `buttonClick` 事件。
  218. ## `<l-organize-single-item>` 单位组织-用户列表
  219. 用于平级显示用户信息,用于通讯录输入了搜索文字后,展示平级列表的用户子项。
  220. 参数:
  221. - `item`: (Object)用户对象
  222. - `button`: (Boolean)是否展示选择按钮,默认为 `false`
  223. 事件:
  224. - `buttonClick(item)`:点击选择按钮时触发的事件
  225. - `click(item)`: 点击事件
  226. ## `<l-workflow-action>` 工作流操作区
  227. 显示工作流的操作区按钮。
  228. 参数:
  229. - `currentNode`: (Object)当前节点信息(获取审核按钮列表、是否允许加签)
  230. - `currentTask`: (Object)当前任务信息(获取打来自、是否可以加签)
  231. - `type`: (String)当前页面类型,可选值:`'child'`、`'refer'`、`'view'`、`'create'`(仅系统表单)、`'again'`(仅系统表单)
  232. 事件:
  233. - `audit(auditItem)`:点击审批按钮时触发的事件,参数为审批按钮对象
  234. - `action(type)`: 点击表单操作按钮时触发的事件,参数为操作类型字符串,可选值:`'urge'`/`'revoke'`/`'refer'`/`'draft'`/`'submit'` 分别表示催办/撤销/传阅/草稿提交/表单提交
  235. ## `<l-workflow-timeline>` 工作流时间线
  236. 显示工作流的时间线。
  237. 参数:
  238. - `processList`: (Array)流程信息中的时间线
  239. -