AddressListItem.mjs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import { defineComponent, createVNode as _createVNode } from "vue";
  2. import { extend, createNamespace, makeRequiredProp, makeStringProp } from "../utils/index.mjs";
  3. import { Tag } from "../tag/index.mjs";
  4. import { Icon } from "../icon/index.mjs";
  5. import { Cell } from "../cell/index.mjs";
  6. import { Radio } from "../radio/index.mjs";
  7. import { Checkbox } from "../checkbox/index.mjs";
  8. const [name, bem] = createNamespace("address-item");
  9. var stdin_default = defineComponent({
  10. name,
  11. props: {
  12. address: makeRequiredProp(Object),
  13. disabled: Boolean,
  14. switchable: Boolean,
  15. singleChoice: Boolean,
  16. defaultTagText: String,
  17. rightIcon: makeStringProp("edit")
  18. },
  19. emits: ["edit", "click", "select"],
  20. setup(props, {
  21. slots,
  22. emit
  23. }) {
  24. const onClick = (event) => {
  25. if (props.switchable) {
  26. emit("select");
  27. }
  28. emit("click", event);
  29. };
  30. const renderRightIcon = () => _createVNode(Icon, {
  31. "name": props.rightIcon,
  32. "class": bem("edit"),
  33. "onClick": (event) => {
  34. event.stopPropagation();
  35. emit("edit");
  36. emit("click", event);
  37. }
  38. }, null);
  39. const renderTag = () => {
  40. if (slots.tag) {
  41. return slots.tag(props.address);
  42. }
  43. if (props.address.isDefault && props.defaultTagText) {
  44. return _createVNode(Tag, {
  45. "type": "primary",
  46. "round": true,
  47. "class": bem("tag")
  48. }, {
  49. default: () => [props.defaultTagText]
  50. });
  51. }
  52. };
  53. const renderContent = () => {
  54. const {
  55. address,
  56. disabled,
  57. switchable,
  58. singleChoice
  59. } = props;
  60. const Info = [_createVNode("div", {
  61. "class": bem("name")
  62. }, [`${address.name} ${address.tel}`, renderTag()]), _createVNode("div", {
  63. "class": bem("address")
  64. }, [address.address])];
  65. if (switchable && !disabled) {
  66. if (singleChoice) {
  67. return _createVNode(Radio, {
  68. "name": address.id,
  69. "iconSize": 18
  70. }, {
  71. default: () => [Info]
  72. });
  73. } else {
  74. return _createVNode(Checkbox, {
  75. "name": address.id,
  76. "iconSize": 18
  77. }, {
  78. default: () => [Info]
  79. });
  80. }
  81. }
  82. return Info;
  83. };
  84. return () => {
  85. var _a;
  86. const {
  87. disabled
  88. } = props;
  89. return _createVNode("div", {
  90. "class": bem({
  91. disabled
  92. }),
  93. "onClick": onClick
  94. }, [_createVNode(Cell, {
  95. "border": false,
  96. "titleClass": bem("title")
  97. }, {
  98. title: renderContent,
  99. "right-icon": renderRightIcon
  100. }), (_a = slots.bottom) == null ? void 0 : _a.call(slots, extend({}, props.address, {
  101. disabled
  102. }))]);
  103. };
  104. }
  105. });
  106. export {
  107. stdin_default as default
  108. };