UNPKG

nutui-taro-upgrade

Version:

@nutui/nutui-taro 对京东风格组件库的taro4 版本支持

256 lines (255 loc) 8.2 kB
var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; import Taro from "@tarojs/taro"; import { computed, ref, reactive, onMounted, resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, createTextVNode, createVNode, withCtx, toDisplayString } from "vue"; import { c as createComponent } from "../component-669c158a.js"; import { Button as _sfc_main$1 } from "../button/Button.js"; import { u as useLocale } from "../index-3b6ff56c.js"; import { _ as _export_sfc } from "../_plugin-vue_export-helper-cc2b3d55.js"; import "@nutui/icons-vue-taro"; import "../with-install-783bc31f.js"; import "nutui-taro-upgrade/dist/packages/locale/lang"; import "../util-f26975e1.js"; const { create } = createComponent("signature"); const cN = "NutSignature"; const _sfc_main = create({ props: { customClass: { type: String, default: "" }, lineWidth: { type: Number, default: 2 }, strokeStyle: { type: String, default: "#000" }, type: { type: String, default: "png" }, unSupportTpl: { type: String, default: "" } }, components: { NutButton: _sfc_main$1 }, emits: ["start", "end", "signing", "confirm", "clear"], setup(props, { emit }) { const translate = useLocale(cN); const classes = computed(() => { const prefixCls = "nut-signature"; return { [prefixCls]: true, [`${props.customClass}`]: props.customClass }; }); const spcanvas = ref(null); const canvasSetId = "spcanvas" + (/* @__PURE__ */ new Date()).getTime(); const state = reactive({ canvas: null, canvasHeight: 0, canvasWidth: 0, ctx: null }); const startEventHandler = (event) => { event.preventDefault(); if (!state.ctx) { return false; } emit("start"); state.ctx.beginPath(); state.ctx.lineWidth = props.lineWidth; state.ctx.strokeStyle = props.strokeStyle; }; const isDraw = ref(false); const moveEventHandler = (event) => { event.preventDefault(); if (!state.ctx) { return false; } let evt = event.changedTouches[0]; isDraw.value = true; emit("signing", evt); let mouseX = evt.x || evt.clientX; let mouseY = evt.y || evt.clientY; if (Taro.getEnv() === "WEB") { const canvas = document.getElementById(canvasSetId); const coverPos = canvas == null ? void 0 : canvas.getBoundingClientRect(); if (coverPos) { mouseX = evt.clientX - coverPos.left; mouseY = evt.clientY - coverPos.top; } } Taro.nextTick(() => { var _a, _b; state.ctx.lineCap = "round"; state.ctx.lineJoin = "round"; (_a = state.ctx) == null ? void 0 : _a.lineTo(mouseX, mouseY); (_b = state.ctx) == null ? void 0 : _b.stroke(); }); }; const endEventHandler = (event) => { event.preventDefault(); emit("end"); }; const leaveEventHandler = (event) => { event.preventDefault(); }; const clear = () => { state.ctx.clearRect(0, 0, state.canvasWidth, state.canvasHeight); state.ctx.closePath(); emit("clear"); isDraw.value = false; }; const confirm = () => { onSave(); }; const onSave = () => { if (!state.canvas) { return; } Taro.createSelectorQuery().select("#" + canvasSetId).fields({ node: true, size: true }).exec((res) => __async(this, null, function* () { Taro.canvasToTempFilePath({ canvas: res[0].node, canvasId: canvasSetId, fileType: props.type, success: function(result) { const _canvas = !isDraw.value ? "请绘制签名" : state.canvas; const _filePath = !isDraw.value ? "" : result.tempFilePath; emit("confirm", _canvas, _filePath); }, fail: function(result) { emit("confirm", result); } }); })); }; onMounted(() => { Taro.nextTick(() => { setTimeout(() => { if (Taro.getEnv() === "WEAPP" || Taro.getEnv() === "JD") { Taro.createSelectorQuery().select("#" + canvasSetId).fields( { node: true, size: true }, function(res) { const canvas = res.node; canvasSetting(canvas, res.width, res.height); } ).exec(); } else { const canvasDom = document.getElementById(canvasSetId); let canvas = canvasDom; if ((canvasDom == null ? void 0 : canvasDom.tagName) !== "CANVAS") { canvas = canvasDom == null ? void 0 : canvasDom.getElementsByTagName("canvas")[0]; } canvasSetting(canvas, canvasDom == null ? void 0 : canvasDom.offsetWidth, canvasDom == null ? void 0 : canvasDom.offsetHeight); } }, 1e3); }); }); const canvasSetting = (canvasDom, width, height) => { const canvas = canvasDom; const dpr = Taro.getSystemInfoSync().pixelRatio; const ctx = canvas.getContext("2d"); canvas.width = width * dpr; canvas.height = height * dpr; state.canvas = canvas; ctx.scale(dpr, dpr); state.ctx = ctx; state.canvasWidth = width * dpr; state.canvasHeight = height * dpr; }; return { taroEnv: Taro.getEnv(), canvasSetId, spcanvas, confirm, clear, classes, startEventHandler, moveEventHandler, endEventHandler, leaveEventHandler, translate }; } }); const _hoisted_1 = { class: /* @__PURE__ */ normalizeClass(["nut-signature-inner", "spcanvas_WEAPP"]) }; const _hoisted_2 = ["id", "canvasId"]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_nut_button = resolveComponent("nut-button"); return openBlock(), createElementBlock("view", { class: normalizeClass(_ctx.classes) }, [ createElementVNode("div", _hoisted_1, [ createElementVNode("canvas", { id: _ctx.canvasSetId, ref: "spcanvas", class: "spcanvas", canvasId: _ctx.canvasSetId, type: "2d", "disable-scroll": "true", onTouchstart: _cache[0] || (_cache[0] = (...args) => _ctx.startEventHandler && _ctx.startEventHandler(...args)), onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.moveEventHandler && _ctx.moveEventHandler(...args)), onTouchend: _cache[2] || (_cache[2] = (...args) => _ctx.endEventHandler && _ctx.endEventHandler(...args)), onTouchleave: _cache[3] || (_cache[3] = (...args) => _ctx.leaveEventHandler && _ctx.leaveEventHandler(...args)) }, null, 40, _hoisted_2) ]), _cache[6] || (_cache[6] = createTextVNode()), createVNode(_component_nut_button, { class: "nut-signature-btn", type: "default", onClick: _cache[4] || (_cache[4] = ($event) => _ctx.clear()) }, { default: withCtx(() => [ createTextVNode(toDisplayString(_ctx.translate("reSign")), 1) ]), _: 1 }), _cache[7] || (_cache[7] = createTextVNode()), createVNode(_component_nut_button, { class: "nut-signature-btn", type: "primary", onClick: _cache[5] || (_cache[5] = ($event) => _ctx.confirm()) }, { default: withCtx(() => [ createTextVNode(toDisplayString(_ctx.translate("confirm")), 1) ]), _: 1 }) ], 2); } const index_taro = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { index_taro as default };