659 lines
19 KiB
Vue
659 lines
19 KiB
Vue
<template>
|
||
<view class="content">
|
||
<!-- 轮播图 -->
|
||
<uni-card title="通知公告">
|
||
<uni-swiper-dot class="uni-swiper-dot-box" :info="noticeList" :current="current" field="content">
|
||
<swiper class="swiper-box" :current="swiperDotIndex" @change="changeSwiper">
|
||
<swiper-item v-for="(item, index) in noticeList" :key="index">
|
||
<view class="swiper-item" @click="handleOpenNotice(item)">
|
||
<image v-if="item.firstPicture" :src="item.firstPicture" mode="aspectFill"
|
||
:draggable="false" />
|
||
<view v-else class="no-picture">
|
||
{{item.remark}}
|
||
</view>
|
||
<view class="notice-info">
|
||
<view class="top">
|
||
<uni-tag :text="item.remark" style="white-space: nowrap;"
|
||
:type="['', 'success', 'primary', 'warning', 'error'][Math.floor(Math.random()*6)]" />
|
||
<text class="notice-title">{{item.noticeTitle}}</text>
|
||
</view>
|
||
<view class="bottom">
|
||
<rich-text :nodes="item.noticeContent"></rich-text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</swiper-item>
|
||
</swiper>
|
||
</uni-swiper-dot>
|
||
</uni-card>
|
||
|
||
<!-- 姨妈提醒 -->
|
||
<uni-transition ref="ani" custom-class="transition" :mode-class="['fade', 'zoom-in']"
|
||
:show="Boolean(menstruation)">
|
||
<uni-card title="姨妈提醒" class="menstruation">
|
||
<view class="top" v-if="menstruationAssistantSetting.state === 'zjjq'" v-html="menstruation"></view>
|
||
<view class="top" v-if="menstruationAssistantSetting.state === 'whyl'">
|
||
孕 <text class="theme-red margin-right-xs margin-left-xs">{{ pregnancy[0] }}</text> 周 <text
|
||
class="theme-blue margin-right-xs margin-left-xs">{{
|
||
pregnancy[1]
|
||
}}</text> 天
|
||
</view>
|
||
<view class="bottom" v-if="menstruationAssistantSetting.state === 'zjjq'">{{ menstruationLabel }}</view>
|
||
<view class="bottom theme-grey text-sm" v-if="menstruationAssistantSetting.state === 'whyl'">
|
||
已经{{ pregnancy[2] }}了
|
||
</view>
|
||
</uni-card>
|
||
</uni-transition>
|
||
|
||
<!-- 纪念日 -->
|
||
<uni-transition ref="ani" custom-class="transition" :mode-class="['fade', 'zoom-in']"
|
||
:show="commemorationDayList.length > 0">
|
||
<uni-card title="纪念日">
|
||
<uni-list class="commemoration-day">
|
||
<uni-list-item v-for="item in commemorationDayList" avatar="../static/icons/svg/404.svg"
|
||
:key="item.id">
|
||
<template v-slot:header>
|
||
<view class="d-flex align-center">
|
||
<svg-icon :icon-class="item.icon" />
|
||
</view>
|
||
</template>
|
||
<template v-slot:body>
|
||
<view class="d-flex flex-column margin-left margin-right">
|
||
<view class="theme-blue text-bold">{{item.name}}</view>
|
||
<view class="font-13">
|
||
{{item.repeat ? `每年${$parseTime(item.date, '{m}月{d}日')}` : $parseTime(item.date, '{y}年{m}月{d}日')}}
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<template v-slot:footer>
|
||
<view class="d-flex align-center theme-grey font-11">
|
||
还有
|
||
<text
|
||
class="font-13 theme-red">{{$getTimeDifference(nowTime, (new Date().getFullYear()) + '-' + item.date.slice(5, item.date.length)).slice(0, 1)}}</text>
|
||
天
|
||
<text class="font-13 theme-red">{{dateFormatHour(item)}}</text>
|
||
小时
|
||
</view>
|
||
</template>
|
||
</uni-list-item>
|
||
</uni-list>
|
||
</uni-card>
|
||
</uni-transition>
|
||
|
||
<!-- 情侣卡券 -->
|
||
<uni-transition ref="ani" custom-class="transition" :mode-class="['fade', 'zoom-in']"
|
||
:show="toDoCardList.length > 0">
|
||
<uni-card title="情侣卡券">
|
||
<uni-list class="card">
|
||
<uni-list-item>
|
||
<template v-slot:body>
|
||
<view class="d-flex">
|
||
<text>卡券名称</text>
|
||
<text></text>
|
||
<text>使用说明</text>
|
||
<text>使用时间</text>
|
||
</view>
|
||
</template>
|
||
</uni-list-item>
|
||
<uni-list-item v-for="item in toDoCardList" :key="item.id">
|
||
<template v-slot:body>
|
||
<view class="d-flex">
|
||
<text :span="6">{{ item.cardName }}</text>
|
||
<text :span="3">
|
||
<svg-icon :icon-class="item.userName === '秦可爱' ? 'female' : 'male'"
|
||
class="business-icon" />
|
||
</text>
|
||
<text :span="8">{{ item.instructions }}</text>
|
||
<text :span="7">{{ item.createTime }}</text>
|
||
</view>
|
||
</template>
|
||
</uni-list-item>
|
||
</uni-list>
|
||
</uni-card>
|
||
</uni-transition>
|
||
|
||
<!-- 今日账单 -->
|
||
<uni-transition ref="ani" custom-class="transition" :mode-class="['fade', 'zoom-in']"
|
||
:show="billList.length > 0">
|
||
<uni-card title="今日账单">
|
||
<view class="d-flex justify-between">
|
||
<text class="left">
|
||
<text class="font-24 text-bold">{{ new Date().getDate() }}</text>
|
||
<text class="font-13">日 / 周{{ $parseTime(new Date(), '{a}') }}</text>
|
||
</text>
|
||
<text class="right">
|
||
<text v-if="income">
|
||
<svg-icon icon-class="加号" />
|
||
<text>{{ income | moneyFilter }}</text>
|
||
</text>
|
||
<text class="income" v-if="expenditure">
|
||
<svg-icon icon-class="减少" />
|
||
<text>{{ expenditure | moneyFilter }}</text>
|
||
</text>
|
||
</text>
|
||
</view>
|
||
<no-data :loading="billLoading" text="暂无记录" v-if="billList.length < 1" />
|
||
<uni-list class="bill" v-else>
|
||
<uni-list-item v-for="bill in billList" :key="bill.id">
|
||
<template v-slot:header>
|
||
<view class="d-flex align-center">
|
||
<view style="width: 1.5rem;">
|
||
<svg-icon size="1.2rem"
|
||
:icon-class="Boolean(bill.typeObject) ? bill.typeObject.typeIcon : ''" />
|
||
</view>
|
||
<view class="d-flex flex-column margin-left margin-right">
|
||
<view v-if="bill.typeObject && bill.typeObject.typeDifference === '2'"
|
||
class="transfer">
|
||
<text>{{ bill.accountObject.accountName }}</text>
|
||
<svg-icon class="business-icon" icon-class="右箭头" />
|
||
<text>{{ bill.otherAccountObject.accountName }}</text>
|
||
</view>
|
||
<view v-else>{{ bill.typeObject && bill.typeObject.typeName }}</view>
|
||
<view class="font-13 theme-grey">
|
||
{{ bill.remark }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
<template v-slot:footer>
|
||
<view class="d-flex align-center theme-blue font-13 text-bold">
|
||
{{bill.money | moneyFilter}}
|
||
</view>
|
||
</template>
|
||
</uni-list-item>
|
||
</uni-list>
|
||
</uni-card>
|
||
</uni-transition>
|
||
|
||
<!-- 今日待办 -->
|
||
<uni-transition ref="ani" custom-class="transition" :mode-class="['fade', 'zoom-in']"
|
||
:show="toDoList.length > 0">
|
||
<uni-card title="今日待办">
|
||
<uni-list class="todo">
|
||
<uni-list-item v-for="todo in toDoList" :key="todo.id" :title="todo.content" :note="todo.remark" />
|
||
</uni-list>
|
||
</uni-card>
|
||
</uni-transition>
|
||
|
||
<!-- 悬浮按钮 -->
|
||
<uni-fab ref="fab" :popMenu="popMenu" :pattern="pattern" :content="content" horizontal="right"
|
||
direction="vertical" @trigger="trigger" />
|
||
|
||
<!-- 更新app -->
|
||
|
||
<!-- APP下载 -->
|
||
<uni-popup ref="updateDialog" type="dialog">
|
||
<uni-popup-dialog type="info" confirmText="后台下载" title="正在下载" @confirm="backgroundDownload">
|
||
<view>下载进度<text class="theme-blue" style="padding: 0 0.2rem">{{ percentageNum }}</text>%</view>
|
||
</uni-popup-dialog>
|
||
</uni-popup>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import {
|
||
listNotice
|
||
} from '@/api/system/notice';
|
||
import {
|
||
getLastStartDate,
|
||
selectMenstruationRecordList
|
||
} from '@/api/px/life/menstruationRecord';
|
||
import {
|
||
getCommemorationDayList
|
||
} from '@/api/px/life/commemorationDay';
|
||
import {
|
||
getToDoCard
|
||
} from "@/api/px/life/card";
|
||
|
||
import {
|
||
listDo
|
||
} from '@/api/px/life/todo';
|
||
import {
|
||
listRecord
|
||
} from '@/api/px/life/bookkeeping/record';
|
||
import {
|
||
getAdminNewestAppInfo
|
||
} from "@/api/px/app";
|
||
|
||
export default {
|
||
data() {
|
||
return {
|
||
// 当前所在滑块的 index
|
||
current: 0,
|
||
// 当前所在滑块的 index
|
||
swiperDotIndex: 0,
|
||
// 当前时间
|
||
nowTime: this.$parseTime(new Date()),
|
||
// 通知列表
|
||
noticeList: uni.getStorageSync('homepageNoticeList') || [],
|
||
// 姨妈提醒时间
|
||
menstruation: '',
|
||
// 姨妈时间
|
||
pregnancy: [0, 0, ''],
|
||
// 姨妈提醒内容
|
||
menstruationLabel: '',
|
||
// 经期设置表单
|
||
menstruationAssistantSetting: {
|
||
state: '',
|
||
cycle: undefined,
|
||
duration: undefined
|
||
},
|
||
// 纪念日提醒
|
||
commemorationDayList: [],
|
||
// 情侣卡券使用历史
|
||
toDoCardList: [],
|
||
// 待办列表
|
||
toDoList: [],
|
||
// 今日总支出
|
||
expenditure: 0,
|
||
// 今日总收入
|
||
income: 0,
|
||
// 账单加载标志
|
||
billLoading: false,
|
||
// 账单列表
|
||
billList: uni.getStorageSync('homepageBillList') || [],
|
||
// 安装包下载进度
|
||
percentageNum: 0,
|
||
// 悬浮按钮
|
||
popMenu: true,
|
||
// 悬浮按钮配置
|
||
pattern: {
|
||
color: '#a1a1a1',
|
||
backgroundColor: '#FFFFFF',
|
||
selectedColor: '#5A8DEE',
|
||
buttonColor: '#5A8DEE',
|
||
iconColor: '#FFFFFF'
|
||
},
|
||
// 悬浮按钮菜单
|
||
content: [{
|
||
iconPath: '/static/icons/svg/搜索.svg',
|
||
selectedIconPath: '/static/icons/svg/搜索.svg',
|
||
text: '搜索',
|
||
active: false
|
||
},
|
||
{
|
||
iconPath: '/static/icons/svg/时间-time.svg',
|
||
selectedIconPath: '/static/icons/svg/时间-time.svg',
|
||
text: '写日记',
|
||
active: false
|
||
},
|
||
{
|
||
iconPath: '/static/icons/svg/account.svg',
|
||
selectedIconPath: '/static/icons/svg/account.svg',
|
||
text: '记账',
|
||
active: false
|
||
}
|
||
]
|
||
}
|
||
},
|
||
onLoad() {
|
||
this.getNoticeList();
|
||
this.getMenstruationRecordList();
|
||
this.getLastStartDate();
|
||
this.getCommemorationDayList();
|
||
this.getToDoCard();
|
||
this.getBillList();
|
||
this.getTodayToDoList();
|
||
},
|
||
mounted() {
|
||
if (window.plus) {
|
||
this.plusReady();
|
||
} else {
|
||
document.addEventListener('plusready', this.plusReady, false);
|
||
}
|
||
},
|
||
methods: {
|
||
/**
|
||
* 格式化时间
|
||
*/
|
||
dateFormatHour(item) {
|
||
let date = this.$getTimeDifference(this.nowTime, (new Date().getFullYear()) + '-' + item.date.slice(5, item
|
||
.date.length));
|
||
return date.slice(date.indexOf('天') + 1, date.indexOf('小'))
|
||
},
|
||
/**
|
||
* 后台下载
|
||
*/
|
||
backgroundDownload() {
|
||
this.$refs.updateDialog.close();
|
||
},
|
||
/**
|
||
* 查询公告列表
|
||
*/
|
||
getNoticeList() {
|
||
const regex = /(<([^>]+)>)/ig;
|
||
listNotice().then(response => {
|
||
this.noticeList = response.rows;
|
||
this.noticeList.map(item => {
|
||
if (item.firstPicture) {
|
||
item.firstPicture = item.firstPicture.slice(10, item.firstPicture.indexOf(
|
||
' alt') - 1)
|
||
}
|
||
return item
|
||
})
|
||
this.noticeList.forEach(item => {
|
||
item.noticeContent = item.noticeContent.replace(regex, '')
|
||
});
|
||
uni.setStorageSync('homepageNoticeList', this.noticeList)
|
||
})
|
||
},
|
||
/**
|
||
* 打开通知公告详情
|
||
* @param {Object} item
|
||
*/
|
||
handleOpenNotice(item) {
|
||
console.info(item)
|
||
},
|
||
/**
|
||
* 切换通知公告
|
||
* @param {Object} e
|
||
*/
|
||
changeSwiper(e) {
|
||
this.current = e.detail.current
|
||
},
|
||
/**
|
||
* 获取姨妈提醒
|
||
*/
|
||
async getMenstruationRecordList() {
|
||
this.$getConfigKey("ymdqzt").then(response => {
|
||
this.menstruationAssistantSetting.state = response.msg;
|
||
});
|
||
await this.$getConfigKey("ymzq").then(response => {
|
||
this.menstruationAssistantSetting.cycle = response.msg;
|
||
});
|
||
await this.$getConfigKey("ymsc").then(response => {
|
||
this.menstruationAssistantSetting.duration = response.msg;
|
||
});
|
||
selectMenstruationRecordList().then(res => {
|
||
let prefix = '您的小可爱'
|
||
let labelPrefix = '请提醒您的小可爱'
|
||
if (res.data[0].type === '0') {
|
||
let day = this.$getTimeDifference(res.data[0].date, this.nowTime).slice(0, this
|
||
.$getTimeDifference(res.data[0].date, this.nowTime).indexOf('天'));
|
||
this.menstruation =
|
||
`${prefix}大姨妈已经<span class="theme-blue" style="font-weight: bold;"> ${Number(day) + 1} </span>天`;
|
||
this.menstruationLabel = `${labelPrefix}不要吃冰的、辣的,注意保暖、少生气!!!`
|
||
} else if (res.data[0].type === '1') {
|
||
let day = this.$getTimeDifference(this.nowTime, res.data[1].date).slice(0, this
|
||
.$getTimeDifference(this.nowTime, res.data[1].date).indexOf('天'));
|
||
if (Number(day) + Number(this.menstruationAssistantSetting.cycle) > 5 && Number(day) +
|
||
Number(this.menstruationAssistantSetting.cycle) <= Number(this
|
||
.menstruationAssistantSetting.cycle)) {
|
||
return
|
||
}
|
||
if (Number(day) + Number(this.menstruationAssistantSetting.cycle) < 0) {
|
||
this.menstruation =
|
||
`${prefix}大姨妈已经推迟<span class="theme-red" style="font-weight: bold; font-size: 1.4rem;"> ${(Number(day) + Number(this.menstruationAssistantSetting.cycle)) * (-1)} </span>天`
|
||
this.menstruationLabel = `${labelPrefix}不要着急,大不了养个娃!!!`
|
||
return
|
||
}
|
||
this.menstruation =
|
||
`${prefix}大姨妈还有<span class="theme-blue" style="font-weight: bold;"> ${Number(day) + Number(this.menstruationAssistantSetting.cycle) + 1} </span>天`
|
||
this.menstruationLabel = `${labelPrefix}提前准备好姨妈巾!!!`
|
||
}
|
||
})
|
||
},
|
||
/**
|
||
* 获取最后一次开始信息
|
||
*/
|
||
getLastStartDate() {
|
||
getLastStartDate().then(res => {
|
||
let timeDifference = this.$getTimeDifference(res.data.date).slice(0, 8);
|
||
let day = timeDifference.slice(0, timeDifference.indexOf('天'));
|
||
this.pregnancy = [Math.floor(day / 7), day % 7, timeDifference];
|
||
})
|
||
},
|
||
/**
|
||
* 获取纪念日提醒
|
||
*/
|
||
getCommemorationDayList() {
|
||
getCommemorationDayList().then(res => {
|
||
this.commemorationDayList = res.data;
|
||
})
|
||
},
|
||
/**
|
||
* 获取使用历史记录列表
|
||
*/
|
||
getToDoCard() {
|
||
getToDoCard().then(res => {
|
||
this.toDoCardList = res.data;
|
||
})
|
||
},
|
||
/**
|
||
* 获取今日待办
|
||
*/
|
||
getTodayToDoList() {
|
||
listDo({
|
||
planEndTime: this.$getNow(),
|
||
performer: this.$store.getters.userId,
|
||
status: false
|
||
}).then(res => {
|
||
this.toDoList = res.rows;
|
||
})
|
||
},
|
||
/**
|
||
* 获取今日账单
|
||
*/
|
||
getBillList() {
|
||
this.billLoading = true;
|
||
listRecord({
|
||
version: 1
|
||
}).then(res => {
|
||
this.expenditure = this.$arraySum(res.rows.filter(r => {
|
||
return r.typeObject?.typeDifference === '1'
|
||
}), 'money');
|
||
this.income = this.$arraySum(res.rows.filter(r => {
|
||
return r.typeObject?.typeDifference === '0'
|
||
}), 'money')
|
||
this.billList = res.rows;
|
||
this.billLoading = false;
|
||
})
|
||
},
|
||
/**
|
||
* 选择菜单
|
||
*/
|
||
trigger(e) {
|
||
this.content[e.index].active = true;
|
||
uni.navigateTo({
|
||
url: '/pages_system/search/index'
|
||
}).finally(() => {
|
||
this.$refs.fab.close();
|
||
this.content[e.index].active = false;
|
||
});
|
||
},
|
||
/**
|
||
* 推送信息
|
||
*/
|
||
plusReady() {
|
||
plus.push.createMessage(`欢迎${this.$store.getters.userInfo.nickName}使用Pei你看雪App`);
|
||
plus.runtime.getProperty(plus.runtime.appid, (info) => {
|
||
// 获取最新版本
|
||
getAdminNewestAppInfo().then(res => {
|
||
if (res.data.version !== info.version) {
|
||
const task = plus.downloader.createDownload(res.data.downloadUrl, {}, (d,
|
||
status) => {
|
||
if (status === 200) {
|
||
console.log("下载更新成功:" + d.filename);
|
||
this.installWgt(d.filename);
|
||
} else {
|
||
console.log("下载更新失败!");
|
||
plus.nativeUI.toast("下载更新失败!");
|
||
}
|
||
plus.nativeUI.closeWaiting();
|
||
});
|
||
task.start();
|
||
|
||
// 下载时实时显示下载进度
|
||
let prg = 0;
|
||
this.showProgress = true;
|
||
task.addEventListener('statechanged', (task, status) => {
|
||
// 给下载任务设置一个监听 并根据状态 做操作
|
||
switch (task.state) {
|
||
case 1:
|
||
//'正在下载';
|
||
plus.push.createMessage(`正在下载···`);
|
||
break;
|
||
case 2:
|
||
// '已连接到服务器';
|
||
plus.push.createMessage(`已连接到服务器···`);
|
||
break;
|
||
case 3:
|
||
prg = parseInt(
|
||
(parseFloat(task.downloadedSize) /
|
||
parseFloat(task.totalSize)) *
|
||
100
|
||
);
|
||
this.percentageNum = prg; // 赋值给进度条组件
|
||
break;
|
||
case 4:
|
||
this.showProgress = false; // 进度隐藏
|
||
break;
|
||
}
|
||
});
|
||
}
|
||
})
|
||
});
|
||
},
|
||
/**
|
||
* 下载
|
||
* @param path
|
||
*/
|
||
installWgt(path) {
|
||
plus.nativeUI.showWaiting("安装更新");
|
||
plus.runtime.install(path, {}, () => {
|
||
plus.nativeUI.closeWaiting();
|
||
console.log("安装更新成功!");
|
||
plus.nativeUI.alert("更新完成!", () => {
|
||
plus.runtime.restart(); //安装成功后重启应用
|
||
});
|
||
}, (e) => {
|
||
plus.nativeUI.closeWaiting();
|
||
console.log("安装更新失败![" + e.code + "]:" + e.message);
|
||
plus.nativeUI.toast("安装更新失败!");
|
||
});
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.content {
|
||
padding-bottom: 1rem;
|
||
}
|
||
|
||
.swiper-box {
|
||
// height: 400rpx;
|
||
}
|
||
|
||
.swiper-item {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
uni-image {
|
||
width: 6rem;
|
||
height: 6rem;
|
||
border-radius: 0.5rem;
|
||
overflow: hidden;
|
||
border: 1px solid hsla(0, 0%, 60%, .2196078431372549);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.no-picture {
|
||
width: 6rem;
|
||
height: 6rem;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-weight: bold;
|
||
color: #5A8DEE;
|
||
border-radius: 0.5rem;
|
||
border: 1px solid hsla(0, 0%, 60%, .2196078431372549);
|
||
}
|
||
|
||
.notice-info {
|
||
padding: 1rem;
|
||
flex: 1;
|
||
|
||
.top {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.uni-tag {
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.notice-title {
|
||
color: #605e5e;
|
||
margin-left: 1rem;
|
||
}
|
||
}
|
||
|
||
.bottom {
|
||
font-size: 0.9rem;
|
||
color: #999;
|
||
height: 5rem;
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
-webkit-line-clamp: 3;
|
||
padding: 0.5rem 0;
|
||
overflow: hidden;
|
||
}
|
||
}
|
||
}
|
||
|
||
@media screen and (min-width: 500px) {
|
||
.uni-swiper-dot-box {
|
||
width: 400px;
|
||
/* #ifndef APP-NVUE */
|
||
margin: 0 auto;
|
||
/* #endif */
|
||
margin-top: 8px;
|
||
}
|
||
}
|
||
|
||
// 姨妈提醒
|
||
.menstruation {
|
||
padding: 1rem;
|
||
|
||
.top {
|
||
font-size: 1.2rem;
|
||
}
|
||
|
||
.bottom {
|
||
color: $theme-blue;
|
||
margin-top: 0.5rem;
|
||
}
|
||
|
||
.top,
|
||
.bottom {
|
||
text-align: center;
|
||
}
|
||
}
|
||
|
||
// 纪念日
|
||
.commemoration-day {
|
||
::v-deep .uni-list-item__container {
|
||
justify-content: space-between;
|
||
}
|
||
}
|
||
|
||
// 账单
|
||
.bill {
|
||
::v-deep .uni-list-item__container {
|
||
justify-content: space-between;
|
||
}
|
||
}
|
||
|
||
// 待办
|
||
.todo {
|
||
::v-deep .uni-list-item__content-note {
|
||
display: -webkit-box;
|
||
-webkit-box-orient: vertical;
|
||
/*截取第三行*/
|
||
-webkit-line-clamp: 2;
|
||
overflow: hidden;
|
||
}
|
||
}
|
||
</style> |