AddressEditDetail.mjs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { Fragment as _Fragment, createVNode as _createVNode } from "vue";
  2. import { ref, defineComponent } from "vue";
  3. import { createNamespace, numericProp } from "../utils/index.mjs";
  4. import { Cell } from "../cell/index.mjs";
  5. import { Field } from "../field/index.mjs";
  6. const [name, bem] = createNamespace("address-edit-detail");
  7. const t = createNamespace("address-edit")[2];
  8. var stdin_default = defineComponent({
  9. name,
  10. props: {
  11. show: Boolean,
  12. rows: numericProp,
  13. value: String,
  14. rules: Array,
  15. focused: Boolean,
  16. maxlength: numericProp,
  17. searchResult: Array,
  18. showSearchResult: Boolean
  19. },
  20. emits: ["blur", "focus", "input", "selectSearch"],
  21. setup(props, {
  22. emit
  23. }) {
  24. const field = ref();
  25. const showSearchResult = () => props.focused && props.searchResult && props.showSearchResult;
  26. const onSelect = (express) => {
  27. emit("selectSearch", express);
  28. emit("input", `${express.address || ""} ${express.name || ""}`.trim());
  29. };
  30. const renderSearchResult = () => {
  31. if (!showSearchResult()) {
  32. return;
  33. }
  34. const {
  35. searchResult
  36. } = props;
  37. return searchResult.map((express) => _createVNode(Cell, {
  38. "clickable": true,
  39. "key": (express.name || "") + (express.address || ""),
  40. "icon": "location-o",
  41. "title": express.name,
  42. "label": express.address,
  43. "class": bem("search-item"),
  44. "border": false,
  45. "onClick": () => onSelect(express)
  46. }, null));
  47. };
  48. const onBlur = (event) => emit("blur", event);
  49. const onFocus = (event) => emit("focus", event);
  50. const onInput = (value) => emit("input", value);
  51. return () => {
  52. if (props.show) {
  53. return _createVNode(_Fragment, null, [_createVNode(Field, {
  54. "autosize": true,
  55. "clearable": true,
  56. "ref": field,
  57. "class": bem(),
  58. "rows": props.rows,
  59. "type": "textarea",
  60. "rules": props.rules,
  61. "label": t("addressDetail"),
  62. "border": !showSearchResult(),
  63. "maxlength": props.maxlength,
  64. "modelValue": props.value,
  65. "placeholder": t("addressDetail"),
  66. "onBlur": onBlur,
  67. "onFocus": onFocus,
  68. "onUpdate:modelValue": onInput
  69. }, null), renderSearchResult()]);
  70. }
  71. };
  72. }
  73. });
  74. export {
  75. stdin_default as default
  76. };