<template> <div> <el-dialog v-bind="$attrs" title="外部资源引用" width="600px" :close-on-click-modal="false" v-on="$listeners" @open="onOpen" @close="onClose" > <el-input v-for="(item, index) in resources" :key="index" v-model="resources[index]" class="url-item" placeholder="请输入 css 或 js 资源路径" prefix-icon="el-icon-link" clearable > <el-button slot="append" icon="el-icon-delete" @click="deleteOne(index)" /> </el-input> <el-button-group class="add-item"> <el-button plain @click="addOne('https://lib.baomitu.com/jquery/1.8.3/jquery.min.js')" > jQuery1.8.3 </el-button> <el-button plain @click="addOne('https://unpkg.com/http-vue-loader')" > http-vue-loader </el-button> <el-button icon="el-icon-circle-plus-outline" plain @click="addOne('')" > 添加其他 </el-button> </el-button-group> <div slot="footer"> <el-button @click="close"> 取消 </el-button> <el-button type="primary" @click="handelConfirm" > 确定 </el-button> </div> </el-dialog> </div> </template> <script> import { deepClone } from '@/utils/index' export default { components: {}, inheritAttrs: false, props: ['originResource'], data() { return { resources: null } }, computed: {}, watch: {}, created() {}, mounted() {}, methods: { onOpen() { this.resources = this.originResource.length ? deepClone(this.originResource) : [''] }, onClose() { }, close() { this.$emit('update:visible', false) }, handelConfirm() { const results = this.resources.filter(item => !!item) || [] this.$emit('save', results) this.close() if (results.length) { this.resources = results } }, deleteOne(index) { this.resources.splice(index, 1) }, addOne(url) { if (this.resources.indexOf(url) > -1) { this.$message('资源已存在') } else { this.resources.push(url) } } } } </script> <style lang="scss" scoped> .add-item{ margin-top: 8px; } .url-item{ margin-bottom: 12px; } </style>