feat: 首次提交

This commit is contained in:
peerless_hero
2023-08-17 21:28:49 +08:00
parent 36f80fb971
commit ec1e5e16cd
571 changed files with 95322 additions and 0 deletions

View File

@ -0,0 +1,537 @@
<!--本文件由FirstUI授权予新疆天衡创新研究院有限公司手机号 1 86140 725 49身份证尾号5A07X5专用请尊重知识产权勿私下传播违者追究法律责任-->
<template>
<view class="fui-panel__wrap"
:style="{background:background,'border-top-color':borderColor,'border-bottom-color':borderColor,marginTop:marginTop+'rpx',marginBottom:marginBottom+'rpx'}"
:class="{'fui-panel__unlined':!isBorder,'fui-panel__background':!background}">
<view class="fui-panel__hd"
:style="{background:hdBackground,paddingLeft:padding+'rpx',paddingRight:padding+'rpx'}"
v-if="panelData[head]">
<text :class="{'fui-panel__title-color':!headColor}"
:style="{fontSize:headSize+'rpx',color:headColor+'rpx'}">{{panelData[head] || ''}}</text>
<view v-if="hdBorder" :style="{background:borderColor,left:hdLeft+'rpx',right:hdRight+'rpx'}"
class="fui-panel__border" :class="{'fui-panel__border-color':!borderColor}"></view>
</view>
<view class="fui-panel__mediabox" :style="{paddingLeft:padding+'rpx',paddingRight:padding+'rpx'}"
:class="{'fui-mediabox__center':!flexStart,'fui-panel__hover-weex':highlight}" v-for="(item,index) in listData"
:key="index" :hover-class="highlight?'fui-panel__hover':''" :hover-stay-time="150"
@tap="handleClick(index)">
<view class="fui-panel__mb-hd" v-if="item[src]" :style="{width:width+'rpx',height:height+'rpx'}">
<image class="fui-panel__mb-thumb" :src="item[src]" mode="widthFix"
:style="{width:width+'rpx',height:height+'rpx',borderRadius:radius+'rpx'}" />
</view>
<view class="fui-panel__mb-bd">
<text class="fui-panel__mb-title" v-if="item[title]" :class="{'fui-panel__title-color':!color}"
:style="{color:color,fontSize:size+'rpx',fontWeight:fontWeight}">{{item[title] || ''}}</text>
<text class="fui-panel__mb-desc" v-if="item[desc]" :class="{'fui-panel__sub-color':!descColor}"
:style="{color:descColor,fontSize:descSize+'rpx'}">{{item[desc] || ''}}</text>
<view class="fui-panel__mb-info" v-if="item[source] || item[time] || item[extra]">
<text class="fui-panel__info-meta" :class="{'fui-panel__info-color':!infoColor}"
:style="{color:infoColor,fontSize:infoSize+'rpx'}"
v-if="item[source]">{{item[source] || ''}}</text>
<text class="fui-panel__info-meta" :class="{'fui-panel__info-color':!infoColor}"
:style="{color:infoColor,fontSize:infoSize+'rpx'}" v-if="item[time]">{{item[time] || ''}}</text>
<text class="fui-panel__info-extra"
:class="{'fui-panel__info-color':!infoColor,'fui-panel__extra-bcolor':!infoColor}"
:style="{color:infoColor,fontSize:infoSize+'rpx','border-left-color':infoColor}"
v-if="item[extra]">{{item[extra] || ''}}</text>
</view>
</view>
<view v-if="bdBorder && index!==listData.length-1"
:style="{background:borderColor,left:bdLeft+'rpx',right:bdRight+'rpx'}" class="fui-panel__border"
:class="{'fui-panel__border-color':!borderColor}"></view>
</view>
<slot></slot>
</view>
</template>
<script>
export default {
name: "fui-panel",
emits: ['click'],
props: {
//面板数据,键名可通过 fields属性配置
panelData: {
type: Object,
default () {
return {}
}
},
//面板数据源键名key
fields: {
type: Object,
default () {
return {}
}
},
background: {
type: String,
// #ifdef APP-NVUE
default: '#fff'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
},
//是否有点击效果
highlight: {
type: Boolean,
default: true
},
flexStart: {
type: Boolean,
default: false
},
marginTop: {
type: [Number, String],
default: 0
},
marginBottom: {
type: [Number, String],
default: 0
},
//左右间距
padding: {
type: [Number, String],
default: 32
},
hdBorder: {
type: Boolean,
default: true
},
hdLeft: {
type: [Number, String],
default: 32
},
hdRight: {
type: [Number, String],
default: 0
},
hdBackground: {
type: String,
default: '#fff'
},
headSize: {
type: [Number, String],
default: 32
},
headColor: {
type: String,
// #ifdef APP-NVUE
default: '#181818'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
},
bdBorder: {
type: Boolean,
default: true
},
bdLeft: {
type: [Number, String],
default: 32
},
bdRight: {
type: [Number, String],
default: 0
},
//图片宽度
width: {
type: [Number, String],
default: 120
},
//图片高度
height: {
type: [Number, String],
default: 120
},
radius: {
type: [Number, String],
default: 0
},
size: {
type: [Number, String],
default: 32
},
color: {
type: String,
// #ifdef APP-NVUE
default: '#181818'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
},
fontWeight: {
type: [Number, String],
default: 'normal'
},
descSize: {
type: [Number, String],
default: 28
},
descColor: {
type: String,
// #ifdef APP-NVUE
default: '#7F7F7F'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
},
infoSize: {
type: [Number, String],
default: 24
},
infoColor: {
type: String,
// #ifdef APP-NVUE
default: '#b2b2b2'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
},
//是否需要panel外层上下线条
isBorder: {
type: Boolean,
default: true
},
borderColor: {
type: String,
// #ifdef APP-NVUE
default: '#eee'
// #endif
// #ifndef APP-NVUE
default: ''
// #endif
}
},
data() {
return {
listData: [],
head: 'head',
list: 'list',
src: 'src',
title: 'title',
desc: 'desc',
source: 'source',
time: 'time',
extra: 'extra'
};
},
watch: {
panelData: {
handler(val) {
this.initData(val)
},
deep: true
},
//未做深度监听
fields(val){
this.handleFileds()
}
},
created() {
this.initData(this.panelData)
},
methods: {
handleFileds() {
if (this.fields && typeof this.fields === 'object') {
this.head = this.fields.head || 'head';
this.list = this.fields.list || 'list';
this.src = this.fields.src || 'src';
this.title = this.fields.title || 'title';
this.desc = this.fields.desc || 'desc';
this.source = this.fields.source || 'source';
this.time = this.fields.time || 'time';
this.extra = this.fields.extra || 'extra';
}
},
initData(val) {
this.handleFileds()
val = val || {};
let list = val[this.list] && [...val[this.list]]
if (val[this.list] && Array.isArray(list)) {
this.listData = list;
} else {
this.listData = [val];
}
},
handleClick(index) {
this.$emit('click', {
index: index,
...this.listData[index]
})
}
}
}
</script>
<style scoped>
.fui-panel__wrap {
/* #ifndef APP-NVUE */
width: 100%;
border-top-width: 0;
border-bottom-width: 0;
/* #endif */
flex: 1;
position: relative;
overflow: hidden;
/* #ifdef APP-NVUE */
border-top-width: 0.5px;
border-top-style: solid;
border-bottom-width: 0.5px;
border-bottom-style: solid;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-panel__background {
background: var(--fui-bg-color, #FFFFFF);
}
/* #endif */
.fui-panel__unlined {
border-top-width: 0 !important;
border-bottom-width: 0 !important;
}
/* #ifndef APP-NVUE */
.fui-panel__wrap::before {
top: 0;
border-top: 1px solid var(--fui-color-border, #EEEEEE);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(.5);
transform: scaleY(.5)
}
.fui-panel__wrap:after{
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
}
.fui-panel__wrap::before {
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
}
.fui-panel__wrap::after {
bottom: 0;
border-bottom: 1px solid var(--fui-color-border, #EEEEEE);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(.5);
transform: scaleY(.5)
}
.fui-panel__unlined::before{
border-top-width: 0 !important;
border-bottom-width: 0 !important;
}
.fui-panel__unlined::after {
border-top-width: 0 !important;
border-bottom-width: 0 !important;
}
/* #endif */
.fui-panel__hd {
/* #ifndef APP-NVUE */
width: 100%;
display: flex;
word-break: break-all;
box-sizing: border-box;
/* #endif */
flex: 1;
padding-top: 26rpx;
padding-bottom: 26rpx;
font-weight: 700;
position: relative;
flex-direction: row;
align-items: center;
}
.fui-panel__border {
position: absolute;
bottom: 0;
/* #ifdef APP-NVUE */
height: 0.5px;
z-index: -1;
/* #endif */
/* #ifndef APP-NVUE */
height: 1px;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
transform-origin: 0 100%;
z-index: 1;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-panel__border-color {
background: var(--fui-color-border, #EEEEEE) !important;
}
/* #endif */
.fui-panel__mediabox {
padding-top: 32rpx;
padding-bottom: 32rpx;
position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
}
.fui-mediabox__center {
align-items: center;
}
.fui-panel__mb-hd {
margin-right: 32rpx;
overflow: hidden;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
justify-content: center;
}
.fui-panel__mb-thumb {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
}
.fui-panel__mb-bd {
flex: 1;
overflow: hidden;
}
/* 暂不使用 */
.fui-panel__mb-between {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: space-between;
}
/* 暂不使用 */
/* #ifndef APP-NVUE */
.fui-panel__bd-height {
min-height: var(--fui-img-base, 60px);
}
/* #endif */
.fui-panel__mb-title {
font-weight: normal;
/* #ifdef APP-NVUE */
lines: 1;
/* #endif */
/* #ifndef APP-NVUE */
white-space: nowrap;
line-height: 1.2;
display: block;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-panel__title-color {
color: var(--fui-color-title, #181818) !important;
}
/* #endif */
.fui-panel__mb-desc,
.fui-panel__mb-title {
overflow: hidden;
text-overflow: ellipsis;
}
.fui-panel__mb-desc {
padding-top: 12rpx;
font-weight: 400;
font-size: 28rpx;
/* #ifndef APP-NVUE */
line-height: 1.4;
word-break: break-all;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* #endif */
/* #ifdef APP-NVUE */
lines: 2;
/* #endif */
}
/* #ifndef APP-NVUE */
.fui-panel__sub-color {
color: var(--fui-color-subtitle, #7F7F7F) !important;
}
/* #endif */
.fui-panel__mb-info {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
flex-direction: row;
margin-top: 32rpx;
padding-bottom: 8rpx;
font-weight: 400;
line-height: 1;
overflow: hidden;
}
/* #ifndef APP-NVUE */
.fui-panel__info-color {
color: var(--fui-color-label, #B2B2B2) !important;
}
/* #endif */
.fui-panel__info-meta {
padding-right: 32rpx;
}
.fui-panel__info-extra {
padding-left: 32rpx;
border-left-width: 1rpx;
border-left-style: solid;
}
/* #ifndef APP-NVUE */
.fui-panel__extra-bcolor {
border-left-color: var(--fui-color-label, #B2B2B2) !important;
}
/* #endif */
/* #ifndef APP-NVUE */
.fui-panel__hover {
background-color: var(--fui-bg-color-hover, rgba(0, 0, 0, 0.2)) !important;
}
/* #endif */
/* #ifdef APP-NVUE */
.fui-panel__hover-weex:active {
background: rgba(0, 0, 0, 0.2) !important;
}
/* #endif */
</style>