projects/mes-test #133
@@ -65,6 +65,7 @@
 | 
			
		||||
						v-if="col.subcomponent"
 | 
			
		||||
						:key="col.key"
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						:read-only="disabled"
 | 
			
		||||
						:is="col.subcomponent"
 | 
			
		||||
						v-model="form[col.prop]"
 | 
			
		||||
						:inlineStyle="col.style"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,279 +1,293 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <el-upload
 | 
			
		||||
      :action="uploadFileUrl"
 | 
			
		||||
      :before-upload="handleBeforeUpload"
 | 
			
		||||
      :on-success="handleUploadSuccess"
 | 
			
		||||
      :on-error="handleUploadError"
 | 
			
		||||
      name="file"
 | 
			
		||||
      :show-file-list="false"
 | 
			
		||||
      :headers="headers"
 | 
			
		||||
      style="display: none"
 | 
			
		||||
      ref="upload"
 | 
			
		||||
      v-if="this.type === 'url'"
 | 
			
		||||
    >
 | 
			
		||||
    </el-upload>
 | 
			
		||||
    <div class="editor" ref="editor" :style="styles"></div>
 | 
			
		||||
  </div>
 | 
			
		||||
	<div :class="[readOnly ? 'editor-wrapper' : '']">
 | 
			
		||||
		<el-upload
 | 
			
		||||
			:action="uploadFileUrl"
 | 
			
		||||
			:before-upload="handleBeforeUpload"
 | 
			
		||||
			:on-success="handleUploadSuccess"
 | 
			
		||||
			:on-error="handleUploadError"
 | 
			
		||||
			name="file"
 | 
			
		||||
			:show-file-list="false"
 | 
			
		||||
			:headers="headers"
 | 
			
		||||
			style="display: none"
 | 
			
		||||
			ref="upload"
 | 
			
		||||
			v-if="this.type === 'url'"></el-upload>
 | 
			
		||||
		<div class="editor" ref="editor" :style="styles"></div>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Quill from "quill";
 | 
			
		||||
import "quill/dist/quill.core.css";
 | 
			
		||||
import "quill/dist/quill.snow.css";
 | 
			
		||||
import "quill/dist/quill.bubble.css";
 | 
			
		||||
import { getAccessToken } from "@/utils/auth";
 | 
			
		||||
import Quill from 'quill';
 | 
			
		||||
import 'quill/dist/quill.core.css';
 | 
			
		||||
import 'quill/dist/quill.snow.css';
 | 
			
		||||
import 'quill/dist/quill.bubble.css';
 | 
			
		||||
import { getAccessToken } from '@/utils/auth';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "Editor",
 | 
			
		||||
  props: {
 | 
			
		||||
    /* 编辑器的内容 */
 | 
			
		||||
    value: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: "",
 | 
			
		||||
    },
 | 
			
		||||
    /* 高度 */
 | 
			
		||||
    height: {
 | 
			
		||||
      type: Number,
 | 
			
		||||
      default: null,
 | 
			
		||||
    },
 | 
			
		||||
    /* 最小高度 */
 | 
			
		||||
    minHeight: {
 | 
			
		||||
      type: Number,
 | 
			
		||||
      default: null,
 | 
			
		||||
    },
 | 
			
		||||
    /* 只读 */
 | 
			
		||||
    readOnly: {
 | 
			
		||||
      type: Boolean,
 | 
			
		||||
      default: false,
 | 
			
		||||
    },
 | 
			
		||||
    // 上传文件大小限制(MB)
 | 
			
		||||
    fileSize: {
 | 
			
		||||
      type: Number,
 | 
			
		||||
      default: 5,
 | 
			
		||||
    },
 | 
			
		||||
    /* 类型(base64格式、url格式) */
 | 
			
		||||
    type: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: "url",
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
 | 
			
		||||
      headers: { Authorization: "Bearer " + getAccessToken() }, // 设置上传的请求头部
 | 
			
		||||
      Quill: null,
 | 
			
		||||
      currentValue: "",
 | 
			
		||||
      options: {
 | 
			
		||||
        theme: "snow",
 | 
			
		||||
        bounds: document.body,
 | 
			
		||||
        debug: "warn",
 | 
			
		||||
        modules: {
 | 
			
		||||
          // 工具栏配置
 | 
			
		||||
          toolbar: [
 | 
			
		||||
            ["bold", "italic", "underline", "strike"],       // 加粗 斜体 下划线 删除线
 | 
			
		||||
            ["blockquote", "code-block"],                    // 引用  代码块
 | 
			
		||||
            [{ list: "ordered" }, { list: "bullet" }],       // 有序、无序列表
 | 
			
		||||
            [{ indent: "-1" }, { indent: "+1" }],            // 缩进
 | 
			
		||||
            [{ size: ["small", false, "large", "huge"] }],   // 字体大小
 | 
			
		||||
            [{ header: [1, 2, 3, 4, 5, 6, false] }],         // 标题
 | 
			
		||||
            [{ color: [] }, { background: [] }],             // 字体颜色、字体背景颜色
 | 
			
		||||
            [{ align: [] }],                                 // 对齐方式
 | 
			
		||||
            ["clean"],                                       // 清除文本格式
 | 
			
		||||
            ["link", "image", "video"]                       // 链接、图片、视频
 | 
			
		||||
          ],
 | 
			
		||||
        },
 | 
			
		||||
        placeholder: "请输入内容",
 | 
			
		||||
        readOnly: true,
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    styles() {
 | 
			
		||||
      let style = {};
 | 
			
		||||
      if (this.minHeight) {
 | 
			
		||||
        style.minHeight = `${this.minHeight}px`;
 | 
			
		||||
      }
 | 
			
		||||
      if (this.height) {
 | 
			
		||||
        style.height = `${this.height}px`;
 | 
			
		||||
      }
 | 
			
		||||
      return style;
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    value: {
 | 
			
		||||
      handler(val) {
 | 
			
		||||
        if (val !== this.currentValue) {
 | 
			
		||||
          this.currentValue = val === null ? "" : val;
 | 
			
		||||
          if (this.Quill) {
 | 
			
		||||
            this.Quill.pasteHTML(this.currentValue);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      immediate: true,
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.init();
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    this.Quill = null;
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      const editor = this.$refs.editor;
 | 
			
		||||
      this.Quill = new Quill(editor, this.options);
 | 
			
		||||
      // 取消自动聚焦 start
 | 
			
		||||
      this.$nextTick(()=>{
 | 
			
		||||
        this.Quill.blur();
 | 
			
		||||
        if(!this.readOnly){
 | 
			
		||||
          this.Quill.enable();
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
      // 如果设置了上传地址则自定义图片上传事件
 | 
			
		||||
      if (this.type === 'url') {
 | 
			
		||||
        let toolbar = this.Quill.getModule("toolbar");
 | 
			
		||||
        toolbar.addHandler("image", (value) => {
 | 
			
		||||
          this.uploadType = "image";
 | 
			
		||||
          if (value) {
 | 
			
		||||
            this.$refs.upload.$children[0].$refs.input.click();
 | 
			
		||||
          } else {
 | 
			
		||||
            this.quill.format("image", false);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
      this.Quill.pasteHTML(this.currentValue);
 | 
			
		||||
      this.Quill.on("text-change", (delta, oldDelta, source) => {
 | 
			
		||||
        const html = this.$refs.editor.children[0].innerHTML;
 | 
			
		||||
        const text = this.Quill.getText();
 | 
			
		||||
        const quill = this.Quill;
 | 
			
		||||
        this.currentValue = html;
 | 
			
		||||
        this.$emit("input", html);
 | 
			
		||||
        this.$emit("on-change", { html, text, quill });
 | 
			
		||||
      });
 | 
			
		||||
      this.Quill.on("text-change", (delta, oldDelta, source) => {
 | 
			
		||||
        this.$emit("on-text-change", delta, oldDelta, source);
 | 
			
		||||
      });
 | 
			
		||||
      this.Quill.on("selection-change", (range, oldRange, source) => {
 | 
			
		||||
        this.$emit("on-selection-change", range, oldRange, source);
 | 
			
		||||
      });
 | 
			
		||||
      this.Quill.on("editor-change", (eventName, ...args) => {
 | 
			
		||||
        this.$emit("on-editor-change", eventName, ...args);
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 上传前校检格式和大小
 | 
			
		||||
    handleBeforeUpload(file) {
 | 
			
		||||
      // 校检文件大小
 | 
			
		||||
      if (this.fileSize) {
 | 
			
		||||
        const isLt = file.size / 1024 / 1024 < this.fileSize;
 | 
			
		||||
        if (!isLt) {
 | 
			
		||||
          this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      return true;
 | 
			
		||||
    },
 | 
			
		||||
    handleUploadSuccess(res, file) {
 | 
			
		||||
      // 获取富文本组件实例
 | 
			
		||||
      let quill = this.Quill;
 | 
			
		||||
      // 如果上传成功
 | 
			
		||||
      // edit by 芋道源码
 | 
			
		||||
      if (res.code === 200 || res.code === 0) {
 | 
			
		||||
        // 获取光标所在位置
 | 
			
		||||
        let length = quill.getSelection().index;
 | 
			
		||||
        // 插入图片  res.url为服务器返回的图片地址
 | 
			
		||||
        // edit by 芋道源码
 | 
			
		||||
        quill.insertEmbed(length, "image", res.data);
 | 
			
		||||
        // 调整光标到最后
 | 
			
		||||
        quill.setSelection(length + 1);
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$message.error("图片插入失败");
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleUploadError() {
 | 
			
		||||
      this.$message.error("图片插入失败");
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
	name: 'Editor',
 | 
			
		||||
	props: {
 | 
			
		||||
		/* 编辑器的内容 */
 | 
			
		||||
		value: {
 | 
			
		||||
			type: String,
 | 
			
		||||
			default: '',
 | 
			
		||||
		},
 | 
			
		||||
		/* 高度 */
 | 
			
		||||
		height: {
 | 
			
		||||
			type: Number,
 | 
			
		||||
			default: null,
 | 
			
		||||
		},
 | 
			
		||||
		/* 最小高度 */
 | 
			
		||||
		minHeight: {
 | 
			
		||||
			type: Number,
 | 
			
		||||
			default: null,
 | 
			
		||||
		},
 | 
			
		||||
		/* 只读 */
 | 
			
		||||
		readOnly: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
		// 上传文件大小限制(MB)
 | 
			
		||||
		fileSize: {
 | 
			
		||||
			type: Number,
 | 
			
		||||
			default: 5,
 | 
			
		||||
		},
 | 
			
		||||
		/* 类型(base64格式、url格式) */
 | 
			
		||||
		type: {
 | 
			
		||||
			type: String,
 | 
			
		||||
			default: 'url',
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			uploadFileUrl:
 | 
			
		||||
				process.env.VUE_APP_BASE_API + '/admin-api/infra/file/upload', // 请求地址
 | 
			
		||||
			headers: { Authorization: 'Bearer ' + getAccessToken() }, // 设置上传的请求头部
 | 
			
		||||
			Quill: null,
 | 
			
		||||
			currentValue: '',
 | 
			
		||||
			options: {
 | 
			
		||||
				theme: 'snow',
 | 
			
		||||
				bounds: document.body,
 | 
			
		||||
				debug: 'warn',
 | 
			
		||||
				modules: {
 | 
			
		||||
					// 工具栏配置
 | 
			
		||||
					toolbar: [
 | 
			
		||||
						['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
 | 
			
		||||
						['blockquote', 'code-block'], // 引用  代码块
 | 
			
		||||
						[{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表
 | 
			
		||||
						[{ indent: '-1' }, { indent: '+1' }], // 缩进
 | 
			
		||||
						[{ size: ['small', false, 'large', 'huge'] }], // 字体大小
 | 
			
		||||
						[{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
 | 
			
		||||
						[{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
 | 
			
		||||
						[{ align: [] }], // 对齐方式
 | 
			
		||||
						['clean'], // 清除文本格式
 | 
			
		||||
						['link', 'image', 'video'], // 链接、图片、视频
 | 
			
		||||
					],
 | 
			
		||||
				},
 | 
			
		||||
				placeholder: '请输入内容',
 | 
			
		||||
				readOnly: true,
 | 
			
		||||
			},
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
		styles() {
 | 
			
		||||
			let style = {};
 | 
			
		||||
			if (this.minHeight) {
 | 
			
		||||
				style.minHeight = `${this.minHeight}px`;
 | 
			
		||||
			}
 | 
			
		||||
			if (this.height) {
 | 
			
		||||
				style.height = `${this.height}px`;
 | 
			
		||||
			}
 | 
			
		||||
			return style;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	watch: {
 | 
			
		||||
		value: {
 | 
			
		||||
			handler(val) {
 | 
			
		||||
				if (val !== this.currentValue) {
 | 
			
		||||
					this.currentValue = val === null ? '' : val;
 | 
			
		||||
					if (this.Quill) {
 | 
			
		||||
						this.Quill.pasteHTML(this.currentValue);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			immediate: true,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.init();
 | 
			
		||||
	},
 | 
			
		||||
	beforeDestroy() {
 | 
			
		||||
		this.Quill = null;
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		init() {
 | 
			
		||||
			const editor = this.$refs.editor;
 | 
			
		||||
			this.Quill = new Quill(editor, this.options);
 | 
			
		||||
			// 取消自动聚焦 start
 | 
			
		||||
			this.$nextTick(() => {
 | 
			
		||||
				this.Quill.blur();
 | 
			
		||||
				if (!this.readOnly) {
 | 
			
		||||
					this.Quill.enable();
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
			// 如果设置了上传地址则自定义图片上传事件
 | 
			
		||||
			if (this.type === 'url') {
 | 
			
		||||
				let toolbar = this.Quill.getModule('toolbar');
 | 
			
		||||
				toolbar.addHandler('image', (value) => {
 | 
			
		||||
					this.uploadType = 'image';
 | 
			
		||||
					if (value) {
 | 
			
		||||
						this.$refs.upload.$children[0].$refs.input.click();
 | 
			
		||||
					} else {
 | 
			
		||||
						this.quill.format('image', false);
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
			}
 | 
			
		||||
			this.Quill.pasteHTML(this.currentValue);
 | 
			
		||||
			this.Quill.on('text-change', (delta, oldDelta, source) => {
 | 
			
		||||
				const html = this.$refs.editor.children[0].innerHTML;
 | 
			
		||||
				const text = this.Quill.getText();
 | 
			
		||||
				const quill = this.Quill;
 | 
			
		||||
				this.currentValue = html;
 | 
			
		||||
				this.$emit('input', html);
 | 
			
		||||
				this.$emit('on-change', { html, text, quill });
 | 
			
		||||
			});
 | 
			
		||||
			this.Quill.on('text-change', (delta, oldDelta, source) => {
 | 
			
		||||
				this.$emit('on-text-change', delta, oldDelta, source);
 | 
			
		||||
			});
 | 
			
		||||
			this.Quill.on('selection-change', (range, oldRange, source) => {
 | 
			
		||||
				this.$emit('on-selection-change', range, oldRange, source);
 | 
			
		||||
			});
 | 
			
		||||
			this.Quill.on('editor-change', (eventName, ...args) => {
 | 
			
		||||
				this.$emit('on-editor-change', eventName, ...args);
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		// 上传前校检格式和大小
 | 
			
		||||
		handleBeforeUpload(file) {
 | 
			
		||||
			// 校检文件大小
 | 
			
		||||
			if (this.fileSize) {
 | 
			
		||||
				const isLt = file.size / 1024 / 1024 < this.fileSize;
 | 
			
		||||
				if (!isLt) {
 | 
			
		||||
					this.$message.error(`上传文件大小不能超过 ${this.fileSize} MB!`);
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return true;
 | 
			
		||||
		},
 | 
			
		||||
		handleUploadSuccess(res, file) {
 | 
			
		||||
			// 获取富文本组件实例
 | 
			
		||||
			let quill = this.Quill;
 | 
			
		||||
			// 如果上传成功
 | 
			
		||||
			// edit by 芋道源码
 | 
			
		||||
			if (res.code === 200 || res.code === 0) {
 | 
			
		||||
				// 获取光标所在位置
 | 
			
		||||
				let length = quill.getSelection().index;
 | 
			
		||||
				// 插入图片  res.url为服务器返回的图片地址
 | 
			
		||||
				// edit by 芋道源码
 | 
			
		||||
				quill.insertEmbed(length, 'image', res.data);
 | 
			
		||||
				// 调整光标到最后
 | 
			
		||||
				quill.setSelection(length + 1);
 | 
			
		||||
			} else {
 | 
			
		||||
				this.$message.error('图片插入失败');
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		handleUploadError() {
 | 
			
		||||
			this.$message.error('图片插入失败');
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style>
 | 
			
		||||
.editor, .ql-toolbar {
 | 
			
		||||
  white-space: pre-wrap !important;
 | 
			
		||||
  line-height: normal !important;
 | 
			
		||||
.editor-wrapper {
 | 
			
		||||
	position: relative;
 | 
			
		||||
  cursor: not-allowed;
 | 
			
		||||
 | 
			
		||||
	&::after {
 | 
			
		||||
		content: '';
 | 
			
		||||
		position: absolute;
 | 
			
		||||
		top: 0;
 | 
			
		||||
		left: 0;
 | 
			
		||||
		width: 100%;
 | 
			
		||||
		height: 100%;
 | 
			
		||||
		background: #f5f7fa77;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
.editor,
 | 
			
		||||
.ql-toolbar {
 | 
			
		||||
	white-space: pre-wrap !important;
 | 
			
		||||
	line-height: normal !important;
 | 
			
		||||
}
 | 
			
		||||
.quill-img {
 | 
			
		||||
  display: none;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-tooltip[data-mode="link"]::before {
 | 
			
		||||
  content: "请输入链接地址:";
 | 
			
		||||
.ql-snow .ql-tooltip[data-mode='link']::before {
 | 
			
		||||
	content: '请输入链接地址:';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
 | 
			
		||||
  border-right: 0px;
 | 
			
		||||
  content: "保存";
 | 
			
		||||
  padding-right: 0px;
 | 
			
		||||
	border-right: 0px;
 | 
			
		||||
	content: '保存';
 | 
			
		||||
	padding-right: 0px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ql-snow .ql-tooltip[data-mode="video"]::before {
 | 
			
		||||
  content: "请输入视频地址:";
 | 
			
		||||
.ql-snow .ql-tooltip[data-mode='video']::before {
 | 
			
		||||
	content: '请输入视频地址:';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
 | 
			
		||||
  content: "14px";
 | 
			
		||||
	content: '14px';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
 | 
			
		||||
  content: "10px";
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
 | 
			
		||||
	content: '10px';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
 | 
			
		||||
  content: "18px";
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
 | 
			
		||||
	content: '18px';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
 | 
			
		||||
  content: "32px";
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
 | 
			
		||||
	content: '32px';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
 | 
			
		||||
  content: "文本";
 | 
			
		||||
	content: '文本';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
 | 
			
		||||
  content: "标题1";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
 | 
			
		||||
	content: '标题1';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
 | 
			
		||||
  content: "标题2";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
 | 
			
		||||
	content: '标题2';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
 | 
			
		||||
  content: "标题3";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
 | 
			
		||||
	content: '标题3';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
 | 
			
		||||
  content: "标题4";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
 | 
			
		||||
	content: '标题4';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
 | 
			
		||||
  content: "标题5";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
 | 
			
		||||
	content: '标题5';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
 | 
			
		||||
  content: "标题6";
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
 | 
			
		||||
	content: '标题6';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
 | 
			
		||||
  content: "标准字体";
 | 
			
		||||
	content: '标准字体';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
 | 
			
		||||
  content: "衬线字体";
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {
 | 
			
		||||
	content: '衬线字体';
 | 
			
		||||
}
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
 | 
			
		||||
  content: "等宽字体";
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,
 | 
			
		||||
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {
 | 
			
		||||
	content: '等宽字体';
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,10 @@
 | 
			
		||||
				<section v-for="(section, index) in sections" :key="section.key">
 | 
			
		||||
					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
 | 
			
		||||
 | 
			
		||||
					<div class="form-part" v-if="section.key == 'base'">
 | 
			
		||||
					<div
 | 
			
		||||
						class="form-part"
 | 
			
		||||
						v-if="section.key == 'base'"
 | 
			
		||||
						style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
 | 
			
		||||
						<el-skeleton v-if="!showForm" animated />
 | 
			
		||||
						<!-- <BaseInfoForm
 | 
			
		||||
							key="drawer-dialog-form"
 | 
			
		||||
@@ -64,9 +67,8 @@
 | 
			
		||||
					<div
 | 
			
		||||
						v-if="section.key == 'attrs'"
 | 
			
		||||
						style="position: relative; margin-top: 12px">
 | 
			
		||||
						<div
 | 
			
		||||
							v-if="!mode.includes('detail')"
 | 
			
		||||
							style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
						<!-- v-if="!mode.includes('detail')" -->
 | 
			
		||||
						<div style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
							<el-button @click="handleAddAttr" type="text">
 | 
			
		||||
								<i class="el-icon-plus"></i>
 | 
			
		||||
								添加报警
 | 
			
		||||
@@ -102,9 +104,9 @@
 | 
			
		||||
 | 
			
		||||
			<div class="drawer-body__footer">
 | 
			
		||||
				<el-button style="" @click="handleCancel">取消</el-button>
 | 
			
		||||
				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
				<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
					编辑
 | 
			
		||||
				</el-button>
 | 
			
		||||
				</el-button> -->
 | 
			
		||||
				<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
@@ -123,9 +125,9 @@
 | 
			
		||||
			<DialogForm
 | 
			
		||||
				v-if="attrFormVisible"
 | 
			
		||||
				ref="attrForm"
 | 
			
		||||
				:disabled="mode.includes('detail')"
 | 
			
		||||
				v-model="attrForm"
 | 
			
		||||
				:rows="attrRows" />
 | 
			
		||||
			<!-- :disabled="mode.includes('detail')" -->
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
	</el-drawer>
 | 
			
		||||
</template>
 | 
			
		||||
@@ -191,29 +193,12 @@ export default {
 | 
			
		||||
						url: '/base/equipment-group-alarm/getCode',
 | 
			
		||||
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						select: true,
 | 
			
		||||
						label: '报警类型', // 固定选项
 | 
			
		||||
						prop: 'type',
 | 
			
		||||
						options: [
 | 
			
		||||
							{ label: '布尔型', value: 2 },
 | 
			
		||||
							{ label: '字符型', value: 1 },
 | 
			
		||||
						],
 | 
			
		||||
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
			
		||||
					},
 | 
			
		||||
				],
 | 
			
		||||
				[
 | 
			
		||||
					{
 | 
			
		||||
						select: true,
 | 
			
		||||
						label: '报警级别', // 字典
 | 
			
		||||
						prop: 'grade',
 | 
			
		||||
						options: this.getDictDatas(this.DICT_TYPE.EQU_ALARM_LEVEL),
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						input: true,
 | 
			
		||||
						label: '设备报警编码', // 对应到设备实际的报警编码
 | 
			
		||||
						prop: 'alarmCode',
 | 
			
		||||
					},
 | 
			
		||||
				],
 | 
			
		||||
				[
 | 
			
		||||
					{
 | 
			
		||||
@@ -229,6 +214,23 @@ export default {
 | 
			
		||||
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
			
		||||
					},
 | 
			
		||||
				],
 | 
			
		||||
				[
 | 
			
		||||
					{
 | 
			
		||||
						select: true,
 | 
			
		||||
						label: '报警类型', // 固定选项
 | 
			
		||||
						prop: 'type',
 | 
			
		||||
						options: [
 | 
			
		||||
							{ label: '布尔型', value: 2 },
 | 
			
		||||
							{ label: '字符型', value: 1 },
 | 
			
		||||
						],
 | 
			
		||||
						rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						input: true,
 | 
			
		||||
						label: '设备报警编码', // 对应到设备实际的报警编码
 | 
			
		||||
						prop: 'alarmCode',
 | 
			
		||||
					},
 | 
			
		||||
				],
 | 
			
		||||
			],
 | 
			
		||||
			attrQuery: {
 | 
			
		||||
				params: {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@
 | 
			
		||||
						@change="$emit('update', dataForm)"
 | 
			
		||||
						placeholder="请输入报警编码" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
 | 
			
		||||
				<!-- 				
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警编码"
 | 
			
		||||
@@ -40,30 +41,6 @@
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item> -->
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警类型"
 | 
			
		||||
					prop="type"
 | 
			
		||||
					:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
 | 
			
		||||
					<el-select
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.type"
 | 
			
		||||
						placeholder="请选择报警类型"
 | 
			
		||||
						@change="handleTypeChange">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="opt in [
 | 
			
		||||
								{ label: '布尔型', value: 2 },
 | 
			
		||||
								{ label: '字符型', value: 1 },
 | 
			
		||||
							]"
 | 
			
		||||
							:key="opt.value"
 | 
			
		||||
							:label="opt.label"
 | 
			
		||||
							:value="opt.value" />
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警级别"
 | 
			
		||||
@@ -82,19 +59,6 @@
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					v-if="+dataForm.type == 1"
 | 
			
		||||
					label="设备报警编码"
 | 
			
		||||
					prop="alarmCode">
 | 
			
		||||
					<el-input
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.alarmCode"
 | 
			
		||||
						@change="$emit('update', dataForm)"
 | 
			
		||||
						placeholder="请输入设备报警编码" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
@@ -122,6 +86,42 @@
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警类型"
 | 
			
		||||
					prop="type"
 | 
			
		||||
					:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
 | 
			
		||||
					<el-select
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.type"
 | 
			
		||||
						placeholder="请选择报警类型"
 | 
			
		||||
						@change="handleTypeChange">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="opt in [
 | 
			
		||||
								{ label: '布尔型', value: 2 },
 | 
			
		||||
								{ label: '字符型', value: 1 },
 | 
			
		||||
							]"
 | 
			
		||||
							:key="opt.value"
 | 
			
		||||
							:label="opt.label"
 | 
			
		||||
							:value="opt.value" />
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					v-if="+dataForm.type == 1"
 | 
			
		||||
					label="设备报警编码"
 | 
			
		||||
					prop="alarmCode">
 | 
			
		||||
					<el-input
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.alarmCode"
 | 
			
		||||
						@change="$emit('update', dataForm)"
 | 
			
		||||
						placeholder="请输入设备报警编码" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
	</el-form>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,10 @@
 | 
			
		||||
				<section v-for="(section, index) in sections" :key="section.key">
 | 
			
		||||
					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
 | 
			
		||||
 | 
			
		||||
					<div class="form-part" v-if="section.key == 'base'">
 | 
			
		||||
					<div
 | 
			
		||||
						class="form-part"
 | 
			
		||||
						v-if="section.key == 'base'"
 | 
			
		||||
						style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
 | 
			
		||||
						<el-skeleton v-if="!showForm" animated />
 | 
			
		||||
						<!-- <BaseInfoForm
 | 
			
		||||
							key="drawer-dialog-form"
 | 
			
		||||
@@ -64,9 +67,8 @@
 | 
			
		||||
					<div
 | 
			
		||||
						v-if="section.key == 'attrs'"
 | 
			
		||||
						style="position: relative; margin-top: 12px">
 | 
			
		||||
						<div
 | 
			
		||||
							v-if="!mode.includes('detail')"
 | 
			
		||||
							style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
						<!-- v-if="!mode.includes('detail')" -->
 | 
			
		||||
						<div style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
							<el-button @click="handleAddAttr" type="text">
 | 
			
		||||
								<i class="el-icon-plus"></i>
 | 
			
		||||
								添加属性
 | 
			
		||||
@@ -102,9 +104,9 @@
 | 
			
		||||
 | 
			
		||||
			<div class="drawer-body__footer">
 | 
			
		||||
				<el-button style="" @click="handleCancel">取消</el-button>
 | 
			
		||||
				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
				<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
					编辑
 | 
			
		||||
				</el-button>
 | 
			
		||||
				</el-button> -->
 | 
			
		||||
				<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
@@ -120,10 +122,10 @@
 | 
			
		||||
			@close="closeAttrForm"
 | 
			
		||||
			@cancel="closeAttrForm"
 | 
			
		||||
			@confirm="submitAttrForm">
 | 
			
		||||
			<!-- :disabled="mode.includes('detail')" -->
 | 
			
		||||
			<DialogForm
 | 
			
		||||
				v-if="attrFormVisible"
 | 
			
		||||
				ref="attrForm"
 | 
			
		||||
				:disabled="mode.includes('detail')"
 | 
			
		||||
				v-model="attrForm"
 | 
			
		||||
				:rows="attrRows" />
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
 
 | 
			
		||||
@@ -41,29 +41,6 @@
 | 
			
		||||
				</el-form-item> -->
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警类型"
 | 
			
		||||
					prop="type"
 | 
			
		||||
					:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
 | 
			
		||||
					<el-select
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.type"
 | 
			
		||||
						placeholder="请选择报警类型"
 | 
			
		||||
						@change="handleTypeChange">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="opt in [
 | 
			
		||||
								{ label: '布尔型', value: 2 },
 | 
			
		||||
								{ label: '字符型', value: 1 },
 | 
			
		||||
							]"
 | 
			
		||||
							:key="opt.value"
 | 
			
		||||
							:label="opt.label"
 | 
			
		||||
							:value="opt.value" />
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警级别"
 | 
			
		||||
@@ -82,19 +59,6 @@
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					v-if="+dataForm.type == 1"
 | 
			
		||||
					label="设备报警编码"
 | 
			
		||||
					prop="alarmCode">
 | 
			
		||||
					<el-input
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.alarmCode"
 | 
			
		||||
						@change="$emit('update', dataForm)"
 | 
			
		||||
						placeholder="请输入设备报警编码" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
@@ -122,6 +86,42 @@
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
		<el-row :gutter="20">
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					label="报警类型"
 | 
			
		||||
					prop="type"
 | 
			
		||||
					:rules="[{ required: true, message: '不能为空', trigger: 'blur' }]">
 | 
			
		||||
					<el-select
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.type"
 | 
			
		||||
						placeholder="请选择报警类型"
 | 
			
		||||
						@change="handleTypeChange">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="opt in [
 | 
			
		||||
								{ label: '布尔型', value: 2 },
 | 
			
		||||
								{ label: '字符型', value: 1 },
 | 
			
		||||
							]"
 | 
			
		||||
							:key="opt.value"
 | 
			
		||||
							:label="opt.label"
 | 
			
		||||
							:value="opt.value" />
 | 
			
		||||
					</el-select>
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
 | 
			
		||||
			<el-col :span="12">
 | 
			
		||||
				<el-form-item
 | 
			
		||||
					v-if="+dataForm.type == 1"
 | 
			
		||||
					label="设备报警编码"
 | 
			
		||||
					prop="alarmCode">
 | 
			
		||||
					<el-input
 | 
			
		||||
						:disabled="disabled"
 | 
			
		||||
						v-model="dataForm.alarmCode"
 | 
			
		||||
						@change="$emit('update', dataForm)"
 | 
			
		||||
						placeholder="请输入设备报警编码" />
 | 
			
		||||
				</el-form-item>
 | 
			
		||||
			</el-col>
 | 
			
		||||
		</el-row>
 | 
			
		||||
	</el-form>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,10 @@
 | 
			
		||||
				<section v-for="(section, index) in sections" :key="section.key">
 | 
			
		||||
					<SmallTitle v-if="index != 0">{{ section.name }}</SmallTitle>
 | 
			
		||||
 | 
			
		||||
					<div class="form-part" v-if="section.key == 'base'">
 | 
			
		||||
					<div
 | 
			
		||||
						class="form-part"
 | 
			
		||||
						v-if="section.key == 'base'"
 | 
			
		||||
						style="border-bottom: 1px solid #dfdfdf; margin-bottom: 24px">
 | 
			
		||||
						<el-skeleton v-if="!showForm" animated />
 | 
			
		||||
						<!-- <BaseInfoForm
 | 
			
		||||
							key="drawer-dialog-form"
 | 
			
		||||
@@ -66,9 +69,8 @@
 | 
			
		||||
					<div
 | 
			
		||||
						v-if="section.key == 'attrs'"
 | 
			
		||||
						style="position: relative; margin-top: 12px">
 | 
			
		||||
						<div
 | 
			
		||||
							v-if="!mode.includes('detail')"
 | 
			
		||||
							style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
						<!-- v-if="!mode.includes('detail')" -->
 | 
			
		||||
						<div style="position: absolute; top: -40px; right: 0">
 | 
			
		||||
							<el-button @click="handleAddAttr" type="text">
 | 
			
		||||
								<i class="el-icon-plus"></i>
 | 
			
		||||
								添加属性
 | 
			
		||||
@@ -104,9 +106,9 @@
 | 
			
		||||
 | 
			
		||||
			<div class="drawer-body__footer">
 | 
			
		||||
				<el-button style="" @click="handleCancel">取消</el-button>
 | 
			
		||||
				<el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
				<!-- <el-button v-if="mode == 'detail'" type="primary" @click="toggleEdit">
 | 
			
		||||
					编辑
 | 
			
		||||
				</el-button>
 | 
			
		||||
				</el-button> -->
 | 
			
		||||
				<!-- <el-button v-else type="primary" @click="handleCancel">确定</el-button> -->
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
@@ -122,10 +124,10 @@
 | 
			
		||||
			@close="closeAttrForm"
 | 
			
		||||
			@cancel="closeAttrForm"
 | 
			
		||||
			@confirm="submitAttrForm">
 | 
			
		||||
			<!-- :disabled="mode.includes('detail')" -->
 | 
			
		||||
			<DialogForm
 | 
			
		||||
				v-if="attrFormVisible"
 | 
			
		||||
				ref="attrForm"
 | 
			
		||||
				:disabled="mode.includes('detail')"
 | 
			
		||||
				v-model="attrForm"
 | 
			
		||||
				:rows="attrRows" />
 | 
			
		||||
		</base-dialog>
 | 
			
		||||
 
 | 
			
		||||
@@ -269,7 +269,6 @@ export default {
 | 
			
		||||
						prop: 'files',
 | 
			
		||||
					},
 | 
			
		||||
				],
 | 
			
		||||
				// TODO: 富文本
 | 
			
		||||
				[
 | 
			
		||||
					{
 | 
			
		||||
						label: '保养描述',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user