Przeglądaj źródła

样式统一调整

zhangchong 2 lat temu
rodzic
commit
82dd530b9d

+ 150 - 177
src/components/AudioPlayer/index.vue

@@ -1,34 +1,35 @@
 <template>
-    <div class="glowe-audio">
-        <div class="audio">
-            <div class="icon-div">
-                <SvgIcon @click="playPauseAudio" :name="audioData.playing ? 'ele-VideoPause' : 'ele-VideoPlay'"
-                    :title="audioData.playing ? '暂停' : '播放'" class="mr10 icon" size="24px"
-                    color="var(--el-color-primary)" />
-                <div class="time-wrap">
-                    <span class="time">{{ formatDuraton(Math.round(audioData.currentTime))
-                    }}/{{ formatDuraton(Math.round(audioData.duration)) }}</span>
-                </div>
-            </div>
-            <div class="slider-wrap ml10 mr10" ref="progessRef">
-                <el-slider v-model="audioData.percentage" @input="inputProgress" @change="changeProgress" :format-tooltip="formatTooltip">
-                </el-slider>
-            </div>
-
-            <el-dropdown trigger="hover">
-                <SvgIcon :name="icon" class="mr5 ml5 download" size="18px" color="var(--el-color-primary)"
-                    @click="mute" />
-                <template #dropdown>
-                    <el-dropdown-menu>
-                        <el-slider v-model="audioData.voice" vertical height="100px" @change="changeSound" />
-                    </el-dropdown-menu>
-                </template>
-            </el-dropdown>
-            <SvgIcon name="ele-Download" class="download ml5" size="18px" color="var(--el-color-primary)"
-                @click="downLoad" title="下载" />
-        </div>
-        <audio :src="audioData.url" preload="auto" @ended="audioEnded" @timeupdate="audioTimeupdate" @loadeddata="audioLoadeddata" ref="audioRef"></audio>
-    </div>
+	<div class="glowe-audio">
+		<div class="audio">
+			<div class="icon-div">
+				<SvgIcon
+					@click="playPauseAudio"
+					:name="audioData.playing ? 'ele-VideoPause' : 'ele-VideoPlay'"
+					:title="audioData.playing ? '暂停' : '播放'"
+					class="mr10 cursor-pointer"
+					size="24px"
+					color="var(--el-color-primary)"
+				/>
+				<div class="time-wrap">
+					<span class="time">{{ formatDuraton(Math.round(audioData.currentTime)) }}/{{ formatDuraton(Math.round(audioData.duration)) }}</span>
+				</div>
+			</div>
+			<div class="slider-wrap ml10 mr10" ref="progessRef">
+				<el-slider v-model="audioData.percentage" @input="inputProgress" @change="changeProgress" :format-tooltip="formatTooltip"> </el-slider>
+			</div>
+
+			<el-dropdown trigger="hover">
+				<SvgIcon :name="icon" class="mr5 ml5 cursor-pointer" size="18px" color="var(--el-color-primary)" @click="mute" />
+				<template #dropdown>
+					<el-dropdown-menu>
+						<el-slider v-model="audioData.voice" vertical height="100px" @change="changeSound" />
+					</el-dropdown-menu>
+				</template>
+			</el-dropdown>
+			<SvgIcon name="ele-Download" class="cursor-pointer ml5" size="18px" color="var(--el-color-primary)" @click="downLoad" title="下载" />
+		</div>
+		<audio :src="audioData.url" preload="auto" @ended="audioEnded" @timeupdate="audioTimeupdate" @loadeddata="audioLoadeddata" ref="audioRef"></audio>
+	</div>
 </template>
 <script lang="ts" name="GloweAudio" setup>
 import { reactive, ref, computed, watch } from 'vue';
@@ -36,56 +37,56 @@ import { formatDuraton } from '/@/utils/formatTime';
 
 // 定义父组件传过来的值
 const props = defineProps({
-    url: {
-        type: String,
-        required: true,
-    },
-    fileName: {
-        type: String,
-        required: false,
-        default: "测试文件"
-    }
-})
+	url: {
+		type: String,
+		required: true,
+	},
+	fileName: {
+		type: String,
+		required: false,
+		default: '测试文件',
+	},
+});
 
 // 定义变量内容
 const audioData = reactive<any>({
-    url: props.url,
-    playing: false,
-    duration: 0, // 音频总时长
-    currentTime: 0, // 当前播放的时间
-    percentage: 0, //进度条百分比
-    voice: 50, //音量
-    muteState: false, //是否静音
+	url: props.url,
+	playing: false,
+	duration: 0, // 音频总时长
+	currentTime: 0, // 当前播放的时间
+	percentage: 0, //进度条百分比
+	voice: 50, //音量
+	muteState: false, //是否静音
 });
 
 const audioRef = ref();
 // 播放或暂停音频
 const playPauseAudio = () => {
-    if (audioData.playing) {
-        audioPause();
-    } else {
-        audioPlay();
-    }
+	if (audioData.playing) {
+		audioPause();
+	} else {
+		audioPlay();
+	}
 };
 const icon = computed(() => {
-    if (audioData.muteState) {
-        return 'iconfont icon-guanbiyinliang'
-    } else {
-        return 'iconfont icon-jiadayinliang'
-    }
-})
+	if (audioData.muteState) {
+		return 'iconfont icon-guanbiyinliang';
+	} else {
+		return 'iconfont icon-jiadayinliang';
+	}
+});
 // 计算百分比的分子
 function getPercentage(num: number | string, den: number | string): number {
-    const numerator = typeof num === 'number' ? num : parseFloat(num);
-    const denominator = typeof den === 'number' ? den : parseFloat(den);
-    return Math.round((numerator / denominator) * 10000) / 100;
+	const numerator = typeof num === 'number' ? num : parseFloat(num);
+	const denominator = typeof den === 'number' ? den : parseFloat(den);
+	return Math.round((numerator / denominator) * 10000) / 100;
 }
 /**
  * 更新进度条
  * @param percentage 百分比
  */
 function updateProgressBar(percentage: number) {
-    audioData.percentage = percentage;
+	audioData.percentage = percentage;
 }
 
 /**
@@ -94,156 +95,128 @@ function updateProgressBar(percentage: number) {
 
 // 音频播放结束
 const audioEnded = () => {
-    audioData.playing = false;
+	audioData.playing = false;
 };
 // 播放进度:表示audio正在播放,currentTime在更新
 const audioTimeupdate = (e: any) => {
-    audioData.currentTime = e.target.currentTime;
-    progressBarBycurrentTime();
+	audioData.currentTime = e.target.currentTime;
+	progressBarBycurrentTime();
 };
 // 当媒体音频第一帧加载完成时
 const audioLoadeddata = (e: any) => {
-    audioData.duration = e.target.duration;
-
+	audioData.duration = e.target.duration;
 };
 
 // 播放
 function audioPlay() {
-    audioRef.value.play();
-    audioData.playing = true;
+	audioRef.value.play();
+	audioData.playing = true;
 }
 
 // 暂停播放
 function audioPause() {
-    audioRef.value.pause();
-    audioData.playing = false;
+	audioRef.value.pause();
+	audioData.playing = false;
 }
 
 // 进度条和音频播放进度进行关联
 function progressBarBycurrentTime() {
-    const progress = getPercentage(audioData.currentTime, audioData.duration);
-    updateProgressBar(progress);
+	const progress = getPercentage(audioData.currentTime, audioData.duration);
+	updateProgressBar(progress);
 }
 
 //  改变进度 暂停 使用鼠标拖曳时,活动过程实时触发
 const inputProgress = (val: number) => {
-    audioData.percentage = val;
-    audioData.currentTime = audioData.duration * (val / 100);
-    audioRef.value.currentTime = audioData.duration * (val / 100);
-    audioRef.value.pause();
-}
+	audioData.percentage = val;
+	audioData.currentTime = audioData.duration * (val / 100);
+	audioRef.value.currentTime = audioData.duration * (val / 100);
+	audioRef.value.pause();
+};
 // 使用鼠标拖曳时,只在松开鼠标后触发 继续播放
-const changeProgress = ()=>{
-    if(audioData.playing) audioPlay();
-}
+const changeProgress = () => {
+	if (audioData.playing) audioPlay();
+};
 // 格式化提示
 const formatTooltip = (val: number) => {
-    return formatDuraton(Math.round(audioData.duration * (val / 100)))
-}
+	return formatDuraton(Math.round(audioData.duration * (val / 100)));
+};
 // 改变音量
 const changeSound = (val: number) => {
-    if (val > 0) {
-        audioData.muteState = false;
-    } else {
-        audioData.muteState = true;
-    }
-    audioRef.value.volume = val / 100;
-    audioData.voice = val;
-}
+	if (val > 0) {
+		audioData.muteState = false;
+	} else {
+		audioData.muteState = true;
+	}
+	audioRef.value.volume = val / 100;
+	audioData.voice = val;
+};
 // 监听声音大小
 watch(
-    () => audioData.muteState,
-    (val) => {
-        if (val) {
-            audioRef.value.volume = audioData.voice = 0;
-        } else {
-            audioRef.value.volume = .5;
-            audioData.voice = 50;
-        }
-    },
-    {
-        deep: true,
-    }
+	() => audioData.muteState,
+	(val) => {
+		if (val) {
+			audioRef.value.volume = audioData.voice = 0;
+		} else {
+			audioRef.value.volume = 0.5;
+			audioData.voice = 50;
+		}
+	},
+	{
+		deep: true,
+	}
 );
 // 静音
 const mute = () => {
-    audioData.muteState = !audioData.muteState;
-}
+	audioData.muteState = !audioData.muteState;
+};
 // 下载
 const downLoad = () => {
-
-    //     // eslint-disable-next-line no-unused-vars
-    // let blobType = 'application/force-download' // 设置blob请求头
-    // // eslint-disable-next-line no-unused-vars
-    // let blob = new Blob([res.data], {type: res.data.type}) // 创建blob 设置blob文件类型 data 设置为后端返回的文件(例如mp3,jpeg) type:这里设置后端返回的类型 为 mp3
-    // let downa = document.createElement('a') // 创建A标签
-    // // eslint-disable-next-line no-unused-vars
-    // let href = window.URL.createObjectURL(blob) // 创建下载的链接
-    // downa.href = props.url // 下载地址
-    // downa.download = props?.fileName ?? '' // 下载文件名
-    // document.body.appendChild(downa)
-    // downa.click() // 模拟点击A标签
-    // document.body.removeChild(downa) // 下载完成移除元素
-    // window.URL.revokeObjectURL(href) // 释放blob对象
-
-
-    // const elink = document.createElement('a')
-    // elink.href = props.url
-    // elink.setAttribute('download', props?.fileName ?? '')
-    // elink.style.display = 'none'
-    // document.body.appendChild(elink)
-    // setTimeout(() => {
-    //     elink.click()
-    //     document.body.removeChild(elink)
-    // }, 66)
-    window.open(props.url)
-}
+	//     // eslint-disable-next-line no-unused-vars
+	// let blobType = 'application/force-download' // 设置blob请求头
+	// // eslint-disable-next-line no-unused-vars
+	// let blob = new Blob([res.data], {type: res.data.type}) // 创建blob 设置blob文件类型 data 设置为后端返回的文件(例如mp3,jpeg) type:这里设置后端返回的类型 为 mp3
+	// let downa = document.createElement('a') // 创建A标签
+	// // eslint-disable-next-line no-unused-vars
+	// let href = window.URL.createObjectURL(blob) // 创建下载的链接
+	// downa.href = props.url // 下载地址
+	// downa.download = props?.fileName ?? '' // 下载文件名
+	// document.body.appendChild(downa)
+	// downa.click() // 模拟点击A标签
+	// document.body.removeChild(downa) // 下载完成移除元素
+	// window.URL.revokeObjectURL(href) // 释放blob对象
+
+	// const elink = document.createElement('a')
+	// elink.href = props.url
+	// elink.setAttribute('download', props?.fileName ?? '')
+	// elink.style.display = 'none'
+	// document.body.appendChild(elink)
+	// setTimeout(() => {
+	//     elink.click()
+	//     document.body.removeChild(elink)
+	// }, 66)
+	window.open(props.url);
+};
 </script>
 <style scoped lang="scss">
 .glowe-audio {
-    .audio {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        height: 48px;
-        .icon-div {
-            display: flex;
-            align-items: center;
-            border-radius: 100%;
-            margin-right: 10px;
-
-            .icon {
-                cursor: pointer;
-            }
-        }
-
-        .slider-wrap {
-            position: relative;
-            display: flex;
-            align-items: center;
-            min-width: 200px;
-            .circle {
-                position: absolute;
-                background: var(--el-color-white);
-                border-style: solid;
-                border-width: 2px;
-                border-radius: 50%;
-                box-sizing: border-box;
-                display: flex;
-                justify-content: center;
-                align-items: center;
-                border-color: var(--el-color-primary);
-                width: 16px;
-                height: 16px;
-                cursor: pointer;
-                user-select: none;
-                transform: translate(-50%);
-            }
-        }
-
-        .download {
-            cursor: pointer;
-        }
-    }
+	.audio {
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		height: 48px;
+		.icon-div {
+			display: flex;
+			align-items: center;
+			border-radius: 100%;
+			margin-right: 10px;
+		}
+
+		.slider-wrap {
+			position: relative;
+			display: flex;
+			align-items: center;
+			min-width: 200px;
+		}
+	}
 }
-</style>
+</style>

+ 2 - 8
src/components/TimeLine/index.vue

@@ -5,7 +5,7 @@
 				<!-- 左侧展示 -->
 				<div class="leftcontainer" v-if="!item.parentId">
 					<div class="flex">
-						<div class="leftcontainer-inner" :title="item.name" :style="'background-color:var(--el-color-' + item.type + ')'">
+						<div class="leftcontainer-inner text-no-wrap" :title="item.name" :style="'background-color:var(--el-color-' + item.type + ')'">
 							{{ item.name }}
 						</div>
 						<div class="right-triangle" :style="'border-left:20px solid var(--el-color-' + item.type + ')'"></div>
@@ -15,7 +15,7 @@
 				<div class="rightcontainer" v-else>
 					<div class="flex">
 						<div class="left-triangle" :style="'border-right:20px solid var(--el-color-' + item.type + ')'"></div>
-						<div class="rightcontainer-inner" :title="item.name" :style="'background-color:var(--el-color-' + item.type + ')'">
+						<div class="rightcontainer-inner text-no-wrap" :title="item.name" :style="'background-color:var(--el-color-' + item.type + ')'">
 							{{ item.name }}
 						</div>
 					</div>
@@ -212,9 +212,6 @@ onMounted(() => {
 			width: 110px;
 			padding: 0 10px;
 			text-align: center;
-			text-overflow: ellipsis; /*让截断的文字显示为点点。还有一个值是clip意截断不显示点点*/
-			white-space: nowrap; /*让文字不换行*/
-			overflow: hidden; /*超出要隐藏*/
 			border-top-left-radius: 18px;
 			border-bottom-left-radius: 18px;
 			background: var(--el-color-primary);
@@ -293,9 +290,6 @@ onMounted(() => {
 						width: 110px;
 						padding: 0 10px;
 						text-align: center;
-						text-overflow: ellipsis; /*让截断的文字显示为点点。还有一个值是clip意截断不显示点点*/
-						white-space: nowrap; /*让文字不换行*/
-						overflow: hidden; /*超出要隐藏*/
 						border-top-right-radius: 18px;
 						border-bottom-right-radius: 18px;
 						background: var(--el-color-primary);

+ 2 - 5
src/layout/navMenu/subThreeItem.vue

@@ -18,7 +18,7 @@
 				<template v-if="!val.meta.isLink || (val.meta.isLink && val.meta.isIframe)">
 					<div @click="pushRouter(val)" class="path-inner">
 						<SvgIcon :name="val.meta.icon" v-if="val.meta?.icon" class="icons" />
-						<span :title="val.meta.title">{{ val.meta.title }}</span>
+						<span :title="val.meta.title" class="text-no-wrap">{{ val.meta.title }}</span>
 					</div>
 				</template>
 				<template v-else>
@@ -181,9 +181,6 @@ watch(
 		span {
 			display: inline-block;
 			max-width: 100px;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
 			vertical-align: bottom;
 		}
 
@@ -194,7 +191,7 @@ watch(
 }
 </style>
 <style lang="scss">
-.menuItem-popover{
+.menuItem-popover {
 	padding: 10px 20px !important;
 }
 </style>

+ 53 - 43
src/theme/app.scss

@@ -10,39 +10,39 @@
 :root {
 	--hotline-color-white: #ffffff;
 	// 整体背景颜色
-	--hotline-bg-main-color: #F0F4FF;
-	
+	--hotline-bg-main-color: #f0f4ff;
+
 	--hotline-bg-color: #f5f5ff;
 	--hotline-border-color-light: #f1f2f3;
 	--hotline-color-primary-lighter: #ecf5ff;
 	--hotline-color-warning-lighter: #fdf6ec;
 	--hotline-color-danger-lighter: #fef0f0;
 	--hotline-color-dark-hover: #0000001a;
-	--hotline-color-menu-hover: rgba(0, 0, 0, .3);
+	--hotline-color-menu-hover: rgba(0, 0, 0, 0.3);
 	--hotline-color-user-hover: rgba(0, 0, 0, 0.04);
 	--hotline-color-seting-main: #e9eef3;
 	--hotline-color-seting-aside: #d3dce6;
 	--hotline-color-seting-header: #b3c0d1;
-	--hotline--login-text-color:#4564E9;
+	--hotline--login-text-color: #4564e9;
 	--hotline-bg-grey-color: #999;
 	// 主题字体颜色
 	--hotline-color-text-main: #333;
 	// 主题字体颜色淡色
 	--hotline-color-text-main-light: #666;
 	--hotline-overlay-color-lighter-4: rgba(0, 0, 0, 0.4);
-	--hotline-color-popover: #667AED;
+	--hotline-color-popover: #667aed;
 	// 列表操作图标的字体的大小
-	--hotline-table-icon-font-size:16px;
+	--hotline-table-icon-font-size: 16px;
 	// tagsview 按钮
-	--hotline-tagsview-icon-color:#D4D4D4;
+	--hotline-tagsview-icon-color: #d4d4d4;
 
 	// element主题色
-	--el-color-danger:#f41e1e;
-	--el-color-success:#34d367;
-	--el-color-warning:#ffbb32;
+	--el-color-danger: #f41e1e;
+	--el-color-success: #34d367;
+	--el-color-warning: #ffbb32;
 
 	// 工单流转记录
-	--hotline-order-CrculationRecord-color: #EEF0F4;
+	--hotline-order-CrculationRecord-color: #eef0f4;
 }
 
 html,
@@ -61,7 +61,8 @@ body,
 	overflow: hidden;
 	position: relative;
 }
-ul,li{
+ul,
+li {
 	list-style: none;
 }
 /* 主布局样式
@@ -256,11 +257,11 @@ ul,li{
 	@extend .flex;
 	justify-content: space-between;
 }
-.flex-center-align{
+.flex-center-align {
 	display: flex;
 	align-items: center;
 }
-.flex-center-center{
+.flex-center-center {
 	display: flex;
 	align-items: center;
 	justify-content: center;
@@ -344,6 +345,13 @@ ul,li{
 		font-size: #{$i}px !important;
 	}
 }
+/* 行高
+------------------------------- */
+@for $i from 10 through 50 {
+	.lineHeight#{$i} {
+		line-height: #{$i}px !important;
+	}
+}
 
 /* 外边距、内边距全局样式
 ------------------------------- */
@@ -372,60 +380,62 @@ ul,li{
 	.pl#{$i} {
 		padding-left: #{$i}px !important;
 	}
+	.pd#{$i} {
+		padding: #{$i}px !important;
+	}
+	.mg#{$i} {
+		margin: #{$i}px !important;
+	}
 }
 
-/* 公共样式
+/* 文字超过几行显示省略号
 ------------------------------- */
-.mb8 {
-	margin-bottom: 8px;
-}
-.mt8 {
-	margin-bottom: 8px;
-}
-.mb20{
-	margin-bottom: 20px;
-}
-.mt20{
-	margin-top: 20px;
-}
-.mt30{
-	margin-top: 30px;
-}
-// 页面padding
-.pd15{
-	padding: 15px;
+@for $i from 1 through 10 {
+	.text-ellipsis#{$i} {
+		overflow: hidden;
+		word-break: break-all;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		-webkit-line-clamp: $i;
+		-webkit-box-orient: vertical;
+	}
 }
-.pd20{
-	padding: 20px;
+/* 公共样式
+------------------------------- */
+// 超过一行
+.text-no-wrap {
+	text-overflow: ellipsis;
+	overflow: hidden;
+	white-space: nowrap;
 }
 // 表格头部文字
-.table-title{
+.table-title {
 	font-size: var(--el-font-size-large);
 	font-weight: 600;
 	color: var(--hotline-color-bar);
 }
 //  表单内标题的字体大小
-.formTitle{
+.formTitle {
 	font-size: var(--el-font-size-medium);
 }
 // 选择图片下拉
-.item-Img{
+.item-Img {
 	display: flex;
 	align-items: center;
 	justify-content: space-between;
 	height: 100%;
-	img{
+	img {
 		width: 20px;
 		height: 20px;
 	}
 }
-.flexEnd{
+.flexEnd {
 	display: flex;
 	justify-content: flex-end;
 }
 // 更新提示弹框
-.updateTips{
-	.el-notification__group{
+.updateTips {
+	.el-notification__group {
 		width: 100%;
 	}
-}
+}

+ 30 - 14
src/views/business/order/accept/orderAdd.vue

@@ -391,7 +391,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 								<el-form-item label="附件" prop="remark" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-									<Upload :fileList="state.fileList"/>
+									<Upload :fileList="state.fileList" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
@@ -518,11 +518,11 @@
 										<span></span>
 									</template>
 								</el-empty>
-								<li v-for="(item, index) in state.knowledgeList" :key="index" class="mb20" v-else>
+								<li v-for="(item, index) in state.knowledgeList" :key="index" class="mb20 knowledge-item" @click="onPreview(item)" v-else>
 									<p class="font16">
 										<SvgIcon name="iconfont icon-dian" size="16px" /> <b>{{ item.title }}</b>
 									</p>
-									<p class="pt6 indent">{{ item.content }}</p>
+									<p class="pt6 indent text-ellipsis2" v-html="item.content"></p>
 								</li>
 							</ul>
 						</div>
@@ -534,6 +534,7 @@
 							@pagination="knowretrievalPaged(state.KnowledgeKeyword)"
 							:pageSizes="[5, 10, 15, 20]"
 							layout="total, prev, pager, next"
+							class="pt10"
 						/>
 					</div>
 				</el-scrollbar>
@@ -945,6 +946,16 @@ const onSupply = (val: any) => {
 const onSupplySubmit = () => {
 	searchHistory();
 };
+// 预览知识
+const onPreview = (row: any) => {
+	router.push({
+		name: 'knowledgePreview',
+		params: {
+			id: row.id,
+			tagsViewName: '知识预览',
+		},
+	});
+};
 onMounted(async () => {
 	state.formLoading = true;
 	state.loading = true;
@@ -1013,17 +1024,22 @@ onMounted(async () => {
 				.knowledge-search-button {
 					height: calc(100% - 6px);
 				}
-				.indent {
-					text-indent: 1em;
-					color: var(--hotline-color-text-main-light);
-					line-height: 20px;
-					text-overflow: -o-ellipsis-lastline;
-					overflow: hidden; //溢出内容隐藏
-					text-overflow: ellipsis; //文本溢出部分用省略号表示
-					display: -webkit-box; //特别显示模式
-					-webkit-line-clamp: 2; //行数
-					line-clamp: 2;
-					-webkit-box-orient: vertical; //盒子中内容竖直排列
+				.knowledge-item {
+					&:last-child {
+						margin-bottom: 0;
+					}
+					cursor: pointer;
+					&:hover {
+						color: var(--el-color-primary);
+					}
+					.indent {
+						text-indent: 1em;
+						color: var(--hotline-color-text-main-light);
+						line-height: 20px;
+						&:hover {
+							color: var(--el-color-primary);
+						}
+					}
 				}
 			}
 		}

+ 3 - 10
src/views/business/order/accept/orderEdit.vue

@@ -397,7 +397,7 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 								<el-form-item label="附件" prop="remark" :rules="[{ required: false, message: '请填写诉求内容', trigger: 'change' }]">
-									<Upload :fileList="state.fileList"/>
+									<Upload :fileList="state.fileList" />
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
@@ -527,7 +527,7 @@
 									<p class="font16">
 										<SvgIcon name="iconfont icon-dian" size="16px" /> <b>{{ item.title }}</b>
 									</p>
-									<p class="pt6 indent">{{ item.content }}</p>
+									<p class="pt6 indent text-ellipsis2" v-html="item.content"></p>
 								</li>
 							</ul>
 						</div>
@@ -637,7 +637,7 @@ const state = reactive<any>({
 		Keyword: '',
 	},
 	knowledgeTotal: 0, // 知识库总条数
-	fileList:[]
+	fileList: [],
 });
 const ruleFormRef = ref();
 const queryParamsRef = ref();
@@ -1090,13 +1090,6 @@ onMounted(async () => {
 					text-indent: 1em;
 					color: var(--hotline-color-text-main-light);
 					line-height: 20px;
-					text-overflow: -o-ellipsis-lastline;
-					overflow: hidden; //溢出内容隐藏
-					text-overflow: ellipsis; //文本溢出部分用省略号表示
-					display: -webkit-box; //特别显示模式
-					-webkit-line-clamp: 2; //行数
-					line-clamp: 2;
-					-webkit-box-orient: vertical; //盒子中内容竖直排列
 				}
 			}
 		}

+ 1 - 1
src/views/business/order/accept/repeatOrderDetail.vue

@@ -106,7 +106,7 @@
 										{{ state.ruleForm.orderTypeText }}
 										<!-- 投诉或者建议并且是12315工单才有扩展信息 -->
 										<el-button
-											text
+											link
 											type="primary"
 											v-if="state.ruleForm.orderType === 1 && (state.ruleForm.acceptType === 5 || state.ruleForm.acceptType === 6)"
 											class="ml10"

+ 1 - 8
src/views/business/order/components/Comment.vue

@@ -25,7 +25,7 @@
 					<template v-if="state.active === 'default' && !state.manage">
 						<ul class="comments-box">
 							<li class="comments-item" v-for="(item, index) in state.commentsList" :key="index" @click="chooseComment(item)">
-								<p>{{ item.content }}</p>
+								<p class="text-ellipsis2">{{ item.content }}</p>
 							</li>
 						</ul>
 					</template>
@@ -214,13 +214,6 @@ defineExpose({
 				box-shadow: 0 0 0 1px var(--el-color-primary) inset;
 				background-color: var(--hotline-bg-main-color);
 			}
-			p {
-				display: -webkit-box;
-				text-overflow: ellipsis;
-				overflow: hidden;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 2;
-			}
 			.check-icon {
 				position: absolute;
 				right: 0;

+ 1 - 1
src/views/business/order/components/orderDetail.vue

@@ -106,7 +106,7 @@
 										{{ state.ruleForm.orderTypeText }}
 										<!-- 投诉或者建议并且是12315工单才有扩展信息 -->
 										<el-button
-											text
+											link
 											type="primary"
 											v-if="state.ruleForm.orderType === 1 && (state.ruleForm.acceptType === 5 || state.ruleForm.acceptType === 6)"
 											class="ml10"

+ 2 - 5
src/views/home/component/entrance.vue

@@ -17,7 +17,7 @@
 							<template #item="item">
 								<div class="entrance-list-box-item" :title="item.element.pageName">
 									<img v-lazy="getImageUrl(item.element.fastIcon)" alt="" class="my-handle" />
-									<p class="entrance-list-box-item-name">{{ item.element.pageName }}</p>
+									<p class="entrance-list-box-item-name text-no-wrap">{{ item.element.pageName }}</p>
 									<SvgIcon name="ele-RemoveFilled" class="plus-icon location" color="#ccc" size="24px" @click="removeOne(item.element)" />
 								</div>
 							</template>
@@ -40,7 +40,7 @@
 						<ul class="entrance-list-box">
 							<li class="entrance-list-box-item" v-for="(item, index) in state.entranceSelect" :key="index" :title="item.pageName">
 								<img v-lazy="getImageUrl(item.fastIcon)" alt="" class="mb10" />
-								<p class="entrance-list-box-item-name">{{ item.pageName }}</p>
+								<p class="entrance-list-box-item-name text-no-wrap">{{ item.pageName }}</p>
 								<SvgIcon
 									name="ele-CirclePlusFilled"
 									class="remove-icon location"
@@ -205,9 +205,6 @@ defineExpose({ closeDialog, openDialog }); //暴漏方法
 
 				&-name {
 					width: 70px;
-					overflow: hidden;
-					white-space: nowrap;
-					text-overflow: ellipsis;
 				}
 			}
 		}

+ 3 - 4
src/views/home/index.vue

@@ -142,7 +142,9 @@
 					<template v-if="state.noticeList.length">
 						<vue3-seamless-scroll :list="state.noticeList" class="right-notice-scroll" :hover="true" :limitScrollNum="6">
 							<div class="right-notice-scroll-item" v-for="(item, index) in state.noticeList" :key="index">
-								<span class="right-notice-scroll-item-name"> <SvgIcon name="iconfont icon-jiadayinliang" class="mr5 vd" />{{ item.title }} </span>
+								<span class="right-notice-scroll-item-name text-no-wrap" :title="item.title">
+									<SvgIcon name="iconfont icon-jiadayinliang" class="mr5 vd" />{{ item.title }}</span
+								>
 								<span class="right-notice-scroll-item-date"
 									>{{ formatDate(item.date, 'YYYY-mm-dd') }}
 									<SvgIcon name="ele-DArrowRight" class="ml5" />
@@ -436,9 +438,6 @@ onMounted(() => {
 					&-name {
 						flex: 1;
 						max-width: 70%;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap; //禁止换行
 					}
 					&-date {
 						display: flex;

+ 1 - 1
src/views/knowledge/component/Preview.vue

@@ -15,7 +15,7 @@
 				>
 				<div style="border-bottom: var(--el-border); height: 1px" class="w100 mt10"></div>
 				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mt30" v-if="state.info.summary"> 摘要:{{ state.info.summary }}</el-col>
-				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mt20"> <div v-html="state.info.content"></div></el-col>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mt20"> <div v-html="state.info.content" class="lineHeight24"></div></el-col>
 			</el-row>
 		</el-card>
 	</div>

+ 2 - 2
src/views/knowledge/config/standard/index.vue

@@ -6,7 +6,7 @@
 					<el-input v-model="state.ruleForm.title" placeholder="输入标题,不超过30个字" clearable max-length="30"></el-input>
 				</el-form-item>
 				<el-form-item label="正文" prop="content" :rules="[{ required: true, message: '请输入正文内容', trigger: 'blur' }]">
-					<Editor v-model:get-html="state.ruleForm.content" :disable="state.disable" placeholder="请输入正文内容" />
+					<Editor v-model:get-html="state.ruleForm.content" :disable="state.disable" placeholder="请输入正文内容" height="450px"/>
 				</el-form-item>
 				<el-form-item>
 					<el-button class="default-button" @click="onPreview">预 览</el-button>
@@ -17,7 +17,7 @@
 		<el-dialog title="知识编写规范预览" v-model="state.isShowDialog" draggable width="70%">
 			<div>
 				<h3  class="font18">{{ state.ruleForm.title }}</h3>
-				<div v-html="state.ruleForm.content" class="mt20" style="line-height: 24px;"></div>
+				<div v-html="state.ruleForm.content" class="mt20 lineHeight24"></div>
 			</div>
 			<template #footer>
 				<span class="dialog-footer">

+ 1 - 1
src/views/knowledge/knowledge/component/StandardInfo.vue

@@ -3,7 +3,7 @@
 		<el-dialog title="知识编写规范" v-model="state.isShowDialog" draggable width="70%">
 			<div>
 				<h3 class="font18">{{ state.info.title }}</h3>
-				<div v-html="state.info.content" class="mt20" style="line-height: 24px;"></div>
+				<div v-html="state.info.content" class="mt20 lineHeight24"></div>
 			</div>
 			<template #footer>
 				<span class="dialog-footer">

+ 1 - 11
src/views/knowledge/retrieval/index.vue

@@ -19,7 +19,7 @@
 					<template v-if="state.retrievalList.length && state.queryParams.Keyword">
 						<div v-for="(v, i) in state.retrievalList" :key="i" class="retrieval-cootent-item" @click="onPreview(v)">
 							<h4 class="mb10">{{ v.title }}</h4>
-							<div  class="content" v-html="queryTitleLight(v.content)"></div>
+							<div  class="text-ellipsis2" v-html="queryTitleLight(v.content)"></div>
 						</div>
 					</template>
 					<template v-else>
@@ -110,16 +110,6 @@ const getList = throttle(() => {
 	}
 	.flex1 {
 		flex: 1;
-		.content {
-			overflow: hidden;
-			text-overflow: ellipsis;
-			// 只要超过宽度就换行,不论中文还是英文
-			word-break: break-all;
-			//最多展示两行
-			display: -webkit-box;
-			-webkit-box-orient: vertical;
-			-webkit-line-clamp: 2;
-		}
 	}
 
 	.retrieval-cootent {

+ 7 - 14
src/views/system/config/timeLimit/component/TimelimitAdd.vue

@@ -27,7 +27,7 @@
 					<el-col :xs="24" :sm="2" :md="2" :lg="2" :xl="8" v-if="state.ruleForm.workflowCode === 'Order'">
 						<el-form-item label="" label-width="10px">
 							<el-tooltip placement="top-start">
-								<div style="height: 34px; display: flex; align-items: center">
+								<div style="height: 34px" class="flex-center-align">
 									<SvgIcon name="ele-InfoFilled" size="24px" color="var(--el-color-primary)" />
 								</div>
 								<template #content>
@@ -63,7 +63,7 @@
 							<div class="mt20 parameter-choose">
 								<el-row>
 									<el-col v-for="(item, index) in state.paramArr" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4">
-										<div class="parameter-choose-one" :class="{ active: item.active }" @click="chooseParameter(item)">
+										<div class="parameter-choose-one text-no-wrap" :class="{ active: item.active }" @click="chooseParameter(item)">
 											{{ item.name }}<span v-if="item.paramValue.length">({{ item.paramValue.length }})</span>
 										</div>
 									</el-col>
@@ -148,7 +148,7 @@
 								</el-table-column>
 								<el-table-column align="center" width="100">
 									<template #header>
-										<el-button type="primary" @click="handleAdd" round> 新增 </el-button>
+										<el-button type="primary" @click="handleAdd"> 新增 </el-button>
 									</template>
 									<template #default="scope">
 										<el-button @click="handleDelete(scope.row, scope.$index)" type="danger" text>删除</el-button>
@@ -167,7 +167,7 @@
 						<div class="parameter-stop pd20">
 							<el-row>
 								<el-col v-for="(item, index) in state.paramSelect" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4" :title="item.name">
-									<div class="parameter-stop-one mb10" :class="{ active: item.active }" @click="selectParameter(item)">
+									<div class="parameter-stop-one text-no-wrap mb10" :class="{ active: item.active }" @click="selectParameter(item)">
 										{{ item.name }}
 									</div>
 								</el-col>
@@ -208,7 +208,7 @@
 					<el-table-column label="参数" prop="combinationDisplayParam">
 						<template #default="{ row }">
 							<div class="flex-center-align">
-								<span class="omit" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
+								<span class="omit text-no-wrap" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
 								<el-button class="ml3" text title="查看" type="primary" @click="chooseCombination(row)">
 									<SvgIcon name="ele-Edit" size="16px" />
 								</el-button>
@@ -767,6 +767,7 @@ const onSubmit = () => {
 			} else {
 				timelimitAdd(req).then((res: any) => {
 					state.timeLimitId = res.result;
+					emit('updateList');
 					ElMessage.success('操作成功');
 				});
 			}
@@ -832,6 +833,7 @@ const onConfirm = () => {
 				timelimitAdd(req).then((res: any) => {
 					state.timeLimitId = res.result;
 					ElMessage.success('操作成功');
+					emit('updateList');
 					state.isShowDialog = false;
 				});
 			}
@@ -902,9 +904,6 @@ defineExpose({ closeDialog, openDialog });
 			line-height: 34px;
 			color: var(--el-color-primary);
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 			border: 1px solid transparent;
 		}
@@ -920,9 +919,6 @@ defineExpose({ closeDialog, openDialog });
 			height: 34px;
 			line-height: 34px;
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 		}
 		.active {
@@ -943,9 +939,6 @@ defineExpose({ closeDialog, openDialog });
 	}
 	.omit {
 		display: inline-block;
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
 	}
 }
 </style>

+ 4 - 13
src/views/system/config/timeLimit/component/TimelimitEdit.vue

@@ -27,7 +27,7 @@
 					<el-col :xs="24" :sm="2" :md="2" :lg="2" :xl="8" v-if="state.ruleForm.workflowCode === 'Order'">
 						<el-form-item label="" label-width="10px">
 							<el-tooltip placement="top-start">
-								<div style="height: 34px; display: flex; align-items: center">
+								<div style="height: 34px" class="flex-center-align">
 									<SvgIcon name="ele-InfoFilled" size="24px" color="var(--el-color-primary)" />
 								</div>
 								<template #content>
@@ -63,7 +63,7 @@
 							<div class="mt20 parameter-choose">
 								<el-row>
 									<el-col v-for="(item, index) in state.paramArr" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4">
-										<div class="parameter-choose-one" :class="{ active: item.active }" @click="chooseParameter(item)">
+										<div class="parameter-choose-one text-no-wrap" :class="{ active: item.active }" @click="chooseParameter(item)">
 											{{ item.name }}<span v-if="item.paramValue.length">({{ item.paramValue.length }})</span>
 										</div>
 									</el-col>
@@ -167,7 +167,7 @@
 						<div class="parameter-stop pd20">
 							<el-row>
 								<el-col v-for="(item, index) in state.paramSelect" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4" :title="item.name">
-									<div class="parameter-stop-one mb10" :class="{ active: item.active }" @click="selectParameter(item)">
+									<div class="parameter-stop-one mb10 text-no-wrap" :class="{ active: item.active }" @click="selectParameter(item)">
 										{{ item.name }}
 									</div>
 								</el-col>
@@ -208,7 +208,7 @@
 					<el-table-column label="参数" prop="combinationDisplayParam">
 						<template #default="{ row }">
 							<div class="flex-center-align">
-								<span class="omit" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
+								<span class="omit text-no-wrap" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
 								<el-button class="ml3" text title="查看" type="primary" @click="chooseCombination(row)">
 									<SvgIcon name="ele-Edit" size="16px" />
 								</el-button>
@@ -1025,9 +1025,6 @@ defineExpose({ closeDialog, openDialog });
 			line-height: 34px;
 			color: var(--el-color-primary);
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 			border: 1px solid transparent;
 		}
@@ -1043,9 +1040,6 @@ defineExpose({ closeDialog, openDialog });
 			height: 34px;
 			line-height: 34px;
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 		}
 		.active {
@@ -1066,9 +1060,6 @@ defineExpose({ closeDialog, openDialog });
 	}
 	.omit {
 		display: inline-block;
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
 	}
 }
 </style>

+ 3 - 12
src/views/system/config/timeLimit/component/TimelmitDetail.vue

@@ -49,7 +49,7 @@
 							<div class="mt20 parameter-choose">
 								<el-row>
 									<el-col v-for="(item, index) in state.paramArr" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4">
-										<div class="parameter-choose-one" :class="{ active: item.active }" @click="chooseParameter(item)">
+										<div class="parameter-choose-one text-no-wrap" :class="{ active: item.active }" @click="chooseParameter(item)">
 											{{ item.name }}<span v-if="item.paramValue.length">({{ item.paramValue.length }})</span>
 										</div>
 									</el-col>
@@ -86,7 +86,7 @@
 						<div class="parameter-stop pd20">
 							<el-row>
 								<el-col v-for="(item, index) in state.paramSelect" :key="index" :xs="24" :sm="8" :md="8" :lg="6" :xl="4" :title="item.name">
-									<div class="parameter-stop-one mb10" :class="{ active: item.active }">
+									<div class="parameter-stop-one mb10 text-no-wrap" :class="{ active: item.active }">
 										{{ item.name }}
 									</div>
 								</el-col>
@@ -127,7 +127,7 @@
 							<el-table-column label="参数" prop="combinationDisplayParam" align="center" width="400">
 								<template #default="{ row }">
 									<div class="flex-center-align">
-										<span class="omit" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
+										<span class="omit text-no-wrap" :title="row.combinationDisplayParam">{{ row.combinationDisplayParam }}</span>
 										<el-button class="ml3" text title="查看组合详情" type="primary" @click="viewCombination(row)">
 											<SvgIcon name="ele-Document" size="16px" />
 										</el-button>
@@ -452,9 +452,6 @@ defineExpose({ closeDialog, openDialog });
 			line-height: 34px;
 			color: var(--el-color-primary);
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 			border: 1px solid transparent;
 		}
@@ -470,9 +467,6 @@ defineExpose({ closeDialog, openDialog });
 			height: 34px;
 			line-height: 34px;
 			width: calc(100% - 10px);
-			white-space: nowrap;
-			text-overflow: ellipsis;
-			overflow: hidden;
 			padding: 0 5px;
 		}
 		.active {
@@ -493,9 +487,6 @@ defineExpose({ closeDialog, openDialog });
 	}
 	.omit {
 		display: inline-block;
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
 	}
 }
 </style>