useSearchModelInjection.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {computed} from 'vue'
  2. import {injectLocal, provideLocal} from "@vueuse/core";
  3. import {useConditionEventManager} from "@/components/mx-condition/useConditionEventManager";
  4. import {useConditionDataManager} from "@/components/mx-condition/useConditionDataManager";
  5. import {fnPlaceholder} from "@/utils/uni-helper";
  6. const key = Symbol('SEARCH_MODEL_SERVICE')
  7. /* 给业务方使用,希望只是定制查询条件的动态参数与静态参数 */
  8. export const useProvideSearchModel = function (configs, queryParams, formRef = null, sharedData = {}) {
  9. const silence = true
  10. // console
  11. const log = silence
  12. ? {log: fnPlaceholder, warn: console.warn, error: console.error}
  13. : {log: console.log, warn: console.warn, error: console.error}
  14. // uv-form validation
  15. const validator = computed(() => formRef?.value?.validate || fnPlaceholder)
  16. // event manager for trigger onSearch/onInit
  17. const eventManager = useConditionEventManager(queryParams, validator, log)
  18. // request data manager. configs必须提供当前场景所需要的所有condition
  19. const dataManager = useConditionDataManager(configs, eventManager, queryParams, sharedData, log)
  20. const reset = () => {
  21. dataManager.reset()
  22. eventManager.reset()
  23. }
  24. const options = {
  25. queryParams, // 原样返回
  26. sharedData, // 原样返回
  27. rules: dataManager.rules, // 给forms用的校验规则,因为利用uv-form的校验是最简便的
  28. conditions: dataManager.conditions, // 显示条件选项的数据
  29. needValidation: dataManager.needValidation, // 是否需要校验,和渲染uv-form有关
  30. onSearch: eventManager.onSearch, // 搜索事件
  31. onInit: eventManager.onInit, // 搜索事件,第一次
  32. reset // 重置搜索条件状态
  33. }
  34. provideLocal(key, options)
  35. window.searchModel = options
  36. return options
  37. }
  38. export const useInjectSearchModel = function () {
  39. return injectLocal(key)
  40. }