event.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div>
  3. <div class="el-form-item el-form-item--small el-form--label-top">
  4. <label class="el-form-item__label"
  5. style="padding: 0;">change:</label>
  6. <div class="el-form-item__content">
  7. <monaco-editor v-model="change"
  8. height="300"
  9. :keyIndex="`event-change-${data.prop}`"
  10. :options="options"></monaco-editor>
  11. </div>
  12. </div>
  13. <div class="el-form-item el-form-item--small el-form--label-top">
  14. <label class="el-form-item__label"
  15. style="padding: 0;">click:</label>
  16. <div class="el-form-item__content">
  17. <monaco-editor v-model="click"
  18. height="200"
  19. :keyIndex="`event-click-${data.prop}`"
  20. :options="options"></monaco-editor>
  21. </div>
  22. </div>
  23. <div class="el-form-item el-form-item--small el-form--label-top">
  24. <label class="el-form-item__label"
  25. style="padding: 0;">focus:</label>
  26. <div class="el-form-item__content">
  27. <monaco-editor v-model="focus"
  28. height="200"
  29. :keyIndex="`event-focus-${data.prop}`"
  30. :options="options"></monaco-editor>
  31. </div>
  32. </div>
  33. <div class="el-form-item el-form-item--small el-form--label-top">
  34. <label class="el-form-item__label"
  35. style="padding: 0;">blur:</label>
  36. <div class="el-form-item__content">
  37. <monaco-editor v-model="blur"
  38. height="200"
  39. :keyIndex="`event-blur-${data.prop}`"
  40. :options="options"></monaco-editor>
  41. </div>
  42. </div>
  43. </div>
  44. </template>
  45. <script>
  46. import MonacoEditor from '@utils/monaco-editor'
  47. export default {
  48. name: "config-event",
  49. components: { MonacoEditor },
  50. props: ['data'],
  51. watch: {
  52. 'data.prop': {
  53. handler() {
  54. const { change, click, focus, blur } = this.data
  55. this.$set(this, 'change', change ? change + '' : '({value}) => {\r\n\r\n}')
  56. this.$set(this, 'click', click ? click + '' : '({value}) => {\r\n\r\n}')
  57. this.$set(this, 'focus', focus ? focus + '' : '({value}) => {\r\n\r\n}')
  58. this.$set(this, 'blur', blur ? blur + '' : '({value}) => {\r\n\r\n}')
  59. },
  60. immediate: true
  61. }
  62. },
  63. data() {
  64. return {
  65. change: '',
  66. click: '',
  67. focus: '',
  68. blur: '',
  69. options: {
  70. fullScreen: true,
  71. minimap: {
  72. enabled: false,
  73. },
  74. },
  75. }
  76. },
  77. mounted() {
  78. this.$nextTick(() => {
  79. const event = ['change', 'click', 'focus', 'blur']
  80. event.forEach(e => {
  81. this.$watch(`${e}`, (val) => {
  82. try {
  83. this.$set(this.data, e, eval(val))
  84. } catch (err) {
  85. // console.error(e)
  86. }
  87. })
  88. })
  89. })
  90. }
  91. }
  92. </script>