From 285f34a71b049b40d86adf2fc50427ae6ff203b6 Mon Sep 17 00:00:00 2001
From: Tevin <tingquanren@163.com>
Date: Sat, 04 Feb 2023 09:28:55 +0800
Subject: [PATCH] 用户签名组件,按钮版

---
 forms/userSignature/cUserSignature.scss   |   11 +++++
 forms/userSignature/CUserSignature.vue    |   13 ++++--
 forms/userSignature/index.js              |    2 +
 forms/userSignature/CUserSignatureBtn.vue |   77 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 98 insertions(+), 5 deletions(-)

diff --git a/forms/userSignature/CUserSignature.vue b/forms/userSignature/CUserSignature.vue
index 0c5dd73..f04bf42 100644
--- a/forms/userSignature/CUserSignature.vue
+++ b/forms/userSignature/CUserSignature.vue
@@ -1,5 +1,5 @@
 /**
- * CUserSignature
+ * CUserSignature - 用户签名
  * @author Tevin
  */
 
@@ -42,9 +42,9 @@
 import { Fetcher } from '@components/bases/Fetcher';
 import { $fetchCommon } from '@fetchers/FCommon';
 import { $bridge } from '@components/common/Bridge';
+import { $hostBoot } from '@components/bases/HostBoot';
 import project from '@project';
 import './cUserSignature.scss';
-import { $hostBoot } from '@components/bases/HostBoot';
 
 export default {
     name: 'CUserSignature',
@@ -58,9 +58,9 @@
     },
     data() {
         return {
-            id: 'CUserSignatureCanvas' + Date.now() + parseInt(Math.random() * 10000),
-            cavWidth: 1000,
-            cavHeight: 1600,
+            // id: 'CUserSignatureCanvas' + Date.now() + parseInt(Math.random() * 10000),
+            // cavWidth: 1000,
+            // cavHeight: 1600,
         };
     },
     computed: {},
@@ -90,6 +90,9 @@
             const blob = new Blob([u8arr], { type: mime });
             return URL.createObjectURL(blob);
         },
+        $startEdit() {
+            this.handleStartEdit();
+        },
         $uploadImage(callback) {
             const file = {
                 url: this.itemRes.formData[this.itemRes.name],
diff --git a/forms/userSignature/CUserSignatureBtn.vue b/forms/userSignature/CUserSignatureBtn.vue
new file mode 100644
index 0000000..10d30a5
--- /dev/null
+++ b/forms/userSignature/CUserSignatureBtn.vue
@@ -0,0 +1,77 @@
+/**
+ * CUserSignatureBtn - 用户签名(按钮模式)
+ * @author Tevin
+ */
+
+<template>
+    <view class="c-user-signature-btn">
+        <AtButton
+            :class="btnClass"
+            :type="btnType"
+            :onClick="evt => handleOpenSign()"
+        >签名</AtButton>
+        <CForm
+            ref="signForm"
+            :formData="signData"
+            :onChange="evt => handleSignChange(evt)"
+            v-slot="{formRes}"
+        >
+            <CFormItem
+                name="sign"
+                :formRes="formRes"
+                v-slot="{itemRes}"
+            >
+                <CUserSignature
+                    ref="signature"
+                    :itemRes="itemRes"
+                />
+            </CFormItem>
+        </CForm>
+    </view>
+</template>
+
+<script>
+import { AtButton } from 'taro-ui-vue';
+import { CForm, CFormItem } from '@components/forms/form';
+import CUserSignature from './CUserSignature.vue';
+
+export default {
+    name: 'CUserSignatureBtn',
+    components: {
+        AtButton,
+        CForm,
+        CFormItem,
+        CUserSignature,
+    },
+    props: {
+        // 按钮样式
+        btnClass: String,
+        // 按钮类型
+        btnType: {
+            type: String,
+            default: 'primary',
+        },
+        // 签名回调
+        onSignChanged: Function,
+    },
+    data() {
+        return {
+            signData: {
+                sign: '',
+            },
+        };
+    },
+    methods: {
+        handleOpenSign() {
+            this.$refs.signature.$startEdit();
+        },
+        handleSignChange({ sign }) {
+            this.onSignChanged(sign);
+        },
+        $uploadImage(callback) {
+            this.$refs.signature(callback);
+        },
+    },
+    mounted() {},
+};
+</script>
diff --git a/forms/userSignature/cUserSignature.scss b/forms/userSignature/cUserSignature.scss
index 73d8c5b..987bc61 100644
--- a/forms/userSignature/cUserSignature.scss
+++ b/forms/userSignature/cUserSignature.scss
@@ -46,4 +46,15 @@
         width: 100%;
         height: 100%;
     }
+}
+
+.c-user-signature-btn {
+    .at-button {
+        width: 100%;
+        margin: 0;
+        box-sizing: border-box;
+    }
+    .c-form {
+        display: none;
+    }
 }
\ No newline at end of file
diff --git a/forms/userSignature/index.js b/forms/userSignature/index.js
index f73134f..e5a17d8 100644
--- a/forms/userSignature/index.js
+++ b/forms/userSignature/index.js
@@ -4,7 +4,9 @@
  */
 
 import CUserSignature from '@components/forms/userSignature/CUserSignature.vue';
+import CUserSignatureBtn from '@components/forms/userSignature/CUserSignatureBtn.vue';
 
 export {
     CUserSignature,
+    CUserSignatureBtn,
 }
\ No newline at end of file

--
Gitblit v1.9.1