revert(视频号组件): 精简代码,去除不用的组件

This commit is contained in:
2026-01-14 09:31:22 +08:00
parent 03c1a8d71a
commit fe039ed126
5 changed files with 36 additions and 340 deletions

View File

@@ -7,15 +7,12 @@
--channel-play-btn-small-size: 60rpx; --channel-play-btn-small-size: 60rpx;
--channel-play-btn-icon-size: 40rpx; --channel-play-btn-icon-size: 40rpx;
--channel-play-btn-icon-small-size: 30rpx; --channel-play-btn-icon-small-size: 30rpx;
--channel-avatar-size: 60rpx;
--channel-arrow-size: 24rpx;
--channel-border-radius: 12rpx; --channel-border-radius: 12rpx;
--channel-stats-padding: 10rpx; --channel-stats-padding: 10rpx;
--channel-info-wrap-padding: 10rpx 0; --channel-info-wrap-padding: 10rpx 0;
// 字体变量 // 字体变量
--channel-name-font-size: 28rpx; --channel-name-font-size: 28rpx;
--channel-follow-font-size: 24rpx;
--video-title-font-size: 28rpx; --video-title-font-size: 28rpx;
--video-title-small-font-size: 24rpx; --video-title-small-font-size: 24rpx;
--video-stats-font-size: 24rpx; --video-stats-font-size: 24rpx;
@@ -23,7 +20,6 @@
// 颜色变量 // 颜色变量
--channel-name-color: #333; --channel-name-color: #333;
--channel-follow-color: #07c160;
--video-title-color: #333; --video-title-color: #333;
--video-title-small-color: #666; --video-title-small-color: #666;
--video-stats-color: #999; --video-stats-color: #999;
@@ -33,9 +29,6 @@
--channel-stats-bg: linear-gradient(transparent, rgba(0, 0, 0, 0.6)); --channel-stats-bg: linear-gradient(transparent, rgba(0, 0, 0, 0.6));
// 间距变量 // 间距变量
--channel-header-padding: 16rpx;
--channel-avatar-margin-right: 12rpx;
--channel-arrow-margin-left: 8rpx;
--channel-name-margin-bottom: 4rpx; --channel-name-margin-bottom: 4rpx;
--video-title-margin-bottom: 8rpx; --video-title-margin-bottom: 8rpx;
} }
@@ -47,7 +40,6 @@
--channel-play-btn-small-size: 50rpx; --channel-play-btn-small-size: 50rpx;
--channel-play-btn-icon-size: 35rpx; --channel-play-btn-icon-size: 35rpx;
--channel-play-btn-icon-small-size: 25rpx; --channel-play-btn-icon-small-size: 25rpx;
--channel-avatar-size: 50rpx;
--channel-name-font-size: 24rpx; --channel-name-font-size: 24rpx;
--video-title-font-size: 24rpx; --video-title-font-size: 24rpx;
} }
@@ -59,7 +51,6 @@
--channel-play-btn-small-size: 70rpx; --channel-play-btn-small-size: 70rpx;
--channel-play-btn-icon-size: 45rpx; --channel-play-btn-icon-size: 45rpx;
--channel-play-btn-icon-small-size: 35rpx; --channel-play-btn-icon-small-size: 35rpx;
--channel-avatar-size: 70rpx;
--channel-name-font-size: 32rpx; --channel-name-font-size: 32rpx;
--video-title-font-size: 32rpx; --video-title-font-size: 32rpx;
} }
@@ -149,42 +140,4 @@
color: var(--video-stats-color); color: var(--video-stats-color);
} }
// 频道头部
.channel-header {
display: flex;
align-items: center;
padding: var(--channel-header-padding);
border-bottom: 1rpx solid var(--channel-border-color);
.channel-avatar {
width: var(--channel-avatar-size);
height: var(--channel-avatar-size);
border-radius: 50%;
margin-right: var(--channel-avatar-margin-right);
}
.channel-info {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
.channel-name {
font-size: var(--channel-name-font-size);
font-weight: 500;
color: var(--channel-name-color);
margin-bottom: var(--channel-name-margin-bottom);
}
.channel-follow {
font-size: var(--channel-follow-font-size);
color: var(--channel-follow-color);
}
}
.channel-arrow {
width: var(--channel-arrow-size);
height: var(--channel-arrow-size);
margin-left: var(--channel-arrow-margin-left);
}
}

View File

@@ -1,41 +0,0 @@
<template>
<view class="channel-header" @tap="handlerClick">
<image class="channel-avatar" :src="$util.img(value.avatarUrl)" mode="aspectFill"></image>
<view class="channel-info">
<view class="channel-name">{{ value.channelName }}</view>
<view class="channel-follow" v-if="value.showFollow">关注</view>
</view>
<image class="channel-arrow" v-if="arrowIcon" :src="$util.img(arrowIcon)" mode="aspectFill"></image>
</view>
</template>
<script>
import DiyMinx from './minx.js'
import { wechatChannelConfig } from './js/wechat-channel.js'
export default {
name: 'diy-channel-header',
props: {
value: {
type: Object,
required: true
}
},
mixins: [DiyMinx],
computed: {
arrowIcon() {
return wechatChannelConfig.icon.channelArrow
}
},
methods: {
handlerClick() {
this.$emit('header-tap', this.value);
}
}
};
</script>
<style scoped lang="scss">
@import './css/common-channel.scss';
</style>

View File

@@ -1,141 +0,0 @@
<template>
<view class="diy-wechat-channel" :style="channelWarpCss">
<!-- 视频号头部显示视频号名称头像等信息 -->
<diy-channel-header :value="value" @header-tap="handlerClick" />
<!-- 视频号视频显示视频封面标题等信息 -->
<diy-channel-video :value="value" @video-play="playVideo" />
</view>
</template>
<script>
/**
* 微信视频号组件
* 用于展示单个微信视频号的完整信息,包括头部信息和视频内容
* 支持点击头部进入视频号主页,点击视频播放视频
*/
import DiyMinx from './minx.js'
import { wechatChannelUtil } from './js/wechat-channel.js'
export default {
name: 'diy-channel',
props: {
/**
* 视频号数据对象
* @type {Object}
* @required
* @property {string} channelName - 视频号名称
* @property {string} avatarUrl - 视频号头像URL
* @property {string} videoTitle - 视频标题
* @property {string} coverUrl - 视频封面URL
* @property {string} feedId - 视频号内容ID用于播放视频
* @property {number} viewCount - 视频观看次数
* @property {boolean} showFollow - 是否显示关注按钮
* @property {string} componentAngle - 组件圆角类型可选值round
* @property {number} topAroundRadius - 顶部圆角半径
* @property {number} bottomAroundRadius - 底部圆角半径
* @property {boolean} embedMode - 是否启用嵌入式播放
* @property {boolean} showViewCount - 是否显示观看次数
* @property {string} finderUserName - 视频号ID
* @property {string} feedToken - 视频token用于嵌入式播放
*/
value: {
type: Object,
required: true
}
},
data() {
return {};
},
created() {
// 组件创建时的初始化逻辑
},
mixins: [DiyMinx],
watch: {
/**
* 组件刷新监听
* 当组件需要刷新时触发
* @param {*} nval - 新值
*/
componentRefresh: function (nval) { }
},
computed: {
/**
* 组件容器样式
* 根据配置动态生成样式字符串,主要处理圆角样式
* @returns {string} 样式字符串
*/
channelWarpCss: function () {
var obj = '';
if (this.value.componentAngle == 'round') {
obj += 'border-top-left-radius:' + this.value.topAroundRadius * 2 + 'rpx;';
obj += 'border-top-right-radius:' + this.value.topAroundRadius * 2 + 'rpx;';
obj += 'border-bottom-left-radius:' + this.value.bottomAroundRadius * 2 + 'rpx;';
obj += 'border-bottom-right-radius:' + this.value.bottomAroundRadius * 2 + 'rpx;';
}
return obj;
}
},
methods: {
/**
* 处理头部点击事件
* 触发 channel-tap 事件,用于跳转到视频号主页
*/
async handlerClick() {
await this.__$emitEvent({
eventName: 'channel-tap',
data: this.value,
promiseCallback: (event, handler, awaitedResult) => {
if (!awaitedResult) return;
}
})
},
/**
* 处理视频播放事件
* 触发 video-play 事件,并在微信小程序中调用视频播放接口
*/
async playVideo() {
await this.__$emitEvent({
eventName: 'video-play',
data: this.value,
promiseCallback: async (event, handler, awaitedResult) => {
if (!awaitedResult) return;
try {
// #ifdef MP-WEIXIN
await wechatChannelUtil.playVideo(this.value);
// #endif
} catch (err) {
console.error('打开视频号失败', err);
}
}
})
}
}
};
</script>
<style scoped lang="scss">
@import './css/common-channel.scss';
.diy-wechat-channel {
width: 100%;
background-color: #fff;
border-radius: 12rpx;
overflow: hidden;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
}
.channel-video {
position: relative;
}
.video-cover {
width: 100%;
height: 320rpx;
object-fit: cover;
}
.video-info {
padding: 16rpx;
}
</style>

View File

@@ -251,12 +251,7 @@
<diy-icon :value="item"></diy-icon> <diy-icon :value="item"></diy-icon>
</template> </template>
<template v-if="item.componentName == 'Channel'"> <template v-if="['ChannelList', 'WechatChannel'].includes(item.componentName)">
<!-- 视频号 -->
<diy-channel :value="item"></diy-channel>
</template>
<template v-if="item.componentName == 'ChannelList'">
<!-- 视频号列表 --> <!-- 视频号列表 -->
<diy-channel-list :value="item"></diy-channel-list> <diy-channel-list :value="item"></diy-channel-list>
</template> </template>

View File

@@ -102,29 +102,7 @@
## 3. 组件使用 ## 3. 组件使用
### 3.1 视频号头部组件 (diy-channel-header.vue) ### 3.1 视频号视频卡片组件 (diy-channel-video.vue)
#### 基本用法
```vue
<diy-channel-header :value="headerData" @header-tap="handlerHeaderClick" />
```
#### 属性说明
| 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| channelName | String | "" | 视频号名称 |
| avatarUrl | String | "" | 视频号头像URL |
| showFollow | Boolean | false | 是否显示关注按钮 |
#### 事件说明
| 事件名 | 说明 | 参数 |
|--------|------|------|
| header-tap | 点击头部区域时触发 | 视频号数据对象 |
### 3.2 视频号视频卡片组件 (diy-channel-video.vue)
#### 基本用法 #### 基本用法
@@ -136,13 +114,15 @@
| 属性名 | 类型 | 默认值 | 说明 | | 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------| |--------|------|--------|------|
| value | Object | {} | 视频数据对象 | | value | Object | 必填 | 视频数据对象 |
| listMode | Boolean | false | 是否为列表模式 | | listMode | Boolean | false | 是否为列表模式 |
| videoHeight | Number | 220 | 视频高度(仅适用于嵌入式播放) | | videoHeight | Number | 220 | 视频高度(仅适用于嵌入式播放) |
| titleLineClamp | Number | 1 | 标题显示行数 | | titleLineClamp | Number | 1 | 标题显示行数 |
| showPlayBtn | Boolean | true | 是否显示播放按钮 | | showPlayBtn | Boolean | true | 是否显示播放按钮 |
| aspectRatio | String | '16:9' | 视频比例,可选值:'16:9', '3:4' |
| coverStyle | Object | {} | 视频封面图样式 | | coverStyle | Object | {} | 视频封面图样式 |
| playBtnStyle | Object | {} | 播放按钮样式 | | playBtnStyle | Object | {} | 播放按钮样式 |
| autoPlay | Boolean | false | 是否自动播放(仅适用于嵌入式播放) |
#### value对象属性说明 #### value对象属性说明
@@ -163,45 +143,7 @@
|--------|------|------| |--------|------|------|
| video-play | 点击视频播放时触发 | 视频数据对象 | | video-play | 点击视频播放时触发 | 视频数据对象 |
### 3.3 单个视频号组件 (diy-channel.vue) ### 3.2 视频号列表组件 (diy-channel-list.vue)
#### 基本用法
```vue
<diy-channel :value="channelData" />
```
#### 属性说明
| 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| channelName | String | "" | 视频号名称 |
| avatarUrl | String | "" | 视频号头像URL |
| videoTitle | String | "" | 视频标题 |
| coverUrl | String | "" | 视频封面URL |
| feedId | String | "" | 视频号内容ID用于播放视频 |
| viewCount | Number | 0 | 视频观看次数 |
| showFollow | Boolean | false | 是否显示关注按钮 |
| componentAngle | String | "" | 组件圆角类型可选值round |
| topAroundRadius | Number | 0 | 顶部圆角半径 |
| bottomAroundRadius | Number | 0 | 底部圆角半径 |
| embedMode | Boolean | false | 是否启用嵌入式播放 |
| showViewCount | Boolean | false | 是否显示观看次数 |
| finderUserName | String | "" | 视频号ID用于嵌入式播放 |
| feedToken | String | "" | 视频token用于嵌入式播放 |
| titleLineClamp | Number | 1 | 标题显示行数 |
| showPlayBtn | Boolean | true | 是否显示播放按钮 |
| coverStyle | Object | {} | 视频封面图样式 |
| playBtnStyle | Object | {} | 播放按钮样式 |
#### 事件说明
| 事件名 | 说明 | 参数 |
|--------|------|------|
| channel-tap | 点击视频号头像或名称时触发 | 视频号数据对象 |
| video-play | 点击视频播放时触发 | 视频号数据对象 |
### 3.4 视频号列表组件 (diy-channel-list.vue)
#### 基本用法 #### 基本用法
@@ -213,28 +155,30 @@
| 属性名 | 类型 | 默认值 | 说明 | | 属性名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------| |--------|------|--------|------|
| list | Array | [] | 视频号列表数据 | | value | Object | 必填 | 组件配置数据 |
| rowCount | Number | 2 | 每行显示的视频号数量 | | value.list | Array | [] | 视频号列表数据 |
| showStyle | String | "fixed" | 显示样式可选值fixed, singleSlide | | value.rowCount | Number | 2 | 每行显示的视频号数量 |
| mode | String | "" | 显示模式 | | value.showStyle | String | "fixed" | 显示样式可选值fixed, singleSlide |
| font | Object | {} | 字体样式配置 | | value.mode | String | "" | 显示模式 |
| componentBgColor | String | "#fff" | 组件背景颜色 | | value.font | Object | {} | 字体样式配置 |
| componentAngle | String | "" | 组件圆角类型可选值round | | value.componentBgColor | String | "#fff" | 组件背景颜色 |
| topAroundRadius | Number | 0 | 顶部圆角半径 | | value.componentAngle | String | "" | 组件圆角类型可选值round |
| bottomAroundRadius | Number | 0 | 部圆角半径 | | value.topAroundRadius | Number | 0 | 部圆角半径 |
| ornament | Object | {} | 装饰样式配置 | | value.bottomAroundRadius | Number | 0 | 底部圆角半径 |
| titleLineClamp | Number | 1 | 标题显示行数 | | value.ornament | Object | {} | 装饰样式配置 |
| showPlayBtn | Boolean | true | 是否显示播放按钮 | | value.titleLineClamp | Number | 1 | 标题显示行数 |
| coverStyle | Object | {} | 视频封面图样式 | | value.showPlayBtn | Boolean | true | 是否显示播放按钮 |
| playBtnStyle | Object | {} | 播放按钮样式 | | value.aspectRatio | String | '16:9' | 视频比例,可选值:'16:9', '3:4' |
| imageSize | Number | 0 | 图片尺寸(仅在特定模式下使用) | | value.coverStyle | Object | {} | 视频封面图样式 |
| pageCount | Number | 1 | 每页显示的视频数量 | | value.playBtnStyle | Object | {} | 播放按钮样式 |
| carousel | Object | {} | 轮播配置 | | value.imageSize | Number | 0 | 图片尺寸(仅在特定模式下使用) |
| carousel.type | String | "" | 轮播类型可选值default, hide | | value.pageCount | Number | 1 | 每页显示的视频数量 |
| carousel.autoplay | Boolean | false | 是否自动播放 | | value.carousel | Object | {} | 轮播配置 |
| carousel.interval | Number | 3000 | 自动播放间隔,单位毫秒 | | value.carousel.type | String | "" | 轮播类型可选值default, hide |
| carousel.duration | Number | 500 | 切换动画时长,单位毫秒 | | value.carousel.autoplay | Boolean | false | 是否自动播放 |
| carousel.circular | Boolean | false | 是否循环播放 | | value.carousel.interval | Number | 3000 | 自动播放间隔,单位毫秒 |
| value.carousel.duration | Number | 500 | 切换动画时长,单位毫秒 |
| value.carousel.circular | Boolean | false | 是否循环播放 |
#### list数组项说明 #### list数组项说明
@@ -428,6 +372,7 @@ if (typeof wx !== 'undefined' && wx.openChannelsActivity) {
- 可通过组件的 `componentAngle`、`topAroundRadius`、`bottomAroundRadius` 等属性调整组件样式 - 可通过组件的 `componentAngle`、`topAroundRadius`、`bottomAroundRadius` 等属性调整组件样式
- 可通过 `componentBgColor` 属性调整组件背景颜色 - 可通过 `componentBgColor` 属性调整组件背景颜色
- 可通过 `font` 属性调整字体样式 - 可通过 `font` 属性调整字体样式
- 可通过 `aspectRatio` 属性调整视频比例,支持 '16:9' 和 '3:4' 两种比例
### 6.6 环境兼容性问题 ### 6.6 环境兼容性问题
@@ -489,24 +434,7 @@ if (typeof wx !== 'undefined' && wx.openChannelsActivity) {
## 7. 示例代码 ## 7. 示例代码
### 7.1 视频号头部组件示例 ### 7.1 视频号视频卡片组件示例
```javascript
// 视频号头部数据
const headerData = {
channelName: "示例视频号",
avatarUrl: "https://example.com/avatar.jpg",
showFollow: true
};
// 头部点击事件处理
function handlerHeaderClick(data) {
console.log("头部被点击", data);
// 可以在这里处理跳转到视频号主页等逻辑
}
```
### 7.2 视频号视频卡片组件示例
```javascript ```javascript
// 视频卡片数据 // 视频卡片数据
@@ -529,7 +457,7 @@ function handlerVideoPlay(data) {
} }
``` ```
### 7.3 单个视频号示例 ### 7.2 单个视频号示例
```javascript ```javascript
// 单个视频号数据 // 单个视频号数据
@@ -550,6 +478,7 @@ const channelData = {
feedToken: "example_feed_token", feedToken: "example_feed_token",
titleLineClamp: 2, titleLineClamp: 2,
showPlayBtn: true, showPlayBtn: true,
aspectRatio: "16:9",
coverStyle: { coverStyle: {
width: "100%", width: "100%",
height: "0", height: "0",
@@ -564,7 +493,7 @@ const channelData = {
}; };
``` ```
### 7.4 视频号列表示例 ### 7.3 视频号列表示例
```javascript ```javascript
// 视频号列表数据 // 视频号列表数据
@@ -608,6 +537,7 @@ const channelListData = {
ornament: {}, ornament: {},
titleLineClamp: 2, titleLineClamp: 2,
showPlayBtn: true, showPlayBtn: true,
aspectRatio: "16:9",
coverStyle: { coverStyle: {
width: "100%", width: "100%",
height: "0", height: "0",