You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
4.7 KiB
243 lines
4.7 KiB
<template>
|
|
<view class="formBox" :style="{width: formWidth,height: formHeight}">
|
|
<!-- 表头 -->
|
|
<view class="headerBox" :style="{height: formRowHeight,width: length + 'rpx',lineHeight:formRowHeight}">
|
|
<view class="numberBox" v-if="showNumber" :style="{height: formRowHeight}">
|
|
序号
|
|
</view>
|
|
<view
|
|
class="headerTitle"
|
|
v-for="itemH in Header"
|
|
:style="{height: formRowHeight,width: itemH.width+'rpx', border: border ? '1px solid #F6F6F6' : 'none', 'background-color': headBgColor}">
|
|
{{itemH.text}}
|
|
</view>
|
|
</view>
|
|
<view class="titel" v-if="Content.length <= 0">
|
|
暂无数据
|
|
</view>
|
|
<view :style="{width: length + 'rpx'}">
|
|
<view class="contentBox" v-for="(itemC,index) in Content" @click="clickList(itemC,index)">
|
|
<block v-for="(itemH,index2) in Header">
|
|
<view class="keyBox" :style="{height: formRowHeight,width: itemH.width+'rpx', border: border ? '1px solid #F6F6F6' : 'none'}">
|
|
{{itemC[itemH.key]}}
|
|
</view>
|
|
</block>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
/*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
export default {
|
|
name:'nk-form',
|
|
props:{
|
|
Header: {
|
|
type: Array,
|
|
default: ()=>{
|
|
return []
|
|
}
|
|
},
|
|
Content: {
|
|
type: Array,
|
|
default: ()=>{
|
|
return []
|
|
}
|
|
},
|
|
height: {
|
|
type: [String,Number],
|
|
default: 1000
|
|
},
|
|
width: {
|
|
type: [String,Number],
|
|
default: '600'
|
|
},
|
|
showNumber: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
rowHeight: {
|
|
type: [String,Number],
|
|
default: 80
|
|
},
|
|
border: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
headBgColor: {
|
|
type: String,
|
|
default: '#f7f5f6'
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
headerData:'',
|
|
contentData:'',
|
|
formWidth: '',
|
|
formHeight: '',
|
|
formRowHeight: '',
|
|
length: 0
|
|
};
|
|
},
|
|
created() {
|
|
if(typeof this.width == 'string'){
|
|
if(this.width.indexOf('rpx') > -1){
|
|
this.formWidth = this.width;
|
|
}
|
|
if(this.width.indexOf('%') > -1){
|
|
this.formWidth = this.width;
|
|
}
|
|
else{
|
|
this.formWidth = this.width + 'rpx';
|
|
}
|
|
}else{
|
|
this.formWidth = this.width + 'rpx';
|
|
}
|
|
if(typeof this.height == 'string'){
|
|
if(this.height.indexOf('rpx') > -1){
|
|
this.formHeight = this.height;
|
|
}
|
|
if(this.height.indexOf('%') > -1){
|
|
this.formHeight = this.height;
|
|
}
|
|
else{
|
|
this.formHeight = this.height + 'rpx';
|
|
}
|
|
}else{
|
|
this.formHeight = this.height + 'rpx';
|
|
}
|
|
if(typeof this.rowHeight == 'string'){
|
|
if(this.rowHeight.indexOf('rpx') > -1){
|
|
this.formRowHeight = this.rowHeight + 'rpx';
|
|
}
|
|
if(this.rowHeight.indexOf('%') > -1){
|
|
this.formRowHeight = this.rowHeight;
|
|
}
|
|
else{
|
|
this.formHeight = this.height + 'rpx';
|
|
}
|
|
}else{
|
|
this.formRowHeight = this.rowHeight + 'rpx';
|
|
}
|
|
},
|
|
methods:{
|
|
// 计算总长度
|
|
getLength(){
|
|
for(let i = 0; i < this.Header.length; i++){
|
|
this.length = this.length + this.Header[i].width * 1;
|
|
}
|
|
if(this.showNumber){
|
|
this.length = this.length + 80;
|
|
}
|
|
},
|
|
|
|
// 点击事件
|
|
clickList(event,index) {
|
|
let data = {
|
|
content: event,
|
|
index: index
|
|
}
|
|
this.$emit("clickList",data);
|
|
}
|
|
},
|
|
mounted:function(){
|
|
this.getLength();
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.formBox{
|
|
overflow: auto;
|
|
position: relative;
|
|
.headerBox{
|
|
position: sticky;
|
|
top: 0;
|
|
display: flex;
|
|
justify-content: flex-start;
|
|
.numberBox,.headerTitle{
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 30rpx;
|
|
font-weight: 900;
|
|
color: rgb(68, 68, 68);
|
|
// background-color: #dddddd;
|
|
background-color: #f7f5f6;
|
|
border: 1px solid #F6F6F6;
|
|
box-sizing: border-box;
|
|
}
|
|
.numberBox{
|
|
width: 80rpx;
|
|
}
|
|
}
|
|
.contentBox{
|
|
.keyBox{
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 30rpx;
|
|
font-weight: 900;
|
|
border: 1px solid #F6F6F6;
|
|
box-sizing: border-box;
|
|
}
|
|
}
|
|
// .contentBox:nth-child(2n){
|
|
// background-color: #F1F1F1;
|
|
// }
|
|
.titel{
|
|
text-align: center;
|
|
margin-top: 80rpx;
|
|
color: #007AFF;
|
|
}
|
|
}
|
|
|
|
|
|
/* .headerBox{
|
|
height: 60rpx;
|
|
position: sticky;
|
|
top: 0;
|
|
} */
|
|
|
|
|
|
|
|
|
|
// .headerBoxII{
|
|
// height: 60rpx;
|
|
// line-height: 60rpx;
|
|
// display: inline-block;
|
|
// text-align: center;
|
|
// font-size: 30rpx;
|
|
// font-weight: 900;
|
|
// color: rgb(68, 68, 68);
|
|
// }
|
|
// .headerBoxIII{
|
|
// background-color: #dddddd;
|
|
// border: 1px solid rgb(235, 238, 245);
|
|
// }
|
|
// .contentBox{
|
|
// height: 60rpx;
|
|
// line-height: 60rpx;
|
|
// float: left;
|
|
// text-align: center;
|
|
// }
|
|
// .contentBoxII{
|
|
// height: 60rpx;
|
|
// line-height: 60rpx;
|
|
// border: 1px solid rgb(235, 238, 245);
|
|
// }
|
|
// .contentBoxII:nth-child(2n){
|
|
// background-color: #E6E6E6;
|
|
// }
|
|
// .tipsBox{
|
|
// margin-top: 30rpx;
|
|
// font-size: 40rpx;
|
|
// text-align: center;
|
|
// color: #999;
|
|
// }
|
|
</style>
|