<!-- * @description: 标题属性设置面板 * @Date: 2022-08-17 16:53:28 * @Author: shiyi --> <template> <div class="bs-setting-wrap"> <el-form ref="form" label-width="100px" label-position="left" :model="config" :rules="rules" class="bs-el-form" > <SettingTitle>标题</SettingTitle> <div class="lc-field-body"> <el-form-item label="标题" label-width="100px" prop="title" > <el-input v-model="config.title" placeholder="请输入标题" clearable /> </el-form-item> </div> <SettingTitle>位置</SettingTitle> <div class="lc-field-body"> <PosWhSetting :config="config" /> </div> <SettingTitle v-if="config.border">边框</SettingTitle> <div class="lc-field-body"> <BorderSetting v-if="config.border" label-width="100px" :config="config.border" :bigTitle='config.title' /> </div> <SettingTitle>旋转</SettingTitle> <div class="lc-field-body"> <RotateSetting :config="config" /> </div> <SettingTitle>基础</SettingTitle> <div class="lc-field-body"> <el-form-item label="URL" label-width="100px" prop="customize.url" style="margin-bottom: 14px" > <el-upload class="bs-el-upload" :class="{ hide: fileList.length >= 1 }" :action="upLoadUrl" :data="fileUploadParam" :headers="headers" :accept="accept" :file-list="fileList" :auto-upload="true" :limit="1" list-type="picture-card" :on-success="handleUploadSuccess" :on-error="handleUploadError" :before-upload="beforeUpload" > <i slot="default" class="el-icon-plus" /> <div slot="file" slot-scope="{ file }" > <img class="el-upload-list__item-thumbnail" :src="getCoverPicture(file.url)" alt="" > <span class="el-upload-list__item-actions"> <span class="el-upload-list__item-delete" @click="handleRemove(file)" > <i class="el-icon-delete" /> </span> </span> </div> <el-input slot="tip" v-model="config.customize.url" class="upload-tip" placeholder="或输入URL地址" clearable /> </el-upload> </el-form-item> <el-form-item label="不透明度" label-width="100px" > <el-input-number v-model="config.customize.opacity" class="bs-el-input-number" placeholder="请输入不透明度" :min="0.01" :max="1" :precision="2" :step="0.01" /> </el-form-item> </div> </el-form> </div> </template> <script> import SettingTitle from 'data-room-ui/SettingTitle/index.vue' import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue' import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue' import { getFileUrl } from 'data-room-ui/js/utils/file' import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue' export default { name: 'PicSetting', components: { PosWhSetting, SettingTitle, BorderSetting, RotateSetting }, data () { return { upLoadUrl: window.BS_CONFIG?.httpConfigs?.baseURL + '/bigScreen/file/upload', fileUploadParam: { module: 'form' }, headers: { ...window.BS_CONFIG?.httpConfigs?.headers }, fileList: [], accept: 'image/*', hideUpload: false, rules: { 'customize.url': [ // 地址校验 NOTE 暂时移除校验,因为通过系统上传的图片,url是相对路径,无法通过校验 // { // validator: (rule, value, callback) => { // if (value) { // const reg = /^(http|https):\/\/([\w.]+\/?)\S*/ // if (!reg.test(value)) { // callback(new Error('请输入正确的URL地址')) // } else { // callback() // } // } else { // callback() // } // }, // trigger: 'blur' // } ] } } }, computed: { config: { get () { return this.$store.state.bigScreen.activeItemConfig }, set (val) { this.$store.state.bigScreen.activeItemConfig = val } } }, watch: { 'config.customize.url': function (val) { if (val) { this.fileList = [ { name: this.config.title, url: this.config.customize.url } ] } else { this.fileList = [] } } }, mounted () { if (this.config.customize.url) { this.fileList = [ { name: this.config.title, url: this.config.customize.url } ] } else { this.fileList = [] } }, methods: { handleUploadSuccess (res) { if (res.code === 200) { this.config.customize.url = res.data.url this.fileList = [ { name: this.config.title, url: this.config.customize.url } ] } else { this.$message.error(res.msg) this.fileList = [] } }, handleUploadError () { this.$message.error('上传失败') }, handleRemove () { this.fileList = [] this.config.customize.url = '' }, beforeUpload (file) { const isLt2M = file.size / 1024 / 1024 < 2 if (!isLt2M) { this.$message.error('上传图片大小不能超过 2MB!') } return isLt2M }, /** * 获取图片访问地址,如果是相对路径则拼接上文件访问前缀地址 * @param url * @returns {*} */ getCoverPicture (url) { return getFileUrl(url) }, } } </script> <style lang="scss" scoped> @import '../../assets/style/settingWrap.scss'; .bs-slider { .el-input-number__decrease { background: var(--bs-el-background-1); border-right: 1px solid var(--bs-background-1); } .el-input-number__increase { background: var(--bs-el-background-1); border-left: 1px solid var(--bs-background-1); } } .bs-setting-wrap { padding-top: 16px; ::v-deep .hide .el-upload--picture-card { display: none !important; } ::v-deep .el-upload-list__item { transition: none !important; } ::v-deep .el-upload--picture-card { margin-bottom: 12px !important; } } .lc-field-body { padding: 12px 16px; } </style>