因项目需要,要实现仿word方式录入数据,要实现鼠标经过时才显示编辑组件,预览及离开后则显示具体的文字。
鼠标经过时显示
正常显示及离开时显示
组件代码
javascript
<template >
<div class="pager-input flex border-box full-width flex-center-sp" >
<div class="font-l border-box text margin-left-m " style="font-family: FangSong;">{{text}}</div>
<div v-if="val === ''" class="color-white textplus" >请输入</div>
<div class="input flex full-width hidden flex-center-sp">
<div v-for="item in data" class="item flex border-box flex-center-cz ">
<input :name="dataId" type="radio" v-model="val" @change="change(item.value)" :value="item.value">
<div class="flex flex-center-sp" >{{item.text}}</div>
</div>
</div>
</div>
</template>
<script>
import {getNewId} from '@/utils/sysUtils'
export default{
name:'PaperRadioBoxList',
created() {
this.dataId = getNewId();
},
data() {
return {
dataId: "",
text:"",
val:"",
}
},
props: {
data:{},
value:{}
},
model: {
prop: "value",
event: "change"
},
mounted() {
let find = this.data.filter(d=>d.value == this.val);
if (find.length >= 0) {
this.text = find[0].text;
}
},
watch:{
value:{
handler(newValue) {
this.val = newValue;
},
immediate: true,
deep: true //深度监听
},
},
methods:{
change(item) {
this.val = item;
let find = this.data.filter(d=>d.value === item);
if (find.length > 0) {
this.text = find[0].text;
}
console.log(this.val);
this.$emit("change", this.val)
}
}
}
</script>
<style scoped>
.pager-input:hover .text {
display: none;
}
.pager-input:hover .textplus {
display: none;
}
.pager-input:hover .input {
display: flex;
}
.item input {
width: 18px;
height: 18px;
}
</style>
引用组件,支持数据双向绑定
javascript
<PaperRadioBoxList :data="yesnoData" v-model="paperData.punishment1"></PaperRadioBoxList>
yesnoData:
[
{ value: 1, text: '有' },
{ value: 0, text: '无' },
],