56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="AiEditCard">
 | |
|     <ai-card v-bind="{...$props,...$attrs}">
 | |
|       <template v-if="showBtn" #right>
 | |
|         <template v-if="edit">
 | |
|           <el-button type="text" @click="handleCancel">取消</el-button>
 | |
|           <el-button type="text" @click="handleSave">保存</el-button>
 | |
|         </template>
 | |
|         <template v-else>
 | |
|           <el-button type="text" icon="iconfont iconEdit" @click="edit=true">修改</el-button>
 | |
|         </template>
 | |
|       </template>
 | |
|       <template #content>
 | |
|         <slot v-if="edit" name="edit"/>
 | |
|         <slot v-else/>
 | |
|       </template>
 | |
|     </ai-card>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| export default {
 | |
|   name: "AiEditCard",
 | |
|   props: {
 | |
|     editable: Boolean,
 | |
|     showBtn: {default: true}
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       edit: false
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     handleSave() {
 | |
|       if (this.$listeners.save) {
 | |
|         this.$emit('save', () => this.edit = false)
 | |
|       } else this.edit = false
 | |
|     },
 | |
|     handleCancel() {
 | |
|       if (this.$listeners.cancel) {
 | |
|         this.$emit('cancel')
 | |
|         this.edit = false
 | |
|       } else this.edit = false
 | |
|     }
 | |
|   },
 | |
|   created() {
 | |
|     this.edit = this.editable
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| .AiEditCard {
 | |
| }
 | |
| </style>
 |