@dhccmobile/vue3-lo-form 2.1.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +4 -5
  2. package/dist/vue3-lo-form.common.js +27 -27
  3. package/dist/vue3-lo-form.common.js.map +1 -1
  4. package/dist/vue3-lo-form.css +1 -1
  5. package/dist/vue3-lo-form.umd.js +27 -27
  6. package/dist/vue3-lo-form.umd.js.map +1 -1
  7. package/dist/vue3-lo-form.umd.min.js +1 -1
  8. package/dist/vue3-lo-form.umd.min.js.map +1 -1
  9. package/package.json +1 -1
  10. package/src/App.vue +115 -121
  11. package/src/UserInfoForm.vue +177 -0
  12. package/src/components/form/DvFormLayout.vue +1 -2
  13. package/src/components/index.js +4 -0
  14. package/src/components/index.js.map +1 -0
  15. package/src/constants/config/form-template.config.js +33 -0
  16. package/src/constants/config/form-template.config.js.map +1 -0
  17. package/src/constants/config/form.config.js +5 -0
  18. package/src/constants/config/form.config.js.map +1 -0
  19. package/src/constants/config/storage.config.js +5 -0
  20. package/src/constants/config/storage.config.js.map +1 -0
  21. package/src/constants/encode-assets/icons.js +2 -0
  22. package/src/constants/encode-assets/icons.js.map +1 -0
  23. package/src/constants/encode-assets/svg.js +8 -0
  24. package/src/constants/encode-assets/svg.js.map +1 -0
  25. package/src/constants/enum/builtIn-label.enum.js +6 -0
  26. package/src/constants/enum/builtIn-label.enum.js.map +1 -0
  27. package/src/constants/enum/cache-type.enum.js +8 -0
  28. package/src/constants/enum/cache-type.enum.js.map +1 -0
  29. package/src/constants/enum/control-format-type.enum.js +10 -0
  30. package/src/constants/enum/control-format-type.enum.js.map +1 -0
  31. package/src/constants/enum/dynamic-option-type.enum.js +7 -0
  32. package/src/constants/enum/dynamic-option-type.enum.js.map +1 -0
  33. package/src/constants/enum/form-bus-attr.enum.js +9 -0
  34. package/src/constants/enum/form-bus-attr.enum.js.map +1 -0
  35. package/src/constants/enum/form-field-class.enum.js +8 -0
  36. package/src/constants/enum/form-field-class.enum.js.map +1 -0
  37. package/src/constants/enum/form-field-type.enum.js +24 -0
  38. package/src/constants/enum/form-field-type.enum.js.map +1 -0
  39. package/src/constants/enum/form-type.enum.js +6 -0
  40. package/src/constants/enum/form-type.enum.js.map +1 -0
  41. package/src/constants/enum/index.js +20 -0
  42. package/src/constants/enum/index.js.map +1 -0
  43. package/src/constants/enum/lateral-arrangement.enum.js +10 -0
  44. package/src/constants/enum/lateral-arrangement.enum.js.map +1 -0
  45. package/src/constants/enum/money-unit.enum.js +7 -0
  46. package/src/constants/enum/money-unit.enum.js.map +1 -0
  47. package/src/constants/enum/option-type.enum.js +6 -0
  48. package/src/constants/enum/option-type.enum.js.map +1 -0
  49. package/src/constants/enum/submitted-type.enum.js +35 -0
  50. package/src/constants/enum/submitted-type.enum.js.map +1 -0
  51. package/src/constants/enum/support-upload-type.enum.js +6 -0
  52. package/src/constants/enum/support-upload-type.enum.js.map +1 -0
  53. package/src/constants/enum/switch.enum.js +6 -0
  54. package/src/constants/enum/switch.enum.js.map +1 -0
  55. package/src/constants/enum/upload-type.enum.js +18 -0
  56. package/src/constants/enum/upload-type.enum.js.map +1 -0
  57. package/src/constants/enum/validate-rules.enum.js +26 -0
  58. package/src/constants/enum/validate-rules.enum.js.map +1 -0
  59. package/src/constants/enum/validate-status.enum.js +9 -0
  60. package/src/constants/enum/validate-status.enum.js.map +1 -0
  61. package/src/constants/enum/vertical-arrangement.enum.js +8 -0
  62. package/src/constants/enum/vertical-arrangement.enum.js.map +1 -0
  63. package/src/constants/enum/zoom-type.js +7 -0
  64. package/src/constants/enum/zoom-type.js.map +1 -0
  65. package/src/constants/index.js +4 -0
  66. package/src/constants/index.js.map +1 -0
  67. package/src/core/FormApi.js +1241 -0
  68. package/src/core/FormApi.js.map +1 -0
  69. package/src/core/FormApi.ts +1 -1
  70. package/src/core/index.js +2 -0
  71. package/src/core/index.js.map +1 -0
  72. package/src/domain/AbstractControl.js +4 -0
  73. package/src/domain/AbstractControl.js.map +1 -0
  74. package/src/domain/Control.js +2 -0
  75. package/src/domain/Control.js.map +1 -0
  76. package/src/domain/CustomFormat.js +2 -0
  77. package/src/domain/CustomFormat.js.map +1 -0
  78. package/src/domain/DesForm.js +29 -0
  79. package/src/domain/DesForm.js.map +1 -0
  80. package/src/domain/DesFormControl.js +163 -0
  81. package/src/domain/DesFormControl.js.map +1 -0
  82. package/src/domain/DesFormLayout.js +33 -0
  83. package/src/domain/DesFormLayout.js.map +1 -0
  84. package/src/domain/FieldChangeHistory.js +2 -0
  85. package/src/domain/FieldChangeHistory.js.map +1 -0
  86. package/src/domain/FormConfig.js +2 -0
  87. package/src/domain/FormConfig.js.map +1 -0
  88. package/src/domain/FormControl.js +102 -0
  89. package/src/domain/FormControl.js.map +1 -0
  90. package/src/domain/FormEnum.js +2 -0
  91. package/src/domain/FormEnum.js.map +1 -0
  92. package/src/domain/FormGroup.js +38 -0
  93. package/src/domain/FormGroup.js.map +1 -0
  94. package/src/domain/FormRestfulResponse.js +2 -0
  95. package/src/domain/FormRestfulResponse.js.map +1 -0
  96. package/src/domain/ProvideInjectData.js +2 -0
  97. package/src/domain/ProvideInjectData.js.map +1 -0
  98. package/src/domain/SysDictDetail.js +25 -0
  99. package/src/domain/SysDictDetail.js.map +1 -0
  100. package/src/domain/SysDictInfo.js +25 -0
  101. package/src/domain/SysDictInfo.js.map +1 -0
  102. package/src/domain/SysDictTreeDetail.js +35 -0
  103. package/src/domain/SysDictTreeDetail.js.map +1 -0
  104. package/src/domain/index.js +13 -0
  105. package/src/domain/index.js.map +1 -0
  106. package/src/filtres/amount-capitalization.filter.js +150 -0
  107. package/src/filtres/amount-capitalization.filter.js.map +1 -0
  108. package/src/filtres/extract-options.filter.js +54 -0
  109. package/src/filtres/extract-options.filter.js.map +1 -0
  110. package/src/filtres/generate-grid-column-end.filter.js +18 -0
  111. package/src/filtres/generate-grid-column-end.filter.js.map +1 -0
  112. package/src/filtres/generate-grid-template-columns.filter.js +20 -0
  113. package/src/filtres/generate-grid-template-columns.filter.js.map +1 -0
  114. package/src/filtres/switch-enum-convert.filter.js +18 -0
  115. package/src/filtres/switch-enum-convert.filter.js.map +1 -0
  116. package/src/filtres/zoom-multiple.filter.js +31 -0
  117. package/src/filtres/zoom-multiple.filter.js.map +1 -0
  118. package/src/index.js +69 -0
  119. package/src/index.js.map +1 -0
  120. package/src/main.js +22 -0
  121. package/src/main.js.map +1 -0
  122. package/src/main.ts +2 -2
  123. package/src/services/api.service.js +74 -0
  124. package/src/services/api.service.js.map +1 -0
  125. package/src/services/clean-local-forage.service.js +53 -0
  126. package/src/services/clean-local-forage.service.js.map +1 -0
  127. package/src/services/date-format.service.js +76 -0
  128. package/src/services/date-format.service.js.map +1 -0
  129. package/src/services/dict-local-forage.service.js +53 -0
  130. package/src/services/dict-local-forage.service.js.map +1 -0
  131. package/src/services/form-bean-utils.service.js +39 -0
  132. package/src/services/form-bean-utils.service.js.map +1 -0
  133. package/src/services/form-local-forage.service.js +53 -0
  134. package/src/services/form-local-forage.service.js.map +1 -0
  135. package/src/services/form-tools.service.js +750 -0
  136. package/src/services/form-tools.service.js.map +1 -0
  137. package/src/services/form-tree-node-convert.service.js +174 -0
  138. package/src/services/form-tree-node-convert.service.js.map +1 -0
  139. package/src/services/form-validate.service.js +100 -0
  140. package/src/services/form-validate.service.js.map +1 -0
  141. package/src/services/index.js +10 -0
  142. package/src/services/index.js.map +1 -0
  143. package/src/services/router.service.js +94 -0
  144. package/src/services/router.service.js.map +1 -0
  145. package/src/services/validate-generator.service.js +688 -0
  146. package/src/services/validate-generator.service.js.map +1 -0
  147. package/src/store/dict.store.js +52 -0
  148. package/src/store/dict.store.js.map +1 -0
  149. package/src/store/form.store.js +26 -0
  150. package/src/store/form.store.js.map +1 -0
  151. package/src/store/index.js +3 -0
  152. package/src/store/index.js.map +1 -0
  153. package/src/styles/theme2.scss +1 -1
  154. package/src/types/formTheme.js +2 -0
  155. package/src/types/formTheme.js.map +1 -0
  156. package/src/types/formTheme.ts +8 -0
  157. package/src/types/vfForm.js +2 -0
  158. package/src/types/vfForm.js.map +1 -0
  159. package/types/core/FormApi.d.ts +1 -1
  160. package/types/types/formTheme.d.ts +8 -0
package/README.md CHANGED
@@ -4,12 +4,11 @@
4
4
  动态表单-支持Vue3.0版-PC端-插件
5
5
 
6
6
  ### 更新日志
7
+ - 2.1.3
8
+ 1. 调用脱敏接口时追加参数,字段的中文含义 2026年6月1日 13:47:24
7
9
  - 2.1.2
8
- 修改2.1.1版本的发现的缺陷 2026年5月18日 09:29:36
9
- - 2.1.1
10
- 修改2.1.0版本的发现的缺陷 2026年5月16日 15:58:23
11
- - 2.1.0
12
- 新增字段脱敏展示和点击小眼睛展示原文功能2026年5月15日 16:29:26
10
+ 1. 新增字段脱敏展示和点击小眼睛展示原文功能
11
+ 2. 修改之前版本发现的缺陷 2026年5月18日 09:29:36
13
12
  - 2.0.55
14
13
  解决自定义组件的样式问题
15
14
  - 2.0.53
@@ -92,6 +92,17 @@ module.exports =
92
92
 
93
93
  module.exports = require("vue-property-decorator");
94
94
 
95
+ /***/ }),
96
+
97
+ /***/ "12fb":
98
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
99
+
100
+ "use strict";
101
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_771177e0_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("71cf");
102
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_771177e0_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_771177e0_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
103
+ /* unused harmony reexport * */
104
+
105
+
95
106
  /***/ }),
96
107
 
97
108
  /***/ "1937":
@@ -196,6 +207,13 @@ module.exports = require("dayjs");
196
207
 
197
208
  /***/ }),
198
209
 
210
+ /***/ "71cf":
211
+ /***/ (function(module, exports, __webpack_require__) {
212
+
213
+ // extracted by mini-css-extract-plugin
214
+
215
+ /***/ }),
216
+
199
217
  /***/ "8bbf":
200
218
  /***/ (function(module, exports) {
201
219
 
@@ -453,24 +471,6 @@ const FormFieldType = {
453
471
  };
454
472
 
455
473
 
456
- /***/ }),
457
-
458
- /***/ "cee9":
459
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
460
-
461
- "use strict";
462
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_6014843b_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d0f3");
463
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_6014843b_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_cli_service_node_modules_vue_loader_v16_dist_index_js_ref_1_1_DvFormLayout_vue_vue_type_style_index_0_id_6014843b_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
464
- /* unused harmony reexport * */
465
-
466
-
467
- /***/ }),
468
-
469
- /***/ "d0f3":
470
- /***/ (function(module, exports, __webpack_require__) {
471
-
472
- // extracted by mini-css-extract-plugin
473
-
474
474
  /***/ }),
475
475
 
476
476
  /***/ "d29d":
@@ -1912,9 +1912,9 @@ var es_array_push_js_ = __webpack_require__("2439");
1912
1912
  // EXTERNAL MODULE: external "tslib"
1913
1913
  var external_tslib_ = __webpack_require__("d7bc");
1914
1914
 
1915
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/ts-loader??ref--15-3!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--7!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./src/components/form/DvFormLayout.vue?vue&type=template&id=6014843b&scoped=true&ts=true
1915
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--15-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/ts-loader??ref--15-3!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--7!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--1-1!./src/components/form/DvFormLayout.vue?vue&type=template&id=771177e0&scoped=true&ts=true
1916
1916
 
1917
- const _withScopeId = n => (Object(external_vue_["pushScopeId"])("data-v-6014843b"), n = n(), Object(external_vue_["popScopeId"])(), n);
1917
+ const _withScopeId = n => (Object(external_vue_["pushScopeId"])("data-v-771177e0"), n = n(), Object(external_vue_["popScopeId"])(), n);
1918
1918
  const _hoisted_1 = {
1919
1919
  class: "lo-control-box"
1920
1920
  };
@@ -1997,7 +1997,7 @@ const _hoisted_26 = {
1997
1997
  key: 0,
1998
1998
  class: "addon-readonly"
1999
1999
  };
2000
- function DvFormLayoutvue_type_template_id_6014843b_scoped_true_ts_true_render(_ctx, _cache, $props, $setup, $data, $options) {
2000
+ function DvFormLayoutvue_type_template_id_771177e0_scoped_true_ts_true_render(_ctx, _cache, $props, $setup, $data, $options) {
2001
2001
  const _component_a_tooltip = Object(external_vue_["resolveComponent"])("a-tooltip");
2002
2002
  const _component_question_circle_outlined = Object(external_vue_["resolveComponent"])("question-circle-outlined");
2003
2003
  const _component_clock_circle_outlined = Object(external_vue_["resolveComponent"])("clock-circle-outlined");
@@ -2617,7 +2617,7 @@ function DvFormLayoutvue_type_template_id_6014843b_scoped_true_ts_true_render(_c
2617
2617
  _: 3
2618
2618
  }, 8, ["class", "layout", "style"])) : Object(external_vue_["createCommentVNode"])("", true);
2619
2619
  }
2620
- // CONCATENATED MODULE: ./src/components/form/DvFormLayout.vue?vue&type=template&id=6014843b&scoped=true&ts=true
2620
+ // CONCATENATED MODULE: ./src/components/form/DvFormLayout.vue?vue&type=template&id=771177e0&scoped=true&ts=true
2621
2621
 
2622
2622
  // EXTERNAL MODULE: external "vue-property-decorator"
2623
2623
  var external_vue_property_decorator_ = __webpack_require__("01a6");
@@ -6373,7 +6373,6 @@ let DvFormLayoutvue_type_script_lang_ts_DvFormLayout = class DvFormLayout extend
6373
6373
  */
6374
6374
  get treeSelectOptions() {
6375
6375
  const value = this.options;
6376
- console.log(value);
6377
6376
  if (value && value.length > 0) {
6378
6377
  const items = formBeanUtilsService.copy(value);
6379
6378
  this.treeSelectRecursion(items);
@@ -7032,6 +7031,7 @@ let DvFormLayoutvue_type_script_lang_ts_DvFormLayout = class DvFormLayout extend
7032
7031
  this.isAfterClick = !this.isAfterClick;
7033
7032
  const formApi = this.control.formApi;
7034
7033
  if (this.isAfterClick) {
7034
+ var _formControl$controlA;
7035
7035
  const encData = formApi.formData[formControl.key + "Enc"];
7036
7036
  if (!formControl.oldValue) {
7037
7037
  // 保存原始脱敏值
@@ -7043,7 +7043,7 @@ let DvFormLayoutvue_type_script_lang_ts_DvFormLayout = class DvFormLayout extend
7043
7043
  };
7044
7044
  params.ciphertext = encData; // 密文
7045
7045
  params.desensField = formControl.key; // 脱敏的字段
7046
- console.error(params);
7046
+ params.desensFieldNm = (_formControl$controlA = formControl.controlAttr) === null || _formControl$controlA === void 0 ? void 0 : _formControl$controlA.formFieldDescribe; // 脱敏的字段的中文label
7047
7047
  this.getFieldPlaintext(path, params).then(res => {
7048
7048
  if (res.code === 1) {
7049
7049
  formControl.value = res.data;
@@ -7245,8 +7245,8 @@ DvFormLayoutvue_type_script_lang_ts_DvFormLayout = Object(external_tslib_["__dec
7245
7245
  /* harmony default export */ var DvFormLayoutvue_type_script_lang_ts = (DvFormLayoutvue_type_script_lang_ts_DvFormLayout);
7246
7246
  // CONCATENATED MODULE: ./src/components/form/DvFormLayout.vue?vue&type=script&lang=ts
7247
7247
 
7248
- // EXTERNAL MODULE: ./src/components/form/DvFormLayout.vue?vue&type=style&index=0&id=6014843b&lang=scss&scoped=true
7249
- var DvFormLayoutvue_type_style_index_0_id_6014843b_lang_scss_scoped_true = __webpack_require__("cee9");
7248
+ // EXTERNAL MODULE: ./src/components/form/DvFormLayout.vue?vue&type=style&index=0&id=771177e0&lang=scss&scoped=true
7249
+ var DvFormLayoutvue_type_style_index_0_id_771177e0_lang_scss_scoped_true = __webpack_require__("12fb");
7250
7250
 
7251
7251
  // CONCATENATED MODULE: ./src/components/form/DvFormLayout.vue
7252
7252
 
@@ -7256,7 +7256,7 @@ var DvFormLayoutvue_type_style_index_0_id_6014843b_lang_scss_scoped_true = __web
7256
7256
 
7257
7257
 
7258
7258
 
7259
- const DvFormLayout_exports_ = /*#__PURE__*/exportHelper_default()(DvFormLayoutvue_type_script_lang_ts, [['render',DvFormLayoutvue_type_template_id_6014843b_scoped_true_ts_true_render],['__scopeId',"data-v-6014843b"]])
7259
+ const DvFormLayout_exports_ = /*#__PURE__*/exportHelper_default()(DvFormLayoutvue_type_script_lang_ts, [['render',DvFormLayoutvue_type_template_id_771177e0_scoped_true_ts_true_render],['__scopeId',"data-v-771177e0"]])
7260
7260
 
7261
7261
  /* harmony default export */ var form_DvFormLayout = (DvFormLayout_exports_);
7262
7262
  // CONCATENATED MODULE: ./src/services/date-format.service.ts