<template> <el-input :id="id" ref="form-item" v-model="value" type="textarea" v-bind="$attrs" v-on="$listeners" v-bind:disabled="isDisable" :rows="maxRows" resize="none" @change="onChange" /> </template> <script> export default { data: function () { return { value: "", isXml: false, }; }, props: { maxRows: { type: Number, default: 3, }, maxCols: { type: Number, default: 4, }, disabled: { type: Boolean, default: false, }, id: { type: String, default: undefined, }, model: { type: Object, default: undefined, }, }, computed: { // model: { // get() { // let value = this.format(this.value); // return value; // }, // set(newVal) { // this.$emit("input", newVal); // }, // }, mode () { return this.$store.state.Status.mode }, isDisable: { get() { return this.mode === "display" || this.disabled; }, }, }, methods: { show: function (rows) { let strs = rows.length > 0 ? rows[0] : ""; if (strs.startsWith("<?xml")) { this.isXml = true; // .点符号匹配除换行符\n以外的任意字符,相匹配包括换行符在内的任意字符,可以用[\s\S]* var pattern = /<tdfmt\s[^>]*>([\s\S]*)<\/tdfmt>/; var temp = pattern.exec(strs); if (temp != null) { strs = temp[1]; } } return strs.replace(/<br\/>/g, "\n"); }, format: function (value) { if(this.isXml){ var len = value.length; value = value.replace(/\n/g, "<br/>") var head = "<?xml version='1.0'?><tdfmt sel-start='" + len + "'>"; var tail = "</tdfmt>"; return head + value + tail; } return value; }, onChange() { if (this.model && this.model.rows) { this.model["rows"][0] = this.format(this.value); this.$emit("change", this.value); } }, }, watch: { model: function () { let rows = this.model["rows"] || []; this.value = this.show(rows); }, }, }; </script> <style> /* .el-input.highlight .el-input__inner{ border-color: red; } */ </style>