Commit e5963813 by chenxin

fix: build wx-text 更换为textarea 涉及ecm和微信群发,要关注历史计划里的展示

parent edd77137
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.8de22817fa644923cd77191a224517ce.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.12.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.9305316f45f41b8c571f.js></script><script type=text/javascript src=/marketing/static/js/vendor.b30a466c3b2d11195801.js></script><script type=text/javascript src=/marketing/static/js/main.cbfa391dab2ab0b35011.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/fonts/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link rel=stylesheet href=//web-1251519181.file.myqcloud.com/components/element.2.12.0.css><link href=/marketing/static/css/main.f72dfefffaea5233b2ee8d03257d8958.css rel=stylesheet></head><body><div id=app></div><script src=//web-1251519181.file.myqcloud.com/lib/vue/2.5.2/vue.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vue-router/3.0.2/vue-router.min.js></script><script src=//web-1251519181.file.myqcloud.com/lib/vuex/3.1.0/vuex.min.js></script><script src=//web-1251519181.file.myqcloud.com/components/element.2.12.0.js></script><script src=//web-1251519181.file.myqcloud.com/components/header.2.0.36.js></script><script src=//web-1251519181.file.myqcloud.com/components/footer.2.0.04.js></script><script src=//web-1251519181.file.myqcloud.com/components/card.2.0.12.js></script><script src=//web-1251519181.file.myqcloud.com/components/store.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/img-preview.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/member-group.2.2.22.js></script><script src=//web-1251519181.file.myqcloud.com/components/store-card.2.0.18.js></script><script src=//web-1251519181.file.myqcloud.com/components/confirm-people.2.0.01.js></script><script src=//web-1251519181.file.myqcloud.com/components/people.2.0.42.js></script><script src=//web-1251519181.file.myqcloud.com/components/export-excel.2.0.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/input.2.0.20.js></script><script src=//web-1251519181.file.myqcloud.com/components/delete.2.0.00.js></script><script src=//web-1251519181.file.myqcloud.com/components/selector.1.2.13.js></script><script src=//web-1251519181.file.myqcloud.com/components/pagination.1.0.8.js></script><script type=text/javascript src=/marketing/static/js/manifest.6739f6a904c5b4500041.js></script><script type=text/javascript src=/marketing/static/js/vendor.b30a466c3b2d11195801.js></script><script type=text/javascript src=/marketing/static/js/main.ff3c70b453293f159d37.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,o,c){for(var i,u,f,d=0,s=[];d<t.length;d++)u=t[d],n[u]&&s.push(n[u][0]),n[u]=0;for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(e[i]=o[i]);for(r&&r(t,o,c);s.length;)s.shift()();if(c)for(d=0;d<c.length;d++)f=a(a.s=c[d]);return f};var t={},n={14:0};function a(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,a){r=n[e]=[t,a]});r[2]=t;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,a.nc&&c.setAttribute("nonce",a.nc),c.src=a.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"ecm",6:"evaluation",7:"activity",8:"cdKey",9:"recharge",10:"msg",11:"calllog"}[e]||e)+"."+{0:"17366293e640d4bd6760",1:"f662b674739eceb54787",2:"d12eee6b8b0018f71142",3:"c0a795e6a0250eea404e",4:"a70d5024165787e2e807",5:"3305a253a68d85df7e88",6:"cdf9caa9ad8acd8203f5",7:"e538a9e479b25679635c",8:"0be4a7f696d8122e2acd",9:"74bc17ca1ee93ad838f3",10:"2d7295662757a14cb271",11:"80e8c928942e87c106e9"}[e]+".js";var i=setTimeout(u,12e4);function u(){c.onerror=c.onload=null,clearTimeout(i);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=u,o.appendChild(c),t},a.m=e,a.c=t,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/marketing/",a.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
!function(e){var r=window.webpackJsonp;window.webpackJsonp=function(t,o,c){for(var f,i,u,d=0,s=[];d<t.length;d++)i=t[d],n[i]&&s.push(n[i][0]),n[i]=0;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(e[f]=o[f]);for(r&&r(t,o,c);s.length;)s.shift()();if(c)for(d=0;d<c.length;d++)u=a(a.s=c[d]);return u};var t={},n={14:0};function a(r){if(t[r])return t[r].exports;var n=t[r]={i:r,l:!1,exports:{}};return e[r].call(n.exports,n,n.exports,a),n.l=!0,n.exports}a.e=function(e){var r=n[e];if(0===r)return new Promise(function(e){e()});if(r)return r[2];var t=new Promise(function(t,a){r=n[e]=[t,a]});r[2]=t;var o=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.charset="utf-8",c.async=!0,c.timeout=12e4,a.nc&&c.setAttribute("nonce",a.nc),c.src=a.p+"static/js/"+({0:"card",1:"game",2:"wechat",3:"message",4:"ewash",5:"ecm",6:"evaluation",7:"activity",8:"cdKey",9:"recharge",10:"msg",11:"calllog"}[e]||e)+"."+{0:"dd3ac859900ae743db61",1:"ebb087efe5af7ce1168a",2:"2ce5fad503305efe8fa1",3:"09ad5a1095e8730e681b",4:"391130c8f773cb8775d6",5:"6fcac3a9988d7df0963d",6:"6178547f1a240cc6cd6a",7:"ee32d4c23554dfbff609",8:"a0320997bd02f35ab20b",9:"d0c7fdeaae259a8befad",10:"0d4820f42ef1fa47e4cc",11:"07f9326e2a68fd201646"}[e]+".js";var f=setTimeout(i,12e4);function i(){c.onerror=c.onload=null,clearTimeout(f);var r=n[e];0!==r&&(r&&r[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return c.onerror=c.onload=i,o.appendChild(c),t},a.m=e,a.c=t,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/marketing/",a.oe=function(e){throw console.error(e),e}}([]);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
<template>
<section class="wx-text">
<div class="wx-text__content">
<div v-html="textarea" @keyup="textInput(textarea, $event)" ref="myTextarea" contenteditable="true" @blur="getTextValue"></div>
</div>
<div class="wx-text__opt clearfix">
<!-- <a @click="addLink" class="iconfont icon-lianjie" title="添加链接"></a>
<a @click="removeLink" class="iconfont icon-duankailianjie" title="取消链接"></a> -->
<el-popover placement="top" trigger="hover" width="680" v-if="isSupportVar">
<p>1.支持插入会员信息变量,如下表所示,{数字}为可插入变量,注意变量值长度,以免超过300字文本上限。</p>
<!-- <p>2.支持插入H5链接;支持插入小程序链接。</p> -->
<p>2.支持换行;不支持富文本格式。</p>
<p>会员信息变量表:</p>
<div class="clearfix">
<ul class="fl pr10" v-for="(item, index) in 4" :key="index">
<li v-for="(v, i) in options.slice(index * 7, (index + 1) * 7)" :key="i">{{ v.number + v.name }}</li>
</ul>
</div>
<a @click="removeLink" class="iconfont icon-17" title="变量" slot="reference"></a>
</el-popover>
<span class="fr gray fz13">最多可输入300字,按下回车键换行</span>
</div>
<my-dialog :showWxApp="showWxApp" :show.sync="dialogShow" @urlInfo="getUrlInfo" :urlType.sync="urlType" :jumpUrlInfo.sync="jumpUrlInfo"></my-dialog>
</section>
</template>
<script>
import qs from 'qs';
import myDialog from './dialog';
import { spiltStr } from '@/utils/index';
import strLength from '@/utils/strlen';
const hrefReg = /href=['"]([^"]*)['"].*?/g;
export default {
name: 'dm-text',
components: {
'my-dialog': myDialog
},
props: {
value: {
type: String,
default: ''
},
appendToBody: {
type: Boolean,
default: false
},
jumpUrlInfo: {
type: Object,
default() {
return {};
}
},
urlType: {
type: Boolean | String,
default: 0
},
isSupportVar: {
type: Boolean,
default: false
},
showWxApp: {
type: Boolean,
default: true
}
},
watch: {
value: {
handler(val) {
if (val) {
// debugger
this.textarea = val;
this.computedTextLength();
}
},
immediate: true
}
},
data() {
return {
textarea: '',
dialogShow: false,
appid: '',
// eslint-disable-next-line
options: require('./options.js'),
textLength: 0
};
},
created() {
this.getAppid();
},
methods: {
// 添加链接
addLink() {
this.getTextValue();
this.$nextTick(_ => {
console.log(this.$refs.myTextarea.innerHTML);
this.hasATag(this.$refs.myTextarea.innerHTML, flag => {
if (flag) {
this.dialogShow = true;
}
});
});
},
textInput(v, e) {
// 控制微信文本的文字
this.computedTextLength();
},
// 获取内容
getTextValue() {
// const reg = /<(?!(a|\/a|div|\/div|br)).*?>/gim; // 只保留a div 标签
const text = spiltStr(this.$refs.myTextarea.innerHTML);
this.textarea = text;
this.$emit('update:value', text);
},
getUrlInfo(obj) {
// console.log(obj)
this.hasATag(this.textarea, flag => {
if (flag) {
if (obj.isWxApp) {
this.textarea += `<a href="${obj.url}" data-miniprogram-appid="${this.appid}" data-miniprogram-path="${obj.url}">${obj.name}</a>`;
} else {
this.textarea += `<a href="${obj.url}">${obj.name}</a>`;
}
this.$emit('update:urlType', obj.urlType);
this.$emit('update:jumpUrlInfo', { name: obj.name, url: obj.url });
this.$emit('update:value', this.textarea);
}
});
},
// 辅助函数 是否有a标签
hasATag(text, cb) {
if (hrefReg.test(text)) {
let hrefArr = text.match(hrefReg);
if (hrefArr.length >= 1) {
this.$message({ type: 'warning', message: '只能添加一个链接' });
cb && cb(false);
} else {
cb && cb(true);
}
} else {
cb && cb(true);
}
},
getAppid() {
this.axios
.post(
'/api-marketing/get-enterprise-wechat-appid',
qs.stringify({
requestProject: 'marketing'
})
)
.then(res => {
this.appid = res.data.result;
console.log(res);
});
},
// 清除a链接
removeLink() {
this.textarea = this.$refs.myTextarea.innerText.replace(/\n/g, '<br>');
this.$emit('update:urlType', 0);
this.$emit('update:jumpUrlInfo', { name: '', url: '' });
this.$emit('update:value', this.textarea);
},
computedTextLength() {
// this.textarea = this.$refs.myTextarea.innerHTML;
return new Promise((resolve, reject) => {
let textContent = strLength.getByteVal2(this.$refs.myTextarea.innerText);
let textNum = strLength.getZhLen(textContent);
if (textNum >= 300) {
this.$message.error('最多300个字符哦');
resolve(false);
} else {
resolve(true);
}
});
}
}
};
</script>
<style lang="scss" scoped>
.wx-text {
height: 200px;
width: 600px;
border: 1px solid #e7e7eb;
border-radius: 4px;
&__content {
height: 160px;
width: 600px;
& > div {
padding: 10px;
height: 140px;
width: 580px;
overflow-x: hidden;
outline: 0;
}
}
&__opt {
height: 40px;
line-height: 40px;
padding: 0 20px;
border-top: 1px solid #e7e7eb;
& > a {
padding-right: 10px;
cursor: pointer;
}
}
}
</style>
<template>
<section class="wx-text">
<div class="wx-text__content">
<div v-html="textarea" @keyup="textInput(textarea, $event)" ref="myTextarea" contenteditable="true" @blur="getTextValue"></div>
<el-input type="textarea" v-model="textarea" @change="changeTextArea" class="textarea" resize="none" />
</div>
<div class="wx-text__opt clearfix">
<!-- <a @click="addLink" class="iconfont icon-lianjie" title="添加链接"></a>
<a @click="removeLink" class="iconfont icon-duankailianjie" title="取消链接"></a> -->
<el-popover placement="top" trigger="hover" width="680" v-if="isSupportVar">
<p>1.支持插入会员信息变量,如下表所示,{数字}为可插入变量,注意变量值长度,以免超过300字文本上限。</p>
<!-- <p>2.支持插入H5链接;支持插入小程序链接。</p> -->
<p>2.支持换行;不支持富文本格式。</p>
<p>会员信息变量表:</p>
<div class="clearfix">
......@@ -16,25 +13,17 @@
<li v-for="(v, i) in options.slice(index * 7, (index + 1) * 7)" :key="i">{{ v.number + v.name }}</li>
</ul>
</div>
<a @click="removeLink" class="iconfont icon-17" title="变量" slot="reference"></a>
<a class="iconfont icon-17" title="变量" slot="reference"></a>
</el-popover>
<span class="fr gray fz13">最多可输入300字,按下回车键换行</span>
</div>
<my-dialog :showWxApp="showWxApp" :show.sync="dialogShow" @urlInfo="getUrlInfo" :urlType.sync="urlType" :jumpUrlInfo.sync="jumpUrlInfo"></my-dialog>
</section>
</template>
<script>
import qs from 'qs';
import myDialog from './dialog';
import { spiltStr } from '@/utils/index';
import strLength from '@/utils/strlen';
const hrefReg = /href=['"]([^"]*)['"].*?/g;
export default {
name: 'dm-text',
components: {
'my-dialog': myDialog
},
props: {
value: {
type: String,
......@@ -85,87 +74,21 @@ export default {
textLength: 0
};
},
created() {
this.getAppid();
},
methods: {
// 添加链接
addLink() {
this.getTextValue();
this.$nextTick(_ => {
console.log(this.$refs.myTextarea.innerHTML);
this.hasATag(this.$refs.myTextarea.innerHTML, flag => {
if (flag) {
this.dialogShow = true;
}
});
});
},
textInput(v, e) {
// 控制微信文本的文字
this.computedTextLength();
},
changeTextArea() {
this.$emit('update:value', this.textarea);
},
// 获取内容
getTextValue() {
// const reg = /<(?!(a|\/a|div|\/div|br)).*?>/gim; // 只保留a div 标签
const text = spiltStr(this.$refs.myTextarea.innerHTML);
this.textarea = text;
this.$emit('update:value', text);
},
getUrlInfo(obj) {
// console.log(obj)
this.hasATag(this.textarea, flag => {
if (flag) {
if (obj.isWxApp) {
this.textarea += `<a href="${obj.url}" data-miniprogram-appid="${this.appid}" data-miniprogram-path="${obj.url}">${obj.name}</a>`;
} else {
this.textarea += `<a href="${obj.url}">${obj.name}</a>`;
}
this.$emit('update:urlType', obj.urlType);
this.$emit('update:jumpUrlInfo', { name: obj.name, url: obj.url });
this.$emit('update:value', this.textarea);
}
});
},
// 辅助函数 是否有a标签
hasATag(text, cb) {
if (hrefReg.test(text)) {
let hrefArr = text.match(hrefReg);
if (hrefArr.length >= 1) {
this.$message({ type: 'warning', message: '只能添加一个链接' });
cb && cb(false);
} else {
cb && cb(true);
}
} else {
cb && cb(true);
}
},
getAppid() {
this.axios
.post(
'/api-marketing/get-enterprise-wechat-appid',
qs.stringify({
requestProject: 'marketing'
})
)
.then(res => {
this.appid = res.data.result;
console.log(res);
});
},
// 清除a链接
removeLink() {
this.textarea = this.$refs.myTextarea.innerText.replace(/\n/g, '<br>');
this.$emit('update:urlType', 0);
this.$emit('update:jumpUrlInfo', { name: '', url: '' });
this.$emit('update:value', this.textarea);
return this.textarea;
},
computedTextLength() {
// this.textarea = this.$refs.myTextarea.innerHTML;
return new Promise((resolve, reject) => {
let textContent = strLength.getByteVal2(this.$refs.myTextarea.innerText);
let textContent = strLength.getByteVal2(this.textarea);
let textNum = strLength.getZhLen(textContent);
if (textNum >= 300) {
this.$message.error('最多300个字符哦');
......@@ -180,6 +103,14 @@ export default {
</script>
<style lang="scss" scoped>
.textarea {
/deep/ .el-textarea__inner {
border: none;
box-shadow: none;
outline: none;
height: 100%;
}
}
.wx-text {
height: 200px;
width: 600px;
......
......@@ -321,6 +321,7 @@ export const _throttle = (fn, delay) => {
export const spiltStr = html => {
// const reg = /<(?!(a|\/a|div|\/div|br)).*?>/gim; // 只保留a 和 div 标签
const reg = /<(?!(br|div|\/div)).*?>/gim; // 只保留br标签
html = html.replace(/(<[^s/>]+)b[^>]*>/gi, '$1>'); // 去除HTML标签中的属性
let text = html.replace(reg, '');
text = text
.replace(/<\/div>|&nbsp;/g, '')
......
......@@ -8,6 +8,16 @@
<el-input v-model="listParams.title" class="w200" placeholder="输入营销内容标题" clearable @change="search"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" element-loading-text="拼命加载中">
<el-table-column min-width="120" label="营销内容">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" open-delay="300" placement="top-start">
<div style="max-width:400px;" slot="content">
<pre>{{ scope.row.title }}</pre>
</div>
<div class="ellipsis">{{ scope.row.title }}</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column v-for="(v, i) in tableHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
......@@ -72,15 +82,15 @@ export default {
// // return formatDateTimeByType(row.execTime, 'yyyy-MM-dd-HH-mm');
// }
// },
{
label: '营销内容',
prop: 'title',
minWidth: '120',
align: 'left',
formatter(row) {
return row.title || '--';
}
},
// {
// label: '营销内容',
// prop: 'title',
// minWidth: '120',
// align: 'left',
// formatter(row) {
// return row.title || '--';
// }
// },
{
label: '营销方式',
prop: 'marketingType',
......
......@@ -11,6 +11,16 @@
<el-table ref="multipleTable" tooltipEffect="light" :data="infoList" style="width: 100%" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column type="index" width="50" label="序号"></el-table-column>
<el-table-column min-width="120" label="发送内容">
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" open-delay="300" placement="top-start">
<div style="max-width:400px;" slot="content">
<pre>{{ scope.row.title }}</pre>
</div>
<div class="ellipsis">{{ scope.row.title }}</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column v-for="(v, i) in infoHeader" :fixed="v.fixed" :show-overflow-tooltip="v.tooltip" :width="v.width" :min-width="v.minWidth" :align="v.align" :key="i" :prop="v.prop" :label="v.label" :formatter="v.formatter">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
......@@ -73,15 +83,6 @@ export default {
loading: false,
infoHeader: [
{
label: '发送内容',
prop: 'title',
minWidth: '120',
align: 'left',
formatter(row) {
return row.title || '--';
}
},
{
label: '回复方式',
prop: 'marketingType',
align: 'left',
......
<template>
<!-- <span class="dm-text__wrap ellipsis-l2 inline-block" v-html="item.content"></span> -->
<span class="dm-text__wrap inline-block" v-html="transfContent"></span>
<pre>
<span class="dm-text__wrap inline-block" v-html="transfContent"></span>
</pre>
</template>
<script>
import options from '../assets/options.js';
......@@ -45,7 +47,6 @@ export default {
return str;
});
}
console.log(val);
return val;
}
}
......
......@@ -9,7 +9,6 @@
</template>
<script>
import { spiltStr } from '@/utils/index';
import wxText from '@/components/wx-text/index.vue';
export default {
name: 'lib-text',
......@@ -51,7 +50,9 @@ export default {
watch: {
show(val) {
if (val) {
this.value = this.item.content;
// this.value = this.item.content;
const html = this.item.content || '';
this.value = html.replace(/<[^>]*>|/g, ''); // 老数据过滤html标签
this.ecmMarketingTypeRelationId = this.item.ecmMarketingTypeRelationId || '';
if (this.item.jumpUrlInfo) {
try {
......@@ -76,8 +77,7 @@ export default {
},
addItem() {
const that = this;
this.value = spiltStr(this.value); // 再次处理一下文本
this.$refs.wxText.getTextValue();
this.$refs.wxText.changeTextArea();
this.$nextTick(_ => {
async function asyncFunc() {
let flag = await that.$refs.wxText.computedTextLength();
......
......@@ -88,7 +88,7 @@
</div>
</template>
<script>
import { _debounce, spiltStr } from '@/utils/index';
import { _debounce } from '@/utils/index';
import activitySelect from '@/components/activity-select/index.vue';
import dmImgText from '@/components/libs/imgTextTemp';
import dmImgBox from '@/components/libs/imgTemp/index-box.vue';
......@@ -228,7 +228,9 @@ export default {
this.info.imageTextId = result.imageTextId || '';
this.info.imageTextWechatId = result.imageTextWechatId || '';
this.info.wechatTextId = result.wechatTextId || '';
this.info.content = result.content || '';
const html = result.content || '';
this.info.content = html.replace(/<[^>]*>|/g, ''); // 老数据过滤html标签
// this.info.content = result.content || '';
this.info.mediaId = result.mediaId || '';
this.info.urlType = result.urlType || 0;
this.info.jumpUrlInfo = (result.jumpUrlInfo && JSON.parse(result.jumpUrlInfo)) || { name: '', url: '' };
......@@ -278,9 +280,8 @@ export default {
// console.log(this.info);
// // 这里强制获取人群筛选器的配置项
// await this.$refs.peopleFilter.confirmSet();
// this.$refs.wxText.getTextValue();
if (this.info.contentType === 1) {
this.info.content = spiltStr(this.info.content); // 再次处理一下文本
this.$refs.wxText.changeTextArea();
}
if (this.info.sendType == 1 && !this.info.sendTime) {
this.$tips({ type: 'warning', message: '请设置发送时间' });
......@@ -327,11 +328,12 @@ export default {
}
}
if (this.info.contentType === 1) {
this.info.content = this.info.content.replace(/&amp;/g, '&');
let flag = await this.$refs.wxText.computedTextLength();
if (!flag) return;
}
// TODO: ???
// if (this.info.contentType === 1) {
// this.info.content = this.info.content.replace(/&amp;/g, '&');
// let flag = await this.$refs.wxText.computedTextLength();
// if (!flag) return;
// }
if (type === 1) {
this.handleSendRecordPreview();
} else if (type === 2) {
......
......@@ -29,10 +29,12 @@
<el-table-column :min-width="120" align="left" label="标题">
<template slot-scope="{ row }">
<template v-if="row.content && row.content.length > 10">
<el-popover placement="top-start" width="200" open-delay="200" trigger="hover">
<span class="word-break-all" v-html="row.content"></span>
<div class="ellipsis" slot="reference" v-html="row.content"></div>
</el-popover>
<el-tooltip class="item" effect="dark" open-delay="300" placement="top-start">
<div style="max-width:400px;" slot="content">
<pre v-html="row.content"></pre>
</div>
<div class="ellipsis">{{ row.content | filterHtml }}</div>
</el-tooltip>
</template>
<template v-else-if="row.mediaUrl">
<p v-if="row.couponType === 1">
......@@ -283,6 +285,12 @@ export default {
// <span class="fw500">{label} <i class="iconfont icon-xinxixianshi fz14"></i></span>
// </el-tooltip>)
}
},
filters: {
filterHtml(html) {
html = html || '';
return html.replace(/<[^>]*>|/g, ''); // 老数据过滤html标签
}
}
};
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment