创建数据字典

CabloyJS中数据字典的原子类型是dict,既可以在系统运行时动态创建,也可以直接在业务模块中创建静态原子

下面,我们介绍如何通过静态原子的方式来创建数据字典

静态原子创建数据字典

模块a-dictbooster定义了几个常用的数据字典,我们以其中的Countries(国家)为例:

1. 定义静态原子

1)定义静态原子数组

src/module-system/a-dictbooster/backend/src/config/static/dicts.js

  1. 1const countries = require('./dict/countries.js');
  2. 2...
  3. 3
  4. 4module.exports = app => {
  5. 5 const dicts = [
  6. 6 countries(app), //
  7. 7 ...
  8. 8 ];
  9. 9 return dicts;
  10. 10};

2)定义静态原子:a-dictbooster:countries

src/module-system/a-dictbooster/backend/src/config/static/dict/countries.js

  1. 1const countries = require('./cities/countries.json');
  2. 2module.exports = app => {
  3. 3 const dictItems = countries;
  4. 4 const dictLocales = {
  5. 5 'zh-cn': {
  6. 6 USA: '美国',
  7. 7 China: '中国',
  8. 8 },
  9. 9 };
  10. 10 const dict = {
  11. 11 atomName: 'Countries',
  12. 12 atomStaticKey: 'countries',
  13. 13 atomRevision: 0,
  14. 14 description: '',
  15. 15 dictItems: JSON.stringify(dictItems),
  16. 16 dictLocales: JSON.stringify(dictLocales),
  17. 17 resourceRoles: 'root',
  18. 18 };
  19. 19 return dict;
  20. 20};
名称 说明
atomStaticKey 系统自动添加模块名称前缀,生成a-dictbooster:countries
dictItems 所有字典项(后面讲述)
dictLocales 国际化语言资源。数据字典的国际化机制是独立于CabloyJS系统的国际化机制的。也就是说,这里定义的语言资源仅仅作用于当前数据字典,因此不会产生不可预期的冲突
resourceRoles 资源授权对象,这里是角色root

角色root是整个角色树的根,也就意味着所有用户(包括匿名用户)均可访问此资源

3)定义字典项

src/module-system/a-dictbooster/backend/src/config/static/dict/cities/countries.json

  1. 1[
  2. 2 {
  3. 3 "code": "1",
  4. 4 "title": "USA"
  5. 5 },
  6. 6 {
  7. 7 "code": "86",
  8. 8 "title": "China"
  9. 9 }
  10. 10]
名称 说明
code 字典项的唯一标识
title 字典项的标题。作为最佳实践,title一般指定英文,然后通过dictLocales添加其他语言资源

字典项只需指定codetitle两个属性,其他属性和数据可以根据业务需要添加

2. 注册静态原子

前面定义好一组静态原子数据,接下来就需要在模块的meta文件中进行注册

src/module-system/a-dictbooster/backend/src/meta.js

  1. 1module.exports = app => {
  2. 2 ...
  3. 3 // static
  4. 4 const staticDicts = require('./config/static/dicts.js')(app);
  5. 5 const meta = {
  6. 6 base: {
  7. 7 ...
  8. 8 statics: {
  9. 9 'a-dict.dict': {
  10. 10 items: staticDicts,
  11. 11 },
  12. 12 },
  13. 13 },
  14. 14 ...
  15. 15 };
  16. 16 return meta;
  17. 17};
名称 说明
a-dict.dict 原子类型的全称。在这里,原子类型dict是由模块a-dict提供的
items 静态原子数组