UNPKG

@cqmcui/cqmcui

Version:

轻量级移动端 Vue2、Vue3 组件库(支持小程序开发)

532 lines (531 loc) 16.9 kB
import { resolveComponent, openBlock, createElementBlock, createElementVNode, renderSlot, createBlock, createCommentVNode, toDisplayString, ref, watch, onMounted, Fragment, renderList, normalizeClass, createVNode, withCtx, createSlots } from "vue"; import Price from "./Price.js"; import { c as createComponent, T as TypeOfFun } from "./component-81a4c1d0.js"; import { _ as _export_sfc } from "./_plugin-vue_export-helper-cc2b3d55.js"; import InputNumber from "./InputNumber.js"; import { p as popupProps, P as Popup } from "./index-c55ad69e.js"; import "../locale/lang"; import "./pxCheck-c6b9f6b7.js"; import "@cqmcui/icons-vue"; import "./Overlay.js"; const { componentName: componentName$4, create: create$4, translate: translate$1 } = createComponent("sku-header"); const _sfc_main$4 = create$4({ props: { goods: { type: Object, default: {} } }, emits: [], components: { [Price.name]: Price }, setup(props, { emit, slots }) { const getSlots = (name) => slots[name]; return { getSlots, translate: translate$1 }; } }); const _hoisted_1$4 = { class: "cqmc-sku-header" }; const _hoisted_2$4 = ["src"]; const _hoisted_3$3 = { class: "cqmc-sku-header-right" }; const _hoisted_4$3 = { key: 3, class: "cqmc-sku-header-right-extra" }; function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { const _component_nut_price = resolveComponent("cqmc-price"); return openBlock(), createElementBlock("view", _hoisted_1$4, [ createElementVNode("img", { class: "cqmc-sku-header-img", src: _ctx.goods.imagePath }, null, 8, _hoisted_2$4), createElementVNode("view", _hoisted_3$3, [ _ctx.getSlots("sku-header-price") ? renderSlot(_ctx.$slots, "sku-header-price", { key: 0 }) : (openBlock(), createBlock(_component_nut_price, { key: 1, price: _ctx.goods.price, needSymbol: true, thousands: false }, null, 8, ["price"])), _ctx.getSlots("sku-header-extra") ? renderSlot(_ctx.$slots, "sku-header-extra", { key: 2 }) : createCommentVNode("", true), _ctx.goods.skuId && !_ctx.getSlots("sku-header-extra") ? (openBlock(), createElementBlock("view", _hoisted_4$3, toDisplayString(_ctx.translate("skuId")) + " : " + toDisplayString(_ctx.goods.skuId), 1)) : createCommentVNode("", true) ]) ]); } const SkuHeader = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4]]); const { componentName: componentName$3, create: create$3 } = createComponent("sku-select"); const _sfc_main$3 = create$3({ props: { sku: { type: Array, default: () => [] } }, emits: ["selectSku"], setup(props, { emit }) { const skuInfo = ref([]); watch( () => props.sku, (value) => { skuInfo.value = [].slice.call(value); }, { deep: true } ); onMounted(() => { if (props.sku.length > 0) { skuInfo.value = [].slice.call(props.sku); } }); const changeSaleChild = (attrItem, index2, parentItem, parentIndex) => { if (attrItem.checkFlag || attrItem.disable) { return; } emit("selectSku", { sku: attrItem, skuIndex: index2, parentSku: parentItem, parentIndex }); }; return { skuInfo, changeSaleChild }; } }); const _hoisted_1$3 = { class: "cqmc-sku-select" }; const _hoisted_2$3 = { class: "cqmc-sku-select-item-title" }; const _hoisted_3$2 = { class: "cqmc-sku-select-item-skus" }; const _hoisted_4$2 = ["onClick"]; function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("view", _hoisted_1$3, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.skuInfo, (item, index2) => { return openBlock(), createElementBlock("view", { class: "cqmc-sku-select-item", key: item.id }, [ createElementVNode("view", _hoisted_2$3, toDisplayString(item.name), 1), createElementVNode("view", _hoisted_3$2, [ (openBlock(true), createElementBlock(Fragment, null, renderList(item.list, (itemAttr, itemAttrIndex) => { return openBlock(), createElementBlock("view", { class: normalizeClass(["cqmc-sku-select-item-skus-sku", [{ active: !itemAttr.disable && itemAttr.active }, { disable: itemAttr.disable }]]), onClick: ($event) => _ctx.changeSaleChild(itemAttr, itemAttrIndex, item, index2), key: itemAttr.name }, toDisplayString(itemAttr.name), 11, _hoisted_4$2); }), 128)) ]) ]); }), 128)) ]); } const SkuSelect = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3]]); const { componentName: componentName$2, create: create$2 } = createComponent("sku-stepper"); const _sfc_main$2 = create$2({ props: { // 购买数量最大值 stepperMax: { type: [Number, String], default: 99999 }, stepperMin: { type: [Number, String], default: 1 }, // stepper 前文案提示 stepperExtraText: { type: [Function, Boolean], default: false }, // 数量选择左侧文案 stepperTitle: { type: String, default: "购买数量" } }, emits: ["click", "changeSku", "changeStepper", "clickBtnOptions", "overLimit", "reduce", "add"], components: { [InputNumber.name]: InputNumber }, setup(props, { emit }) { const goodsCount = ref(props.stepperMin); onMounted(() => { goodsCount.value = props.stepperMin; }); const getExtraText = () => { const { stepperExtraText } = props; if (stepperExtraText && TypeOfFun(stepperExtraText) == "function") { return stepperExtraText(); } else { return ""; } }; const add = (value) => { emit("add", value); }; const reduce = (value) => { emit("reduce", value); }; const overlimit = (e, action) => { emit("overLimit", { action, value: parseInt(goodsCount.value + "") }); }; const changeStepper = (value) => { goodsCount.value = value; emit("changeStepper", value); }; return { goodsCount, add, reduce, overlimit, getExtraText, changeStepper }; } }); const _hoisted_1$2 = { class: "cqmc-sku-stepper" }; const _hoisted_2$2 = { class: "cqmc-sku-stepper-title" }; const _hoisted_3$1 = ["innerHTML"]; const _hoisted_4$1 = { class: "cqmc-sku-stepper-count" }; function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { const _component_nut_input_number = resolveComponent("cqmc-input-number"); return openBlock(), createElementBlock("view", _hoisted_1$2, [ createElementVNode("view", _hoisted_2$2, toDisplayString(_ctx.stepperTitle), 1), createElementVNode("view", { class: "cqmc-sku-stepper-limit", innerHTML: _ctx.getExtraText() }, null, 8, _hoisted_3$1), createElementVNode("view", _hoisted_4$1, [ createVNode(_component_nut_input_number, { modelValue: _ctx.goodsCount, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.goodsCount = $event), min: _ctx.stepperMin, max: _ctx.stepperMax, onAdd: _ctx.add, onReduce: _ctx.reduce, onOverlimit: _ctx.overlimit, onChange: _ctx.changeStepper }, null, 8, ["modelValue", "min", "max", "onAdd", "onReduce", "onOverlimit", "onChange"]) ]) ]); } const SkuStepper = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2]]); const { componentName: componentName$1, create: create$1 } = createComponent("sku-operate"); const _sfc_main$1 = create$1({ props: { // 底部按钮配置 confirm cart buy btnOptions: { type: Array, default: () => ["confirm"] }, btnExtraText: { type: String, default: "" }, // 立即购买文案 buyText: { type: String, default: "立即购买" }, // 加入购物车文案 addCartText: { type: String, default: "加入购物车" }, confirmText: { type: String, default: "确定" } }, emits: ["click", "changeSku", "changeBuyCount", "clickBtnOperate"], setup(props, { emit, slots }) { const getBtnDesc = (type) => { let mapD = { confirm: props.confirmText, cart: props.addCartText, buy: props.buyText }; return mapD[type]; }; const getSlots = (name) => slots[name]; const clickBtnOperate = (btn) => { emit("clickBtnOperate", btn); }; return { getBtnDesc, clickBtnOperate, getSlots }; } }); const _hoisted_1$1 = { key: 0, class: "cqmc-sku-operate" }; const _hoisted_2$1 = { key: 0, class: "cqmc-sku-operate-desc" }; const _hoisted_3 = { key: 1, class: "cqmc-sku-operate-btn" }; const _hoisted_4 = ["onClick"]; function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.btnOptions.length > 0 ? (openBlock(), createElementBlock("view", _hoisted_1$1, [ _ctx.btnExtraText ? (openBlock(), createElementBlock("view", _hoisted_2$1, toDisplayString(_ctx.btnExtraText), 1)) : createCommentVNode("", true), renderSlot(_ctx.$slots, "operate-btn"), !_ctx.getSlots("operate-btn") ? (openBlock(), createElementBlock("view", _hoisted_3, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.btnOptions, (btn, i) => { return openBlock(), createElementBlock("view", { class: normalizeClass([`cqmc-sku-operate-btn-${btn}`, "cqmc-sku-operate-btn-item"]), key: i, onClick: ($event) => _ctx.clickBtnOperate(btn) }, toDisplayString(_ctx.getBtnDesc(btn)), 11, _hoisted_4); }), 128)) ])) : createCommentVNode("", true) ])) : createCommentVNode("", true); } const SkuOperate = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1]]); const { componentName, create, translate } = createComponent("sku"); const _sfc_main = create({ props: { ...popupProps, sku: { type: Array, default: [] }, goods: { type: Object, default: {} }, // stepper 最大值 stepperMax: { type: [Number, String], default: 99999 }, // stepper 最小值 stepperMin: { type: [Number, String], default: 1 }, // 底部按钮配置 confirm cart buy btnOptions: { type: Array, default: () => ["confirm"] }, // 数量选择左侧文案 stepperTitle: { type: String, default: "" }, // stepper 前面文案 stepperExtraText: { type: [Function, Boolean], default: false }, btnExtraText: { type: String, default: "" }, // 立即购买文案 buyText: { type: String, default: "" }, // 加入购物车文案 addCartText: { type: String, default: "" }, // 确定文案 confirmText: { type: String, default: "" } }, emits: [ "update:visible", "select-sku", "change-stepper", "click-btn-operate", "click-close-icon", "click-overlay", "close", "reduce", "add", "over-limit" ], components: { SkuHeader, SkuSelect, SkuStepper, SkuOperate, [Popup.name]: Popup }, setup(props, { emit, slots }) { const showPopup = ref(props.visible); const goodsCount = ref(props.stepperMin); watch( () => props.visible, (value) => { showPopup.value = value; } ); watch( () => showPopup.value, (value) => { if (value == false) { close(); } } ); onMounted(() => { }); const getSlots = (name) => slots[name]; const selectSku = (skus) => { emit("select-sku", skus); }; const changeStepper = (value) => { goodsCount.value = value; emit("change-stepper", value); }; const add = (value) => { emit("add", value); }; const reduce = (value) => { emit("reduce", value); }; const stepperOverLimit = (count) => { emit("over-limit", count); }; const clickBtnOperate = (btn) => { emit("click-btn-operate", { type: btn, value: goodsCount.value }); }; const closePopup = (type) => { if (type == "icon") { emit("click-close-icon"); } if (type == "overlay") { emit("click-overlay"); } if (type == "close") { emit("close"); } showPopup.value = false; }; const close = () => { emit("update:visible", false); }; return { showPopup, closePopup, selectSku, changeStepper, stepperOverLimit, clickBtnOperate, add, reduce, getSlots, translate }; } }); const _hoisted_1 = { class: "cqmc-sku" }; const _hoisted_2 = { class: "cqmc-sku-content" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_sku_header = resolveComponent("sku-header"); const _component_SkuSelect = resolveComponent("SkuSelect"); const _component_sku_stepper = resolveComponent("sku-stepper"); const _component_sku_operate = resolveComponent("sku-operate"); const _component_nut_popup = resolveComponent("cqmc-popup"); return openBlock(), createBlock(_component_nut_popup, { position: "bottom", closeable: "", round: "", visible: _ctx.showPopup, "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => _ctx.showPopup = $event), onClickCloseIcon: _cache[1] || (_cache[1] = ($event) => _ctx.closePopup("icon")), onClickOverlay: _cache[2] || (_cache[2] = ($event) => _ctx.closePopup("overlay")), onClose: _cache[3] || (_cache[3] = ($event) => _ctx.closePopup("close")), style: { "height": "75%" }, teleportDisable: _ctx.teleportDisable, teleport: _ctx.teleport }, { default: withCtx(() => [ createElementVNode("view", _hoisted_1, [ renderSlot(_ctx.$slots, "sku-header"), !_ctx.getSlots("sku-header") ? (openBlock(), createBlock(_component_sku_header, { key: 0, goods: _ctx.goods }, createSlots({ _: 2 }, [ _ctx.getSlots("sku-header-price") ? { name: "sku-header-price", fn: withCtx(() => [ renderSlot(_ctx.$slots, "sku-header-price") ]), key: "0" } : void 0, _ctx.getSlots("sku-header-extra") ? { name: "sku-header-extra", fn: withCtx(() => [ renderSlot(_ctx.$slots, "sku-header-extra") ]), key: "1" } : void 0 ]), 1032, ["goods"])) : createCommentVNode("", true), createElementVNode("view", _hoisted_2, [ renderSlot(_ctx.$slots, "sku-select-top"), renderSlot(_ctx.$slots, "sku-select"), !_ctx.getSlots("sku-select") ? (openBlock(), createBlock(_component_SkuSelect, { key: 0, sku: _ctx.sku, onSelectSku: _ctx.selectSku }, null, 8, ["sku", "onSelectSku"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "sku-stepper"), !_ctx.getSlots("sku-stepper") ? (openBlock(), createBlock(_component_sku_stepper, { key: 1, goods: _ctx.goods, stepperTitle: _ctx.stepperTitle || _ctx.translate("buyNumber"), stepperMax: _ctx.stepperMax, stepperMin: _ctx.stepperMin, stepperExtraText: _ctx.stepperExtraText, onAdd: _ctx.add, onReduce: _ctx.reduce, onChangeStepper: _ctx.changeStepper, onOverLimit: _ctx.stepperOverLimit }, null, 8, ["goods", "stepperTitle", "stepperMax", "stepperMin", "stepperExtraText", "onAdd", "onReduce", "onChangeStepper", "onOverLimit"])) : createCommentVNode("", true), renderSlot(_ctx.$slots, "sku-stepper-bottom") ]), createVNode(_component_sku_operate, { btnOptions: _ctx.btnOptions, btnExtraText: _ctx.btnExtraText, buyText: _ctx.buyText || _ctx.translate("buyNow"), addCartText: _ctx.addCartText || _ctx.translate("addToCart"), confirmText: _ctx.confirmText || _ctx.translate("confirm"), onClickBtnOperate: _ctx.clickBtnOperate }, createSlots({ _: 2 }, [ _ctx.getSlots("sku-operate") ? { name: "operate-btn", fn: withCtx(() => [ renderSlot(_ctx.$slots, "sku-operate") ]), key: "0" } : void 0 ]), 1032, ["btnOptions", "btnExtraText", "buyText", "addCartText", "confirmText", "onClickBtnOperate"]) ]) ]), _: 3 }, 8, ["visible", "teleportDisable", "teleport"]); } const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { index as default };