uni-helper.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import {string} from "@/uni_modules/uv-ui-tools/libs/function/test";
  2. export const fnPlaceholder = () => {
  3. }
  4. export const confirmAsync = async (msgOrOptions) => {
  5. return new Promise((resolve, reject) => {
  6. const inputOptions = string(msgOrOptions) ? {content: msgOrOptions} : msgOrOptions
  7. const defaultOptions = {
  8. success: res => {
  9. if (res.confirm) resolve()
  10. else reject('user cancelled')
  11. }
  12. }
  13. const options = Object.assign({}, defaultOptions, inputOptions)
  14. uni.showModal(options)
  15. })
  16. }
  17. export const alertAsync = async (msgOrOptions) => {
  18. const options = string(msgOrOptions) ? {content: msgOrOptions} : msgOrOptions
  19. options.showCancel = false
  20. return confirmAsync(options)
  21. }
  22. export const autoFormValidate = function (instance, event) {
  23. // $uv.formValidate 在vue3并不能正常运行,setup与options不通用。
  24. const formItem = findAncestorComponentByName(instance, 'uv-form-item')
  25. const form = findAncestorComponentByName(formItem, 'uv-form')
  26. if (formItem && form) {
  27. // TODO: 现在只让它支持error-change,其它保持原逻辑。
  28. // 原change逻辑触发过余频繁,可以将trigger: ['change', 'error-change'] 保持原样
  29. if (event == 'change' && formItem.message) event = 'error-' + event
  30. form.validateField(formItem.prop, fnPlaceholder, event)
  31. }
  32. }
  33. export const findAncestorComponentByName = function (instance, name) {
  34. let parent = instance?.parent; // 获取父组件实例
  35. while (parent) {
  36. // 判断父组件的名称是否匹配
  37. if (parent.type?.name === name) return parent.proxy; // 找到匹配的祖先组件
  38. parent = parent.parent; // 向上查找父组件
  39. }
  40. return null; // 如果未找到匹配的祖先组件,返回 null
  41. }