master
parent
0505255dd2
commit
c10e676553
35 changed files with 867 additions and 51 deletions
@ -0,0 +1,279 @@ |
||||
<template> |
||||
<div class="box"> |
||||
<h1 class="title">{{paperName }}</h1> |
||||
<div class="metas"> |
||||
<div style="margin-right: 20px;"> |
||||
<span class="name">总分:</span> |
||||
<span class="val">100分</span> |
||||
</div> |
||||
<div> |
||||
<span class="name">考试时长:</span> |
||||
<span class="val">{{duration}}</span> |
||||
</div> |
||||
</div> |
||||
|
||||
<ul class="tab"> |
||||
<li v-for="(item,index) in tabs" :key="index" :class="{active: active == item.id}" @click="tabChange(item.id)">{{item.name}}</li> |
||||
</ul> |
||||
|
||||
<div class="wrap"> |
||||
<div class="item" v-for="(item,index) in curType" :key="index"> |
||||
<div class="answer"> |
||||
<div class="info"> |
||||
<p class="key">序号:</p> |
||||
<p class="val">{{index+1}}</p> |
||||
</div> |
||||
<div class="info"> |
||||
<p class="key">得分:</p> |
||||
<p class="val">{{item.questionScore}}</p> |
||||
</div> |
||||
</div> |
||||
<div class="meta"> |
||||
<p class="key">题干:</p> |
||||
<p class="val" v-html="item.questionStem"></p> |
||||
</div> |
||||
<div class="meta"> |
||||
<p class="key">选项:</p> |
||||
<div class="val"> |
||||
<p v-for="(option,i) in item.options" :key="i">{{i}}.{{item.options[i]}}</p> |
||||
</div> |
||||
</div> |
||||
<div class="meta ans"> |
||||
<div class="info"> |
||||
<p class="key">正确答案:</p> |
||||
<p class="val">{{item.answer}}</p> |
||||
</div> |
||||
<div class="info"> |
||||
<p class="key">学生答案:</p> |
||||
<p class="val">{{item.userAnswer}}</p> |
||||
</div> |
||||
</div> |
||||
<div class="meta"> |
||||
<p class="key">答案解析:</p> |
||||
<p class="val" v-html="item.answerAnalysis"></p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
<script> |
||||
import mixins from '@/mixins/setBackground' |
||||
import { mapState } from 'vuex' |
||||
export default { |
||||
mixins: [ mixins ], |
||||
data() { |
||||
return { |
||||
paperName: '', |
||||
duration: 0, |
||||
selectVisible: false, |
||||
tabs: [ |
||||
{ |
||||
id: 1, |
||||
name: '单选题' |
||||
},{ |
||||
id: 2, |
||||
name: '多选题' |
||||
},{ |
||||
id: 3, |
||||
name: '判断题' |
||||
},{ |
||||
id: 4, |
||||
name: '简答题' |
||||
},{ |
||||
id: 5, |
||||
name: '填空题' |
||||
} |
||||
], |
||||
typeNameList: ['单项选择','多项选择','判断题','简答题','填空题'], |
||||
active: 1, |
||||
list: [], |
||||
curType: [] |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapState('user', [ |
||||
'userId' |
||||
]), |
||||
...mapState('achievement', [ |
||||
'id' |
||||
]) |
||||
}, |
||||
mounted() { |
||||
this.getData() |
||||
}, |
||||
methods: { |
||||
getData() { |
||||
this.$post(`${this.api.reviewDetail}?id=${this.id}`) |
||||
.then(res => { |
||||
let data = res.data |
||||
data.list.forEach(n => { |
||||
n.isCorrecting == 0 && (n.questionScore = '') |
||||
n.isSub = n.typeName == '简答题' |
||||
if(n.typeName == '填空题'){ |
||||
let answer = [] |
||||
for(let i in n){ |
||||
if(i.includes('option')) answer.push(n[i]) |
||||
} |
||||
n.answer = answer.join('|') |
||||
n.userAnswer = n.userAnswer ? n.userAnswer.replace(/<>/g,'|') : '' |
||||
} |
||||
}) |
||||
this.list = data.list |
||||
this.handleOptions() |
||||
this.paperName = data.paperName |
||||
this.userName = data.stuName |
||||
this.this_score = data.score |
||||
this.duration = data.timeCost |
||||
}) |
||||
.catch(err => {}) |
||||
}, |
||||
tabChange(id){ |
||||
this.active = id |
||||
this.handleOptions() |
||||
}, |
||||
handleOptions(){ |
||||
let list = this.list |
||||
let typeName = this.typeNameList[this.active-1] |
||||
list = list.filter(n => n.typeName == typeName) |
||||
list.forEach(n => { |
||||
if(!n.options){ |
||||
let options = {} |
||||
let answer = [] |
||||
for(let i in n){ |
||||
if(i.includes('option') && n[i]){ |
||||
options[i.replace('option','')] = n[i] |
||||
if(n.typeName == '填空题') answer.push(n[i]) |
||||
} |
||||
} |
||||
if(n.typeName == '填空题') n.answer = answer.join('|') |
||||
n.options = options |
||||
} |
||||
}) |
||||
this.curType = list |
||||
} |
||||
}, |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.box{ |
||||
width: 90%; |
||||
margin: 0 auto; |
||||
} |
||||
.title{ |
||||
text-align: center; |
||||
font-size: 18px; |
||||
font-weight: 600; |
||||
} |
||||
.metas{ |
||||
display: flex; |
||||
justify-content: center; |
||||
margin: 20px 0 30px; |
||||
.name{ |
||||
font-size: 12px; |
||||
color: #717171; |
||||
} |
||||
.val{ |
||||
font-size: 12px; |
||||
color: #929292; |
||||
} |
||||
} |
||||
.tab{ |
||||
display: flex; |
||||
align-items: center; |
||||
margin-bottom: 10px; |
||||
li{ |
||||
position: relative; |
||||
padding: 0 44px; |
||||
margin-right: 7px; |
||||
font-size: 13px; |
||||
line-height: 46px; |
||||
text-align: center; |
||||
color: #444; |
||||
border: 1px solid #ececec; |
||||
cursor: pointer; |
||||
&:hover{ |
||||
opacity: .8; |
||||
} |
||||
&.active:after{ |
||||
content: ''; |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 4px; |
||||
background-color: $main-color; |
||||
} |
||||
} |
||||
} |
||||
.wrap{ |
||||
.item{ |
||||
padding-bottom: 30px; |
||||
margin-bottom: 30px; |
||||
border-bottom: 1px dashed #f4f4f4; |
||||
|
||||
.key{ |
||||
font-weight: bold; |
||||
color: #333; |
||||
font-size: 14px; |
||||
} |
||||
.val{ |
||||
color: #757575; |
||||
font-size: 14px; |
||||
} |
||||
.answer{ |
||||
display: flex; |
||||
align-items: center; |
||||
padding: 15px; |
||||
margin: 15px 0; |
||||
font-size: 12px; |
||||
border: 1px solid #e8e8e8; |
||||
background-color: #f3f2f2; |
||||
.info{ |
||||
display: inline-flex; |
||||
align-items: center; |
||||
margin-right: 30px; |
||||
} |
||||
} |
||||
.meta{ |
||||
padding-left: 10px; |
||||
margin: 20px 0; |
||||
font-size: 12px; |
||||
&.ans{ |
||||
display: flex; |
||||
.info{ |
||||
margin-right: 20px; |
||||
} |
||||
} |
||||
.key{ |
||||
margin-bottom: 5px; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
.btns{ |
||||
display: flex; |
||||
justify-content: center; |
||||
margin-top: 20px; |
||||
button{ |
||||
height: 30px; |
||||
padding: 0 30px; |
||||
margin: 0 15px; |
||||
font-size: 14px; |
||||
color: #333; |
||||
line-height: 30px; |
||||
background-color: #fff; |
||||
border: 1px solid #ededed; |
||||
border-radius: 4px; |
||||
cursor: pointer; |
||||
&.submit{ |
||||
color: #fff; |
||||
background-color: $main-color; |
||||
border-color: $main-color; |
||||
} |
||||
&:hover{ |
||||
opacity: .8; |
||||
} |
||||
} |
||||
} |
||||
</style> |
@ -0,0 +1,353 @@ |
||||
<template> |
||||
<div class="box"> |
||||
<div class="left"> |
||||
<p class="title">答题卡</p> |
||||
|
||||
<div class="item"> |
||||
<p class="type">单选题</p> |
||||
<p class="total">(共{{singleCount}}题,合计{{singlePoint}}分)</p> |
||||
<div class="nums"> |
||||
<span v-for="n in singleCount" :class="{active: n <= singleAnsweredCount}" :key="n">{{n}}</span> |
||||
</div> |
||||
</div> |
||||
<div class="item"> |
||||
<p class="type">多选题</p> |
||||
<p class="total">(共{{multipleCount}}题,合计{{multipleChoiceScore}}分)</p> |
||||
<div class="nums"> |
||||
<span v-for="n in multipleCount" :class="{active: n <= multipleAnsweredCount}" :key="n">{{n}}</span> |
||||
</div> |
||||
</div> |
||||
<div class="item"> |
||||
<p class="type">判断题</p> |
||||
<p class="total">(共{{judgeCount}}题,合计{{judgeScore}}分)</p> |
||||
<div class="nums"> |
||||
<span v-for="n in judgeCount" :class="{active: n <= judgeAnsweredCount}" :key="n">{{n}}</span> |
||||
</div> |
||||
</div> |
||||
<div class="item"> |
||||
<p class="type">填空题</p> |
||||
<p class="total">(共{{fillBlankCount}}题,合计{{fillBlanksScore}}分)</p> |
||||
<div class="nums"> |
||||
<span v-for="n in fillBlankCount" :class="{active: n <= fillBlankAnsweredCount}" :key="n">{{n}}</span> |
||||
</div> |
||||
</div> |
||||
<div class="item"> |
||||
<p class="type">简答题</p> |
||||
<p class="total">(共{{briefAnswerCount}}题,合计{{briefAnswerScore}}分)</p> |
||||
<div class="nums"> |
||||
<span v-for="n in briefAnswerCount" :class="{active: n <= briefAnswerAnsweredCount}" :key="n">{{n}}</span> |
||||
</div> |
||||
</div> |
||||
<div class="btn"> |
||||
<el-button size="mini" type="primary" @click="save">提交练习</el-button> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="middle"> |
||||
<div class="ques"> |
||||
<template v-for="(subject,k) in subjects"> |
||||
<div class="item" v-if="subject.length" :key="k"> |
||||
<p v-if="subjects[k].length" class="title">{{questionType[k]}}(共{{subjects[k].length}}题,合计{{scoreList[k]}}分)</p> |
||||
<div class="ques-wrap" v-for="(item,index) in subject" :key="index"> |
||||
<div class="name-wrap"> |
||||
<span class="index">{{index+1}}.</span> |
||||
<div class="name" :class="'stem' + k + index" v-html="item.questionStem"></div> |
||||
</div> |
||||
<div class="options"> |
||||
<template v-if="item.name == '单项选择' || item.name == '判断题'"> |
||||
<div class="option" v-for="(option,i) in item.options" :key="i"> |
||||
<el-radio v-model="item.val" :label="i"> |
||||
{{i}}.{{item.options[i]}} |
||||
</el-radio> |
||||
</div> |
||||
</template> |
||||
<template v-if="item.name == '多项选择'"> |
||||
<el-checkbox-group v-model="item.val"> |
||||
<el-checkbox class="option-check" :label="i" v-for="(option,i) in item.options" :key="i"> |
||||
{{i}}.{{item.options[i]}} |
||||
</el-checkbox> |
||||
</el-checkbox-group> |
||||
</template> |
||||
<template v-if="item.name == '简答题'"> |
||||
<el-input type="textarea" rows="5" v-model="item.val"></el-input> |
||||
</template> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
<script> |
||||
import { mapState,mapGetters,mapActions } from 'vuex' |
||||
import mixins from '@/mixins/setBackground' |
||||
import util from '@/libs/util' |
||||
export default { |
||||
mixins: [ mixins ], |
||||
data() { |
||||
return { |
||||
subjects: [], |
||||
singleCount: 0, |
||||
multipleCount: 0, |
||||
judgeCount: 0, |
||||
fillBlankCount: 0, |
||||
briefAnswerCount: 0, |
||||
|
||||
singleAnsweredCount: 0, |
||||
multipleAnsweredCount: 0, |
||||
judgeAnsweredCount: 0, |
||||
fillBlankAnsweredCount: 0, |
||||
briefAnswerAnsweredCount: 0, |
||||
|
||||
singlePoint: 0, |
||||
multipleChoiceScore: 0, |
||||
judgeScore: 0, |
||||
fillBlanksScore: 0, |
||||
briefAnswerScore: 0, |
||||
scoreList: [], |
||||
questionType: ['单选题','多选题','判断题','填空题','简答题'], |
||||
progress: 0, |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapState('user', [ |
||||
'userId','clientId' |
||||
]) |
||||
}, |
||||
mounted() { |
||||
this.getData() |
||||
}, |
||||
methods: { |
||||
getData() { |
||||
this.$post(`${this.api.randomPractice}?userId=${this.userId}&schoolId=${this.clientId}`) |
||||
.then(res => { |
||||
let data = res.data |
||||
this.randomId = data.randomId |
||||
this.$post(`${this.api.previewPaper}?qid=${data.qid}`) |
||||
.then(res => { |
||||
let data = res.data |
||||
let subjects = [ |
||||
[...data.list1], |
||||
[...data.list2], |
||||
[...data.list4], |
||||
[...data.list3], |
||||
[...data.list5], |
||||
] |
||||
this.singleCount = data.list1.length |
||||
this.multipleCount = data.list2.length |
||||
this.fillBlankCount = data.list3.length |
||||
this.judgeCount = data.list4.length |
||||
this.briefAnswerCount = data.list5.length |
||||
|
||||
this.singlePoint = data.list1.length ? data.list1[0].singleChoiceScore * this.singleCount : 0 |
||||
this.multipleChoiceScore = data.list2.length ? data.list2[0].multipleChoiceScore * this.multipleCount : 0 |
||||
this.judgeScore = data.list4.length ? data.list4[0].judgeScore * this.judgeCount : 0 |
||||
this.fillBlanksScore = data.list3.length ? data.list3[0].fillBlanksScore * this.fillBlankCount : 0 |
||||
this.briefAnswerScore = data.list5.length ? data.list5[0].briefAnswerScore * this.briefAnswerCount : 0 |
||||
this.scoreList = [this.singlePoint,this.multipleChoiceScore,this.fillBlanksScore,this.briefAnswerScore,this.briefAnswerScore] |
||||
|
||||
subjects.forEach((e,i) => { |
||||
e.forEach(n => { |
||||
if(i == 1){ |
||||
this.$set(n,'val',[]) |
||||
}else if(i == 3){ |
||||
n.questionStem = n.questionStem.replace(/\(\)\(\)\(\)/g,`<input class="input"></input>`) |
||||
}else{ |
||||
this.$set(n,'val','') |
||||
} |
||||
if(!n.options){ |
||||
let options = {} |
||||
for(let i in n){ |
||||
if(i.includes('option') && n[i]){ |
||||
options[i.replace('option','')] = n[i] |
||||
} |
||||
} |
||||
n.options = options |
||||
} |
||||
n.questionStatus = 0 |
||||
}) |
||||
}) |
||||
this.subjects = subjects |
||||
}).catch(err => {}) |
||||
}).catch(err => {}) |
||||
}, |
||||
save(){ |
||||
let data1 = [] |
||||
this.subjects.map((e,i) => { |
||||
e.map((n,k) => { |
||||
let userAnswer = '' |
||||
if(i == 1){ |
||||
userAnswer = n.val.join('') |
||||
}else if(i == 3){ |
||||
userAnswer = [...document.querySelectorAll(`.stem${i}${k} input`)].map(n => n.value).join('<>') |
||||
}else{ |
||||
userAnswer = n.val |
||||
} |
||||
data1.push({ |
||||
randomId: this.randomId, |
||||
questionId: n.questionId, |
||||
questionStatus : 1, |
||||
userAnswer, |
||||
userId: this.userId |
||||
}) |
||||
}) |
||||
}) |
||||
|
||||
this.$post(`${this.api.AddRandomPractiseExamAnswerDetail}`,data1) |
||||
.then(res => { |
||||
this.$post(`${this.api.addPractiseRecordRandom}?userId=${this.userId}&randomId=${this.randomId}`) |
||||
.then(res => { |
||||
this.$message.success('提交成功') |
||||
this.$router.back() |
||||
}) |
||||
.catch(err => {}) |
||||
}) |
||||
.catch(err => {}) |
||||
} |
||||
}, |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
$borderColor: #ececec; |
||||
.box{ |
||||
display: flex; |
||||
justify-content: space-between; |
||||
width: 90%; |
||||
margin: 0 auto; |
||||
.left,.middle,.right{ |
||||
border: 1px solid $borderColor; |
||||
} |
||||
.left,.right{ |
||||
width: 160px; |
||||
padding: 10px; |
||||
margin-right: 10px; |
||||
box-sizing: border-box; |
||||
.title{ |
||||
padding: 10px 0; |
||||
font-size: 14px; |
||||
color: #444; |
||||
text-align: center; |
||||
} |
||||
.item{ |
||||
padding: 10px 0; |
||||
margin-bottom: 10px; |
||||
border-bottom: 1px solid $borderColor; |
||||
.type,.total{ |
||||
color: #444; |
||||
font-size: 12px; |
||||
} |
||||
.total{ |
||||
margin: 10px 0; |
||||
} |
||||
.nums{ |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
span{ |
||||
width: 24px; |
||||
margin: 2px 1px; |
||||
line-height: 24px; |
||||
text-align: center; |
||||
color: #888; |
||||
font-size: 10px; |
||||
box-sizing: border-box; |
||||
border: 1px solid #e6e6e6; |
||||
border-radius: 50%; |
||||
} |
||||
.active{ |
||||
color: #fff; |
||||
background-color: #e80909; |
||||
border-color: #e80909; |
||||
} |
||||
} |
||||
} |
||||
.btn{ |
||||
margin: 20px 0; |
||||
text-align: center; |
||||
} |
||||
} |
||||
.middle{ |
||||
flex: 1; |
||||
margin-right: 10px; |
||||
overflow: auto; |
||||
.title{ |
||||
padding: 10px; |
||||
margin-bottom: 10px; |
||||
font-size: 14px; |
||||
color: #444; |
||||
border-bottom: 1px solid $borderColor; |
||||
} |
||||
.ques{ |
||||
.ques-wrap{ |
||||
padding: 0 15px; |
||||
margin: 10px 0 20px; |
||||
} |
||||
.item{ |
||||
margin: 10px 0 20px; |
||||
&:first-child{ |
||||
margin-top: 0; |
||||
} |
||||
.name-wrap{ |
||||
display: flex; |
||||
align-items: center; |
||||
margin-bottom: 10px; |
||||
font-size: 13px; |
||||
color: #444; |
||||
.index{ |
||||
font-size: 13px; |
||||
color: #444; |
||||
} |
||||
/deep/.input{ |
||||
width: 100px; |
||||
height: 28px; |
||||
padding: 0 5px; |
||||
margin: 0 5px; |
||||
color: #444; |
||||
background-color: #fff; |
||||
border: 1px solid #ebebeb; |
||||
box-sizing: border-box; |
||||
&:focus{ |
||||
outline: none; |
||||
} |
||||
&:disabled{ |
||||
background-color: #e8e8e8; |
||||
cursor: not-allowed; |
||||
} |
||||
} |
||||
} |
||||
.options{ |
||||
margin-top: 10px; |
||||
font-size: 14px; |
||||
color: #8b8b8b; |
||||
.option{ |
||||
margin: 5px 0; |
||||
&.selected{ |
||||
font-weight: bold; |
||||
color: #555; |
||||
} |
||||
} |
||||
.option-check{ |
||||
display: block; |
||||
margin-right: 6px; |
||||
} |
||||
/deep/.el-radio__label{ |
||||
padding-left: 6px; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
.right{ |
||||
.time,.ans{ |
||||
font-size: 14px; |
||||
color: #444; |
||||
text-align: center; |
||||
} |
||||
.ans{ |
||||
margin: 20px 0 10px; |
||||
font-size: 15px; |
||||
} |
||||
} |
||||
} |
||||
</style> |
@ -0,0 +1,104 @@ |
||||
$insideColor: rgba(245, 242, 255, 0.8); //内部节点的边框颜色 |
||||
$outColor: rgba(255, 255, 255, 0.8); //外部节点的边框颜色 |
||||
//混合代码,提取item共同样式 |
||||
@mixin public { |
||||
cursor: pointer; |
||||
font-size: 14px; |
||||
color: #333333; |
||||
display: flex; |
||||
align-items: center; |
||||
img { |
||||
height: 20px; |
||||
width: 20px; |
||||
margin-left: 10px; |
||||
} |
||||
} |
||||
|
||||
.side_tree{ |
||||
width: 100%; |
||||
font-size: 14px; |
||||
color: #333; |
||||
i{ |
||||
margin-left: 5px; |
||||
font-size: 17px; |
||||
} |
||||
span{ |
||||
margin-left: 5px; |
||||
font-size: 14px; |
||||
} |
||||
} |
||||
.item { |
||||
@include public; |
||||
width: 100%; |
||||
padding: 15px 0; |
||||
background:rgba(255,255,255,1); |
||||
box-shadow:1px 14px 29px 0px rgba(255,69,69,0.19); |
||||
border-radius:10px; |
||||
text-align: left; |
||||
margin-top: 20px; |
||||
} |
||||
.empty{ |
||||
width: 25px; |
||||
} |
||||
.item:first{ |
||||
margin-top: 0; |
||||
} |
||||
.item1 { |
||||
@include public; |
||||
margin-top: 20px; |
||||
margin-left: 23px; |
||||
} |
||||
.item2 { |
||||
@include public; |
||||
margin-top: 20px; |
||||
margin-left:80px |
||||
} |
||||
.item3 { |
||||
@include public; |
||||
margin-top: 20px; |
||||
margin-left:95px |
||||
} |
||||
.item2:hover{ |
||||
color: #cb221c; |
||||
} |
||||
.edit{ |
||||
display: inline-block; |
||||
width: 17px; |
||||
height: 17px; |
||||
background: url(../../../assets/svg/edit.svg) 0 0/cover no-repeat; |
||||
} |
||||
// 使三角形旋转动画 |
||||
.arrowTransform { |
||||
transition: 0.4s; |
||||
transform-origin: center; |
||||
transform: rotateZ(0deg); |
||||
} |
||||
.arrowTransformReturn { |
||||
transition: 0.4s; |
||||
transform-origin: center; |
||||
transform: rotateZ(90deg); |
||||
} |
||||
|
||||
//复选框样式 |
||||
.checkBox { |
||||
width: 14px; |
||||
height: 14px; |
||||
border-radius: 7px; |
||||
margin-left: 10px; |
||||
margin-right: 10px; |
||||
border: 2px solid rgba(146, 120, 255, 1); |
||||
} |
||||
|
||||
//当点击复选框时候切换背景图片 |
||||
.isActive { |
||||
background: url('../../../assets/img/icon-yigouxuan.png'); |
||||
background-size: 14px 14px; /*按比例缩放*/ |
||||
} |
||||
|
||||
.side_icon{ |
||||
text-align: right; |
||||
} |
||||
.side_icon i{ |
||||
cursor:pointer; |
||||
font-size: 20px; |
||||
} |
@ -0,0 +1,24 @@ |
||||
$main-color: #e80909; |
||||
|
||||
@mixin ellipsis { |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
white-space: nowrap; |
||||
} |
||||
@mixin mul-ellipsis($num) { |
||||
display: -webkit-box; |
||||
-webkit-box-orient: vertical; |
||||
-webkit-line-clamp: $num; |
||||
text-overflow: ellipsis; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.ellipsis{ |
||||
@include ellipsis(); |
||||
} |
||||
.mul-ellipsis2{ |
||||
@include mul-ellipsis(2); |
||||
} |
||||
.mul-ellipsis3{ |
||||
@include mul-ellipsis(3); |
||||
} |
Loading…
Reference in new issue