123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <!--
- * @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>
|