52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="AiDialogBtn">
 | |
|     <div @click="dialog=true">
 | |
|       <slot v-if="$scopedSlots.btn" name="btn"/>
 | |
|       <el-button v-else type="text">{{ text }}</el-button>
 | |
|     </div>
 | |
|     <ai-dialog :visible.sync="dialog" :title="dialogTitle" :width="width" :customFooter="needFooter" v-on="$listeners"
 | |
|                @onConfirm="handleConfirm" v-bind="$attrs">
 | |
|       <slot/>
 | |
|       <template #footer>
 | |
|         <el-button @click="dialog=false">关闭</el-button>
 | |
|       </template>
 | |
|     </ai-dialog>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: "AiDialogBtn",
 | |
|   props: {
 | |
|     text: {default: "点击弹窗"},
 | |
|     dialogTitle: {default: "展示信息"},
 | |
|     customFooter: {default: true},
 | |
|     width: {default: "1200px"},
 | |
|     submit: {default: null}
 | |
|   },
 | |
|   computed: {
 | |
|     needFooter: v => v.customFooter && !v.submit
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       dialog: false
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleConfirm() {
 | |
|       if (!this.submit) {
 | |
|         this.dialog = false
 | |
|         this.$emit('onConfirm')
 | |
|       } else {
 | |
|         this.submit?.()?.then(() => this.dialog = false)
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .AiDialogBtn {
 | |
| }
 | |
| </style>
 |