| ¶Ô±ÈÐÂÎļþ | 
 |  |  | 
 |  |  | <template> | 
 |  |  |   <span v-if="content == null || content.length <= limit">{{content}}</span> | 
 |  |  |   <el-popover | 
 |  |  |     v-else | 
 |  |  |     v-model="visible" | 
 |  |  |     popper-class="eva-column-detail-popover" | 
 |  |  |     trigger="click" | 
 |  |  |   > | 
 |  |  |     <div class="eva-column-detail"> | 
 |  |  |       <pre class="eva-column-detail__main">{{formattedContent}}</pre> | 
 |  |  |       <div class="eva-column-detail__action"> | 
 |  |  |         <el-button size="mini" @click="cancel">å
³é</el-button> | 
 |  |  |         <el-button | 
 |  |  |           size="mini" | 
 |  |  |           type="primary" | 
 |  |  |           v-clipboard:copy="formattedContent" | 
 |  |  |           v-clipboard:success="copySuccess" | 
 |  |  |           v-clipboard:error="copyFailed" | 
 |  |  |           @click="confirm" | 
 |  |  |         >{{ confirmButtonText }}</el-button> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  |     <el-button slot="reference" :type="buttonType">æ¥ç</el-button> | 
 |  |  |   </el-popover> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | export default { | 
 |  |  |   name: 'ColumnDetail', | 
 |  |  |   props: { | 
 |  |  |     // æé®ç±»å | 
 |  |  |     buttonType: { | 
 |  |  |       type: String | 
 |  |  |     }, | 
 |  |  |     // å
容 | 
 |  |  |     content: { | 
 |  |  |       type: String, | 
 |  |  |       default: '' | 
 |  |  |     }, | 
 |  |  |     // éå¶ï¼å¤§äºéå¶æ¶å±ç¤ºæ¥çæé® | 
 |  |  |     limit: { | 
 |  |  |       type: Number, | 
 |  |  |       default: 12 | 
 |  |  |     }, | 
 |  |  |     // èªå¨è¯å«æ°æ®ç±»åå¹¶æ ¼å¼å | 
 |  |  |     analyse: { | 
 |  |  |       type: Boolean, | 
 |  |  |       default: true | 
 |  |  |     }, | 
 |  |  |     // æ¯å¦å
许å¤å¶ | 
 |  |  |     allowCopy: { | 
 |  |  |       type: Boolean, | 
 |  |  |       default: true | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   data () { | 
 |  |  |     return { | 
 |  |  |       visible: false | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   computed: { | 
 |  |  |     // ç¡®è®¤æé®ææ¡ | 
 |  |  |     confirmButtonText () { | 
 |  |  |       return this.allowCopy ? 'å¤å¶' : 'ç¡®å®' | 
 |  |  |     }, | 
 |  |  |     // æ ¼å¼ååçå
容 | 
 |  |  |     formattedContent () { | 
 |  |  |       let content = this.content | 
 |  |  |       if (this.analyse) { | 
 |  |  |         try { | 
 |  |  |           content = JSON.stringify(JSON.parse(this.content), null, 2) | 
 |  |  |         } catch (e) { | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |       return content | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     /** | 
 |  |  |      * ç¡®è®¤ | 
 |  |  |      */ | 
 |  |  |     confirm () { | 
 |  |  |       this.visible = false | 
 |  |  |       this.$emit('confirm') | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * åæ¶ | 
 |  |  |      */ | 
 |  |  |     cancel () { | 
 |  |  |       this.visible = false | 
 |  |  |       this.$emit('cancel') | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * å¤å¶æå | 
 |  |  |      */ | 
 |  |  |     copySuccess () { | 
 |  |  |       this.$tip.success('å¤å¶æå') | 
 |  |  |     }, | 
 |  |  |     /** | 
 |  |  |      * å¤å¶å¤±è´¥ | 
 |  |  |      */ | 
 |  |  |     copyFailed () { | 
 |  |  |       this.$tip.error('å¤å¶å¤±è´¥') | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style lang="scss"> | 
 |  |  | .eva-column-detail-popover { | 
 |  |  |   max-width: 80%; | 
 |  |  | } | 
 |  |  | </style> | 
 |  |  | <style scoped lang="scss"> | 
 |  |  | .eva-column-detail { | 
 |  |  |   .eva-column-detail__main { | 
 |  |  |     max-height: 500px; | 
 |  |  |     overflow: auto; | 
 |  |  |   } | 
 |  |  |   .eva-column-detail__action { | 
 |  |  |     text-align: right; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </style> |