完成我的页和搜索页,完成首页滑动后的搜索框样式

This commit is contained in:
田岩
2025-06-16 20:15:01 +08:00
parent 6a0616ae01
commit 10ede62c73
58 changed files with 2558 additions and 975 deletions
+33 -39
View File
@@ -1,48 +1,42 @@
<template>
<view class="nav-bar-div" v-if="isEnabled" :style="{height: height, backgroundColor: backgroundColor}">
<!-- 导航栏内容 -->
<view class="nav-bar-div" >
<view class="nav-bar" v-if="is_fixed" :style="{ backgroundColor: backgroundColor }"></view>
<view class="nav-bar-seat" v-if="is_seat" :style="{ backgroundColor: backgroundColor }"></view>
</view>
</template>
<script>
export default {
name: 'nav-bar',
props: {
isEnabled: {
type: Boolean,
default: true
},
height: {
type: String,
default: 'var(--status-bar-height)'
},
backgroundColor: {
type: String,
default: 'transparent' // 默认背景颜色为白色
}
<script setup>
const props = defineProps({
is_fixed: {
type: Boolean,
default: true
},
created() {
// 可以在这里添加状态栏高度计算逻辑
// const systemInfo = uni.getSystemInfoSync()
// this.statusBarHeight = systemInfo.statusBarHeight + 'px'
is_seat: {
type: Boolean,
default: true
},
data() {
return {
// statusBarHeight: '0px'
}
},
methods: {
backgroundColor: {
type: String,
default: 'transparent'
}
}
})
</script>
<style lang="scss" scoped>
.nav-bar-div {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 999;
// 可以添加其他默认样式
}
</style>
.nav-bar {
width: 100%;
height: var(--status-bar-height);
position: fixed;
}
.nav-bar-seat {
width: 100%;
height: var(--status-bar-height);
}
.nav-bar-div {
z-index: 1900;
width: 100%;
position: relative;
}
</style>
+11 -1
View File
@@ -42,7 +42,8 @@
"navigationBarTitleText": "我的",
"app-plus": {
"titleNView": false
}
},
"enablePullDownRefresh": true
}
},
{
@@ -71,6 +72,15 @@
"titleNView": false
}
}
},
{
"path": "pages/search/search",
"style": {
"navigationBarTitleText": "",
"app-plus": {
"titleNView": false
}
}
}
],
"tabBar": {
+20
View File
@@ -0,0 +1,20 @@
// 静态样式配置
export const customStyles = {
backgroundColor: "#DCE9FF",
paddingLeft: "40rpx",
paddingTop: "5px",
paddingBottom: "5px",
}
export const fixedCustomStyles = {
backgroundColor: "#ffffff",
paddingLeft: "40rpx",
paddingTop: "5px",
paddingBottom: "5px",
border: "none"
}
export const placeholderStyle = 'color:#76A3EB;font-size:26rpx'
export const suffixIconStyle = {
color: "#2c8ef2",
fontSize: "28px"
}
+173 -68
View File
@@ -1,9 +1,25 @@
<template>
<view class="main_div max_page">
<nav-bar></nav-bar>
<nav-bar :is_seat="false" :backgroundColor="bgOpacity"></nav-bar>
<view class="bg_div">
<!-- 背景图 -->
<image src="@/static/images/index/bg.png" class="bg_img"></image>
<view class="fixed_search_div" v-show="opacity" :style="{ opacity: opacity }">
<view class="fixed_search_input_div" @click="goto_search_page">
<uv-input shape="circle" :customStyle="fixedCustomStyles"
placeholderStyle='color:#999999;font-size:26rpx' placeholder="请输入关键字" suffixIcon="search"
:suffixIconStyle="suffixIconStyle" :readonly="true">
</uv-input>
</view>
<view class="message_div">
<image src="@/static/images/index/message_b.png" class="message_img"></image>
<view class="message_text">消息</view>
<view class="message_num">
30
</view>
</view>
</view>
<!-- 文字logo -->
<view class="title_logo" @click="common.navigateTo('/pages/login/login')">
<image src="@/static/images/index/logo_text.png" class="log_img"></image>
@@ -11,8 +27,8 @@
</view>
<!-- 搜索框 -->
<view class="search_div">
<uv-input shape="circle" :customStyle="customStyles" :placeholderStyle="placeholderStyle"
placeholder="请输入关键字" suffixIcon="search" :suffixIconStyle="suffixIconStyle">
<uv-input shape="circle" @click="goto_search_page" :customStyle="customStyles" :placeholderStyle="placeholderStyle"
placeholder="请输入关键字" suffixIcon="search" :suffixIconStyle="suffixIconStyle" :readonly="true">
</uv-input>
<view class="message_div">
<image src="@/static/images/index/message.png" class="message_img"></image>
@@ -35,24 +51,26 @@
</view>
<!-- 学习时长 -->
<view class="study_duration_div">
<view class="item">
<view class="top">年度学习时长</view>
<view class="bottom">
<uv-count-to :startVal="0" :endVal="256" :useEasing="true" :decimals="0"></uv-count-to>h
<uv-count-to :startVal="150" :endVal="256.2" :useEasing="true" :decimals="1"></uv-count-to>h
</view>
</view>
<view class="item">
<view class="top">累计训练时长</view>
<view class="bottom">
<uv-count-to :startVal="0" :endVal="224" :useEasing="true"></uv-count-to>h</view>
<uv-count-to :startVal="100" :endVal="224.5" :useEasing="true" :decimals="1"></uv-count-to>h
</view>
</view>
<view class="item">
<view class="top">累计考试次数</view>
<view class="bottom"><uv-count-to :startVal="0" :endVal="25" :useEasing="true"></uv-count-to></view>
<view class="bottom"><uv-count-to :startVal="0" :endVal="25" :useEasing="true"></uv-count-to>
</view>
</view>
</view>
</view>
<!-- 8个导航 -->
<view class="navigation_div">
<view class="group">
<view class="item">
@@ -93,8 +111,8 @@
</view>
<!-- 热门课程分模块标题 -->
<view class="module_title_div">
<view class="icon">
<image class="img_100" src="@/static/images/index/hot.png"></image>
<view class="icon icon_1">
<image class="img" src="@/static/images/index/hot.png"></image>
</view>
<view class="text font_pf">热门课程</view>
</view>
@@ -126,8 +144,8 @@
<!-- 推荐课程分模块标题 -->
<view class="module_title_div">
<view class="icon">
<image class="img_100" src="@/static/images/index/recommend.png"></image>
<view class="icon icon_2">
<image class="img" src="@/static/images/index/recommend.png"></image>
</view>
<view class="text font_pf">推荐课程</view>
</view>
@@ -156,11 +174,10 @@
</view>
</scroll-view>
</view>
<!-- 最新课程分模块标题 -->
<view class="module_title_div">
<view class="icon">
<image class="img_100" src="@/static/images/index/new.png"></image>
<view class="icon icon_3">
<image class="img" src="@/static/images/index/new.png"></image>
</view>
<view class="text font_pf">最新课程</view>
</view>
@@ -193,37 +210,47 @@
<uv-divider text='我是有底线的' lineColor="#9cB0DC" :hairline="true"></uv-divider>
</view>
</view>
<tabbar-shadow></tabbar-shadow>
</view>
</template>
<script setup>
import {
computed,
onMounted,
ref
} from 'vue'
import {
onShow
onShow,
onPageScroll
} from '@dcloudio/uni-app'
import {
customStyles,
fixedCustomStyles,
placeholderStyle,
suffixIconStyle
} from './index.js'
import common from '@/common/common'
import {
getStatisticsData
} from '@/api/index.js'
// 静态样式配置
const customStyles = {
backgroundColor: "#DCE9FF",
paddingLeft: "40rpx",
paddingTop: "5px",
paddingBottom: "5px",
}
const placeholderStyle = 'color:#76A3EB;font-size:26rpx'
const suffixIconStyle = {
color: "#2c8ef2",
fontSize: "28px"
}
const scrollTop = ref(0);
// 计算透明度
const opacity = computed(() => {
if (scrollTop.value <= 130) return 0;
return Math.min(3, (scrollTop.value - 130) / 30);
});
const bgOpacity = computed(() => {
return `rgba(246,248,255,${opacity.value})`;
});
// 首页滑动事件监听
onPageScroll((e) => {
scrollTop.value = e.scrollTop
})
// 滚动消息
const notice_text = ref(['绿色金融政策解析与商业银行绿色水水水水水水水水水水水水水', '绿色金融政策解析与商业银行红色'])
// 热门课程
const hot_class_list = ref([{
img: '',
title: '',
@@ -252,31 +279,30 @@
// 暂时设置10分钟
if (time_now - statistics_data['request_time'] > 600 * 1000) {
statistics_data['request_time'] = time_now
const data = await getStatisticsData()
// const data = await getStatisticsData()
// console.log(data);
}
}
const goto_search_page = () => {
common.navigateTo('/pages/search/search')
}
onShow(() => {
get_statistics_data() // 获取首页统计数据
console.log('onShow');
})
onMounted(() => {
setTimeout(() => {
hot_class_list.value = [{
img: '11',
title: '最新课程最新课程最新课程程最新课程程最新课程程最新课程',
date: '2025/4/21',
num: '44'
},
{
img: '1124',
title: '最新课程',
date: '2025/4/21',
num: '31'
}
]
}, 1000)
img: '11',
title: '最新课程最新课程最新课程程最新课程程最新课程程最新课程',
date: '2025/4/21',
num: '44'
}, {
img: '',
title: '',
date: '',
num: ''
}]
}, 100)
})
</script>
@@ -287,21 +313,19 @@
// :deep(.uni-scroll-view-content) {
// display: flex;
// }
// :deep(.uv-skeleton__wrapper__avatar) {
// height: 146rpx !important;
// width: 146rpx !important;
// border-radius: 16rpx;
// }
// 设置骨架屏左侧图片框的大小,设置成和图片大小一致,否则横向滑动会串行(对不齐)
:deep(.uv-skeleton__wrapper__avatar) {
height: 146rpx !important;
width: 146rpx !important;
border-radius: 16rpx;
}
// 底线样式
.bottom_line {
margin: 0 auto;
width: 240rpx;
}
// 热门课程等三个横向滑动模块的样式
.hot_class_div {
margin-left: $bg-margin-left;
@@ -392,7 +416,7 @@
}
}
.bg_div {
height: 100%;
padding-bottom: 30rpx;
@@ -425,6 +449,62 @@
}
}
// 固定的搜索框
.fixed_search_div {
position: fixed;
background-color: #f6f8ff;
margin-top: var(--status-bar-height);
padding: 0 $bg-margin-left 20rpx $bg-margin-left;
height: 70rpx;
width: calc(100% - 2* $bg-margin-left);
z-index: 100;
display: flex;
align-items: center;
border-bottom: 4rpx solid #efefef;
.fixed_search_input_div {
flex: 1;
}
.message_div {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
margin-left: 33rpx;
.message_img {
width: 32rpx;
height: 36rpx;
}
.message_text {
margin-top: 4rpx;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 22rpx;
color: #333333;
line-height: 24rpx;
white-space: nowrap;
}
.message_num {
position: absolute;
top: 2rpx;
right: -4rpx;
padding: 1rpx 1rpx 1rpx 2rpx;
background-color: #ff1926;
border-radius: 10rpx;
width: 22rpx;
height: 20rpx;
font-size: 10rpx;
color: #ffffff;
}
}
}
// 搜索框
.search_div {
margin-top: 26rpx;
@@ -486,24 +566,23 @@
font-style: normal;
display: flex;
align-items: center;
:deep(.uv-notice-bar) {
padding: 9px 2px;
}
:deep(.uv-notice__swiper__item__text) {
font-size: 20rpx !important;
}
:deep(.uv-notice__left-icon) .uv-icon__icon {
font-size: 24rpx !important;
}
// ::v-deep .u-notice-bar {
// padding: 14rpx 0;
// font-size: 22rpx;
// }
// :deep(.u-notice__left-icon) {
// margin-right: 5rpx;
@@ -536,7 +615,7 @@
display: flex;
justify-content: space-around;
z-index: 20;
.item {
flex: 1;
// background-color: red;
@@ -553,7 +632,7 @@
text-align: center;
font-style: normal;
}
.bottom {
margin-top: 5%;
font-weight: bold;
@@ -563,8 +642,9 @@
text-align: left;
font-style: normal;
text-align: center;
// 数字滚动组件
:deep(.uv-count-num) {
:deep(.uv-count-num) {
font-weight: bold !important;
font-size: 50rpx !important;
color: #000000 !important;
@@ -623,16 +703,41 @@
align-items: center;
.icon {
width: 34rpx;
height: 38rpx;
margin-right: 6rpx;
}
.icon_1 {
.img {
width: 31rpx;
height: 36rpx;
}
}
.icon_2 {
margin-top: 10rpx;
.img {
width: 38rpx;
height: 38rpx;
}
}
.icon_3 {
// margin-top: 10rpx;
.img {
width: 38rpx;
height: 31rpx;
}
}
.title {
font-size: 34rpx;
color: #323E57;
font-weight: 700;
line-height: 46rpx;
text-align: left;
}
+23 -10
View File
@@ -50,12 +50,10 @@
<view class="ysxy_tip font_pf">
已阅读并同意
<!-- #ifdef APP -->
<span class="ysxy_term"
@click="common.navigateTo('/pages/login/ysxy')">服务条款</span>
<span class="ysxy_term" @click="common.navigateTo('/pages/login/ysxy')">服务条款</span>
<!-- #endif -->
<!-- #ifndef APP -->
<span class="ysxy_term"
@click="common.navigateTo('/pages/login/ysxy')">服务条款</span>
<span class="ysxy_term" @click="common.navigateTo('/pages/login/ysxy')">服务条款</span>
<!-- #endif -->
<span class="ysxy_term">隐私权政策</span>
@@ -68,16 +66,16 @@
<script lang="ts" setup>
// import { v4 as uuid4 } from 'uuid'
import { ref, computed } from 'vue'
import { ref, computed, onMounted } from 'vue'
import common from '@/common/common'
import { useAccountLoginApp, queryCurrentUser } from '@/api/login.js'
import { encryptByAES } from '@/api/encryptAndDecryptData.js'
const show_password = ref<Boolean>(false)
const account = ref<string>('admin')
const password = ref<string>('123456')
const account = ref<string>('')
const password = ref<string>('')
const read_text_state = ref<Array<unknown>>([])
// 登录按钮状态
const login_button_status = computed<boolean>(() => !read_text_state.value.length)
@@ -91,11 +89,19 @@
common.loading('登录中')
const secretKey = 'EtBzqj+ln5tSTof1SDhpTg==';
const cipherText = encryptByAES(password.value, secretKey);
useAccountLoginApp({ loginName: account.value, password: cipherText }).then(async (res) => {
useAccountLoginApp({ loginName: account.value, password: cipherText }).then(async () => {
common.hideLoading()
common.msg('登录成功')
// 登陆成功,缓存账号密码
common.setPageCache('loginAccountData', {
account: account.value,
password: password.value
});
// setTimeout(() => {
// this.$common.reLaunch('/pages/homepage/index');
// }, this.GLOBAL_TIMER_SUBMIT_DELAY_TIME);
const pages = getCurrentPages()
if (pages.length ===1) { // 页面栈只有一页,没有返回页,那就返回首页
if (pages.length === 1) { // 页面栈只有一页,没有返回页,那就返回首页
common.switchTab('/pages/index/index')
} else {
common.navigateBack() // 返回登录的上一页
@@ -113,6 +119,13 @@
common.hideLoading()
}
}
onMounted(() => {
let loginAccountData = common.getPageCache('loginAccountData');
if (loginAccountData) {
account.value = loginAccountData.account;
password.value = loginAccountData.password;
}
})
</script>
<style lang="scss" scoped>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

+13
View File
@@ -0,0 +1,13 @@
## 1.0.52023-12-06
1. 修复uv-cell right-icon插槽编译到APP端不显示的BUG,问题来源:https://gitee.com/climblee/uv-ui/issues/I8LXZI
## 1.0.42023-09-19
1. 增加cellStyle参数,方便自定义单元格的样式
## 1.0.32023-07-03
去除插槽判断,避免某些平台不显示的BUG
## 1.0.22023-06-21
1. 优化
## 1.0.12023-05-16
1. 优化组件依赖,修改后无需全局引入,组件导入即可使用
2. 优化部分功能
## 1.0.02023-05-10
uv-cell 单元格
@@ -0,0 +1,15 @@
export default {
props: {
// 分组标题
title: {
type: String,
default: ''
},
// 是否显示外边框
border: {
type: Boolean,
default: true
},
...uni.$uv?.props?.cellGroup
}
}
@@ -0,0 +1,63 @@
<template>
<view :style="[$uv.addStyle(customStyle)]" :class="[customClass]" class="uv-cell-group">
<view v-if="title" class="uv-cell-group__title">
<slot name="title">
<text class="uv-cell-group__title__text">{{ title }}</text>
</slot>
</view>
<view class="uv-cell-group__wrapper">
<uv-line v-if="border"></uv-line>
<slot />
</view>
</view>
</template>
<script>
import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
import props from './props.js';
/**
* cellGroup 单元格
* @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
* @tutorial https://www.uvui.cn/components/cell.html
*
* @property {String} title 分组标题
* @property {Boolean} border 是否显示外边框 (默认 true )
* @property {Object} customStyle 定义需要用到的外部样式
*
* @event {Function} click 点击cell列表时触发
* @example <uv-cell-group title="设置喜好">
*/
export default {
name: 'uv-cell-group',
mixins: [mpMixin, mixin, props]
}
</script>
<style lang="scss" scoped>
@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
$uv-cell-group-title-padding: 16px 16px 8px !default;
$uv-cell-group-title-font-size: 15px !default;
$uv-cell-group-title-line-height: 16px !default;
$uv-cell-group-title-color: $uv-main-color !default;
.uv-cell-group {
flex: 1;
&__title {
padding: $uv-cell-group-title-padding;
&__text {
font-size: $uv-cell-group-title-font-size;
line-height: $uv-cell-group-title-line-height;
color: $uv-cell-group-title-color;
}
}
&__wrapper {
position: relative;
}
}
</style>
@@ -0,0 +1,116 @@
export default {
props: {
// 标题
title: {
type: [String, Number],
default: ''
},
// 标题下方的描述信息
label: {
type: [String, Number],
default: ''
},
// 右侧的内容
value: {
type: [String, Number],
default: ''
},
// 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
icon: {
type: String,
default: ''
},
// 是否禁用cell
disabled: {
type: Boolean,
default: false
},
// 是否显示下边框
border: {
type: Boolean,
default: true
},
// 内容是否垂直居中(主要是针对右侧的value部分)
center: {
type: Boolean,
default: true
},
// 点击后跳转的URL地址
url: {
type: String,
default: ''
},
// 链接跳转的方式,内部使用的是uvui封装的route方法,可能会进行拦截操作
linkType: {
type: String,
default: 'navigateTo'
},
// 是否开启点击反馈(表现为点击时加上灰色背景)
clickable: {
type: Boolean,
default: false
},
// 是否展示右侧箭头并开启点击反馈
isLink: {
type: Boolean,
default: false
},
// 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
required: {
type: Boolean,
default: false
},
// 右侧的图标箭头
rightIcon: {
type: String,
default: 'arrow-right'
},
// 右侧箭头的方向,可选值为:left,up,down
arrowDirection: {
type: String,
default: ''
},
// 左侧图标样式
iconStyle: {
type: [Object, String],
default: () => {
return {}
}
},
// 右侧箭头图标的样式
rightIconStyle: {
type: [Object, String],
default: () => {
return {}
}
},
// 标题的样式
titleStyle: {
type: [Object, String],
default: () => {
return {}
}
},
// 单位元的大小,可选值为large
size: {
type: String,
default: ''
},
// 点击cell是否阻止事件传播
stop: {
type: Boolean,
default: true
},
// 标识符,cell被点击时返回
name: {
type: [Number, String],
default: ''
},
// 单元格自定义样式
cellStyle: {
type: [Object, String],
default: () => {}
},
...uni.$uv?.props?.cell
}
}
@@ -0,0 +1,209 @@
<template>
<view class="uv-cell" :class="[customClass]" :style="[$uv.addStyle(customStyle)]"
:hover-class="(!disabled && (clickable || isLink)) ? 'uv-cell--clickable' : ''" :hover-stay-time="250"
@click="clickHandler">
<view class="uv-cell__body"
:class="[ center && 'uv-cell--center', size === 'large' && 'uv-cell__body--large']"
:style="[cellStyle]"
>
<view class="uv-cell__body__content">
<view class="uv-cell__left-icon-wrap">
<slot name="icon">
<uv-icon v-if="icon" :name="icon" :custom-style="iconStyle" :size="size === 'large' ? 22 : 18"></uv-icon>
</slot>
</view>
<view class="uv-cell__title">
<slot name="title">
<text v-if="title" class="uv-cell__title-text" :style="[titleTextStyle]"
:class="[disabled && 'uv-cell--disabled', size === 'large' && 'uv-cell__title-text--large']">{{ title }}</text>
</slot>
<slot name="label">
<text class="uv-cell__label" v-if="label"
:class="[disabled && 'uv-cell--disabled', size === 'large' && 'uv-cell__label--large']">{{ label }}</text>
</slot>
</view>
</view>
<slot name="value">
<text class="uv-cell__value"
:class="[disabled && 'uv-cell--disabled', size === 'large' && 'uv-cell__value--large']"
v-if="!$uv.test.empty(value)">{{ value }}</text>
</slot>
<view class="uv-cell__right-icon-wrap"
:class="[`uv-cell__right-icon-wrap--${arrowDirection}`]">
<slot name="right-icon">
<uv-icon v-if="isLink" :name="rightIcon" :custom-style="rightIconStyle" :color="disabled ? '#c8c9cc' : 'info'"
:size="size === 'large' ? 18 : 16"></uv-icon>
</slot>
</view>
</view>
<uv-line v-if="border"></uv-line>
</view>
</template>
<script>
import mpMixin from '@/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js'
import mixin from '@/uni_modules/uv-ui-tools/libs/mixin/mixin.js'
import props from './props.js';
/**
* cell 单元格
* @description cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
* @tutorial https://www.uvui.cn/components/cell.html
* @property {String | Number} title 标题
* @property {String | Number} label 标题下方的描述信息
* @property {String | Number} value 右侧的内容
* @property {String} icon 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
* @property {Boolean} disabled 是否禁用cell
* @property {Boolean} border 是否显示下边框 (默认 true )
* @property {Boolean} center 内容是否垂直居中(主要是针对右侧的value部分) (默认 false )
* @property {String} url 点击后跳转的URL地址
* @property {String} linkType 链接跳转的方式,内部使用的是uvui封装的route方法,可能会进行拦截操作 (默认 'navigateTo' )
* @property {Boolean} clickable 是否开启点击反馈(表现为点击时加上灰色背景) (默认 false )
* @property {Boolean} isLink 是否展示右侧箭头并开启点击反馈 (默认 false )
* @property {Boolean} required 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) (默认 false
* @property {String} rightIcon 右侧的图标箭头 (默认 'arrow-right'
* @property {String} arrowDirection 右侧箭头的方向,可选值为:left,up,down
* @property {Object | String} rightIconStyle 右侧箭头图标的样式
* @property {Object | String} titleStyle 标题的样式
* @property {Object | String} iconStyle 左侧图标样式
* @property {String} size 单位元的大小,可选值为 largenormalmini
* @property {Boolean} stop 点击cell是否阻止事件传播 (默认 true )
* @property {Object | String} cellStyle 单元格自定义样式
* @property {Object} customStyle 定义需要用到的外部样式
*
* @event {Function} click 点击cell列表时触发
* @example 该组件需要搭配cell-group组件使用,见官方文档示例
*/
export default {
name: 'uv-cell',
emits: ['click'],
mixins: [mpMixin, mixin, props],
computed: {
titleTextStyle() {
return this.$uv.addStyle(this.titleStyle)
}
},
methods: {
// 点击cell
clickHandler(e) {
if (this.disabled) return
this.$emit('click', {
name: this.name
})
// 如果配置了url(此props参数通过mixin引入)参数,跳转页面
this.openPage()
// 是否阻止事件传播
this.stop && this.preventEvent(e)
},
}
}
</script>
<style lang="scss" scoped>
@import '@/uni_modules/uv-ui-tools/libs/css/components.scss';
@import '@/uni_modules/uv-ui-tools/libs/css/color.scss';
$uv-cell-padding: 10px 15px !default;
$uv-cell-font-size: 15px !default;
$uv-cell-line-height: 24px !default;
$uv-cell-color: $uv-main-color !default;
$uv-cell-icon-size: 16px !default;
$uv-cell-title-font-size: 15px !default;
$uv-cell-title-line-height: 22px !default;
$uv-cell-title-color: $uv-main-color !default;
$uv-cell-label-font-size: 12px !default;
$uv-cell-label-color: $uv-tips-color !default;
$uv-cell-label-line-height: 18px !default;
$uv-cell-value-font-size: 14px !default;
$uv-cell-value-color: $uv-content-color !default;
$uv-cell-clickable-color: $uv-bg-color !default;
$uv-cell-disabled-color: #c8c9cc !default;
$uv-cell-padding-top-large: 13px !default;
$uv-cell-padding-bottom-large: 13px !default;
$uv-cell-value-font-size-large: 15px !default;
$uv-cell-label-font-size-large: 14px !default;
$uv-cell-title-font-size-large: 16px !default;
$uv-cell-left-icon-wrap-margin-right: 4px !default;
$uv-cell-right-icon-wrap-margin-left: 4px !default;
$uv-cell-title-flex: 1 !default;
$uv-cell-label-margin-top: 5px !default;
.uv-cell {
&__body {
@include flex();
/* #ifndef APP-NVUE */
box-sizing: border-box;
/* #endif */
padding: $uv-cell-padding;
font-size: $uv-cell-font-size;
color: $uv-cell-color;
&__content {
@include flex(row);
align-items: center;
flex: 1;
}
&--large {
padding-top: $uv-cell-padding-top-large;
padding-bottom: $uv-cell-padding-bottom-large;
}
}
&__left-icon-wrap,
&__right-icon-wrap {
@include flex();
align-items: center;
// height: $uv-cell-line-height;
font-size: $uv-cell-icon-size;
}
&__left-icon-wrap {
margin-right: $uv-cell-left-icon-wrap-margin-right;
}
&__right-icon-wrap {
margin-left: $uv-cell-right-icon-wrap-margin-left;
transition: transform 0.3s;
&--up {
transform: rotate(-90deg);
}
&--down {
transform: rotate(90deg);
}
}
&__title {
flex: $uv-cell-title-flex;
&-text {
font-size: $uv-cell-title-font-size;
line-height: $uv-cell-title-line-height;
color: $uv-cell-title-color;
&--large {
font-size: $uv-cell-title-font-size-large;
}
}
}
&__label {
margin-top: $uv-cell-label-margin-top;
font-size: $uv-cell-label-font-size;
color: $uv-cell-label-color;
line-height: $uv-cell-label-line-height;
&--large {
font-size: $uv-cell-label-font-size-large;
}
}
&__value {
text-align: right;
font-size: $uv-cell-value-font-size;
line-height: $uv-cell-line-height;
color: $uv-cell-value-color;
&--large {
font-size: $uv-cell-value-font-size-large;
}
}
&--clickable {
background-color: $uv-cell-clickable-color;
}
&--disabled {
color: $uv-cell-disabled-color;
/* #ifndef APP-NVUE */
cursor: not-allowed;
/* #endif */
}
&--center {
align-items: center;
}
}
</style>
+89
View File
@@ -0,0 +1,89 @@
{
"id": "uv-cell",
"displayName": "uv-cell 单元格 全面兼容小程序、nvue、vue2、vue3等多端",
"version": "1.0.5",
"description": "cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。",
"keywords": [
"uv-cell",
"uvui",
"uv-ui",
"单元格",
"设置页"
],
"repository": "",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"type": "component-vue",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "插件不采集任何数据",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [
"uv-ui-tools",
"uv-icon",
"uv-line"
],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "y"
},
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}
+11
View File
@@ -0,0 +1,11 @@
## Cell 单元格
> **组件名:uv-cell**
cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。
### <a href="https://www.uvui.cn/components/cell.html" target="_blank">查看文档</a>
### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui)
#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:<a href="https://ext.dcloud.net.cn/plugin?id=12287" target="_blank">uv-ui</a>、<a href="https://www.uvui.cn/components/addQQGroup.html" target="_blank">官方QQ群</a>
+3 -13
View File
@@ -2,24 +2,14 @@
"hash": "ddb2c76c",
"configHash": "29b76f39",
"lockfileHash": "b751b87c",
"browserHash": "4970fb6a",
"browserHash": "377c5def",
"optimized": {
"uuid": {
"src": "../../../../../node_modules/uuid/dist/esm-browser/index.js",
"file": "uuid.js",
"fileHash": "347d5f8e",
"needsInterop": false
},
"crypto-js": {
"src": "../../../../../node_modules/crypto-js/index.js",
"file": "crypto-js.js",
"fileHash": "ee0a0490",
"fileHash": "95462204",
"needsInterop": true
}
},
"chunks": {
"chunk-Y2F7D3TJ": {
"file": "chunk-Y2F7D3TJ.js"
}
}
"chunks": {}
}
-9
View File
@@ -1,9 +0,0 @@
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
export {
__commonJS
};
//# sourceMappingURL=chunk-Y2F7D3TJ.js.map
-7
View File
@@ -1,7 +0,0 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}
+4 -3
View File
@@ -1,6 +1,7 @@
import {
__commonJS
} from "./chunk-Y2F7D3TJ.js";
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
// E:/jlyh/tra-app/node_modules/crypto-js/core.js
var require_core = __commonJS({
File diff suppressed because one or more lines are too long
-549
View File
@@ -1,549 +0,0 @@
import "./chunk-Y2F7D3TJ.js";
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/max.js
var max_default = "ffffffff-ffff-ffff-ffff-ffffffffffff";
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/nil.js
var nil_default = "00000000-0000-0000-0000-000000000000";
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/regex.js
var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/validate.js
function validate(uuid) {
return typeof uuid === "string" && regex_default.test(uuid);
}
var validate_default = validate;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/parse.js
function parse(uuid) {
if (!validate_default(uuid)) {
throw TypeError("Invalid UUID");
}
let v;
return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, v >>> 16 & 255, v >>> 8 & 255, v & 255, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 255, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 255, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 255, (v = parseInt(uuid.slice(24, 36), 16)) / 1099511627776 & 255, v / 4294967296 & 255, v >>> 24 & 255, v >>> 16 & 255, v >>> 8 & 255, v & 255);
}
var parse_default = parse;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/stringify.js
var byteToHex = [];
for (let i = 0; i < 256; ++i) {
byteToHex.push((i + 256).toString(16).slice(1));
}
function unsafeStringify(arr, offset = 0) {
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
}
function stringify(arr, offset = 0) {
const uuid = unsafeStringify(arr, offset);
if (!validate_default(uuid)) {
throw TypeError("Stringified UUID is invalid");
}
return uuid;
}
var stringify_default = stringify;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/rng.js
var getRandomValues;
var rnds8 = new Uint8Array(16);
function rng() {
if (!getRandomValues) {
if (typeof crypto === "undefined" || !crypto.getRandomValues) {
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
}
getRandomValues = crypto.getRandomValues.bind(crypto);
}
return getRandomValues(rnds8);
}
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v1.js
var _state = {};
function v1(options, buf, offset) {
var _a;
let bytes;
const isV6 = (options == null ? void 0 : options._v6) ?? false;
if (options) {
const optionsKeys = Object.keys(options);
if (optionsKeys.length === 1 && optionsKeys[0] === "_v6") {
options = void 0;
}
}
if (options) {
bytes = v1Bytes(options.random ?? ((_a = options.rng) == null ? void 0 : _a.call(options)) ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);
} else {
const now = Date.now();
const rnds = rng();
updateV1State(_state, now, rnds);
bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? void 0 : _state.clockseq, isV6 ? void 0 : _state.node, buf, offset);
}
return buf ?? unsafeStringify(bytes);
}
function updateV1State(state, now, rnds) {
state.msecs ?? (state.msecs = -Infinity);
state.nsecs ?? (state.nsecs = 0);
if (now === state.msecs) {
state.nsecs++;
if (state.nsecs >= 1e4) {
state.node = void 0;
state.nsecs = 0;
}
} else if (now > state.msecs) {
state.nsecs = 0;
} else if (now < state.msecs) {
state.node = void 0;
}
if (!state.node) {
state.node = rnds.slice(10, 16);
state.node[0] |= 1;
state.clockseq = (rnds[8] << 8 | rnds[9]) & 16383;
}
state.msecs = now;
return state;
}
function v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {
if (rnds.length < 16) {
throw new Error("Random bytes length must be >= 16");
}
if (!buf) {
buf = new Uint8Array(16);
offset = 0;
} else {
if (offset < 0 || offset + 16 > buf.length) {
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
}
}
msecs ?? (msecs = Date.now());
nsecs ?? (nsecs = 0);
clockseq ?? (clockseq = (rnds[8] << 8 | rnds[9]) & 16383);
node ?? (node = rnds.slice(10, 16));
msecs += 122192928e5;
const tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296;
buf[offset++] = tl >>> 24 & 255;
buf[offset++] = tl >>> 16 & 255;
buf[offset++] = tl >>> 8 & 255;
buf[offset++] = tl & 255;
const tmh = msecs / 4294967296 * 1e4 & 268435455;
buf[offset++] = tmh >>> 8 & 255;
buf[offset++] = tmh & 255;
buf[offset++] = tmh >>> 24 & 15 | 16;
buf[offset++] = tmh >>> 16 & 255;
buf[offset++] = clockseq >>> 8 | 128;
buf[offset++] = clockseq & 255;
for (let n = 0; n < 6; ++n) {
buf[offset++] = node[n];
}
return buf;
}
var v1_default = v1;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v1ToV6.js
function v1ToV6(uuid) {
const v1Bytes2 = typeof uuid === "string" ? parse_default(uuid) : uuid;
const v6Bytes = _v1ToV6(v1Bytes2);
return typeof uuid === "string" ? unsafeStringify(v6Bytes) : v6Bytes;
}
function _v1ToV6(v1Bytes2) {
return Uint8Array.of((v1Bytes2[6] & 15) << 4 | v1Bytes2[7] >> 4 & 15, (v1Bytes2[7] & 15) << 4 | (v1Bytes2[4] & 240) >> 4, (v1Bytes2[4] & 15) << 4 | (v1Bytes2[5] & 240) >> 4, (v1Bytes2[5] & 15) << 4 | (v1Bytes2[0] & 240) >> 4, (v1Bytes2[0] & 15) << 4 | (v1Bytes2[1] & 240) >> 4, (v1Bytes2[1] & 15) << 4 | (v1Bytes2[2] & 240) >> 4, 96 | v1Bytes2[2] & 15, v1Bytes2[3], v1Bytes2[8], v1Bytes2[9], v1Bytes2[10], v1Bytes2[11], v1Bytes2[12], v1Bytes2[13], v1Bytes2[14], v1Bytes2[15]);
}
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/md5.js
function md5(bytes) {
const words = uint8ToUint32(bytes);
const md5Bytes = wordsToMd5(words, bytes.length * 8);
return uint32ToUint8(md5Bytes);
}
function uint32ToUint8(input) {
const bytes = new Uint8Array(input.length * 4);
for (let i = 0; i < input.length * 4; i++) {
bytes[i] = input[i >> 2] >>> i % 4 * 8 & 255;
}
return bytes;
}
function getOutputLength(inputLength8) {
return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;
}
function wordsToMd5(x, len) {
const xpad = new Uint32Array(getOutputLength(len)).fill(0);
xpad.set(x);
xpad[len >> 5] |= 128 << len % 32;
xpad[xpad.length - 1] = len;
x = xpad;
let a = 1732584193;
let b = -271733879;
let c = -1732584194;
let d = 271733878;
for (let i = 0; i < x.length; i += 16) {
const olda = a;
const oldb = b;
const oldc = c;
const oldd = d;
a = md5ff(a, b, c, d, x[i], 7, -680876936);
d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5gg(b, c, d, a, x[i], 20, -373897302);
a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5hh(d, a, b, c, x[i], 11, -358537222);
c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5ii(a, b, c, d, x[i], 6, -198630844);
d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safeAdd(a, olda);
b = safeAdd(b, oldb);
c = safeAdd(c, oldc);
d = safeAdd(d, oldd);
}
return Uint32Array.of(a, b, c, d);
}
function uint8ToUint32(input) {
if (input.length === 0) {
return new Uint32Array();
}
const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);
for (let i = 0; i < input.length; i++) {
output[i >> 2] |= (input[i] & 255) << i % 4 * 8;
}
return output;
}
function safeAdd(x, y) {
const lsw = (x & 65535) + (y & 65535);
const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return msw << 16 | lsw & 65535;
}
function bitRotateLeft(num, cnt) {
return num << cnt | num >>> 32 - cnt;
}
function md5cmn(q, a, b, x, s, t) {
return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
}
function md5ff(a, b, c, d, x, s, t) {
return md5cmn(b & c | ~b & d, a, b, x, s, t);
}
function md5gg(a, b, c, d, x, s, t) {
return md5cmn(b & d | c & ~d, a, b, x, s, t);
}
function md5hh(a, b, c, d, x, s, t) {
return md5cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5ii(a, b, c, d, x, s, t) {
return md5cmn(c ^ (b | ~d), a, b, x, s, t);
}
var md5_default = md5;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v35.js
function stringToBytes(str) {
str = unescape(encodeURIComponent(str));
const bytes = new Uint8Array(str.length);
for (let i = 0; i < str.length; ++i) {
bytes[i] = str.charCodeAt(i);
}
return bytes;
}
var DNS = "6ba7b810-9dad-11d1-80b4-00c04fd430c8";
var URL = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
function v35(version2, hash, value, namespace, buf, offset) {
const valueBytes = typeof value === "string" ? stringToBytes(value) : value;
const namespaceBytes = typeof namespace === "string" ? parse_default(namespace) : namespace;
if (typeof namespace === "string") {
namespace = parse_default(namespace);
}
if ((namespace == null ? void 0 : namespace.length) !== 16) {
throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");
}
let bytes = new Uint8Array(16 + valueBytes.length);
bytes.set(namespaceBytes);
bytes.set(valueBytes, namespaceBytes.length);
bytes = hash(bytes);
bytes[6] = bytes[6] & 15 | version2;
bytes[8] = bytes[8] & 63 | 128;
if (buf) {
offset = offset || 0;
for (let i = 0; i < 16; ++i) {
buf[offset + i] = bytes[i];
}
return buf;
}
return unsafeStringify(bytes);
}
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v3.js
function v3(value, namespace, buf, offset) {
return v35(48, md5_default, value, namespace, buf, offset);
}
v3.DNS = DNS;
v3.URL = URL;
var v3_default = v3;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/native.js
var randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
var native_default = { randomUUID };
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v4.js
function v4(options, buf, offset) {
var _a;
if (native_default.randomUUID && !buf && !options) {
return native_default.randomUUID();
}
options = options || {};
const rnds = options.random ?? ((_a = options.rng) == null ? void 0 : _a.call(options)) ?? rng();
if (rnds.length < 16) {
throw new Error("Random bytes length must be >= 16");
}
rnds[6] = rnds[6] & 15 | 64;
rnds[8] = rnds[8] & 63 | 128;
if (buf) {
offset = offset || 0;
if (offset < 0 || offset + 16 > buf.length) {
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
}
for (let i = 0; i < 16; ++i) {
buf[offset + i] = rnds[i];
}
return buf;
}
return unsafeStringify(rnds);
}
var v4_default = v4;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/sha1.js
function f(s, x, y, z) {
switch (s) {
case 0:
return x & y ^ ~x & z;
case 1:
return x ^ y ^ z;
case 2:
return x & y ^ x & z ^ y & z;
case 3:
return x ^ y ^ z;
}
}
function ROTL(x, n) {
return x << n | x >>> 32 - n;
}
function sha1(bytes) {
const K = [1518500249, 1859775393, 2400959708, 3395469782];
const H = [1732584193, 4023233417, 2562383102, 271733878, 3285377520];
const newBytes = new Uint8Array(bytes.length + 1);
newBytes.set(bytes);
newBytes[bytes.length] = 128;
bytes = newBytes;
const l = bytes.length / 4 + 2;
const N = Math.ceil(l / 16);
const M = new Array(N);
for (let i = 0; i < N; ++i) {
const arr = new Uint32Array(16);
for (let j = 0; j < 16; ++j) {
arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];
}
M[i] = arr;
}
M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);
M[N - 1][14] = Math.floor(M[N - 1][14]);
M[N - 1][15] = (bytes.length - 1) * 8 & 4294967295;
for (let i = 0; i < N; ++i) {
const W = new Uint32Array(80);
for (let t = 0; t < 16; ++t) {
W[t] = M[i][t];
}
for (let t = 16; t < 80; ++t) {
W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);
}
let a = H[0];
let b = H[1];
let c = H[2];
let d = H[3];
let e = H[4];
for (let t = 0; t < 80; ++t) {
const s = Math.floor(t / 20);
const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;
e = d;
d = c;
c = ROTL(b, 30) >>> 0;
b = a;
a = T;
}
H[0] = H[0] + a >>> 0;
H[1] = H[1] + b >>> 0;
H[2] = H[2] + c >>> 0;
H[3] = H[3] + d >>> 0;
H[4] = H[4] + e >>> 0;
}
return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);
}
var sha1_default = sha1;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v5.js
function v5(value, namespace, buf, offset) {
return v35(80, sha1_default, value, namespace, buf, offset);
}
v5.DNS = DNS;
v5.URL = URL;
var v5_default = v5;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v6.js
function v6(options, buf, offset) {
options ?? (options = {});
offset ?? (offset = 0);
let bytes = v1_default({ ...options, _v6: true }, new Uint8Array(16));
bytes = v1ToV6(bytes);
if (buf) {
for (let i = 0; i < 16; i++) {
buf[offset + i] = bytes[i];
}
return buf;
}
return unsafeStringify(bytes);
}
var v6_default = v6;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v6ToV1.js
function v6ToV1(uuid) {
const v6Bytes = typeof uuid === "string" ? parse_default(uuid) : uuid;
const v1Bytes2 = _v6ToV1(v6Bytes);
return typeof uuid === "string" ? unsafeStringify(v1Bytes2) : v1Bytes2;
}
function _v6ToV1(v6Bytes) {
return Uint8Array.of((v6Bytes[3] & 15) << 4 | v6Bytes[4] >> 4 & 15, (v6Bytes[4] & 15) << 4 | (v6Bytes[5] & 240) >> 4, (v6Bytes[5] & 15) << 4 | v6Bytes[6] & 15, v6Bytes[7], (v6Bytes[1] & 15) << 4 | (v6Bytes[2] & 240) >> 4, (v6Bytes[2] & 15) << 4 | (v6Bytes[3] & 240) >> 4, 16 | (v6Bytes[0] & 240) >> 4, (v6Bytes[0] & 15) << 4 | (v6Bytes[1] & 240) >> 4, v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);
}
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/v7.js
var _state2 = {};
function v7(options, buf, offset) {
var _a;
let bytes;
if (options) {
bytes = v7Bytes(options.random ?? ((_a = options.rng) == null ? void 0 : _a.call(options)) ?? rng(), options.msecs, options.seq, buf, offset);
} else {
const now = Date.now();
const rnds = rng();
updateV7State(_state2, now, rnds);
bytes = v7Bytes(rnds, _state2.msecs, _state2.seq, buf, offset);
}
return buf ?? unsafeStringify(bytes);
}
function updateV7State(state, now, rnds) {
state.msecs ?? (state.msecs = -Infinity);
state.seq ?? (state.seq = 0);
if (now > state.msecs) {
state.seq = rnds[6] << 23 | rnds[7] << 16 | rnds[8] << 8 | rnds[9];
state.msecs = now;
} else {
state.seq = state.seq + 1 | 0;
if (state.seq === 0) {
state.msecs++;
}
}
return state;
}
function v7Bytes(rnds, msecs, seq, buf, offset = 0) {
if (rnds.length < 16) {
throw new Error("Random bytes length must be >= 16");
}
if (!buf) {
buf = new Uint8Array(16);
offset = 0;
} else {
if (offset < 0 || offset + 16 > buf.length) {
throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
}
}
msecs ?? (msecs = Date.now());
seq ?? (seq = rnds[6] * 127 << 24 | rnds[7] << 16 | rnds[8] << 8 | rnds[9]);
buf[offset++] = msecs / 1099511627776 & 255;
buf[offset++] = msecs / 4294967296 & 255;
buf[offset++] = msecs / 16777216 & 255;
buf[offset++] = msecs / 65536 & 255;
buf[offset++] = msecs / 256 & 255;
buf[offset++] = msecs & 255;
buf[offset++] = 112 | seq >>> 28 & 15;
buf[offset++] = seq >>> 20 & 255;
buf[offset++] = 128 | seq >>> 14 & 63;
buf[offset++] = seq >>> 6 & 255;
buf[offset++] = seq << 2 & 255 | rnds[10] & 3;
buf[offset++] = rnds[11];
buf[offset++] = rnds[12];
buf[offset++] = rnds[13];
buf[offset++] = rnds[14];
buf[offset++] = rnds[15];
return buf;
}
var v7_default = v7;
// E:/jlyh/tra-app/node_modules/uuid/dist/esm-browser/version.js
function version(uuid) {
if (!validate_default(uuid)) {
throw TypeError("Invalid UUID");
}
return parseInt(uuid.slice(14, 15), 16);
}
var version_default = version;
export {
max_default as MAX,
nil_default as NIL,
parse_default as parse,
stringify_default as stringify,
v1_default as v1,
v1ToV6,
v3_default as v3,
v4_default as v4,
v5_default as v5,
v6_default as v6,
v6ToV1,
v7_default as v7,
validate_default as validate,
version_default as version
};
//# sourceMappingURL=uuid.js.map
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -2,7 +2,7 @@
;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","titleView":false,"bounce":"none","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"AI智能培训","style":"custom","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"tra-app","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.66","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"tabBar":{"position":"bottom","color":"#666666","selectedColor":"#0066FF","borderStyle":"white","blurEffect":"none","fontSize":"16px","iconWidth":"24px","spacing":"10px","height":"70px","list":[{"text":"首页","pagePath":"pages/index/index"},{"text":"学习","pagePath":"pages/study/index"},{"text":"场景","pagePath":"pages/scene/index"},{"text":"我的","pagePath":"pages/me/index"}],"borderColor":"#ffffff","midButton":{"iconPath":"/static/images/icon/fawn.png","width":"86px","height":"86px","iconWidth":"90px"},"selectedIndex":0,"shown":true},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"titleNView":false,"navigationBar":{"titleText":"首页","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/study/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"titleNView":false,"navigationBar":{"titleText":"学习","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/intelligent_answering/index","meta":{"titleNView":false,"navigationBar":{"titleText":"智能问答","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/scene/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"titleNView":false,"navigationBar":{"titleText":"场景","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/me/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"titleNView":false,"navigationBar":{"titleText":"我的","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/login/login","meta":{"titleNView":false,"navigationBar":{"titleText":"登录","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/other/web_view","meta":{"titleNView":false,"navigationBar":{"titleText":"","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/login/ysxy","meta":{"titleNView":false,"navigationBar":{"titleText":"","type":"default","style":"custom"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"titleNView":false,"navigationBar":{"titleText":"首页","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/study/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"titleNView":false,"navigationBar":{"titleText":"学习","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/intelligent_answering/index","meta":{"titleNView":false,"navigationBar":{"titleText":"智能问答","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/scene/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"titleNView":false,"navigationBar":{"titleText":"场景","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/me/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"enablePullDownRefresh":true,"titleNView":false,"navigationBar":{"titleText":"我的","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/login/login","meta":{"titleNView":false,"navigationBar":{"titleText":"登录","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/other/web_view","meta":{"titleNView":false,"navigationBar":{"titleText":"","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/login/ysxy","meta":{"titleNView":false,"navigationBar":{"titleText":"","type":"default","style":"custom"},"isNVue":false}},{"path":"pages/search/search","meta":{"titleNView":false,"navigationBar":{"titleText":"","type":"default","style":"custom"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
File diff suppressed because it is too large Load Diff
+80 -7
View File
@@ -23,12 +23,19 @@
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.nav-bar-div[data-v-e9345f2e] {
.nav-bar[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 999;
}
.nav-bar-seat[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
}
.nav-bar-div[data-v-e9345f2e] {
z-index: 1900;
width: 100%;
position: relative;
}
/**
* 这里是uni-app内置的常用样式变量
@@ -681,6 +688,11 @@ uni-view[data-v-222d1a38], uni-scroll-view[data-v-222d1a38], uni-swiper-item[dat
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
[data-v-1cf27b2a] .uv-skeleton__wrapper__avatar {
height: 4.5625rem !important;
width: 4.5625rem !important;
border-radius: 0.5rem;
}
.bottom_line[data-v-1cf27b2a] {
margin: 0 auto;
width: 7.5rem;
@@ -785,6 +797,53 @@ uni-view[data-v-222d1a38], uni-scroll-view[data-v-222d1a38], uni-swiper-item[dat
width: 9.375rem;
height: 1.4375rem;
}
.bg_div .fixed_search_div[data-v-1cf27b2a] {
position: fixed;
background-color: #f6f8ff;
margin-top: var(--status-bar-height);
padding: 0 1.5625rem 0.625rem 1.5625rem;
height: 2.1875rem;
width: calc(100% - 3.125rem);
z-index: 100;
display: flex;
align-items: center;
border-bottom: 0.125rem solid #efefef;
}
.bg_div .fixed_search_div .fixed_search_input_div[data-v-1cf27b2a] {
flex: 1;
}
.bg_div .fixed_search_div .message_div[data-v-1cf27b2a] {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
margin-left: 1.03125rem;
}
.bg_div .fixed_search_div .message_div .message_img[data-v-1cf27b2a] {
width: 1rem;
height: 1.125rem;
}
.bg_div .fixed_search_div .message_div .message_text[data-v-1cf27b2a] {
margin-top: 0.125rem;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 0.6875rem;
color: #333333;
line-height: 0.75rem;
white-space: nowrap;
}
.bg_div .fixed_search_div .message_div .message_num[data-v-1cf27b2a] {
position: absolute;
top: 0.0625rem;
right: -0.125rem;
padding: 0.03125rem 0.03125rem 0.03125rem 0.0625rem;
background-color: #ff1926;
border-radius: 0.3125rem;
width: 0.6875rem;
height: 0.625rem;
font-size: 0.3125rem;
color: #ffffff;
}
.bg_div .search_div[data-v-1cf27b2a] {
margin-top: 0.8125rem;
margin-left: 1.5625rem;
@@ -940,13 +999,27 @@ uni-view[data-v-222d1a38], uni-scroll-view[data-v-222d1a38], uni-swiper-item[dat
align-items: center;
}
.bg_div .module_title_div .icon[data-v-1cf27b2a] {
width: 1.0625rem;
height: 1.1875rem;
margin-right: 0.1875rem;
}
.bg_div .module_title_div .icon_1 .img[data-v-1cf27b2a] {
width: 0.96875rem;
height: 1.125rem;
}
.bg_div .module_title_div .icon_2[data-v-1cf27b2a] {
margin-top: 0.3125rem;
}
.bg_div .module_title_div .icon_2 .img[data-v-1cf27b2a] {
width: 1.1875rem;
height: 1.1875rem;
}
.bg_div .module_title_div .icon_3 .img[data-v-1cf27b2a] {
width: 1.1875rem;
height: 0.96875rem;
}
.bg_div .module_title_div .title[data-v-1cf27b2a] {
font-size: 1.0625rem;
color: #323E57;
font-weight: 700;
line-height: 1.4375rem;
text-align: left;
}
+521 -11
View File
@@ -23,30 +23,540 @@
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.main_div[data-v-c8e26b33] {
background-color: #f9faff;
.nav-bar[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
position: fixed;
}
.nav-bar-seat[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
}
.nav-bar-div[data-v-e9345f2e] {
z-index: 1900;
width: 100%;
position: relative;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
uni-view[data-v-8f2e1838], uni-scroll-view[data-v-8f2e1838], uni-swiper-item[data-v-8f2e1838] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.uv-count-num[data-v-8f2e1838] {
display: inline-flex;
text-align: center;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
uni-view[data-v-b7a6dd5d], uni-scroll-view[data-v-b7a6dd5d], uni-swiper-item[data-v-b7a6dd5d] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
@font-face {
font-family: "uvicon-iconfont";
src: url("../../assets/uvicons.04d281cc.ttf") format("truetype");
}
.uv-icon[data-v-b7a6dd5d] {
display: flex;
align-items: center;
}
.uv-icon--left[data-v-b7a6dd5d] {
flex-direction: row-reverse;
align-items: center;
}
.uv-icon--right[data-v-b7a6dd5d] {
flex-direction: row;
align-items: center;
}
.uv-icon--top[data-v-b7a6dd5d] {
flex-direction: column-reverse;
justify-content: center;
}
.uv-icon--bottom[data-v-b7a6dd5d] {
flex-direction: column;
justify-content: center;
}
.uv-icon__icon[data-v-b7a6dd5d] {
font-family: uvicon-iconfont;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
}
.uv-icon__icon--primary[data-v-b7a6dd5d] {
color: #3c9cff;
}
.uv-icon__icon--success[data-v-b7a6dd5d] {
color: #5ac725;
}
.uv-icon__icon--error[data-v-b7a6dd5d] {
color: #f56c6c;
}
.uv-icon__icon--warning[data-v-b7a6dd5d] {
color: #f9ae3d;
}
.uv-icon__icon--info[data-v-b7a6dd5d] {
color: #909399;
}
.uv-icon__img[data-v-b7a6dd5d] {
height: auto;
will-change: transform;
}
.uv-icon__label[data-v-b7a6dd5d] {
line-height: 1;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.uv-line[data-v-dcf8cb8f] {
vertical-align: middle;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
uni-view[data-v-565cfae0], uni-scroll-view[data-v-565cfae0], uni-swiper-item[data-v-565cfae0] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.uv-cell__body[data-v-565cfae0] {
display: flex;
flex-direction: row;
box-sizing: border-box;
padding: 10px 15px;
font-size: 15px;
color: #303133;
}
.uv-cell__body__content[data-v-565cfae0] {
display: flex;
flex-direction: row;
align-items: center;
flex: 1;
}
.uv-cell__body--large[data-v-565cfae0] {
padding-top: 13px;
padding-bottom: 13px;
}
.uv-cell__left-icon-wrap[data-v-565cfae0], .uv-cell__right-icon-wrap[data-v-565cfae0] {
display: flex;
flex-direction: row;
align-items: center;
font-size: 16px;
}
.uv-cell__left-icon-wrap[data-v-565cfae0] {
margin-right: 4px;
}
.uv-cell__right-icon-wrap[data-v-565cfae0] {
margin-left: 4px;
transition: transform 0.3s;
}
.uv-cell__right-icon-wrap--up[data-v-565cfae0] {
transform: rotate(-90deg);
}
.uv-cell__right-icon-wrap--down[data-v-565cfae0] {
transform: rotate(90deg);
}
.uv-cell__title[data-v-565cfae0] {
flex: 1;
}
.uv-cell__title-text[data-v-565cfae0] {
font-size: 15px;
line-height: 22px;
color: #303133;
}
.uv-cell__title-text--large[data-v-565cfae0] {
font-size: 16px;
}
.uv-cell__label[data-v-565cfae0] {
margin-top: 5px;
font-size: 12px;
color: #909193;
line-height: 18px;
}
.uv-cell__label--large[data-v-565cfae0] {
font-size: 14px;
}
.uv-cell__value[data-v-565cfae0] {
text-align: right;
font-size: 14px;
line-height: 24px;
color: #606266;
}
.uv-cell__value--large[data-v-565cfae0] {
font-size: 15px;
}
.uv-cell--clickable[data-v-565cfae0] {
background-color: #f3f4f6;
}
.uv-cell--disabled[data-v-565cfae0] {
color: #c8c9cc;
cursor: not-allowed;
}
.uv-cell--center[data-v-565cfae0] {
align-items: center;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
uni-view[data-v-400210fd], uni-scroll-view[data-v-400210fd], uni-swiper-item[data-v-400210fd] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.uv-cell-group[data-v-400210fd] {
flex: 1;
}
.uv-cell-group__title[data-v-400210fd] {
padding: 16px 16px 8px;
}
.uv-cell-group__title__text[data-v-400210fd] {
font-size: 15px;
line-height: 16px;
color: #303133;
}
.uv-cell-group__wrapper[data-v-400210fd] {
position: relative;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.tabbar-shadow[data-v-d22390bb] {
position: fixed;
bottom: -14px;
z-index: 3333;
left: 0;
width: 100%;
height: 12px;
background-color: #fff;
box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.2);
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.cell_div[data-v-c8e26b33] {
margin: 0.9375rem 1.5625rem 0 1.5625rem;
background: #FFFFFF;
border-radius: 0.46875rem;
z-index: 101;
overflow: hidden;
}
.cell_div[data-v-c8e26b33] .uv-line {
width: calc(100% - 1.5rem) !important;
margin: 0 0.75rem !important;
}
.cell_div[data-v-c8e26b33] .uv-cell__body {
padding: 12px 15px;
}
.navigation_div[data-v-c8e26b33] {
margin: 0.9375rem 1.5625rem 0 1.5625rem;
padding: 0.75rem 0 0.625rem 0;
background-color: #FFFFFF;
border-radius: 0.71875rem;
display: flex;
flex-direction: column;
justify-content: space-around;
z-index: 101;
}
.navigation_div .group[data-v-c8e26b33] {
display: flex;
justify-content: space-around;
}
.empty_div[data-v-c8e26b33] {
.navigation_div .item[data-v-c8e26b33] {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.empty_div .img[data-v-c8e26b33] {
width: 12.125rem;
height: 10.46875rem;
.navigation_div .item .icon[data-v-c8e26b33] {
width: 2.75rem;
height: 2.6875rem;
}
.empty_div .text[data-v-c8e26b33] {
margin-top: 0.625rem;
height: 1.25rem;
.navigation_div .item .title[data-v-c8e26b33] {
margin-top: 0.3125rem;
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 0.90625rem;
color: #4375C9;
font-size: 0.78125rem;
color: #323E57;
line-height: 1.09375rem;
text-align: left;
font-style: normal;
}
.bg_div[data-v-c8e26b33] {
display: flex;
flex-direction: column;
position: relative;
padding: 0 1.5625rem;
z-index: 50;
}
.bg_div .bg_img[data-v-c8e26b33] {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
height: 26.8125rem;
}
.bg_div .user_data_div[data-v-c8e26b33] {
margin-top: 4.9375rem;
background: linear-gradient(180deg, rgba(241, 245, 255, 0.5) 0%, #F6F9FE 50%, #FFFFFF 100%);
border-radius: 0.4375rem;
border: 0.0625rem solid #ffffff;
box-shadow: #F6F8FF 0 0 0.0625rem;
}
.bg_div .user_data_div .personal_information[data-v-c8e26b33] {
padding: 0.625rem 0 0 0.8125rem;
display: flex;
}
.bg_div .user_data_div .personal_information .profile[data-v-c8e26b33] {
border-radius: 100%;
border: 2px solid #ffffff;
width: 3.375rem;
height: 3.375rem;
overflow: hidden;
}
.bg_div .user_data_div .personal_information .personal_information_data[data-v-c8e26b33] {
display: flex;
flex-direction: column;
margin-left: 0.8125rem;
}
.bg_div .user_data_div .personal_information .personal_information_data .name_sex_div[data-v-c8e26b33] {
display: flex;
margin-top: 0.1875rem;
}
.bg_div .user_data_div .personal_information .personal_information_data .name_sex_div .name[data-v-c8e26b33] {
font-family: PingFangSC;
font-weight: 600;
font-size: 0.875rem;
color: #000000;
line-height: 1.25rem;
}
.bg_div .user_data_div .personal_information .personal_information_data .name_sex_div .sex[data-v-c8e26b33] {
margin-left: 0.3125rem;
width: 0.9375rem;
height: 0.9375rem;
}
.bg_div .user_data_div .personal_information .personal_information_data .work_number_div[data-v-c8e26b33] {
font-family: PingFangSC;
font-weight: 400;
font-size: 0.78125rem;
color: #666666;
line-height: 1.1875rem;
text-align: left;
font-style: normal;
}
.bg_div .user_data_div .study_information[data-v-c8e26b33] {
display: flex;
justify-content: space-around;
z-index: 20;
margin: 0.9375rem 1.5625rem;
}
.bg_div .user_data_div .study_information .item[data-v-c8e26b33] {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
.bg_div .user_data_div .study_information .item .top[data-v-c8e26b33] {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 0.78125rem;
color: #666666;
line-height: 1.09375rem;
text-align: center;
font-style: normal;
}
.bg_div .user_data_div .study_information .item .bottom[data-v-c8e26b33] {
margin-top: 5%;
font-weight: bold;
font-size: 1.5625rem;
color: #000000;
line-height: 1.8125rem;
text-align: left;
font-style: normal;
text-align: center;
}
.bg_div .user_data_div .study_information .item .bottom[data-v-c8e26b33] .uv-count-num {
font-weight: bold !important;
font-size: 1.5625rem !important;
color: #000000 !important;
}
.main_div[data-v-c8e26b33] {
display: flex;
flex-direction: column;
background-color: #F6F8FF;
}
+298
View File
@@ -0,0 +1,298 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.nav-bar[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
position: fixed;
}
.nav-bar-seat[data-v-e9345f2e] {
width: 100%;
height: var(--status-bar-height);
}
.nav-bar-div[data-v-e9345f2e] {
z-index: 1900;
width: 100%;
position: relative;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
uni-view[data-v-b7a6dd5d], uni-scroll-view[data-v-b7a6dd5d], uni-swiper-item[data-v-b7a6dd5d] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
@font-face {
font-family: "uvicon-iconfont";
src: url("../../assets/uvicons.04d281cc.ttf") format("truetype");
}
.uv-icon[data-v-b7a6dd5d] {
display: flex;
align-items: center;
}
.uv-icon--left[data-v-b7a6dd5d] {
flex-direction: row-reverse;
align-items: center;
}
.uv-icon--right[data-v-b7a6dd5d] {
flex-direction: row;
align-items: center;
}
.uv-icon--top[data-v-b7a6dd5d] {
flex-direction: column-reverse;
justify-content: center;
}
.uv-icon--bottom[data-v-b7a6dd5d] {
flex-direction: column;
justify-content: center;
}
.uv-icon__icon[data-v-b7a6dd5d] {
font-family: uvicon-iconfont;
position: relative;
display: flex;
flex-direction: row;
align-items: center;
}
.uv-icon__icon--primary[data-v-b7a6dd5d] {
color: #3c9cff;
}
.uv-icon__icon--success[data-v-b7a6dd5d] {
color: #5ac725;
}
.uv-icon__icon--error[data-v-b7a6dd5d] {
color: #f56c6c;
}
.uv-icon__icon--warning[data-v-b7a6dd5d] {
color: #f9ae3d;
}
.uv-icon__icon--info[data-v-b7a6dd5d] {
color: #909399;
}
.uv-icon__img[data-v-b7a6dd5d] {
height: auto;
will-change: transform;
}
.uv-icon__label[data-v-b7a6dd5d] {
line-height: 1;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.uv-border[data-v-651602aa] {
border-width: 0.5px !important;
border-color: #dadbde !important;
border-style: solid;
}
.uv-border-bottom[data-v-651602aa] {
border-bottom-width: 0.5px !important;
border-color: #dadbde !important;
border-bottom-style: solid;
}
uni-view[data-v-651602aa], uni-scroll-view[data-v-651602aa], uni-swiper-item[data-v-651602aa] {
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
flex-basis: auto;
align-items: stretch;
align-content: flex-start;
}
.uv-input[data-v-651602aa] {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
flex: 1;
}
.uv-input--radius[data-v-651602aa], .uv-input--square[data-v-651602aa] {
border-radius: 4px;
}
.uv-input--no-radius[data-v-651602aa] {
border-radius: 0;
}
.uv-input--circle[data-v-651602aa] {
border-radius: 100px;
}
.uv-input__content[data-v-651602aa] {
flex: 1;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.uv-input__content__field-wrapper[data-v-651602aa] {
position: relative;
display: flex;
flex-direction: row;
margin: 0;
flex: 1;
}
.uv-input__content__field-wrapper__field[data-v-651602aa] {
line-height: 26px;
text-align: left;
color: #303133;
height: 24px;
font-size: 15px;
flex: 1;
}
.uv-input__content__clear[data-v-651602aa] {
width: 20px;
height: 20px;
border-radius: 100px;
background-color: #c6c7cb;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
transform: scale(0.82);
margin-left: 15px;
}
.uv-input__content__subfix-icon[data-v-651602aa] {
margin-left: 4px;
}
.uv-input__content__prefix-icon[data-v-651602aa] {
margin-right: 4px;
}
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.search_content[data-v-c10c040c] {
background-color: #fff;
min-height: 12.5rem;
margin-top: -0.1875rem;
border-radius: 0.375rem 0.375rem 0 0;
display: flex;
flex-direction: column;
align-items: center;
}
.search_content .bg_img[data-v-c10c040c] {
width: 84%;
margin: 0.625rem auto;
}
.fixed_search_div[data-v-c10c040c] {
padding: calc(0.3125rem + var(--status-bar-height)) 0.46875rem 0.75rem 0.9375rem;
background: linear-gradient(90deg, #F1F7FF 0%, #D8EDFF 50%, #C3E6FF 100%);
display: flex;
align-items: center;
}
.fixed_search_div .back_div[data-v-c10c040c] {
margin-right: 0.3125rem;
}
.fixed_search_div .back_div .back-icon[data-v-c10c040c] {
position: relative;
width: 1.25rem;
height: 1.25rem;
cursor: pointer;
}
.fixed_search_div .back_div .back-icon[data-v-c10c040c]::before,
.fixed_search_div .back_div .back-icon[data-v-c10c040c]::after {
content: "";
position: absolute;
transition: all 0.3s ease;
}
.fixed_search_div .back_div .back-icon[data-v-c10c040c]::after {
top: 25%;
left: 25%;
width: 40%;
height: 40%;
border-top: 0.125rem solid #2B2C2E;
border-left: 0.125rem solid #2B2C2E;
transform: rotate(-45deg);
}
.main_div[data-v-c10c040c] {
display: flex;
flex-direction: column;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB