<template>
|
<el-dialog
|
:visible.sync="visible"
|
title="签字确认"
|
width="520px"
|
:close-on-click-modal="false"
|
custom-class="record-detail-dialog"
|
@close="handleClose"
|
>
|
<div class="dialog-content">
|
<div class="confirm-tip">
|
{{ text }}
|
<!-- <span class="danger">确认后将无法再次编辑菌种传代项内容</span> -->
|
</div>
|
<el-form :model="form" :rules="rules" ref="form" label-position="top">
|
<el-form-item required>
|
<template #label>
|
<span>{{ name }}</span>
|
<el-button
|
type="primary"
|
class="sign-btn"
|
@click="showSignature = true"
|
>签名</el-button
|
>
|
</template>
|
<div class="signature-area" :class="{ waiting: !form.signature }">
|
<template v-if="form.signature">
|
<img :src="form.signature" :alt="name" />
|
</template>
|
<template v-else>
|
<span class="waiting-text">等待确认</span>
|
</template>
|
</div>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="footer-btns">
|
<el-button @click="handleClose" style="margin-right: 16px"
|
>取消</el-button
|
>
|
<el-button type="primary" @click="handleConfirm">确认</el-button>
|
</div>
|
<signature-canvas
|
:visible.sync="showSignature"
|
@confirm="handleSignatureConfirm"
|
/>
|
</el-dialog>
|
</template>
|
|
<script>
|
import SignatureCanvas from "@/components/SignatureCanvas.vue";
|
export default {
|
name: "ConfirmStorageDialog",
|
components: { SignatureCanvas },
|
props: {
|
visible: {
|
type: Boolean,
|
default: false,
|
},
|
text: {
|
type: String,
|
default: "",
|
},
|
name: {
|
type: String,
|
default: "",
|
},
|
},
|
data() {
|
return {
|
form: {
|
signature: "",
|
},
|
rules: {
|
signature: [{ required: true, message: "请签名", trigger: "change" }],
|
},
|
showSignature: false,
|
};
|
},
|
methods: {
|
handleClose() {
|
this.$emit("update:visible", false);
|
},
|
handleConfirm() {
|
this.$refs.form.validate((valid) => {
|
if (!valid) return;
|
this.$emit("confirm", { ...this.form });
|
this.handleClose();
|
});
|
},
|
handleSignatureConfirm(dataUrl) {
|
this.form.signature = dataUrl;
|
this.showSignature = false;
|
},
|
},
|
};
|
</script>
|
|
<style lang="less" scoped>
|
.confirm-tip {
|
color: #f5222d;
|
font-size: 16px;
|
margin-bottom: 24px;
|
.danger {
|
margin-left: 12px;
|
}
|
}
|
.signature-area {
|
height: 120px;
|
width: 100%;
|
background: #f5f7fa;
|
border-radius: 4px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
border: 1px solid #dcdfe6;
|
overflow: hidden;
|
padding: 0;
|
}
|
.signature-area.waiting {
|
border-style: dashed;
|
background: #fafafa;
|
}
|
.signature-area img {
|
width: 100%;
|
height: 100%;
|
object-fit: cover;
|
display: block;
|
}
|
.waiting-text {
|
color: #909399;
|
font-size: 14px;
|
}
|
.sign-btn {
|
height: 32px;
|
border-radius: 4px;
|
font-size: 14px;
|
padding: 0 20px;
|
font-weight: 400;
|
margin-left: 12px;
|
}
|
.footer-btns {
|
display: flex;
|
justify-content: center;
|
padding: 24px;
|
padding-top: 0;
|
.el-button {
|
width: 150px;
|
}
|
}
|
</style>
|