ResourceDialog.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div>
  3. <el-dialog
  4. v-bind="$attrs"
  5. title="外部资源引用"
  6. width="600px"
  7. :close-on-click-modal="false"
  8. v-on="$listeners"
  9. @open="onOpen"
  10. @close="onClose"
  11. >
  12. <el-input
  13. v-for="(item, index) in resources"
  14. :key="index"
  15. v-model="resources[index]"
  16. class="url-item"
  17. placeholder="请输入 css 或 js 资源路径"
  18. prefix-icon="el-icon-link"
  19. clearable
  20. >
  21. <el-button
  22. slot="append"
  23. icon="el-icon-delete"
  24. @click="deleteOne(index)"
  25. />
  26. </el-input>
  27. <el-button-group class="add-item">
  28. <el-button
  29. plain
  30. @click="addOne('https://lib.baomitu.com/jquery/1.8.3/jquery.min.js')"
  31. >
  32. jQuery1.8.3
  33. </el-button>
  34. <el-button plain @click="addOne('https://unpkg.com/http-vue-loader')">
  35. http-vue-loader
  36. </el-button>
  37. <el-button icon="el-icon-circle-plus-outline" plain @click="addOne('')">
  38. 添加其他
  39. </el-button>
  40. </el-button-group>
  41. <div slot="footer">
  42. <el-button @click="close"> 取消 </el-button>
  43. <el-button type="primary" @click="handelConfirm"> 确定 </el-button>
  44. </div>
  45. </el-dialog>
  46. </div>
  47. </template>
  48. <script>
  49. import { deepClone } from '@/components/FormGenerator/utils/index';
  50. export default {
  51. components: {},
  52. inheritAttrs: false,
  53. props: ['originResource'],
  54. data() {
  55. return {
  56. resources: null
  57. };
  58. },
  59. computed: {},
  60. watch: {},
  61. created() {},
  62. mounted() {},
  63. methods: {
  64. onOpen() {
  65. this.resources = this.originResource.length
  66. ? deepClone(this.originResource)
  67. : [''];
  68. },
  69. onClose() {},
  70. close() {
  71. this.$emit('update:visible', false);
  72. },
  73. handelConfirm() {
  74. const results = this.resources.filter((item) => !!item) || [];
  75. this.$emit('save', results);
  76. this.close();
  77. if (results.length) {
  78. this.resources = results;
  79. }
  80. },
  81. deleteOne(index) {
  82. this.resources.splice(index, 1);
  83. },
  84. addOne(url) {
  85. if (this.resources.indexOf(url) > -1) {
  86. this.$message('资源已存在');
  87. } else {
  88. this.resources.push(url);
  89. }
  90. }
  91. }
  92. };
  93. </script>
  94. <style lang="scss" scoped>
  95. .add-item {
  96. margin-top: 8px;
  97. }
  98. .url-item {
  99. margin-bottom: 12px;
  100. }
  101. </style>