当前位置:首页 > VUE

vue实现签约合作弹窗

2026-02-09 18:09:40VUE

实现思路

使用Vue的组件化特性封装签约合作弹窗,通过v-modelprops控制显示/隐藏,结合<transition>实现动画效果。弹窗内容可包含表单、协议条款等交互元素。

基础组件结构

<template>
  <transition name="fade">
    <div class="contract-modal" v-show="visible">
      <div class="modal-content">
        <h3>签约合作</h3>
        <div class="contract-text">这里是协议内容...</div>
        <form @submit.prevent="handleSubmit">
          <input v-model="formData.name" placeholder="企业名称">
          <button type="submit">确认签约</button>
        </form>
        <button @click="close">关闭</button>
      </div>
    </div>
  </transition>
</template>

核心功能实现

<script>
export default {
  props: {
    value: Boolean // 通过v-model控制显示
  },
  data() {
    return {
      formData: {
        name: ''
      }
    }
  },
  computed: {
    visible: {
      get() { return this.value },
      set(val) { this.$emit('input', val) }
    }
  },
  methods: {
    close() {
      this.visible = false
    },
    handleSubmit() {
      // 提交逻辑
      console.log('签约数据:', this.formData)
      this.close()
    }
  }
}
</script>

样式设计

<style scoped>
.contract-modal {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0,0,0,0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000;
}

.modal-content {
  background: white;
  padding: 20px;
  border-radius: 8px;
  width: 80%;
  max-width: 500px;
}

.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

使用示例

<template>
  <div>
    <button @click="showModal = true">打开签约弹窗</button>
    <contract-modal v-model="showModal"/>
  </div>
</template>

<script>
import ContractModal from './ContractModal.vue'

export default {
  components: { ContractModal },
  data() {
    return {
      showModal: false
    }
  }
}
</script>

进阶功能建议

  1. 协议内容滚动确认:添加滚动监听,确保用户阅读完协议才允许签约

    vue实现签约合作弹窗

    data() {
    return {
     isScrolledToBottom: false
    }
    },
    methods: {
    handleScroll(e) {
     const el = e.target
     this.isScrolledToBottom = el.scrollHeight - el.scrollTop === el.clientHeight
    }
    }
  2. 多步骤签约流程:使用动态组件切换不同签约阶段

    vue实现签约合作弹窗

    <component :is="currentStepComponent"/>
  3. 电子签名支持:集成签名板组件

    <signature-pad @save="saveSignature"/>
  4. 移动端适配:通过媒体查询调整弹窗样式

    @media (max-width: 768px) {
    .modal-content {
     width: 95%;
    }
    }

标签: vue
分享给朋友:

相关文章

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…