index.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <div class="code-preview">
  3. <div class="code-preview-item mt-3" v-for="item in dataList" :key="item.title">
  4. <div class="code-preview-item_title mb-1">
  5. <a-icon class="mr-1" :type="item.showContent ? 'eye-invisible' : 'eye'" @click="() => item.showContent = !item.showContent" theme="twoTone" twoToneColor="#1890ff" />
  6. <span>{{ item.title }}</span>
  7. <a-button
  8. type="link"
  9. v-clipboard:copy="item.content"
  10. v-clipboard:success="_ => $message.success($t('k8s.text_31'))"
  11. v-clipboard:error="_ => $message.error($t('k8s.text_32'))"><a-icon type="copy" />{{$t('k8s.text_33')}}</a-button>
  12. </div>
  13. <template v-if="item.showContent">
  14. <pre class="code-preview-item_content" v-if="item.key === 'ca.crt'">{{ item.content }}</pre>
  15. <div class="code-preview-item_content" v-else style="white-space: pre-wrap; word-break: break-all;">{{ item.content }}</div>
  16. </template>
  17. </div>
  18. </div>
  19. </template>
  20. <script>
  21. import * as R from 'ramda'
  22. import { Base64 } from 'js-base64'
  23. export default {
  24. name: 'K8SCodePreviewSidepageDetail',
  25. props: {
  26. data: {
  27. type: Object,
  28. required: true,
  29. },
  30. },
  31. data () {
  32. const dataList = []
  33. if (R.is(Object, this.data.data)) {
  34. R.forEachObjIndexed((value, key) => {
  35. dataList.push({
  36. title: key,
  37. content: Base64.decode(value),
  38. showContent: false,
  39. })
  40. }, this.data.data)
  41. }
  42. return {
  43. dataList,
  44. }
  45. },
  46. }
  47. </script>
  48. <style lang="less" scoped>
  49. .code-preview {
  50. .code-preview-item_content {
  51. padding: 6px 12px;
  52. color: rgba(0, 0, 0, 0.65);
  53. background: #fafafa;
  54. border: 1px solid #d9d9d9;
  55. }
  56. }
  57. </style>